如果有人能够确认以下架构的解释是否正确,我将不胜感激:
<xs:element name="Element1">
<xs:complexType>
<xs:sequence>
<xs:element name="Child1" minOccurs="0" />
<xs:element name="Child2" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
虽然Child1
和Child2
都是可选的,但Element1
必须至少有一个孩子符合上述架构;即文件:
<Element1></Element1>
不遵守。为使其有效,需要序列minOccurs = 0
(?)
更新
当子元素是可选的时,问题涉及序列(和所有)的出现的含义。例如,文件;
<Element1>
<Child2/>
<Child1/>
</Element1>
符合上述架构。序列会发生两次;在第一次通过时,Child1
缺席。第二,Child2
缺席。但重点是,序列minOccurs
(默认值为1)得到满足,因为它发生了两次。
使用上面给出的第一个例子(仅Element1
;没有子元素),序列根本不会发生,并且(IMO)不满足minOccurs = 1
。
答案 0 :(得分:2)
带有可选子元素的默认XML序列(或全部)必须至少有一个子元素吗?
没有...
虽然
Child1
和Child2
都是可选的,Element1
必须有 至少有一个孩子遵守上述架构
minOccurs
的默认值为1
,因此您可以认为xsd:sequence
被限制为出现一次。但是,只要满足其子项的出现约束一次,就会满足xsd:sequence minOccurs="1"
。当所有子出现约束为minOccurs="0"
时,允许一个空序列。
因此,即使没有任何<Element1/>
或Child1
子元素,Child2
也是有效的。
另见
XSD与xs:sequence minOccurs="0"
<xs:element name="r">
<xs:complexType>
<xs:sequence minOccurs="0" maxOccurs="1">
<xs:element name="a"/>
<xs:element name="b"/>
</xs:sequence>
</xs:complexType>
</xs:element>
有效的XML: <r/>
和<r><a/><b/></r>
XSD与xs:sequence minOccurs="1"
(默认)
<xs:element name="r">
<xs:complexType>
<xs:sequence minOccurs="1" maxOccurs="1">
<xs:element name="a"/>
<xs:element name="b"/>
</xs:sequence>
</xs:complexType>
</xs:element>
有效的XML: <r><a/><b/></r>
XSD与xs:sequence minOccurs="2"
<xs:element name="r">
<xs:complexType>
<xs:sequence minOccurs="2" maxOccurs="2">
<xs:element name="a"/>
<xs:element name="b"/>
</xs:sequence>
</xs:complexType>
</xs:element>
有效的XML: <r><a/><b/><a/><b/></r>