如何使“使用”属性(必需/可选)取决于另一个值?

时间:2009-02-04 12:31:00

标签: xml xsd schema

我正在尝试在XSD XML Schema中做一些特定的事情。我想将元素设置为use="required",只有当另一个元素的属性有特定值时才会这样。

示例:

<udi att1="all">
   <name att2="dsd"/>
   <phone att3="dsd"/>
</udi>

仅当phone值为att1时,我才需要all元素。

我被告知XPath可以为此工作 - 或者有更好的方法吗?

2 个答案:

答案 0 :(得分:8)

XML不是关系型的,而是层级的。模式旨在强制执行嵌套规则,而不是兄弟之间的规则。这不是你可以用XSD做的事情。

但是,在解析或创建符合格式的文档时,可以执行此操作。在这种情况下,当您解析XML文档时,您会强制执行约束,就像您在问题中所述的那样。

答案 1 :(得分:0)

对于后人:可以实现这一要求:

(a)使用XSD 1.1中的新功能(断言,条件类型赋值)

(b)使用Schematron与XSD一起进行验证。