我正在尝试为以下文档创建 XML 模式。我想要一个List
可以包含TextItem
s 或List
s 的元素:
<!-- a "List" containing "TextItem"s: -->
<List>
<TextItem><TextItemData>foo</TextItemData></TextItem>
<TextItem><TextItemData>bar</TextItemData></TextItem>
</List>
<!-- a "List" containing "List"s of "TextItem"s: -->
<List>
<List>
<TextItem><TextItemData>foo1</TextItemData></TextItem>
<TextItem><TextItemData>bar1</TextItemData></TextItem>
</List>
<List>
<TextItem><TextItemData>foo2</TextItemData></TextItem>
<TextItem><TextItemData>bar2</TextItemData></TextItem>
</List>
</List>
以下 XML 模式定义完成了该任务:
<xs:complexType name="TextItemType">
<xs:sequence>
<xs:element name="TextItemData" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ListType">
<xs:choice>
<xs:sequence>
<xs:element name="TextItem" type="TextItemType" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:element name="List" type="ListType" minOccurs="0" maxOccurs="unbounded"/>
</xs:choice>
</xs:complexType>
我真正想要的是如下列表(没有TextItemData
):
<List>
<TextItem>foo</TextItem>
<TextItem>bar</TextItem>
</List>
我可以将 of 的定义合并到 ofTextItem
的定义中List
以摆脱TextItemData
. 但是,TextItem
由于我在示例中省略了属性,实际上的定义相当复杂。此外,还有其他种类的物品,例如BinaryItems
. 的定义List
将变得难以理解。
如何消除对TextItemData
元素的需求?