在我的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。 有什么想法吗?
答案 0 :(得分:1)
如果您有支持1.1版的XSD验证程序,则可以在xs:attribute元素后面使用断言来强制执行限制:
<xs:assert test="@id != @parent-category-id"/>
就个人而言,我无法找到支持1.1的验证器。版本1.0不支持断言。