Eclipse プラットフォーム XML 比較

XML 比較プラグインを使用すると、2 つの XML 文書の構造比較を実行できます。構造比較は、追加または除去された XML 要素を示し、変更された XML 要素に関して、属性またはテキスト本文の相違点を示す相違ツリーを戻します。

プラグインのインストール

プラグインの使用

プラグインは、拡張子 .xml のファイルを比較するときに自動的に使用されます。
デフォルトでは、XML 比較は 不規則 (Unordered) 比較メソッドを使用します。この比較メソッドでは、文書内の XML 要素の表示順序は無視され、最も似ている要素が一致するように要素のマッチングが行われます。また、XML 要素を文書内の表示順に比較する順序付け (Ordered) 比較メソッドもあります。通常、この比較メソッドは、あまり使用されません。
比較メソッドは、構造ビューのツールバーのドロップダウン・リストから変更します。

XML 文書に子要素の属性またはテキストによって一意的に識別される要素が含まれている場合は、このタイプの XML 文書用の ID マッピング・スキームを作成することをお勧めします。

プラグインの使用法についての詳細は、『チュートリアルおよびサンプル』を参照してください。

ID マッピング・スキーム

ID マッピング・スキームは、XML 要素に対して、この要素を一意的に識別する子要素の属性またはテキストを指定します。これにより、比較プロセスにおいて、適切な要素が一致するため、相互に比較することができます。XML 要素に対して ID マッピングが指定されていない場合は、汎用マッチング・アルゴリズムが使用されます。ただし、この汎用マッチング・アルゴリズムは、常に必要な結果を戻すわけではありません。これは、汎用マッチング・アルゴリズムが 2 つの構文解析ツリーのノードの一致を検索して、相違の最小化を比較するためです。これにより、2 つの XML 要素は構造が似ているため一致しますが、2 つの全く異なるエンティティーの情報が表されることがあります。

順序付けエントリー

デフォルトの不規則 (Unordered) 比較 (ID マッピングと共にまたはなしで) を使用する際に、特定の要素の子を通常の不規則メソッドによる比較ではなく順番に比較するように指定する必要がある場合があります。例えば、ANT ファイルを比較する場合、ターゲット要素の子の表示順序が重要となります。
このような場合は、順序付けエントリー を作成します。順序付けエントリーは、パスで識別される XML 要素の直接の子が順番に比較されることを指定します (ただし、属性は不規則に比較されます)。これらの子の子は、特に指定されない限り、引き続き不規則に比較されます。

ID マッピング・スキームと順序付けエントリーの定義

ID マッピング・スキームを作成するには、以下の 3 つの方法があります。
  1. 拡張ポイント idMapping を拡張する
  2. XML 比較設定ページを使用する
  3. ツールバーの「ID マップ・スキームの新規作成 (Create new Id Map Scheme)」ボタンおよびコンテキスト・メニューを使用する
メソッド 1 は、いわゆる内部マッピング・スキームを作成します。内部 ID マッピング・スキームは、実行時には編集できません。ただし、設定ページの「コピーの編集 (Edit Copy)」ボタンを使用すると、内部 ID マッピング・スキームの編集可能コピーを作成できます。
メソッド 2 および 3 は、いわゆるユーザー・マッピング・スキームを作成します。ユーザー・マッピング・スキームは、実行時にユーザーによって作成され、設定ページでいつでも変更できます。

内部およびユーザー・マッピング・スキームは、ファイル拡張子に関連付けることができます。このため、このファイル拡張子を持つ 2 つの XML ファイルを比較すると、この拡張子を持つ特定の ID マッピング・スキームが自動的に使用されます。

特定の XML 要素の ID マッピングを作成または編集する場合は、4 つの項目を指定する必要があります (『』を参照)。

  1. 要素名。
  2. 要素・パス。XML 文書のルートから要素の親までの要素のパスです。
  3. 要素を識別する ID の名前。
  4. ポイント 3 の ID 名が要素の属性の名前または子 (この場合、この子要素のテキストが ID として使用されます) の 1 つの名前のいずれであるか。


拡張ポイント

XML 比較プラグインでは、使用可能な拡張ポイントは 1 つのみです。この拡張ポイントを使用して、内部 ID マッピング・スキームが作成されます。