xml – 元素重复

我的数据结构如下所示

<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

点赞