次の方法で共有


フィルター テンプレート データ型

FILTER_TYPE型はパーサー フィルターによって認識されます。 このデータ型の例としては、GPD 整数型、GPD 文字列型、GPD シンボル型などがあります。

*DataType: FILTER_TYPEは、テンプレートを特定のパーサー フィルター組み込みデータ型に関連付けます。 値の構文は、パーサー フィルターによって決まります。 パーサー フィルターは、この値を 1 つ以上のネイティブ XML データ型に変換します。 生成される特定の XML データ型はハードコーディングされており、変更することはできません。 この値は、*DataType: XML_TYPEであるかのように出力されます。

FILTER_TYPE データ型を完全に定義するには、次のディレクティブを使用します。

  • *ElementType (必須)。 *DataType: このデータ型が変換される XML 型を定義し、生成された XML に出力するテンプレートをXML_TYPEします。 必要な XML 型は、特定のフィルターの種類によって異なります。 このディレクティブが参照する XML データ型は、パーサー フィルターで想定される XML データ型と一致している必要があります。

  • *ElementTags (任意)。 フィルター型を複数の XML 要素に変換する場合、このディレクティブは各 XML 要素の名前を指定します。 このディレクティブを使用する場合、指定されるタグの数は、各変換によって生成される XML 要素の数と等しい必要があります。 1 つの XML 要素のみが生成される場合、タグは使用されません。 *ElementTags ディレクティブは 、 一部の将来のフィルターの種類に必要になる場合があります。

  • *FilterTypeName (必須) 特定のフィルター実装データ型。 既定のパーサー フィルターでは、現在、次の種類がサポートされています。

    • "HEX_OR_INT": 16 進形式とワイルドカード (*) を受け取る GPD 4 バイト整数。 結果は 10 進数に変換され、XSD int データ型として出力されます。 このデータ型では、オプション の *MinValue および *MaxValue テンプレート ディレクティブが認識されます。 この型が存在する場合、パーサーは、指定された値が定義された範囲内にあることを確認します。 一方の制限は、他の制限なしで定義できます。

    • "SYMBOLNAME": GPD/GDL シンボル トークン。 トークンは XSD 文字列 データ型として出力されます。 このデータ型では、オプション の *MinLength および *MaxLength テンプレート ディレクティブが認識されます。 この型が存在する場合、パーサーは、指定されたトークンの長さが定義された範囲内にあることを確認します。 一方の制限は、他の制限なしで定義できます。

    • "COMMAND_STRING": GPD コマンド文字列値。 文字列の解釈は実行されません。 生の値は XSD base64Binary データに変換され、出力されます。 コマンド文字列には XML 文字列に適さない文字が含まれている可能性があるため、値は XSD 文字列 データ型として出力されません。

    • "NORMAL_STRING": GPD/GDL 引用符で囲まれた文字列値。 結果は純粋な 8 ビットバイナリ文字列に変換され、単語の配列は XSD 文字列 データ型として出力されます。 このデータ型では、オプション の *MinLength および *MaxLength テンプレート ディレクティブが認識されます。 この型が存在する場合、パーサーは、指定された文字列の長さが定義された範囲内にあることを確認します。 一方の制限は、他の制限なしで定義できます。

    • "CODEPAGE_STRING": GPD/GDL 引用符で囲まれた文字列値。 結果は、適切な *CodePage エントリが指定し、XSD 文字列 データ型として出力するコードページを使用して、16 ビット Unicode 文字列 に変換されます。 このデータ型では、オプション の *MinLength および *MaxLength テンプレート ディレクティブが認識されます。 この型が存在する場合、パーサーは、指定された文字列の長さが定義された範囲内にあることを確認します。 一方の制限は、他の制限なしで定義できます。 文字列の長さは、コードページ変換後に実際に生成される WideChars の数であることに注意してください。

    • "DEFAULT_CODEPAGE_STRING": GPD/GDL 引用符で囲まれた文字列値。 結果は、CP_ACPコードページを使用して 16 ビット Unicode 文字列に変換され、XSD 文字列 データ型として出力されます。 このデータ型では、オプション の *MinLength および *MaxLength テンプレート ディレクティブが認識されます。 この型が存在する場合、パーサーは、指定された文字列の長さが定義された範囲内にあることを確認します。 一方の制限は、他の制限なしで定義できます。 文字列の長さは、コードページ変換後に実際に生成される Unicode 文字数であることに留意してください。

    • "UNICODE_STRING": GPD/GDL 引用符で囲まれた文字列値。 文字列は Unicode 文字のセットのバイナリ表現であると見なされ、XSD 文字列 データ型として直接出力されます。

      各Unicode 文字は 2 バイトで表されます。 通常、バイトは編集を容易にするために 16 進部分文字列として表されます。 下位互換性のために、GDL パーサーは GPD パーサーが確立した規則に従って、ペア内の最下位バイトが最も重要なバイトの左側に表示されるようにします。 GPD パーサーとは異なり、この規則はプロセッサのバイト順序に依存しません。 このデータ型では、オプション の *MinLength および *MaxLength テンプレート ディレクティブが認識されます。 この型が存在する場合、パーサーは、指定された文字列の長さが定義された範囲内にあることを確認します。 一方の制限は、他の制限なしで定義できます。 文字列の長さは、実際に生成される Unicode 文字数であることに留意してください。

    • "BINARY_STRING": GPD/GDL 引用符で囲まれた文字列値。 この文字列は、バイナリの 8 ビット データを表すものと見なされます。 結果は XSD base64Binary データに変換され、出力されます。 '制御文字' は XML ファイル内では使用できないため、XSD 'string' データ型を使用して表すことはできません。 したがって、このような文字を XML で処理できる形式に変換するには、BINARY_STRING フィルターを使用する必要があります。 このデータ型では、オプション の *MinLengt および *MaxLength テンプレート ディレクティブが認識されます。 この型が存在する場合、パーサーは、指定された文字列の長さが定義された範囲内にあることを確認します。 一方の制限は、他の制限なしで定義できます。 文字列の長さは、base64 でエンコードされたデータによって実際に表されるバイト数であることに注意してください。

  • *ArrayLabel (任意)。 このディレクティブを指定した場合、パーサー フィルターは値を括弧で囲み、その前に指定した配列ラベルを付けます。

