代码之家  ›  专栏  ›  技术社区  ›  CAnder

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

  •  2
  • CAnder  · 技术社区  · 7 年前

    <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 必须至少有一个孩子才能符合上述模式;i、 e.文件:

    <Element1></Element1>    
    

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

    使现代化

    当子元素是可选的时,这个问题与序列(和all)的出现意义有关。例如,文件;

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

    将符合上述模式。这个序列会发生两次;在第一关, 儿童1 他缺席了。在第二种情况下, 儿童2 他缺席了。但关键是,顺序 minOccurs 满足(默认值1),因为它发生了两次。

    对于我上面给出的第一个示例(仅 元素1 ; 没有子元素),序列根本不发生,并且(IMO)不满足 minOccurs = 1 .

    1 回复  |  直到 7 年前
        1
  •  4
  •   kjhughes    7 年前

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

    Child1 Child2 Element1 必须在 至少有一个子级符合上述模式

    的默认值 minOccurs 1 ,因此您正确地假设 xsd:sequence xsd:sequence minOccurs="1" 只要其子项的发生约束满足一次,则满足。当所有子引用约束均为 minOccurs="0" ,允许一个空序列。 <Element1/> 有效,即使没有任何 儿童1 儿童2 子元素。

    另请参见


    其他示例:

    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>