XML Schema订单指标混乱

时间:2010-01-21 10:23:38

标签: xml xsd

我一直在研究如何编写XML Schema,我对XSD排序指标感到困惑,例如xs:sequencexs:allxs: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>,因为我可能会留下一些元素。所有这些都不是必需的。

3 个答案:

答案 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>