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

Must a default XML Sequence (or All) with optional child elements have at least one child?

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

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

虽然Child1Child2都是可选的,但Element1必须至少有一个child才能符合上述架构;即文档:

<Element1></Element1>    

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

更新

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

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

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

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

Must a default XML Sequence (or All) with optional child elements have at least one child?

没有...

Although both Child1 and Child2 are optional, Element1 has to have at least one child to comply with the above schema

minOccurs 的默认值为 1,因此您假设 xsd:sequence 被限制出现一次是正确的。而xsd:sequence minOccurs="1"只要满足一次它的children的出现约束就满足了。当所有 child 个出现约束都是 minOccurs="0" 时,允许一个空序列。 因此,即使没有任何 Child1Child2 children 元素,<Element1/> 也是有效的。

另见

  • XML Schema minOccurs / maxOccurs default values

更多示例:

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>