1

支持以下 xml 的 xsd 定义是什么?

<xml>
    <RequiredElementA></RequiredElementA>
    <RequiredElementB></RequiredElementB>
    <RequiredElementC></RequiredElementC>
    <OptionalElementD></OptionalElementD>
    <OptionalElementE></OptionalElementE>
</xml>

我希望前 3 个是必需的,但后两个是可选的。订单无关紧要(但订单是/否不是要求)。

4

1 回答 1

3

如果孩子的顺序没有传达任何信息,通常最简单的方法是修复一个顺序。

<xs:complexType name="fixedOrder">
  <xs:sequence>
    <xs:element ref="RequiredElementA"/>
    <xs:element ref="RequiredElementB"/>
    <xs:element ref="RequiredElementC"/>
    <xs:element ref="RequiredElementD" minOccurs="0"/>
    <xs:element ref="RequiredElementE" minOccurs="0"/>
  </xs:sequence>
</xs:complexType>

如果订单带有信息(例如,您正在记录用户的 A、B、C 等级排序,并带有包含 D 和 E 的选项),您可以使订单不受约束。

<xs:complexType name="variableOrder">
  <xs:all>
    <xs:element ref="RequiredElementA"/>
    <xs:element ref="RequiredElementB"/>
    <xs:element ref="RequiredElementC"/>
    <xs:element ref="RequiredElementD" minOccurs="0"/>
    <xs:element ref="RequiredElementE" minOccurs="0"/>
  </xs:all>
</xs:complexType>

有些人想要不受约束的秩序,即使它没有传达任何信息;这使得数据源不必查找规定的顺序成为可能,但代价是验证更加复杂。

于 2012-09-11T16:11:49.310 回答