【问题标题】:XML Schema MigrationXML 模式迁移
【发布时间】:2010-11-16 20:47:53
【问题描述】:

我正在处理一个需要以 XML 格式保存数据的项目。问题是,随着时间的推移,我们预计数据的格式/架构会发生变化。我们想要做的是生成脚本来跨不同的模式版本迁移我们的数据。我们将产品分发给成千上万的客户,因此我们需要能够在客户站点上运行/应用这些脚本(因此我们不能只手动进行转换)。我认为我们正在寻找的是某种 XML 数据迁移工具。在我看来,理想的工具可以:

  1. 对两个模式进行“XML diff”以识别添加/删除/更改的节点。

  2. 允许我们指定转换函数。因此,例如,我们可能会在模式中添加一个新元素,它是旧元素的函数。 (例如,一个新元素 C,其中 C = A+B,A + B 是旧元素)。

所以我想我正在寻找一种 XML 差异和补丁工具,它也可以应用转换功能。我正在寻找的一个工具是 Altova's MapForce 。我确信这里的其他人不得不处理 XML 数据格式迁移。你是怎么处理的?

编辑: 澄清一点。我计划做的“差异”是在模式或 .xsd 文件上。将对遵循给定模式的特定数据集进行实际更改。这些数据集将是 .xml 文件。因此,它是模式的“差异”,可帮助确定需要对数据集进行哪些更改才能将它们从一个方案迁移到另一个方案。

【问题讨论】:

  • 您是否搜索过“XML diff and patch tool”?
  • 是的,我一直在阅读有关许多 XML 差异和补丁工具的信息,但它们都没有像我上面描述的那样。

标签: xml xsd migration transformation


【解决方案1】:

“对两个架构进行“XML diff”以识别添加/删除/更改的节点。”

XSD 是文本,所以这很简单。

但是,如果您对 XSD 进行重大的结构更改,那么自动 diff 将在很大程度上无用。

如果您对 XSD 进行小的、美观的更改,这可能会有所帮助。

“允许我们指定转换函数...”

那不是很好。可悲的是,发生一些微不足道的变化(“新元素 C,其中 C = A+B,A + B 是旧元素”)的可能性几乎为零。为什么要做这种微不足道的改变?

不,当您“......将我们的产品分发给成千上万的客户”时,您不会进行微不足道的外观更改。您保存更改,以便它们真正具有史诗般的效果,并“创造重大价值”。

不,自动架构迁移的几率几乎为零。

相反,设计可迁移性。

  1. 确保版本号在您的 XSD 路径中突出显示。理想情况下,在 XSD 名称本身中。

  2. 每个 XSD 更改都是一个严重的治理问题 (SGI™)。每个人都参与。然后您就可以立即编写迁移脚本。不是之后。不是用工具。但作为 XSD 更改的一部分。

    架构不会自发改变。有人更改它们是有原因的。有人可以指定更改,以便其他人可以编写(或更新)迁移脚本。

这太严重了,不能相信“自动化”工具。这需要真正的人的真正大脑真正专注于这一点,就好像他们的工作依赖于它一样。

【讨论】:

  • 顺便说一句:XSD 是文本,但文本差异会发现一些非显着差异(例如空格、选择/所有顺序)。最好说“XSD 是 XML,所以使用 XML diff”。但是,这在实践中可能不是问题,因为它们是同一架构的不同版本(希望唯一的变化是显着的)。
  • S. Lott 在这里提出了一些很好的观点,但自动化工具可以提供帮助。我进行此类转换的经验来自数据库架构更改。我同意应该认真对待做出改变。在数据库世界中,这通常归结为: 1. 添加/删除/修改列或表。 2. 偶尔写一个SQL过程,把旧数据映射到新数据。第 1 步可以通过数据库差异自动化 - 工具可以做到这一点。第 2 步需要编程。我正在寻找一个 XML 工具来帮助完成第 1 步,它还可以根据需要进行更复杂的转换(例如 XSLT)。
  • @Corwin Joy:不要浪费时间在自动添加/更改/删除列上。在实践中它不会经常发生。架构更改是一项严肃的业务,需要认真的手动流程来理解更改背后的含义
【解决方案2】:

正如@S.Lott 所说,自动化转换的能力不太可能。但是,XSLT 是一个出色的工具,用于正式定义如何将 XML 从一种格式转换为另一种格式。它不能自动生成(据我所知),但这样做很值得。

【讨论】:

    【解决方案3】:

    我最终编写了一个工具来执行此操作,并将结果作为 SourceForge 项目发布。

    什么: 此工具有助于创建脚本以将 XML 数据从 XML 模式的一个版本迁移到同一模式的更高版本。该工具通过区分 XSD 文件并发出 XSLT 2.0 来自动迁移 XML 数据来创建这些脚本。这适用于简单的数据更改,并且可以用作更复杂数据更改的“起始”代码。

    地点: https://sourceforge.net/projects/xsdevolver/

    背景: 我工作的公司销售一个收缩包装的应用程序,我们根据指定的 XSD 模式以 XML 格式保存工作簿。随着时间的推移,我们预计此模式的格式会发生变化。我们想要一种方法来帮助我们区分模式版本,因为它们随着时间的推移而演变,并生成初始 XSLT 以将数据从旧版本的模式迁移到新版本的模式。

    用法:

    XMLSchemaEvolver SchemaVersion1.xsd SchemaVersion2.xsd

    输出:

    1. 显示哪些元素已更改的架构差异

    2. XSLT 将 XML 数据从 SchemaVersion1 转换为 SchemaVersion2

    它是如何工作的?

    基本思路是这样的:

    1) 对两个 xml 架构 (xsd) 文件进行比较。

    2) 每个更改都分类为 INSERT、DELETE、MOVE 或 RENAME 操作。

    3) 对于这些操作中的每一个,发出简单的 XSLT 以执行所需的数据更改。

    4) 这些数据更改操作是根据 Jesper Tverskov link text 建议的一组标准 XSLT 操作建模的。我们的代码发出的转换的完整列表可以在文档文件夹中找到 XSLT Transformations.txt。

    【讨论】:

      猜你喜欢
      • 2018-07-19
      • 1970-01-01
      • 2012-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多