次の方法で共有


ネイティブ 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、language ID、IDREF、IDREFS、ENTITY、ENTITIES、NOTATION、NMTOKEN、NMTOKENS。 GDL パーサーはこれらのデータ型に限定されるものではなく、将来の XML データ型を変更せずに処理するように設計されていることに注意してください。

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

値の構文は、W3C XML 標準がその特定のデータ型に対して定義する構文に従う必要があります。 XML 構文が基本的な GDL 構文規則と競合する場合は、値 (または競合する部分のみ) を <Begin/EndValue:> コンストラクト内に囲む必要があります。 このような互換性のない構文を持つ XML 値、または構文が複合データ型で使用される構文と互換性がない XML 値は、複合データ型のメンバーとして表示できません。 また、GDL パーサーは、開き角かっこと閉じ角かっこ ( または ) やアンパサンド (&) などの特殊な 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 を宣言する PHRASE テンプレートに、XML_STRING テンプレートで定義されている *ValueType があるとします。

*Template:  PHRASE
{
    *Name:  "*Text"
    *Type:  ATTRIBUTE
    *ValueType:  XML_STRING
}

前の GDL エントリが PHRASE テンプレートを使用して解釈された場合、次の XML 出力が発生します。

<GDL_ATTRIBUTE Name="*Text"  xsi:type="GDLW_string" >Hello World</GDL_ATTRIBUTE>

XML 属性 xsi:type は、スキーマにこの要素の宣言が含まれていないため、この属性が保持するデータ型を指定するために使用されます。