チュートリアルおよびサンプル

一般一致と ID マッピング・スキーム:
比較結果を向上させる ID マッピング・スキームの作成方法

右側と左側で若干異なる 2 つの XML ファイルのサンプルを検討します。 エレメント extension-point が属性 id によって一意的に識別されると想定します。 テキストの相違点は、太字で示されています。

<?xml version="1.0" encoding="UTF-8"?>

<plugin
   name="%Plugin.name"
   id="org.eclipse.ui"
   version="1.0"
   provider-name="Object Technology International, Inc."
   class="org.eclipse.ui.internal.WorkbenchPlugin">

<extension-point name="%ExtPoint.editorMenus " id="editorActions"/>
<extension-point name="%ExtPoint.popupMenus " id="popupMenus"/>
<extension-point name="%ExtPoint.importWizards" id="importWizards"/>

</plugin>

  

<?xml version="1.0" encoding="UTF-8"?>

<plugin
   name="%Plugin.name"
   id="org.eclipse.ui"
   version="1.0"
   provider-name="Object Technology International, Inc."
   class="org.eclipse.ui.internal.WorkbenchPlugin">

<extension-point name="%ExtPoint.editorMenus " id="editorActions"/>
<extension-point name="%ExtPoint.popupMenus " id="popupMenus"/>
<extension-point name="%ExtPoint.exportWizards" id="exportWizards"/>

</plugin>


エレメントの順序は無視されるものとします。 2 つの文書の構造的な相違点は、左側の拡張ポイント・エレメントは id="importWizards" となっていますが、右側では id="exportWizards" を持つ新規拡張ポイントになっている点です。 Unordered と呼ばれる汎用マッチング・アルゴリズムを使用すると、XML エレメントの文書内の表示順が無視されるため、以下の相違のツリーを取得します。

汎用マッチング・アルゴリズムを使用した相違ツリー

最初の 2 つの拡張ポイント・エレメントは同一であるため、一致し、相違ツリーに表示されません。両方の文書の 3 つ目の拡張ポイント・エレメントは、同じエレメント名を持ち、一致しています。 相違ツリーには、左側の 3 つ目の拡張ポイント・エレメントと右側の 3 つ目の拡張ポイント・エレメントの相違点が示されます。 この相違点とは、属性 id および name の値です。
ただし、表示する必要があるのは、この相違点ではありません。 左側の拡張ポイント・エレメントが除去され、右側に新規拡張ポイント・エレメントが追加されたことが、相違ツリーに示される必要があります。
そのために、新規 ID マッピング・スキームを作成します。新規 ID マッピング・スキームは、ツールバーの適切なボタンを使用して作成します。

新規 ID マッピング・スキームの作成

ID マッピング・スキーム MyPlugin を呼び出すと想定します。 ツールバーのドロップダウン・リストから ID マッピング・スキーム MyPlugin を選択します。

MyPlugin ID マップ・スキームの選択

選択した ID マッピング・スキームを以下のマッピングに追加します。

設定ページからのマッピングの新規作成     コンテキスト・メニューを使用したマッピングの新規作成

これは、設定ページ (左) から実行するか、または構造ビューのコンテキスト・メニュー (右) から実行します。
相違ツリーは、以下のようになります。
(構造ビューを最新表示するには、ツールバーのドロップダウン・リストで ビューの更新のボタン ボタンをクリックします。)

MyPlugin ID マッピング・スキームを使用した相違ツリー

この比較結果が、必要としたもので、ID マッピング・スキームの作成によって得ることができた結果です。

XML 比較プラグインには、すでにプラグイン・ファイルの ID マッピング・スキームがあります。この ID マッピング・スキームは、特定のプラグイン・ファイル用にカスタマイズすることができます。

警告:
ID マッピングを作成する場合は、ID がユニークであることが前提となります。 つまり、名前とパスが同じで同じ ID を持つ XML エレメントはありません。 ID がユニークでない場合、ID マッピング・スキームは適切な相違ツリーに送信されません。
同じ ID が複数ある場合、そのうちの 1 つは汎用アルゴリズムに依存している必要があります。

また、ID マッピング・スキーマが使用され、ID マッピングが指定されていないエレメントが ある場合は、Unordered 比較メソッドが使用されます。エレメントは、文書内に表示される順序ではなく、類似性によって一致します。 エレメントの子が表示順に比較される必要があることを指定するには、順序付けエントリーに関して、次のセクションを参照してください。

順序付けエントリーの追加

順序付けエントリーを使用すると、xml エレメント (パスによって識別) の直接の子 (属性以外) が、デフォルトの Unordered メソッドではなく、順番に比較される必要があることを指定できます。
例として、以下の 2 つの若干異なる ANT ファイルを検討します。

<?xml version="1.0" encoding="UTF-8"?>

<project name="org.junit.wizards" default="export" basedir="..">
   <target name="export" depends="build">
      <mkdir dir="${destdir}" />
      <delete dir="${dest}" />
      <mkdir dir="${dest}" />
      <jar
         jarfile="${dest}/JUnitWizard.jar"
         basedir="bin"
      />
</project>

  

<?xml version="1.0" encoding="UTF-8"?>

<project name="org.junit.wizards" default="export" basedir="..">
   <target name="export" depends="build">
      <mkdir dir="${destdir}" />
      <mkdir dir="${dest}"/>
      <delete dir="${dest}"/>
      <jar
         jarfile="${dest}/JUnitWizard.jar"
         basedir="bin"
      />
      <copy file="plugin.xml" todir="${dest}"/>
</project>


2 つの文書の相違点は、太字で示されています。 2 つのエレメントが交換され (<mkdir dir="${dest}"/><delete dir="${dest}"/>)、新規エレメント (<copy .../>) がターゲット・エレメントに追加されています。
不規則な比較を実行すると、相違ツリーは以下のようになります。

不規則なマッチングを使用した相違ツリー

エレメントの順序が無視されるため、2 つのエレメントが交換されたことは示されません。
ただし、ANT の観点から、ターゲット内のエレメントの順序は重要であるため、2 つの文書の振る舞いは大きく異なります。 このため、ターゲットの順序付けエントリー を作成して、比較エンジンにターゲットの子を順番に比較するよう指示します。
この場合は、最初に新規 ID マッピング・スキームを作成します。 新規 ID マッピング・スキームは、ツールバーの適切なボタンを使用して作成します。

新規 ID マッピング・スキームの作成

ID マッピング・スキーム MyANT を呼び出すと想定します。
ツールバーのドロップダウン・リストから ID マッピング・スキーム MyANT を選択し、以下の順序付けエントリーに追加します。

設定ページからの新規順序付けエントリーの作成     コンテキスト・メニューを使用した新規順序付けエントリーの作成

これは、設定ページ (左) から実行するか、または構造ビューのコンテキスト・メニュー (右) から実行します。
相違ツリーは、以下のようになります。
(構造ビューを最新表示するには、ツールバーのドロップダウン・リストで ビューの更新のボタン ボタンをクリックします。)

MyANT ID マッピング・スキームを使用した相違ツリー

この比較結果が、必要としていたもので、順序付けエントリーの作成によって得ることができた結果です。

また、ID マッピング (前のセクションを参照) を使用して、順序付けの子を一意的に識別することもできます。特に、変更が多い場合は、これにより比較結果が向上します。

XML 比較プラグインには、すでに ANT ファイルの ID マッピング・スキームがあります。この ID マッピング・スキームは、特定の ANT ファイル用にカスタマイズすることができます。