在XSD中,应该存在任何或两个元素

时间:2017-01-22 21:26:47

标签: xml xsd xsd-validation xml-validation

我正在尝试编写一个XSD,其中应该存在任何EM或RUID,或者两者都可以存在。但是使用下面的XSD,我收到以下错误:

  

错误:模型组中出现名称为“RUID”且名称不同的多个元素。

<xs:element name="ADCNT">
  <xs:complexType>
    <xs:choice minOccurs="1" maxOccurs="1">

      <xs:sequence>
        <xs:element name="EM" minOccurs="1" maxOccurs="1"></xs:element>
        <xs:element name="RUID" minOccurs="0"  maxOccurs="1"></xs:element>
      </xs:sequence>

      <xs:sequence>
        <xs:element name="RUID" minOccurs="1" maxOccurs="1">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="username" minOccurs="0" maxOccurs="1">
                <xs:simpleType>
                  <xs:restriction base="xs:string">
                    <xs:minLength value="1" />
                  </xs:restriction>
                </xs:simpleType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>

    </xs:choice>
  </xs:complexType>
</xs:element>

1 个答案:

答案 0 :(得分:1)

XSD中的一个元素或两个元素

此XSD允许ADCNTEMRUID或两者组成:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="EM" type="xs:string"/>
  <xs:element name="RUID" type="xs:string"/>

  <xs:element name="ADCNT">
    <xs:complexType>
      <xs:choice>
        <xs:element ref="RUID"/>
        <xs:sequence>
          <xs:element ref="EM"/>
          <xs:element ref="RUID" minOccurs="0"/>
        </xs:sequence>
      </xs:choice>
    </xs:complexType>
  </xs:element>

</xs:schema>

更新:我已根据OP的请求更改RUID的类型,但原则保持不变:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:complexType name="RUIDType">
    <xs:sequence>
      <xs:element name="username" minOccurs="0" maxOccurs="1">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:minLength value="1" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="ADCNT">
    <xs:complexType>
      <xs:choice>
        <xs:element name="RUID" type="RUIDType"/>
        <xs:sequence>
          <xs:element name="EM" type="xs:string"/>
          <xs:element name="RUID" type="RUIDType" minOccurs="0"/>
        </xs:sequence>
      </xs:choice>
    </xs:complexType>
  </xs:element>

</xs:schema>