【问题标题】:XSD Namespace backward compatibilityXSD 命名空间向后兼容
【发布时间】:2010-07-22 19:29:06
【问题描述】:

我们正在努力解决一些命名空间兼容性问题。目前我们将一些外部数据作为 XML 文件存储在我们的数据库中,命名空间为 xmlns="http://xyz.com/prodresponse/v2",最近供应商已将命名空间更改为 xmlns ="http://xyz.com/prodresponse/v4".

问题是我们需要无缝处理新旧命名空间数据,以实现内部应用程序的目的。我现在只看到一个选项:

  1. 运行 SQL 脚本将现有 xml 数据从版本 v2 转换为 v4。

还有其他选择吗?

在此先感谢

【问题讨论】:

    标签: xsd namespaces compatibility


    【解决方案1】:

    命名空间改变的原因可能是格式改变了。因此,名称空间对您来说是非常有价值的信息,因为它准确地告诉您期望和不期望哪些元素(当与相应的 XSD 模式结合时)。如果您将命名空间更新为新版本,那么根据架构,旧的 XML 数据很可能是不正确的。

    所以不,我认为您不应该更改现有的 XML 数据。保留它,并确保您的解析器知道如何处理这两个命名空间。

    【讨论】:

      【解决方案2】:

      我不明白您为什么要运行 SQL 脚本来转换 XML 文件...XML 转换 (XSLT) 在这方面做得很好!

      FunkyPeople 写了一篇关于在 Java 中处理版本化 XML 文件的有趣文章。他们提出了几种方法,并解决了这个:

      • 应用连续的 XSLT 样式表将输入 XML 转换为最后一个模式版本。为什么要进行多次转换?因为如果您只应用一个转换,当更新的模式版本出现时,您必须维护它。并且您必须维护所有转换(v1 到 vN、v2 到 vN、v3到 vN, ...)。如果您逐一应用增量转换(v1 到 v2,然后 v2 到 v3,然后 v3 到 v4),您只需在每次发布新架构时添加一个转换。
      • 仅针对最后一个架构版本执行数据处理。
      • 如果数据已更改,请应用反向转换以恢复文件的原始版本。

      您可以找到论文herehere

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-23
        • 1970-01-01
        • 2022-01-01
        • 2013-07-17
        • 1970-01-01
        • 2012-06-01
        相关资源
        最近更新 更多