我想为以下XML编写XSD架构:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<siss-statusquery xmlns="http://www.example.de/test">
<myhash id="1">DG5F6DFG13DFG5641DG5F6DFG13DFG56411337AS</myhash>
<myhash id="2">123AWDFG13DFG5641DG5F6DFG13GFG56411337AS</myhash>
<myhash id="3">DG5F6DFG13DFG5641DG5F6325DFG13DFG5641143</myhash>
</siss-statusquery>
条件:
<myhash />
代码,minoccur:1
,maxoccur:unbounded
id
属性,键入:unsignedInt
,unique
,required
<sah1hash />
代码值模式:[0-9A-Z]{40,40}
我的尝试:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema attributeFormDefault="unqualified"
elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.de/test" xmlns:lhs="http://www.example.de/test">
<xs:simpleType name="myhashType">
<xs:restriction base="xs:string">
<xs:pattern value="[0-9A-Z]{40,40}" />
</xs:restriction>
</xs:simpleType>
<xs:element name="siss-statusquery">
<xs:complexType>
<xs:sequence>
<xs:element name="myhash" maxOccurs="unbounded"
minOccurs="1">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="lhs:myhashType">
<xs:attribute type="xs:unsignedInt" name="id" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
如何将id
属性限制/限制为唯一。
答案 0 :(得分:3)
XML Schema有一个全局唯一ID类型 - xs:ID
- 但是你不能在这里使用它,因为这种类型的值必须是有效的XML名称(所以特别是它们不能以数字开头)。
应用更一般的唯一性约束的方法是使用xs:unique
:
<xs:element name="siss-statusquery">
<xs:complexType>
<!-- as before -->
</xs:complexType>
<xs:unique name="uniqueId">
<xs:selector xpath="lhs:myhash" />
<xs:field xpath="@id" />
</xs:unique>
</xs:element>
阅读本文的方法是,在包含元素的范围内,selector
匹配的所有元素必须具有不同的field
值。因此,在这种情况下,siss-statusquery
内的所有myhash
元素都必须具有不同的id
属性。