Výukový program a příklady

Obecné porovnání vs. Schémata mapování ID:
Jak vytvořit schéma mapování ID, a tak zlepšit výsledky hledání

Vezměme si ukázkový soubor XML ve dvou lehce odlišných verzích, vlevo a vpravo. Předpokládejme, že je prvek extension-point jednoznačně identifikován atributem id. Rozdíly jsou v textu zvýrazněny tučně.

<?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>


Předpokládejme, že pořadí prvků má být ignorováno. Strukturální rozdíly mezi těmito dvěma dokumenty spočívají v tom, že je prvek extension-point vlevo s id="importWizards" nahrazen vpravo novým prvkem extension-point s id="exportWizards". Pokud použijeme algoritmus obecného porovnání zvaný Unordered, který ignoruje pořadí, v němž se prvky XML objevují v dokumentu, dostaneme následující strom rozdílů.

Strom rozdílů při použití algoritmu obecného párování

První dva prvky extension-point jsou stejné a protože odpovídají svým protějškům, nejsou ve stromu rozdílů zobrazeny. Na obou stranách ovšem zůstává třetí prvek extension-point, který má stejný název, a proto je také přiřazen svému protějšku. Strom rozdílů tedy zobrazuje rozdíly mezi třetím prvkem extension-point vlevo a třetím prvkem extension-point vpravo. Tyto rozdíly spočívají v hodnotách atributů id a name.
To ovšem není to, co bychom chtěli vidět. My bychom chtěli, aby nám strom rozdílů ukázal, že byl z levé strany prvek extension-point odebrán a na pravé straně byl přidán nový prvek extension-point.
Abychom toho dosáhli, vytvoříme nové schéma mapování ID. To lze udělat pomocí příslušného tlačítka na panelu nástrojů.

Vytváření nového schématu mapování ID

Předpokládejme, že voláme schéma mapování ID MyPlugin. Teď vybereme z rozevíracího seznamu v panelu nástrojů schéma mapování ID MyPlugin

Vybrat schéma mapování ID MyPlugin

a přidáme k němu následující mapování:

Vytváření nového mapování ze stránky předvoleb     Vytváření nového mapování pomocí kontextové nabídky

To je možné ze stránky předvoleb (vlevo) nebo z kontextové nabídky v pohledu členění (vpravo).
Strom rozdílů teď bude vypadat takto:
(Chcete-li aktualizovat pohled struktury, klepněte na tlačítko Tlačítko pro aktualizaci pohledu rozevíracího seznamu v panelu nástrojů.)

Strom rozdílů při použití schématu mapování ID MyPlugin

Zde je výsledek porovnání, který jsme chtěli a jehož jsme dosáhli vytvořením schématu mapování ID.

Plug-in XML Compare je dodáván se schématem mapování ID pro soubory modulu plug-in, které lze upravit pro konkrétní soubory modulu plug-in.

Upozornění:
Pokud je vytvořeno mapování ID, předpokládá se, že je ID jedinečné, tj. že neexistují dva prvky XML se stejným názvem a cestou, které mají stejné ID. Pokud tomu tak není, nemůže dané schéma mapování vytvořit smysluplný strom rozdílů.
Pokud se ID může vyskytnout několikrát, je lepší spolehnout se na obecný algoritmus.

Navíc, když je použito schéma mapování ID a existují prvky, které nemají určené mapování ID, použije se srovnávací metoda Unordered, tj. prvky se porovnávají podle podobnosti a ne podle pořadí, v němž se vyskytují v dokumentu. Chcete-li určit, že se podřízené prvky určitého prvku mají porovnávat v pořadí, v němž se vyskytují. Prohlédněte si následující oddíl o položkách Ordered.

Přidávání položek Ordered

Položky Ordered se používají pro určení, že mají být prvky (s výjimkou atributů) přímo podřízené prvku XML - identifikovaného cestou - porovnávány v určitém pořadí, namísto výchozí metodou unordered.
Jako příklad uvažme následující soubor ANT ve dvou lehce odlišných verzích:

<?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>


Rozdíly mezi těmito dvěma dokumenty jsou zvýrazněny tučně. Dva prvky byly zaměněny (<mkdir dir="${dest}"/> a <delete dir="${dest}"/>) a k prvku target byl připojen nový prvek (<copy .../>).
Výsledkem neřazeného porovnání bude následující strom rozdílů:

Strom rozdílů při použití neřazeného porovnání

Fakt, že byly dva prvky zaměněny, se neprojeví, protože pořadí prvků je ignorováno.
Z pohledu ANT však tyto dva dokumenty způsobují značně odlišné chování, protože pořadí prvků uvnitř prvku target je důležité. Proto chceme vytvořit pro prvek target položku ordered, která by porovnávacímu mechanizmu sdělila, že má prvky přímo podřízené prvku target porovnávat v určitém pořadí.
Toho dosáhneme tak, že nejprve vytvoříme nové schéma mapování ID. To lze provést pomocí příslušného tlačítka v panelu nástrojů.

Vytváření nového schématu mapování ID

Předpokládejme, že voláme schéma mapování ID MyANT.
Teď vybereme z rozevíracího seznamu v panelu nástrojů schéma mapování ID MyANT a přidáme k němu následující položku Ordered:

Vytváření nové položky ordered ze stránky předvoleb     Vytváření nové položky ordered pomocí kontextové nabídky

To je možné ze stránky předvoleb (vlevo) nebo z kontextové nabídky v pohledu členění (vpravo).
Strom rozdílů teď bude vypadat takto:
(Chcete-li aktualizovat pohled struktury, klepněte na tlačítko Tlačítko pro aktualizaci pohledu rozevíracího seznamu v panelu nástrojů.)

Strom rozdílů při použití schématu mapování MyANT

Toto je výsledek porovnání, který jsme chtěli a jehož jsme dosáhli vytvořením položky Ordered.

Kromě toho lze mapování ID (viz předchozí oddíl) využít k jednoznačné identifikaci řazených podřízených prvků. Zejména když došlo k mnoha změnám, zlepší to výsledky hledání.

Plug-in XML Compare je dodáván se schématem mapování ID pro soubory ANT, které lze upravit pro konkrétní soubory ANT.