Xml 理解xsd:选择和次要因素
我无法理解以下XML架构的行为: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
<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