在同一定义文件中具有多个版本的xml架构

时间:2013-03-27 20:03:00

标签: xml xsd

我正在开发带有修订号的架构定义。是否可以将元素和组标记为仅对特定修订有效?

1 个答案:

答案 0 :(得分:0)

不使用XSD,没有。如果我想使用单一来源为共享结构维护多个版本的模式,我会使用某种形式的文字编程系统,或者(稍微更有可能)为此目的发明一种新形式的文字编程系统。

[几个小时后...... ]

一种简单的方法是在您自己的命名空间中对任何仅包含在某些版本中的模式构造中使用version属性; version属性的值将是以空格分隔的版本标识符列表。例如:

<xs:schema targetNamespace="http://example.com/multiver"
  xmlns:mv="http://example.com/multiver">

  <xs:element name="e" mv:ver="1.0">
    <!--* 1.0 version of element 'e' *-->
  </xs:element>
  <xs:element name="e" mv:ver="1.1">
    <!--* 1.1 version of element 'e' *-->
  </xs:element>
  <xs:element name="f">
    <!--* element 'f' is not version-dependent ... *-->
  </xs:element>
  ...
</xs:schema>

使用XSLT或XQuery来提取那些带有适当mv:ver值的声明很简单。

如果版本数量超过5或10,这种简单的方法可能会变得有点乏味,你可能会认为你想要的东西可以让你说“通过版本3.2”和“从版本3.3到”版本4.34,包括“。 section 4.2.2 of XSD 1.1中描述的条件包含属性说明了解决该问题的一种可能方式。