XML Schema强制两个属性不同

时间:2013-05-03 11:16:58

标签: xml xsd schema restriction

在我的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文件中也设置了密钥和keyref。现在我想知道这是否有可能以某种方式限制parent-category-id,因此它不能指向self 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。 有什么想法吗?

1 个答案:

答案 0 :(得分:1)

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

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

就个人而言,我无法找到支持1.1的验证器。版本1.0不支持断言。