具有可选子元素的默认 XML 序列(或全部)是否必须至少有一个子元素?

2023-12-23

如果有人能够确认以下模式的解释是否正确,我将不胜感激:

<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 and Child2是可选的,Element1必须有至少一个孩子才能符合上述架构;即文件:

<Element1></Element1>    

不会遵守。为了使其有效,需要顺序minOccurs = 0(?)

Update

该问题涉及当子元素可选时序列(和所有)出现的含义。例如,文档;

<Element1>
    <Child2/>
    <Child1/>
</Element1>

将符合上述架构。这个序列会发生两次;在第一遍中,Child1缺席了。在第二,Child2缺席了。但重点是,顺序minOccurs(默认为 1)已满足,因为它发生了两次。

对于我上面给出的第一个例子(只是Element1;没有子元素),序列根本不会出现,并且不(IMO)满足minOccurs = 1.


具有可选子元素的默认 XML 序列(或全部)是否必须至少有一个子元素?

No...

虽然两者Child1 and Child2是可选的,Element1必须在 至少有一个孩子符合上述架构

默认值为minOccurs is 1,所以你的假设是正确的xsd:sequence被限制出现一次。然而,xsd:sequence minOccurs="1"只要其子级的出现约束满足一次,就满足。当所有子项出现约束都满足时minOccurs="0",允许有一个空序列。 所以,<Element1/>是有效的,即使没有任何Child1 or Child2儿童元素。

See also

  • XML 架构 minOccurs / maxOccurs 默认值 https://stackoverflow.com/questions/4821477/xml-schema-minoccurs-maxoccurs-default-values
  • XSD 中 和 之间的区别? https://stackoverflow.com/questions/36286056/the-difference-between-all-sequence-choice-and-group-in-xsd

更多示例:

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/> and <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>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有可选子元素的默认 XML 序列(或全部)是否必须至少有一个子元素? 的相关文章

随机推荐