使用unique with base的xml架构

时间:2016-12-04 21:16:52

标签: xml xsd schema unique base

我有几种数据类型使用base =""标识符。它们最终都从一个具有ID节点的基本类型扩展。我希望架构能够查看所有元素,以确保每个元素的ID都是唯一的。

到目前为止,我有:

<effects>
  <ResistanceModificationEffect>
    <ID>fire_resistance</ID>
    <!-- other stuff -->
  </ResistanceModificationEffect>
  <ResistanceModificationEffect>
    <ID>fire_resistance</ID>
    <!-- other stuff -->
  </ResistanceModificationEffect>
</effects>

和架构:

<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema 
 xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="effects">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="ResistanceModificationEffect" type="resistanceModificationEffectDef" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
<xs:unique name="uniqueID">
  <xs:selector xpath=".//*"/>
  <xs:field xpath="@ID"/>
</xs:unique>
</xs:element>

</schema>

至于xs:unique元素,我尝试了各种不同的东西,让它看到标签ID为节点的节点,以检查唯一性。

  <xs:selector xpath="*"/>
  <xs:selector xpath="./*"/>
  <xs:selector xpath=".//*"/>

从我所有关于模式的内容中,我所需要的只是

  <xs:selector xpath="*"/>

除非我不理解它。 This链接在底部表示&#34; *&#34;是一个有效的标识符,选择所有子项,&#34; @ elementName&#34;应该选择要比较的元素。

我误解了什么?

1 个答案:

答案 0 :(得分:0)

捂脸

使用我在上面提供的链接回答了我自己的问题。使用

  <xs:field xpath="@ID"/>

尝试从所选节点获取属性

  <xs:field xpath="ID"/>

提供正确的错误消息。我专注于错误的事情......