代码之家  ›  专栏  ›  技术社区  ›  Malik Daud Ahmad Khokhar

XML模式顺序指示器混乱

  •  0
  • Malik Daud Ahmad Khokhar  · 技术社区  · 16 年前

    我一直在研究如何编写一个XML模式,我被诸如 xs:sequence , xs:all , xs:choice . 它们似乎只有3个,而且在复杂类型中是必需的。但是如果我有如下XML怎么办:

    <row>
        <name>John</name>
        <city>LA</city>
        <country>France</country>
    </row>
    

    里面有三个元素 <row/> 可以以任何顺序出现,即可以出现在 <city> <name> 等等,像这样:

    <row>
        <country>France</country>
        <city>LA</city>
        <name>John</name>
    </row>
    

    这是否意味着我将指定一个新的 <xs:sequence> 对于每个元素序列。如果我有20个元素没有特定的顺序呢?这里有近路吗?我错过什么了吗?

    更新 我不能用 <xs:all> 因为我可能会留下一些元素。所有这些都不是必需的。

    3 回复  |  直到 12 年前
        1
  •  2
  •   Nic Gibson    16 年前

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

    不过,我可能误解了你的要求。

        2
  •  2
  •   Community Mohan Dere    14 年前

    找到了这个问题的答案。而不是使用 <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>
    
        3
  •  1
  •   GSerg    16 年前

    <xs:all> 允许任何顺序的项目。用它代替 <xs:sequence> .