2

我想为以下 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 />标签,最小出现次数:1,最大出现次数:unbounded
  • id属性, 类型: unsignedInt, is unique, isrequired
  • <myhash />标签值模式:[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属性限制/限制为唯一?

4

1 回答 1

4

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>

阅读方式是,在包含元素的范围内,与 匹配的所有元素selectorfield. 所以在这种情况下,在 中siss-statusquery,所有myhash元素都必须具有不同的id属性。

于 2013-09-06T13:00:30.687 回答