对 XML 模式进行版本控制的最佳实践是什么?

我经常不得不为不同的基于 XML 的导入例程设计 XML 模式。很明显,XML 模式将随着时间的推移而发展,或者它们可能包含需要修复的错误,因此捕获模式的版本并拥有针对特定版本的绑定机制非常重要。

目前我有两种情况:

  1. 在模式中发现错误,所有模式实例必须符合固定版本。

  2. 升级后的模式应该被认为是可取的,但是也应该支持旧的模式。

最后,我想出了在 schema 的名称空间中存储版本信息的方法:

targetNamespace="http://schemas.company.com/Geodesy/2010/River.xsd"

当修复一个 bug 时,我把它修复在同一个名称空间中,但如果我要升级一个模式,那么我需要创建一个新的名称空间,但增加了升级月份:

targetNamespace="http://schemas.company.com/Geodesy/2010/01/River.xsd"

如果我在一个月内升级了不止一次,那么也可以增加一天:

targetNamespace="http://schemas.company.com/Geodesy/2010/01/17/River.xsd"

你有更好的办法吗?

44943 次浏览

这是一个如此困难的课题,以至于一点都不好笑,而且我花了很多年的时间为这个课题提供咨询支持。

有许多 最佳做法在那里,但其中大多数不工作的所有情况。例如,许多人提倡使用“ xsd: any”来允许扩展,如果开发人员负责维护模式,将其转储为转储,那么这只会导致灾难。

如果你刚开始学习,这里有一些建议:

  • 执行 没有将次要版本号、微版本号、日期或任何类似的东西放入名称空间。每次更改命名空间时,都会中断所有处理应用程序。
  • 执行 在 XML 实例文档中放置一个“ version”属性。这将使处理应用程序或版本适配器服务能够确定正在处理的内容。
  • 执行 指定构成向后兼容变更的策略,例如: 添加可选元素不会破坏发送方,如果接收方使用忽略不知道的元素的策略,也不会破坏接收方(JAXB 和 XMLBeans 可以这样配置)

祝你好运!

Http://www.XML.com/pub/a/2004/07/21/design.html 提供了很好的指南,而 XML Schema 1.1通过条件包含(http://www.w3.org/TR/xmlschema11-1/#cip)实现了“版本控制”。