我无法理解以下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>
我预计<e1>
的子项中至少需要一个元素<e2>
或<rootnode>
的实例。尽管我的期望,空<rootnode>
将验证此架构:
> xmllint --schema test.xsd empty.xml
<?xml version="1.0" encoding="UTF-8"?>
<rootnode>
</rootnode>
empty.xml validates
如果我将元素minOccurs
的{{1}}属性更改为e2
以外的其他属性,我会得到我原先预期的行为。
好像仅仅缺席元素"0"
计算为我示例中<e2>
的出现。
如果是这种情况,那么为什么这无限次的出现次数不会违反xsd:choice
中的maxOccurs
限制?
答案 0 :(得分:94)
我告诉你,你可以去商店至少一次,最多两次,每次你可以选择买什么:你可以买苹果(一个苹果或两个苹果),或者你可以买橙子(无橙子或橙子)。
你完全有可能选择去商店两次,每次都不买橙子。所以你什么也没回来。
答案 1 :(得分:1)
以下是允许的组合
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]会产生相同的有效组合。