原生 XML 範本數據類型
原生 XML 資料類型定義為XML_TYPE。
語法是由 XML 所定義。 可以定義 XML 架構所辨識的任何資料類型。 剖析器篩選不會相依於 XML 資料類型,因此目前的剖析器可以支持未來的 XML 數據類型,而不需要進行任何變更。
*DataType: XML_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 是用來指定這個屬性專案所持有的數據類型,因為架構不包含這個專案的宣告。