使用minOccurs属性了解xsd:choice

时间:2014-07-29 11:52:52

标签: xml xsd

我试图了解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),对吧?

1 个答案:

答案 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哪个是缺失的,这没关系。“