共用方式為


原生 XML 範本數據類型

原生 XML 資料類型定義為XML_TYPE。

語法是由 XML 所定義。 可以定義 XML 架構所辨識的任何資料類型。 剖析器篩選不會相依於 XML 資料類型,因此目前的剖析器可以支持未來的 XML 數據類型,而不需要進行任何變更。

*DataTypeXML_TYPE 將範本與特定 XML 架構定義語言的內建簡單數據類型產生關聯。 實例數據值將會輸出為 XML 項目的內容,其 xsi:type 衍生自此範本所指定的 *XMLDataType 建構。

下列指示詞是用來定義XML_TYPE資料類型:

  • *XMLDataType (必要) 。 任何 XSD 架構內建的簡單類型。 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、gYearMonth、gDay、gMonthDay、Name、QName、NCName、anyURI、 language、ID、IDREF、IDREFS、ENTITY、ENTITIES、NOTATION、NMTOKEN 和 NMTOKENS。 請注意,GDL 剖析器不限於這些數據類型,而且其設計目的是要處理未來的 XML 數據類型,而不需要進行任何變更。

  • *ArrayLabel (選擇性) 。 如果您指定這個指示詞,剖析器篩選條件預期值會以括弧括住,前面加上指定的數位標籤。

值的語法必須遵守 W3C XML 標準針對該特定數據類型所定義的語法。 如果 XML 語法與基本 GDL 語法規則衝突,則值 (或只有衝突部分) 必須包含在 <Begin/EndValue:> construct 中。 具有這類不相容語法的 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 宣告為具有 XML_STRING 範本所定義的 *ValueType 的 PHRASE 範本,如下列程式代碼範例所示。

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

如果使用 PHRASE 範本解譯先前的 GDL 專案,將會發生下列 XML 輸出。

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

XML 屬性 xsi:type 是用來指定這個屬性專案所持有的數據類型,因為架構不包含這個專案的宣告。