我经常需要为不同的基于XML的导入例程设计XML模式。很明显,XML模式会随着时间的推移而发展,或者它们可能包含要修复的错误,因此捕获模式的版本并使用某种机制来绑定特定版本非常重要。
目前我有两种情况:
在架构中发现错误,所有架构实例都必须符合固定版本。
架构已升级,应该被视为首选,但也应支持旧架构。
最后,我想出了在架构名称空间中存储版本信息:
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"
你知道更好的方法吗?
答案 0 :(得分:85)
这是一个如此困难的主题,它甚至都不好笑,而且我花了数年时间为其提供咨询支持。
那里有很多best practices,但其中大多数并不适用于所有情况。例如,许多人提倡使用“xsd:any”来允许扩展,如果开发人员负责维护模式,将其转换为转储,那么这只是一种灾难。
如果您开始使用,以下是一些提示:
答案 1 :(得分:6)
http://www.xml.com/pub/a/2004/07/21/design.html提供了很好的指导,XML Schema 1.1通过条件包含(http://www.w3.org/TR/xmlschema11-1/#cip)启用了“版本控制”。