我的数据结构如下所示
<datastructure>
<field1>data</field1>
<field2>data</field2>
<field3>data</field3>
<field4>data</field4>
<field4>data</field4>
<field4>data</field4>
<field4>data</field4>
</datastructure>
所有字段必须恰好出现一次,但field4除外,它可以显示[0,无界]次.也没有理由关心订单.
我无法使用架构来验证这一点.使用序列将作为:
<xs:element name="datastructure" type="datastructureType"/>
<xs:complexType name ="datastructureType">
<xs:sequence>
<xs:element name="field1"/>
<xs:element name="field2" />
<xs:element name="field3"/>
<xs:element name="field4" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
但是这会强加一个我没有充分理由强加的命令.替代方法是使用all,但这需要将xml修改为:
<datastructure>
<field1>data</field1>
<field2>data</field2>
<field3>data</field3>
<field4List>
<field4>data</field4>
<field4>data</field4>
<field4>data</field4>
<field4>data</field4>
</field4List>
</datastructure>
因为所有孩子的孩子只能有一个maxOccurs.这增加了field4List的负担,这似乎在所有实际问题上都是无用的.
我怎么能像序列示例那样编写一个验证我的xml的模式,但这不关心顺序?或者为什么这样的架构首先是一个坏主意?
最佳答案 请检查一下:
Middle way between XSD all and XSD sequence