maxOccurs as unbounded,但不考虑元素的顺序(xs:all)

时间:2013-09-11 13:18:00

标签: xml xsd

我有一个XSD文件,其中我有以下情况:

<xs:element name='test'>
  <xs:complexType>
   <xs:all>
    <xs:element ref='el1' minOccurs='0' maxOccurs='1'/>
    <xs:element ref='el2' minOccurs='0' maxOccurs='1'/>
    <xs:element ref='el3' minOccurs='0' maxOccurs='1'/>
    <xs:element ref='el4' minOccurs='0' maxOccurs='1'/>
    <xs:element ref='el5' minOccurs='0' maxOccurs='1'/>
    <xs:element ref='el6' minOccurs='0' maxOccurs='1'/>
    <xs:element ref='el7' minOccurs='0' maxOccurs='1'/>    
    <xs:element ref='el8' minOccurs='0' maxOccurs='unbounded'/>  
   </xs:all>
   <xs:attribute name='attr1' use='optional' type='yesno'/>
  </xs:complexType>
 </xs:element>

现在的问题是,到目前为止这种情况不起作用,因为maxOccurs='unbounded'元素中没有all。有没有办法实现这一点,例如使用xs:choice

1 个答案:

答案 0 :(得分:2)

为了保留你想要的基数,XSD 1.0中唯一的方法就是用另一个元素包装你的重复元素,如下所示:

<xs:element name='test'>
    <xs:complexType>
        <xs:all>
            <xs:element ref='el1' minOccurs='0'/>
            <xs:element ref='el2' minOccurs='0'/>
            <xs:element ref='el3' minOccurs='0'/>
            <xs:element ref='el4' minOccurs='0'/>
            <xs:element ref='el5' minOccurs='0'/>
            <xs:element ref='el6' minOccurs='0'/>
            <xs:element ref='el7' minOccurs='0'/>
            <xs:element ref='el8w' minOccurs='0'/>
        </xs:all>
        <xs:attribute name='attr1' type='yesno'/>
    </xs:complexType>
</xs:element>
<xs:element name="el8w">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref="el8" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

模仿xs:all的(重复)选择(即允许带有指示基数的散布元素)不能强制出现单个粒子。