原生 XML 数据类型定义为 XML_TYPE。
语法由 XML 定义。 可以定义 XML 架构识别的任何数据类型。 分析程序筛选器不依赖于 XML 数据类型,因此当前分析程序可以支持将来的 XML 数据类型,而无需进行任何更改。
* DataType: XML_TYPE 将模板与特定 XML 架构定义语言的内置简单数据类型相关联。 实例数据值将作为 XML 元素的内容输出,其 xsi:type 派生自此模板指定的 *XMLDataType 构造。
以下指令用于定义XML_TYPE数据类型:
*XMLDataType (必需)。 任何内置于 XSD 架构的简单类型。 针对 XML 架构的 万维网联盟(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 和 NMTOKENS。 请注意,GDL 分析器不限于这些数据类型,并且旨在处理将来的 XML 数据类型,而无需进行任何更改。
*ArrayLabel (可选)。 如果指定此指令,则分析程序筛选器预期值由括号括起来,前面是指定的数组标签。
值的语法必须遵循 W3C XML 标准为该特定数据类型定义的语法。 如果 XML 语法与基本 GDL 语法规则冲突,则必须将值(或只是冲突部分)括在 Begin/EndValue:>构造中<。 具有此类不兼容语法的 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
请考虑 PHRASE 模板,它声明 GDL 属性 *Text 以具有由XML_STRING模板定义的 *ValueType ,如下面的代码示例所示。
*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 用于指定此属性元素保留的数据类型,因为架构不包含此元素的声明。