我试图了解xsd:choice和minOccurs如何协同工作。 我读过this topic,但它只回答了我的一半问题。 例如,我是这种类型:
<xsd:element name="CAR">
<xsd:complexType>
<xsd:sequence>
<xsd:choice>
<xsd:element name="A"/>
<xsd:element name="B"/>
</xsd:choice>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
如果我想要不指定任何CAR
的元素(既不是A也不是B),我可以像这样添加minOccurs:
<xsd:element name="CAR">
<xsd:complexType>
<xsd:sequence>
<xsd:choice>
<xsd:element name="A" minOccurs="0"/>
<xsd:element name="B" minOccurs="0"/>
</xsd:choice>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
但是,如果我只把它放在一个元素上,无论是A还是B,它都会产生相同的结果?换句话说,我之前的例子=
是真的吗?<xsd:element name="CAR">
<xsd:complexType>
<xsd:sequence>
<xsd:choice>
<xsd:element name="A" minOccurs="0"/>
<xsd:element name="B"/>
</xsd:choice>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
=
<xsd:element name="CAR">
<xsd:complexType>
<xsd:sequence>
<xsd:choice>
<xsd:element name="A"/>
<xsd:element name="B" minOccurs="0"/>
</xsd:choice>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
在这三个例子中,我能够指定任何元素(既不是A也不是B),对吧?
答案 0 :(得分:2)
我的表达方式略有不同:
<xsd:element name="CAR">
<xsd:complexType>
<xsd:choice minOccurs="0">
<xsd:element name="A" />
<xsd:element name="B" />
</xsd:choice>
</xsd:complexType>
</xsd:element>
但是要回答您的问题,<A>
或<B>
(两者都是可选的minOccurs="0"
)之间的选择在逻辑上等同于<A>
或{{1}之间的选择其中任何一个都是可选的。
换句话说,必须满足<B>
条件的一个。通过在其中一个选项上声明<xsd:choice>
,您可以有效地允许在没有找到孩子时匹配(即“没有minOccurs="0"
,所以我们在这里必须是{{1哪个是缺失的,这没关系。“)