【问题标题】:XSD Namespace backward compatibilityXSD 命名空间向后兼容
【发布时间】:2010-07-22 19:29:06
【问题描述】:
我们正在努力解决一些命名空间兼容性问题。目前我们将一些外部数据作为 XML 文件存储在我们的数据库中,命名空间为 xmlns="http://xyz.com/prodresponse/v2",最近供应商已将命名空间更改为 xmlns ="http://xyz.com/prodresponse/v4".
问题是我们需要无缝处理新旧命名空间数据,以实现内部应用程序的目的。我现在只看到一个选项:
- 运行 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),您只需在每次发布新架构时添加一个转换。
- 仅针对最后一个架构版本执行数据处理。
- 如果数据已更改,请应用反向转换以恢复文件的原始版本。
您可以找到论文here 或here。