1

在我的 XML 中,我定义了类别

<category id="3" parent-category-id="2">
    <name>Child category</name>
</category>

如您所见,我有一个类别元素,它可以定义一个父类别。这两个属性都在我的 XML Schema 文件中定义:

<xs:attribute name="id" use="required" type="xs:string" />
<xs:attribute name="parent-category-id" use="optional" type="xs:string" />

我还在我的 XSD 文件中设置了密钥和密钥引用。现在我想知道这是否有可能以某种方式限制父类别ID,以便它不能指向自我ID。例如我可以写:

<category id="3" parent-category-id="3">

并且这样的 XML 文件仍然会验证,尽管它不应该。

我的密钥和密钥引用是:

<xs:key name="ID">
    <xs:selector xpath="categories/category" />
    <xs:field xpath="@id" />
</xs:key>

<xs:keyref name="PARENT_CATEGORY_ID_REF" refer="ID">
    <xs:selector xpath="categories/category" />
    <xs:field xpath="@parent-category-id" />
</xs:keyref>

如果我可以添加某种限制,那就太好了,这会告诉验证器 id 不能 == parent-category-id。有任何想法吗?

4

1 回答 1

1

如果您有一个支持 1.1 版的 XSD 验证器,您可以在 xs:attribute 元素之后使用断言来强制执行您的限制:

<xs:assert test="@id != @parent-category-id"/>

不过,就我个人而言,我很难找到支持 1.1 的验证器。1.0 版不支持断言。

于 2013-05-08T16:56:13.970 回答