Xml 理解xsd:选择和次要因素

Xml 理解xsd:选择和次要因素,xml,xsd,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:ele

我无法理解以下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>

我希望作为
的子元素,至少需要元素
的一个实例。尽管有我的期望,空的
将根据此架构进行验证:

 > xmllint --schema test.xsd empty.xml
 <?xml version="1.0" encoding="UTF-8"?>
 <rootnode>
 </rootnode>
 empty.xml validates
>xmllint——schema test.xsd empty.xml
empty.xml验证
如果我将元素
e2
minOccurs
属性更改为
“0”
以外的其他属性,我将获得我最初期望的行为

  • 在我的示例中,似乎仅仅缺少元素
    就等于出现了
    xsd:choice

  • 如果是这种情况,那么为什么无限次的出现没有违反我的
    xsd:choice
    中的
    maxOccurs
    限制


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


你完全有可能选择去商店两次,每次都不买桔子。所以你回来时什么都没有。

以下是允许的组合

Two choices:
e1 (1 - 2) + e1 (1 - 2) = e1 x (2 - 4), or
e1 (1 - 2) + e2 (0 - 1), or 
e2 (0 - 1) + e1 (1 - 2), or
e2 (0 - 1) + e2 (0 - 1) = e2 (0 - 2)

One choice (but no new outcomes):
e1 (1-2), or
e2 (0-1)


e1e1, e1e1e1, e1e1e1e1
e1, e1e2, e1e1e2 
e2e1, e2e1e1 
empty, e2, e2e2 

请注意,选择[min=2 max=2]会产生相同的有效组合。

@mizo写道(在我删除的答案中):我画了一个决策树,并得出结论,选择可以产生11个不同的序列。如果我决定“去购物”一次,我最终会得到e1、e1、nothing或e2。如果我决定“购物”两次,我可以以前面四种排列中的任何一种或e1、e1 e2、e1 e1、e1 e2、e2 e1、e2 e1或e2 e2结束。这是正确的吗mizo 6小时前这就是我吃香蕉的原因:香蕉树上的树枝越来越少了。我最近读到的最好的答案是:清晰、简洁,让你在吃香蕉的过程中微笑。太好了。好吧,如果你删除重复的
e1e1
,那么这算11。果然,如果其中一个子元素具有
minOccurs=“0”
,则
choice
上的
minOccurs
似乎没有效果。对,有11种独特的可能性。请注意,minOccurs=“1”是默认值,因此删除该属性不会更改minOccurs值。即使将minOccurs设置为2,有效组合的集合也不应更改。只要其中一个有效选项的minOccurs=0,我就得出结论,minOccurs=maxOccurs的choice属性生成的集合与minOccurs