组元素如何在XML Schema中工作?

时间:2011-12-30 17:44:34

标签: xml xsd

我有一个大多数有意义的XML Schema,但我遇到了一些我不理解的东西。下面是架构的快照:

<xs:complexType name="DATA-FIELD">
    <xs:sequence>
        <xs:group ref="FIELD-CONTENT" />
        <xs:element name="Field" type="FIELD" minOccurs="0" />
    </xs:sequence>
</xs:complexType>

<xs:complexType name="FIELD">
    <xs:group ref="FIELD-CONTENT" />
    <xs:attribute name="att" type="xs:string" use="required" />
</xs:complexType>

<xs:group name="FIELD-CONTENT">
    <xs:sequence>
        <xs:element name="Elem" type="ELEM" minOccurs="0" />
    </xs:sequence>
</xs:group>

大多数我不明白的是如何使用组元素,以及遵循此模式的示例XML文件是什么样的?它看起来像这样:

<DataField>
    <Field att="test">
        <Elem>element</Elem>
    </Field>
</DataField>

OR

<DataField>
    <Elem>element</Elem>
</DataField>

1 个答案:

答案 0 :(得分:1)

group元素表示内容模型的片段,主要用于表示多个元素的公共部分。在您的示例中,它用于封装ElemDATA-FIELD类型中的选项FIELD字段。在大多数情况下,您可以将group元素的内容替换为组引用,以了解模式的完成情况:

<xs:complexType name="DATA-FIELD">
    <xs:sequence>
        <xs:element name="Elem" type="xs:string" minOccurs="0" />
        <xs:element name="Field" type="FIELD" minOccurs="0" />
    </xs:sequence>
</xs:complexType>

<xs:complexType name="FIELD">
    <xs:element name="Elem" type="xs:string" minOccurs="0" />
    <xs:attribute name="att" type="xs:string" use="required" />
</xs:complexType>

在验证方面,您指定的实例文档在给定模式时都是有效的,因为这两个元素都是可选的。在第一个实例文档中,省略了组中的Elem字段,而在第二种情况下,省略了Field字段。鉴于此架构,以下内容也将是法律文件:

<DataField>
    <Elem>foo</Elem>
    <Field att="test">
        <Elem>element</Elem>
    </Field>
</DataField>

<DataField/>