另一个 XSD 问题 - 我如何才能实现以下 XML 元素都有效:
<some-element>
<type>1</type>
<a>...</a>
</some-element>
<some-element>
<type>2</type>
<b>...</b>
</some-element>
子元素(要么 <a>
或 <b>
)应取决于<type>
(也可以是属性)的内容。在 RelaxNG 中会很简单——但是 RelaxNG 不支持密钥完整性 :(
有没有办法在 XSD 中实现这一点?
注意:XML 模式版本 1.1 支持<xs:alternative>
,这可能是一个解决方案,但 afaik 还没有参考实现(例如 libxml2)支持这个。所以我正在寻找解决方法。我想出的唯一方法是:
<type>1</type>
<some-element type="1">
<!-- simple <xs:choice> between <a> and <b> goes here -->
<a>...</a>
</some-element>
<!-- and now create a keyref between <type> and @type -->