Attributes XSD:属性值的不同限制

Attributes XSD:属性值的不同限制,attributes,xsd,restriction,Attributes,Xsd,Restriction,我是XSD新手,有以下问题,非常感谢您的帮助 假设我有xml: <DataGroup> <Data name="name">Jane</Data> <Data name="age">50</Data> <Data name="state>MA</Data> <Data name="zipcode">01000</Data> </DataGroup> 简 50

我是XSD新手,有以下问题,非常感谢您的帮助

假设我有xml:

<DataGroup>
  <Data name="name">Jane</Data>
  <Data name="age">50</Data>
  <Data name="state>MA</Data>
  <Data name="zipcode">01000</Data>
</DataGroup>

简
50

使用XSD 1.1可以为每种情况声明替代类型。此外,您可以将
元素的数量限制为正好四个,并添加断言以确保每个不同的属性只出现一次:

<xs:element name="DataGroup">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="Data" maxOccurs="4" minOccurs="4">
                <xs:alternative type="NameData"  test="@name='name'" />
                <xs:alternative type="AgeData"   test="@name='age'" />
                <xs:alternative type="ZipData"   test="@name='zipcode'"/>
                <xs:alternative type="StateData" test="@name='state'"/>
            </xs:element>
        </xs:sequence>
        <xs:assert test="Data/@name='name' and Data/@name='age' and Data/@name='zipcode' and Data/@name='state'"></xs:assert>
    </xs:complexType>
</xs:element>

由于
是一个简单类型,因此需要将属性声明为每个类型的扩展:

<xs:complexType name="NameData">
    <xs:simpleContent>
        <xs:extension base="xs:string">
            <xs:attribute name="name" type="xs:string"/>
        </xs:extension>
    </xs:simpleContent>
</xs:complexType>
<xs:complexType name="AgeData">
    <xs:simpleContent>
        <xs:extension base="AgeType">
            <xs:attribute name="name" type="xs:string"/>
        </xs:extension>
    </xs:simpleContent>
</xs:complexType>
<xs:complexType name="ZipData">
    <xs:simpleContent>
        <xs:extension base="ZipType">
            <xs:attribute name="name" type="xs:string"/>
        </xs:extension>
    </xs:simpleContent>
</xs:complexType>
<xs:complexType name="StateData">
    <xs:simpleContent>
        <xs:extension base="StateType">
            <xs:attribute name="name" type="xs:string"/>
        </xs:extension>
    </xs:simpleContent>
</xs:complexType> 

在作为简单类型基础的类型中声明的限制:

<xs:simpleType name="AgeType">
    <xs:restriction base="xs:integer">
        <xs:minExclusive value="20"/>
    </xs:restriction>
</xs:simpleType>

<xs:simpleType name="StateType">
    <xs:restriction base="xs:string">
        <xs:pattern value="[A-Z]{2}"/>
    </xs:restriction>
</xs:simpleType>

<xs:simpleType name="ZipType">
    <xs:restriction base="xs:string">
        <xs:pattern value="\d{5}"/>
    </xs:restriction>
</xs:simpleType>


这将根据您需要的限制来验证您的文件。

您使用的是XSD 1.1版还是XSD 1.0版?可以使用任何一种。