我一直在研究如何编写XML Schema,我对XSD排序指标感到困惑,例如xs:sequence
,xs:all
,xs:choice
。似乎只有3个,并且它们在复杂类型中是必需的。但是,如果我有如下所示的XML:
<row>
<name>John</name>
<city>LA</city>
<country>France</country>
</row>
其中<row/>
内的3个元素可以按任何顺序出现,即可以出现在<city>
和<name>
之前,如下所示:
<row>
<country>France</country>
<city>LA</city>
<name>John</name>
</row>
这是否意味着我将为每个元素序列指定一个新的<xs:sequence>
。如果我有20个没有特定订单的元素,该怎么办?这里有一些捷径吗?我错过了什么吗?
更新:我无法使用<xs:all>
,因为我可能会留下一些元素。所有这些都不是必需的。
答案 0 :(得分:2)
<xsl:all>
仍然是你的正确答案。 <xs:all>
合成器中的每个元素都可以具有零minOccurs
属性。结果是一组元素,它们可以以任何顺序出现,并且任何元素可以恰好出现零次或一次。例如,下面要求row
包含一个name
元素,零个或一个city
元素以及任何顺序的零个或一个country
元素。
<xs:element name="row">
<xs:complexType>
<xs:all>
<xs:element ref="name"/>
<xs:element ref="city" minOccurs='0'/>
<xs:element ref="country" minOccurs="0"/>
</xs:all>
</xs:complexType>
我可能误解了你的要求。
答案 1 :(得分:2)
找到这个问题的答案。而不是<xs:all>
使用<xs:choice>
和minOccurs="0"
以及maxOccurs="unbounded"
。现在元素不仅是可选的,它们也可以按任何顺序出现。
<xs:element name="row">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="name" />
<xs:element name="city" />
<xs:element name="country" />
</xs:choice>
</xs:complexType>
</xs:element>
答案 2 :(得分:1)
<xs:all>
允许任何顺序的项目。只需使用它而不是<xs:sequence>
。