5

データを XML 形式で保存する必要があるプロジェクトに取り組んでいます。問題は、時間の経過とともに、データの形式/スキーマが変更されることを期待していることです。私たちができるようにしたいのは、異なるスキーマ バージョン間でデータを移行するためのスクリプトを作成することです。私たちは何千もの顧客に製品を配布しているため、顧客のサイトでこれらのスクリプトを実行/適用できる必要があります (したがって、手動で変換を行うことはできません)。私たちが探しているのは、ある種の XML データ移行ツールだと思います。私の考えでは、理想的なツールは次のことができます。

  1. 2 つのスキーマの「XML diff」を実行して、追加/削除/変更されたノードを識別します。

  2. 変換関数を指定できるようにします。したがって、たとえば、古い要素の関数である新しい要素をスキーマに追加する場合があります。(たとえば、C = A+B、A + B が古い要素である新しい要素 C)。

そのため、変換機能も適用できる一種の XML 差分およびパッチ ツールを探していると思います。このために私が検討しているツールの 1 つは、Altova の MapForceです。ここにいる他の人たちは、XML データ形式の移行に対処しなければならなかったに違いありません。どのように対処しましたか?

編集:明確化のポイント。私が計画している「差分」は、スキーマまたは .xsd ファイルに関するものです。実際の変更は、特定のスキーマに従う特定のデータ セットに対して行われます。これらのデータ セットは .xml ファイルになります。したがって、スキーマの「差分」は、データセットをあるスキームから別のスキームに移行するためにデータセットにどのような変更を加える必要があるかを理解するのに役立ちます。

4

3 に答える 3

5

「2 つのスキーマの「XML diff」を実行して、追加/削除/変更されたノードを識別します。」

XSD はテキストなので、これは些細なことです。

ただし、XSD に劇的な構造変更を加えると、自動差分はほとんど役に立たなくなります。

XSD に小さな表面的な変更を加えると、これが役立つ場合があります。

「変換関数を指定させてください...」

それはいいですね。悲しいことに、些細な変更 (「C = A+B、A + B が古い要素である新しい要素 C」) が発生する可能性はほとんどありません。なぜそんな些細な変更を加えるのですか?

いいえ、「私たちの製品を何千もの顧客に配布する」場合、些細な外見上の変更は行いません。変更を保存して、真に叙事詩的なものにし、「大きな価値を生み出す」ようにします。

いいえ、スキーマの自動移行が行われる可能性はほぼゼロです。

代わりに、移行可能性を考慮して設計してください。

  1. バージョン番号が XSD パスで目立つようにしてください。理想的には、XSD 名自体で。

  2. XSD の各変更は、重大なガバナンスの問題 (SGI™) です。全員参加です。そして、その場で移行スクリプトを作成します。その後ではありません。ツールではありません。ただし、XSD 変更の一部として。

    スキーマは自発的に変更されません。誰かが理由でそれらを変更します。他の誰かが移行スクリプトを作成 (または更新) できるように、誰かが変更を指定できること。

これは、「自動化された」ツールを信頼するには、あまりにも深刻すぎます。これには、あたかも自分の仕事がそれに依存しているかのように、これに本当に集中している実際の人々の本当の頭脳が必要です.

于 2009-08-05T00:52:22.297 に答える
3

私は最終的にこれを行うためのツールを作成し、その結果を SourceForge プロジェクトとしてリリースしました。

内容: このツールは、あるバージョンの XML スキーマから同じスキーマの新しいバージョンに XML データを移行するためのスクリプトを作成するのに役立ちます。このツールは、XSD ファイルを差分し、XSLT 2.0 を発行して XML データを自動的に移行することにより、これらのスクリプトを作成します。これは、単純なデータ変更にはうまく機能し、より複雑なデータ変更の「スターター」コードとして使用できます。

場所: https://sourceforge.net/projects/xsdevolver/

背景: 私が働いている会社は、指定された XSD スキーマに従ってワークブックを XML 形式で保存するシュリンク ラップ アプリケーションを販売しています。時間の経過とともに、このスキーマの形式が変更されることが予想されます。時間の経過とともに進化するスキーマ バージョンを比較し、古いバージョンのスキーマから新しいバージョンのスキーマにデータを移行するための初期 XSLT を生成するのに役立つ方法が必要でした。

使用法:

XMLSchemaEvolver SchemaVersion1.xsd SchemaVersion2.xsd

出力:

  1. どの要素が変更されたかを示すスキーマ差分

  2. XML データを SchemaVersion1 から SchemaVersion2 に変換する XSLT

それはどのように機能しますか?

基本的な考え方は次のとおりです。

1) 2 つの xml スキーマ (xsd) ファイルの差分を作成します。

2) 各変更は、INSERT、DELETE、MOVE、または RENAME 操作として分類されます。

3) これらの操作ごとに、単純な XSLT を発行して、目的のデータ変更を実行します。

4) これらのデータ変更操作は、Jesper Tverskovリンク テキストで提案されている一連の標準 XSLT 操作をモデルにしています。コードによって生成された変換の完全なリストは、ドキュメント フォルダーの XSLT Transformations.txt にあります。

于 2010-05-31T02:08:15.230 に答える
0

As @S.Lott says, the ability to automate transformations is unlikely. However, XSLT is a fantastic tool for formally defining how to transform XML from one format to another. It can't be automatically generated (as far as I know), but it's well worth doing things this way.

于 2009-08-05T01:12:19.463 に答える