解析する値は、*FilterTypeName ディレクティブが指定する特定のフィルターの種類に対して定義されている構文に準拠している必要があります。 パーサー フィルターは、前に指定したように、この値を 1 つ以上の XML データ型に変換して出力します。 変換の結果として複数の XML 要素が生成される場合、各要素は*ElementTags ディレクティブで指定された名前を使用してタグ付けされます。

XML スナップショットを出力するときに、パーサーは、文字列フィルター型の値に含まれている場合、適切な XML エンティティで特殊文字を自動的に表します。 たとえば、アンパサンド文字 (&) は、スナップショットの t& で表されます。 パーサー フィルターで定義されたデータ型を使用する場合は、XML 構文規則に従う必要はありません。

次のテンプレートを考慮してください。

*Template:  INTEGER
{
    *Type:  DATATYPE
    *DataType:   FILTER_TYPE
    *ElementType:  XSD_INT
    *FilterTypeName: "HEX_OR_INT"
}

このテンプレートでは、フィルターの種類として "HEX_OR_INT" を指定します。 *FilterTypeName に指定された情報に従って、フィルターはこのデータ型を組み込みの XSD 型 int に変換します。生成された XML メインフィルターの意図が確実に含まれるようにするには、*ElementType ディレクティブの XSD データ型 int を表すテンプレートに名前を付ける必要があります。

次の例では、XSD_INTテンプレートと名称が付いています。 このテンプレートは、次のように定義されます。

*Template:  XSD_INT
{
    *Type:  DATATYPE
    *DataType:   XML_TYPE
    *XMLDataType: "int"  
}

XSD_INT テンプレートはネイティブ XSD 型 int を定義します。これにより、パーサー フィルターの意図が正しく実装されます。

*DataType: FILTER_TYPE テンプレートでは、対応するスキーマは生成されません。

次の GDL エントリについて考えてみましょう。

*MaxCopies:   0x1ff

また、次のテンプレートである MAXCOPIES を検討してください。

*Template:  MAXCOPIES
{
    *Name:  "*MaxCopies"
    *Type:  ATTRIBUTE
    *ValueType:  INTEGER
}

前の GDL エントリが前のテンプレートによって解釈される場合、結果の XML 出力は次のようになります。

    <GDL_ATTRIBUTE Name="*MaxCopies"  xsi:type="GDLW_int" >511</GDL_ATTRIBUTE> 

パーサー フィルターでは、GPD で定義された 16 進形式が XSD データ型 xsd:int に適した 10 進形式に変換されていることに注意してください。また、実際に参照される型はラップされた型GDLW_intであることにも注意してください。