0

我有一个 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

4

1 回答 1

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(即允许具有指定基数的散布元素)的(重复)选择不能强制单个粒子的出现。

于 2013-09-11T13:29:32.220 回答