理解xsd:choice和minOccurs

miz*_*izo 33 xml xsd

我无法理解以下XML架构的行为:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="rootnode">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="1" maxOccurs="2">
          <xsd:element name="e1" minOccurs="1" maxOccurs="2"/>
          <xsd:element name="e2" minOccurs="0" maxOccurs="1"/>
        </xsd:choice>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>
Run Code Online (Sandbox Code Playgroud)

我期望任何一个元素的至少一个实例<e1><e2>作为孩子的必需品<rootnode>.尽管我的期望,空的<rootnode>将验证这个架构:

 > xmllint --schema test.xsd empty.xml
 <?xml version="1.0" encoding="UTF-8"?>
 <rootnode>
 </rootnode>
 empty.xml validates
Run Code Online (Sandbox Code Playgroud)

如果我将minOccurs元素的属性更改为e2其他内容"0",我会得到我最初预期的行为.

  • 似乎仅仅缺少元素<e2>就像xsd:choice我的例子中出现的一样.

  • 如果是这种情况,那么为什么这无限次的出现不会违反maxOccurs我的限制xsd:choice呢?

Mic*_*Kay 95

我告诉你,你可以去商店至少一次,最多两次,每次你可以选择买什么:你可以买苹果(一个苹果或两个苹果),或者你可以买橙子(要么没有橙子或橙子).

完全有可能你会选择去商店两次,每次都不买橙子.所以你什么也没回来.

  • 这就是我吃香蕉的原因:香蕉树上的枝条较少. (13认同)
  • 最佳答案我已经在SO上阅读了一段时间:清晰,简洁,让你在这个过程中微笑.荣誉. (2认同)