我无法理解下面的XML架构的行为:理解XSD:选择的minOccurs
<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>
我希望无论是元素<e1>
或<e2>
需要为<rootnode>
孩子的至少一个实例。尽管我的期望,一个空<rootnode>
将根据该模式验证:
> xmllint --schema test.xsd empty.xml
<?xml version="1.0" encoding="UTF-8"?>
<rootnode>
</rootnode>
empty.xml validates
如果我改变元素e2
的minOccurs
属性比其他"0"
东西,我得到我最初的预期行为。
它好像元素的单纯没有
<e2>
数为xsd:choice
的在我的例子发生。如果是这种情况,那么如何发生这种无限次数的事件并不违反我的
xsd:choice
中的maxOccurs
限制?
@ mizo写道(在我删除的答案中):我画了一个这样的决策树,并得出结论,这个选择可能导致十一个不同的序列。如果我决定“去购物”一次,我可以用e1,e1 e1,nothing或e2结束。如果我决定“购物”两次,我可以结束以前的四种排列或e1 e1 e1,e1 e2,e1 e1 e1 e1,e1 e1 e2,e2 e1,e2 e1 e1或e2 e2中的任何一个。它是否正确? - mizo 6小时前 – 2011-03-08 02:16:35
这就是我吃香蕉的原因:香蕉树中的分支较少。 – Dan 2013-05-15 04:06:08
最佳答案我已阅读过一段时间:清晰,简洁,让你在这个过程中微笑。荣誉。 – tsemer 2016-03-03 15:37:05