本机 XML 模板数据类型

本机 XML 数据类型定义为 XML_TYPE。

语法由 XML 定义。 可以定义 XML 架构识别的任何数据类型。 分析程序筛选器不依赖于 XML 数据类型,因此,当前分析程序可以在不进行任何更改的情况下支持将来的 XML 数据类型。

*DataTypeXML_TYPE 将模板与特定 XML 架构定义语言 的内置简单数据类型相关联。 实例数据值将输出为 XML 元素的内容,该元素 的 xsi:type 派生自此模板指定的 *XMLDataType 构造。

以下指令用于定义XML_TYPE数据类型:

  • *XMLDataType (必需) 。 任何 XSD 架构内置简单类型。 万维网联盟 (W3C) XML 架构建议可识别以下内置简单数据类型: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, 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 用于指定此特性元素保留的数据类型,因为架构不包含此元素的声明。