我想了解xsd:choice和minOccurs是如何一起工作的。我读了这个话题,但它只回答了我一半的问题。例如,我有这样的类型:
<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),对吗?
我想用稍微不同的方式来表达:
<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>
或<B>
之间进行选择,其中任何一个都是可选的。
换句话说,必须满足<xsd:choice>
的一个条件。通过在其中一个选项上声明minOccurs="0"
,您可以有效地允许在没有找到子项时进行匹配(即"没有<B>
,所以我们这里必须有一个缺失的<A>
,这是OK的。")