理解带有minOccurs属性的xsd:choice



我想了解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的。")

最新更新