5

鉴于此 XML 文件:

<users blessed="phrogz alians">
  <user name="phrogz"  id="42" />
  <user name="lachtok" id="3"  />
  <user name="vielee"  id="5"  />
  <user name="alians"  id="17" />
</users>

...是否可以创建一个 XSD key/keyref样式验证来确保blessed列表中的每个值都与现有的匹配user/@name

如果 XSD 无法做到这一点,RelaxNG 可以吗?

4

1 回答 1

5

不,XSD 1.0 不可能。当然,在 XSD 1.1 中使用断言很简单:

唯一性(如果在用户元素级别定义):

<xsl:assert test="count(@blessed) = count(distinct-values(@blessed))"/>

参照完整性(如果在用户元素级别定义):

<xsl:assert test="every $t in data(@blessed) satisfies $t = user/@name"/>
于 2011-11-29T18:35:34.040 回答