版本化XML模式的最佳实践是什么?

Reg*_*ent 68 xml versioning xsd

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

目前我有两种情况:

  1. 该错误在架构中找到,所有架构实例必须符合固定版本.

  2. 模式已升级,应该被视为首选,但也应支持旧模式.

最后,我想出了在架构的命名空间中存储版本信息:

targetNamespace="http://schemas.company.com/Geodesy/2010/River.xsd"
Run Code Online (Sandbox Code Playgroud)

在修复错误时我将其修复到同一个命名空间中,但如果我要升级模式,那么我需要创建一个新的命名空间但添加了升级月份:

targetNamespace="http://schemas.company.com/Geodesy/2010/01/River.xsd"
Run Code Online (Sandbox Code Playgroud)

如果我在一个月内进行了多次升级,那么也只需追加一天:

targetNamespace="http://schemas.company.com/Geodesy/2010/01/17/River.xsd"
Run Code Online (Sandbox Code Playgroud)

你知道更好的方法吗?

xcu*_*cut 86

这是一个如此困难的主题,它甚至都不好笑,而且我花了数年时间提供咨询支持.

有许多最佳实践,但其中大多数并不适用于所有情况.例如,许多人提倡使用"xsd:any"来允许扩展,如果开发人员负责维护模式,将其转换为转储,那么这只是一个灾难.

如果您开始使用,以下是一些提示:

  • 千万不能把一个小版本号,微版本号,日期,或其他任何东西的那种,到您的命名空间.每次更改命名空间时,都将中断所有处理应用程序.
  • 不要把一个"版本"属性的XML实例文件内.这将使处理应用程序或版本适配器服务能够确定它正在处理什么.
  • 不要指定什么是向后兼容的改变,例如政策:添加可选的元素不会打破发件人,并不会打破接收器或者,如果他们使用忽略他们不知道要素(政策JAXB和XMLBeans的可配置这样)

祝你好运!


小智 6

http://www.xml.com/pub/a/2004/07/21/design.html提供了良好的指导方针,XML Schema 1.1通过条件包含实现了"版本控制"(http://www.w3.org/TR/ xmlschema11-1 /#cip).