ネイティブ XML テンプレート データ型
ネイティブ XML データ型は、XML_TYPE として定義されます。
構文は XML によって定義されます。 XML スキーマによって認識される任意のデータ型を定義できます。 パーサー フィルターは XML データ型に依存しないため、現在のパーサーは変更なしで将来の XML データ型をサポートできます。
*DataType: XML_TYPE は、特定の XML スキーマ定義言語の組み込みの単純なデータ型にテンプレートを関連付けます。 インスタンス データ値は、このテンプレートで指定されたXMLDataTypeコンストラクトから派生した xsi:typeを持つ XML 要素の内容として出力されます。
次のディレクティブを使用して、XML_TYPE データ型を定義します。
*XMLDataType (必須)。 XSD スキーマの組み込みの単純型。 XML スキーマに対するWorld Wide Web Consortium (W3C)の推奨事項では、以下の組み込み単純データ型を認めている:string, normalizedString, token, byte, unsignedByte, base64Binary, hexBinary, integer, positiveInteger, negativeInteger, nonNegativeInteger, nonPositiveInteger, int, unsignedInt, long, unsignedLong, short, unsignedShort, decimal, float, double, boolean, time, dateTime, duration, date, gMonth, gYear, gYearMonth, gDay, gMonthDay, Name, QName, NCName, anyURI, language, ID, IDREF, IDREFS, ENTITY, ENTITIES, NOTATION, NMTOKEN, and NMTOKENS. GDL パーサーはこれらのデータ型に限定されるものではなく、将来の XML データ型を変更せずに処理するように設計されていることに注意してください。
*ArrayLabel (省略可能)。 このディレクティブを指定した場合、パーサー フィルターは値をかっこで囲み、その前に指定した配列ラベルを付けます。
値の構文は、W3C XML 標準がその特定のデータ型に対して定義する構文に従う必要があります。 XML 構文が基本的な GDL 構文規則と競合する場合は、値 (または競合する部分のみ) を<Begin/EndValue:>コンストラクト内に囲む必要があります。 このような互換性のない構文を持つ XML 値、または構文が複合データ型で使用される構文と互換性がない XML 値は、複合データ型のメンバーとして表示できません。 また、GDLパーサーは、開閉括弧(<or>)やアンパサンド(&)などの特殊なXML文字をエスケープしないことに注意してください。 値の作成者は、文字データの XML 構文に準拠する必要があります。
たとえば、次のようなテンプレートがあるとします。
*Template: XML_STRING
{
*Type: DATATYPE
*DataType: XML_TYPE
*XMLDataType: "string"
}
上記のテンプレートを使用すると、次の XML スキーマ エントリが作成されます。 このエントリは、*XMLDataType ディレクティブで最初に指定された型から派生した新しいデータ型を定義しますが、この新しいデータ型には、スナップショットに表示できる追加の XML 属性があります。 元のデータ型を使用した場合、元の定義済みの型では XML 属性を表示できないため、スキーマ検証エラーが発生します。
<complexType name = "GDLW_string">
<simpleContent>
<extension base="string">
<attribute name="Name" type="string" use="optional"/>
<attribute name="Personality" type="string" use="optional"/>
</extension>
</simpleContent>
</complexType>
次の GDL エントリについて考えてみましょう。
*Text: Hello World
次のコード例に示すように、GDL 属性 *Text を宣言する PHRA Standard Edition テンプレートに、XML_STRING テンプレートで定義されている *ValueType があるとします。
*Template: PHRASE
{
*Name: "*Text"
*Type: ATTRIBUTE
*ValueType: XML_STRING
}
前の GDL エントリが PHRA Standard Edition テンプレートを使用して解釈された場合、次の XML 出力が発生します。
<GDL_ATTRIBUTE Name="*Text" xsi:type="GDLW_string" >Hello World</GDL_ATTRIBUTE>
XML 属性 xsi:type は、スキーマにこの要素の宣言が含まれるので、この属性要素が保持するデータ型を指定するために使用されます。