jjzjj

XML 架构迁移

coder 2024-06-26 原文

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

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

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

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

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

最佳答案

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

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

但是,如果您对 XSD 进行了重大的结构更改,则自动差异将基本上无用。

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

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

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

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

不,自动架构迁移的可能性几乎为零。

相反,应针对可迁移性进行设计。

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

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

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

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

关于XML 架构迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1230601/

有关XML 架构迁移的更多相关文章

  1. ruby-on-rails - Ruby on Rails 迁移,将表更改为 MyISAM - 2

    如何正确创建Rails迁移,以便将表更改为MySQL中的MyISAM?目前是InnoDB。运行原始执行语句会更改表,但它不会更新db/schema.rb,因此当在测试环境中重新创建表时,它会返回到InnoDB并且我的全文搜索失败。我如何着手更改/添加迁移,以便将现有表修改为MyISAM并更新schema.rb,以便我的数据库和相应的测试数据库得到相应更新? 最佳答案 我没有找到执行此操作的好方法。您可以像有人建议的那样更改您的schema.rb,然后运行:rakedb:schema:load,但是,这将覆盖您的数据。我的做法是(假设

  2. ruby - 使用 Vim Rails,您可以创建一个新的迁移文件并一次性打开它吗? - 2

    使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta

  3. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  4. ruby-on-rails - 在现有数据库上进行 Rails 迁移 - 2

    我正在创建一个新的Rails3.1应用程序。我希望这个新应用程序重用现有数据库(由以前的Rails2应用程序创建)。我创建了新的应用程序定义模型,它重用了数据库中的一些现有数据。在开发和测试阶段,一切正常,因为它在干净的表数据库上运行,但是当尝试部署到生产环境时,我收到如下消息:PGError:ERROR:column"email"ofrelation"users"alreadyexists***[err::localhost]:ALTERTABLE"users"ADDCOLUMN"email"charactervarying(255)DEFAULT''NOTNULL但是我在迁移中有这

  5. ruby - Ruby 和 Ruby on Rails 中的三层架构 - 2

    我是一名决定学习Ruby和RubyonRails的ASP.NETMVC开发人员。我已经有所了解并在RoR上创建了一个网站。在ASP.NETMVC上开发,我一直使用三层架构:数据层、业务层和UI(或表示)层。尝试在RubyonRails应用程序中使用这种方法,我发现没有关于它的信息(或者也许我只是找不到它?)。也许有人可以建议我如何在RubyonRails上创建或使用三层架构?附言我使用ruby​​1.9.3和RubyonRails3.2.3。 最佳答案 我建议在制作RoR应用程序时遵循RubyonRails(RoR)风格。Rails

  6. ruby-on-rails - Rails 迁移中的 PostgreSQL 点类型 - 2

    我想使用PostgreSQL中的point类型。我已经完成了:railsgmodelTestpoint:point最终的迁移是:classCreateTests当我运行时:rakedb:migrate结果是:==CreateTests:migrating====================================================--create_table(:tests)rakeaborted!Anerrorhasoccurred,thisandalllatermigrationscanceled:undefinedmethod`point'for#/hom

  7. ruby-on-rails - 如何在 Rails 3 中禁用 XML 解析 - 2

    我想禁用HTTP参数的自动XML解析。但我发现命令仅适用于Rails2.x,它们都不适用于3.0:config.action_controller.param_parsers.deleteMime::XML(application.rb)ActionController::Base.param_parsers.deleteMime::XMLRails3.0中的等价物是什么? 最佳答案 根据CVE-2013-0156的最新安全公告你可以将它用于Rails3.0。3.1和3.2ActionDispatch::ParamsParser::

  8. ruby - 如何使用 Nokogiri::XML::Builder 生成动态标签? - 2

    我正在遍历数组中的一组标签名称,我想使用构建器打印每个标签名称,而不是求助于“我认为:builder=Nokogiri::XML::Builder.newdo|xml|fortagintagsxml.tag!tag,somevalendend会这样做,但它只是创建名称为“tag”的标签,并将标签变量作为元素的文本值。有人可以帮忙吗?这个看起来应该比较简单,我刚刚在搜索引擎上找不到答案。我可能没有以正确的方式提问。 最佳答案 尝试以下操作。如果我没记错的话,我添加了一个根节点,因为Nokogiri需要一个。builder=Nokogi

  9. ruby - 如何让 Nokogiri 解析并返回 XML 文档? - 2

    这是一些奇怪的例子:#!/usr/bin/rubyrequire'rubygems'require'open-uri'require'nokogiri'print"withoutread:",Nokogiri(open('http://weblog.rubyonrails.org/')).class,"\n"print"withread:",Nokogiri(open('http://weblog.rubyonrails.org/').read).class,"\n"运行此返回:withoutread:Nokogiri::XML::Documentwithread:Nokogiri::

  10. ruby-on-rails - Rails 3 : belongs_to, has_one 和迁移 - 2

    我是Rails的新手,我是从Django背景开始接触它的。我已经接受了这样一个事实,即模型和数据库模式在Rails和在线Django中是分开的。但是,我仍在努力处理迁移。我的问题很简单-如何使用迁移向模型添加关系?例如,我现在有Artist和Song作为ActiveRecord::Base子类的空模型,没有任何关系。我需要开始做这件事:classArtist但是我如何使用railsgmigrate更改架构以反射(reflect)这一点?我正在使用Rails3.1.3。 最佳答案 现在,在Rails4中,您可以:classAddPro

随机推荐