我有一个大多数有意义的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>
答案 0 :(得分:1)
group元素表示内容模型的片段,主要用于表示多个元素的公共部分。在您的示例中,它用于封装Elem
和DATA-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/>