我是XSD的新手并提出以下问题,非常感谢您的帮助!
假设我有xml:
<DataGroup>
<Data name="name">Jane</Data>
<Data name="age">50</Data>
<Data name="state>MA</Data>
<Data name="zipcode">01000</Data>
</DataGroup>
我想限制: 当属性名称等于“age”时,值应为整数且> 20, 当属性名称等于“state”时,值应为两个字母。 当属性名称等于“邮政编码”时,值应为\ d {5}。
无法修改xml,任何想法? 谢谢!
答案 0 :(得分:0)
使用 XSD 1.1 ,您可以为每种情况声明替代类型。此外,您可以将<Data>
元素的数量限制为四个,并添加一个断言以保证每个不同的属性只出现一次:
<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>
由于<Data>
是一个简单类型,您需要将该属性声明为每种类型的扩展名:
<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>
这将验证您的文件是否符合您的要求。