我无法理解以下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
如果我将元素e2的minOccurs属性更改为“0”以外的其他属性,我得到了我原本期望的行为。
>看起来好像没有元素< e2>在我的示例中计为xsd:选项的出现。
>如果是这种情况,那么这个无限数量的事件怎么会违反我的xsd:choice中的maxOccurs限制?
我告诉你,你至少可以去商店一次,最多两次,每次你可以选择购买什么:你可以买苹果(一个苹果或两个苹果),或者你可以买桔子橙子或橙子)。
完全有可能选择去商店两次,每次都不买橘子。所以你没有回来。