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

标签 xml xsd versioning

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

目前我有两种情况:

  1. 错误是在模式中发现的,所有模式实例必须符合修复版本。

  2. 模式已升级,应被视为更可取,但也应支持旧模式。

最后我想到了在模式的命名空间中存储版本信息:

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

当修复一个错误时,我在同一个命名空间中修复它,但是如果我要升级一个架构,那么我需要创建一个新的命名空间,但添加了升级月份:

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

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

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

你知道更好的方法吗?

最佳答案

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

有很多best practices在那里,但其中大多数并不适用于所有情况。例如,许多人提倡使用“xsd:any”来允许扩展,如果开发人员负责维护模式,将其变成转储,那将是灾难的根源。

如果您刚开始,这里有一些提示:

  • 不要将次版本号、微版本号、日期或任何其他类型的内容放入您的命名空间。每次更改命名空间时,都会破坏所有正在处理的应用程序。
  • 在 XML 实例文档中放置一个“版本”属性。这将使处理应用程序或版本适配器服务能够弄清楚它正在处理什么。
  • Do 指定构成向后兼容更改的策略,例如:添加可选元素不会破坏发件人,如果他们使用忽略不包含的元素的策略,也不会破坏接收者知道(JAXB 和 XMLBeans 可以这样配置)

祝你好运!

关于xml - 对 XML 模式进行版本控制的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2014237/

相关文章:

java - java dom 中的命名空间问题

c# - 在 xml 文件中搜索数据的最佳方式?

xsd - 从 xsd 创建具有许多导入的类

versioning - 在java 7环境中运行java 1.5编译的程序

mercurial - 使用 TortoiseHG 强制版本号

versioning - 存储库组织

java - 将blob文件保存到mysql数据库中

java - org.xml.sax.SAXParseException : cvc-complex-type. 2.4.c: 匹配的通配符是严格的

xml - XML Schema 和 XMI 的区别

html - 是否有适用于 HTML5 的 xhtml.xsd 等效项?