我的数据结构如下所示
<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的模式,就像序列示例一样,但这不关心顺序?或者,为什么这样的架构首先是一个坏主意?
答案 0 :(得分:2)
答案 1 :(得分:0)
基数限制是在许多现实世界模式中使用xs:all的服务器限制。从这个角度来看,放松NG更加灵活。
我应该使用“field4List方式”;它在您的架构中添加了一个额外的元素,但保持无序。