XSD 选项可以为空吗?

Can XSD choice be empty?

我已经阅读了 XSD 规范,但我仍然感到困惑。 XSD 中的空选择是否有效?我的意思是,对于没有声明属性的简单选择,必须具有元素 "a" 或元素 "b",或者它可以为空吗?

<xs:complexType name="ChoiceType">
    <xs:choice>
        <xs:element name="a" type="type_a"/>
        <xs:element name="b" type="type_b"/>
    </xs:choice>
</xs:complexType>

在这种情况下可以为空

<xs:complexType name="ChoiceType">
    <xs:choice minOccurs="0">
        <xs:element name="a" type="type_a"/>
        <xs:element name="b" type="type_b"/>
    </xs:choice>
</xs:complexType>

随便看看this question

是的,由 xsd:choice 控制的元素可以为空,如果使用 minOccurs="0":

  • minOccurs="0" 可以在 xsd:choice 本身上。
  • minOccurs="0" 可以在所有 children.

相关答案:xsd:choice 本身可以为空,表示被定义的元素必须为空。

最后,请注意,在您的示例中,不,必须存在 ab 之一,因为 minOccurs 的默认值为 1.

其实说起来也挺合法的

<xs:choice minOccurs="17"/>

但是没有对这个内容模型有效的实例文档。实例必须符合备选方案之一,如果没有备选方案,那么这将是不可能的。

定义任何实例都无法满足的类型实际上很有用,例如如果您想将类型限制为无。