我想允许example.xml
<defs>
<def n="a"/>
<def n="b"/>
</defs>
<refer-to-def n="a"/>
<refer-to-def n="b"/>
<refer-to-def n="predefined"/>
<refer-to-def n="also-predefined"/>
s.t。 //refer-to-def/@n
唯一可能的值是由//def/@n
或“预定义”或“预定义”给出的值。特别是,如果我添加了<refer-to-def n="never-defined"/>
,它应该不再有效。
我可以使用
进行第一次限制<xs:keyref name="defRef" refer="def">
<xs:selector xpath=".//refer-to-def" />
<xs:field xpath="@n" />
</xs:keyref>
<xs:key name="def">
<xs:selector xpath="./defs/def" />
<xs:field xpath="@n" />
</xs:key>
但如果.xml有<refer-to-def n="predefined"/>
,那么这当然会失败。
我可以通过使用
定义<def>
的{{1}}属性来实现第二个限制
n
但当然这不包括defs n值的动态列表。
如何将两者结合起来,因此n可以来自动态列表,也可以来自预定义集,我的example.xml会验证吗?
答案 0 :(得分:1)
无法在XSD 1.0中完成。
在XSD 1.1中,你可以对断言做任何事情。