2011-07-01 39 views
2

模式中是否有方法来指示由元素的开放或闭合属性确定的属性需求。例如,我有一个元素,如果打开没有要求属性'测试',但是如果它关闭它是必需的。基于开放/关闭元素的XSD限制

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

确定

<element name="employee" /> 

故障 - 属性 '测试' 必需的。

回答

2

我猜你正在使用“打开”来表示元素有一个文本节点的孩子,“闭”意味着它没有。所以你说的元素应该有一个文本节点的孩子或属性,但不是两个(?),而不是两个。

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

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

当前Xerces和Saxon支持XSD 1.1。

0

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

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