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