如何写XSD或传导

时间:2016-01-05 16:30:51

标签: xml xsd xsd-validation xsd-1.0 xsd-1.1

我需要在XSD中写入或传导。 例如,memberName可以是companyName或firstName或middleName或lastName。 xml文档中应该存在任何一个名称/像任何一个名称在XML中是必需的。

<xs:element name="memberName" nillable="false">
 <xs:complexType>
  <xs:sequence>
    <xs:element name="companyName" type="xs:string"/>
    <xs:element name="firstName" type="xs:string"/>
    <xs:element name="middleName" type="xs:string"/>
    <xs:element name="lastName" type="xs:string"/>
  </xs:sequence>
 </xs:complexType>
</xs:element>

完成XSD

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<xs:schema targetNamespace="http://hidden"
    xmlns:tns="http://hidden" xmlns:xs="http://www.w3.org/2001/XMLSchema"
    version="1.2.0">
    <xs:element name="accountNumber" nillable="false">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:maxLength value="10" />
                <xs:pattern value="[0-9]" />
                <xs:whiteSpace value="collapse" />
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    <xs:element name="memberName" nillable="false">
      <xs:complexType>
        <xs:sequence>
          <xs:element name="companyName" type="xs:string"/>
          <xs:element name="firstName" type="xs:string"/>
          <xs:element name="middleName" type="xs:string"/>
          <xs:element name="lastName" type="xs:string"/>
        </xs:sequence>
      </xs:complexType>
       </xs:element>    
    <xs:element name="effectiveDate" nillable="false">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:maxLength value="10" />
                <xs:whiteSpace value="collapse" />
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
</xs:schema>

如何在XSD中编写限制或OR传导。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

认为你的意思是xs:choice,但我还不确定。

<xs:element name="memberName" nillable="false">
 <xs:complexType>
  <xs:choice>
    <xs:element name="companyName" type="xs:string"/>
    <xs:element name="firstName" type="xs:string"/>
    <xs:element name="middleName" type="xs:string"/>
    <xs:element name="lastName" type="xs:string"/>
  </xs:choice>
 </xs:complexType>
</xs:element>

这需要memberName元素包含companyNamefirstNamemiddleNamelastName一个。< / p>

但我确信大多数人都有名字和姓氏,那么

怎么样
<xs:choice maxOccurs="4">

这将允许几个子元素,但也有几个相同类型。