代码之家  ›  专栏  ›  技术社区  ›  Regent

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

  •  64
  • Regent  · 技术社区  · 15 年前

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

    目前我有两种情况:

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

    2. 架构已升级,应视为首选,但也应支持旧的架构。

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

    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"
    

    你知道更好的方法吗?

    2 回复  |  直到 12 年前
        1
  •  83
  •   xcut    15 年前

    这是一个非常困难的话题,甚至都不好笑,我花了很多年时间为它提供咨询支持。

    有很多 best practices 但他们中的大多数并不适用于所有情况。例如,许多人主张使用“xsd:any”来允许扩展,如果开发人员负责维护模式,将其转换为转储,那么这只是一个灾难的秘诀。

    如果您开始学习,以下是一些提示:

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

    Dood运气好!

        2
  •  6
  •   Christian    12 年前

    http://www.xml.com/pub/a/2004/07/21/design.html 提供了良好的指导原则和XML模式1.1通过条件包含实现“版本控制”( http://www.w3.org/TR/xmlschema11-1/#cip )