テンプレートを使用してデータ型を定義する
プリミティブ型と複合型の両方のすべてのデータ型は、テンプレートを使用して定義する必要があります。 データ型を定義した後、すべての属性テンプレートは、*ValueType ディレクティブを使用して、その値を特定のデータ型として宣言できます。 このディレクティブの値は、データ型テンプレートの名前です。
パーサー フィルターは、属性のインスタンスである GDL データ エントリを検出すると、そのデータ型に対して定義されている構文規則に従って、そのエントリの値部分の解析を試みます。 成功した場合、パーサー フィルターはデータ型をプリミティブ XML と同等のデータ型に分解し、それらの値を適切な XML に出力します。 複合データ型を表す生成された XML は、元のデータ型定義の論理構造を保持します。 複合データ型の子要素には、データ型テンプレートで定義されているタグによって定義される名前が付けられます。 この名前付けにより、XML スナップショットの人間のリーダーまたはソフトウェア クライアントは、複合データ型の各値を簡単に見つけて識別できます。
テンプレートは、*Type: DATATYPE ディレクティブを 設定することによって、データ型テンプレート (データ型を 定義するテンプレート) として指定 されます。 データ型テンプレート内で認識されるディレクティブは次のとおりです。
*ValueType: [Datatype Template Name]。 このディレクティブは、属性の値を特定のデータ型として宣言します。 *ValueType ディレクティブは、属性テンプレート内でのみ使用できます。 (属性テンプレートは、*Type: ATTRIBUTE ディレクティブを持つテンプレートです)。
*DataType: symbol. このディレクティブには、PASSTHROUGH、XML_TYPE、XSD_DEFINED、ENUMERATOR、FILTER_TYPE、ARRAY、COMPOSITE、またはMULTIPLE_PERSONALITYのいずれかの値があります。
*ElementType: list。 このディレクティブは、TEMPLATE データ型名のリストを定義します。
*RequiredDelimiter: delimiter。 このディレクティブは、引用符で囲まれた文字列で区切り文字を定義します。
*OptionalDelimiter: delimiter。 このディレクティブは、引用符で囲まれた文字列を使用して省略可能な区切り文字を定義します。
*ArrayLabel: symbol. このディレクティブは、引用符で囲まれた文字列を使用して配列ラベルを定義します。
*ElementTags: list。 このディレクティブは、要素タグに使用するシンボルのリストを定義します。
*EnumeratorList: list。 このディレクティブは、列挙子リストに使用するシンボルのリストを定義します。
*XSDTypeDefinition: symbol。 このディレクティブは、XSD 型定義に使用する <Begin/EndValue> 要素で囲まれた任意の値を定義します。
*ComplexType?: boolean. このディレクティブは、型が複合型かどうかを定義します。 値が TRUE の場合、型は複合型です。それ以外の場合、型は単純です。
*ArraySize: integer。 このディレクティブは、配列の範囲を定義します。 配列範囲を指定するには、最大 2 つの整数を使用できます。
*XMLDataType: string。 このディレクティブは、引用符で囲まれた文字列を使用して XML データ型を定義します。
FilterTypeName: string。 このディレクティブは、引用符で囲まれた文字列を使用してフィルター型の名前を定義します。
*MaxValue: integer。 このディレクティブは、GDL 整数を使用して値の最大サイズを定義します。
*MinLength: integer。 このディレクティブは、負でない GDL 整数を使用して、値の最小長を定義します。
*MaxLength: 整数。 このディレクティブは、負でない GDL 整数を使用して、値の最大長を定義します。
注: すべてのディレクティブがすべてのデータ型テンプレート内で認識されるわけではありません。
一般に、テンプレートを GDL 属性エントリにバインドできない場合、その属性の値は CDATA セクション内で変更されずにスナップショットで出力されます。 CDATA は、ATTRIBUTE 要素の要素コンテンツ (つまり、子要素) として存在する必要があります。
たとえば、次の GDL 属性エントリを記述するテンプレートがパーサーで見つからないとします。
*ModelName: "OEMName LaserJet "
その後、エントリは次のようにスナップショットに表示されます。
<GDL_ATTRIBUTE Name="*ModelName"
<![CDATA["OEMName LaserJet "]]></GDL_ATTRIBUTE>