基于开/关元素的XSD限制

时间:2011-07-01 15:03:07

标签: xml xsd

架构中是否有一种方法可以指示由元素的开放或封闭性质决定的属性要求。例如,我有一个元素,如果打开不需要属性'test',但是如果它已关闭它是必需的。

<element name="employee" >
    blah!
</element>

确定

<element name="employee" />

失败 - 需要属性'test'。

2 个答案:

答案 0 :(得分:2)

我猜你使用“open”表示该元素有一个文本节点子节点,而“关闭”表示它没有。所以你说元素应该有一个文本节点子节点或属性,但不能同时具有(?)而不是两者都有。

这被归类为共现约束,无法在XSD 1.0中完成。它可以通过XSD 1.1中的断言来完成

<xs:element name="employee" type="...">
  <xs:assert test="string(.) or @name"/>
</xs:element>

目前Xerces和Saxon提供XSD 1.1支持。

答案 1 :(得分:0)

不,没有办法做到这一点。 (我引用了一个参考文献,但很难引用非特征!)

总的来说,这是XSD提供的一个步骤;在极少数情况下(如IDREF),它提供了通过引用另一个数据来验证一个数据的任何方法。 XSD 1.1提供了一些新的assertion support可能会满足您的需求,但此时规范只是一个工作草案。