xsd - 我可以将属性限制为键OR枚举吗?

时间:2016-10-07 12:04:49

标签: xml validation xsd union keyref

我想允许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会验证吗?

1 个答案:

答案 0 :(得分:1)

无法在XSD 1.0中完成。

在XSD 1.1中,你可以对断言做任何事情。