【发布时间】:2011-03-07 00:26:48
【问题描述】:
我无法理解以下 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:choice的出现。如果是这种情况,那么这个无限的出现次数怎么没有违反我的
xsd:choice中的maxOccurs限制?
【问题讨论】: