Ismertető és példák

Általános egyezések vagy azonosító-leképezési sémák:
Hogyan hozható létre egy azonosító-leképezési séma az összehasonlítási eredmények javítására?

Vegyünk egy példa XML-fájlt két alig eltérő változatban, ezek a bal és a jobb változat. Tételezzük fel, hogy az extension-point elemet egyedileg azonosítja az id attribútum. A szöveges eltérések félkövérrel szedve láthatók.

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


Tegyük fel, hogy az elemek sorrendje figyelmen kívül hagyható. A két dokumentum közötti szerkezeti különbség abban áll, hogy a bal oldali extension-point elem (id="importWizards") helyett a jobb oldali extension-point le lett cserélve egy új értékre (id="exportWizards"). Az általános (rendezetlen nevű) algoritmust használva -- mivel ez nem figyeli, hogy az XML-elemek milyen sorrendben jelennek meg a dokumentumban -- a következő különbségfát kapjuk:

Különbségfa az általános egyeztetési algoritmus használatával

Az első két extension-point elem azonos, ezért egyeztetésre kerül és nem jelenik meg a különbségfában. Ezután marad a harmadik extension-point elem mindkét oldalon, amelyek, mivel azonos elemnévvel rendelkeznek, szintén egyeztetésre kerülnek. A különbségfa ezután megjeleníti a különbségeket a bal oldali harmadik extension-point elem és a jobb oldali harmadik extension-point elem között. Ezek a különbségek az id és a name attribútumok értékében találhatók.
Ez azonban nem az, amit látni szeretnénk. Mi azt szeretnénk látni, hogy a különbségfa megmutatja, hogy az egyik extension-point elem el lett távolítva a baloldalról, és egy új extension-point elem került hozzáadásra a jobb oldalon.
Ennek eléréséhez egy új azonosító-leképezési sémát kell készítenünk. Ezt az eszköztár megfelelő gombjának használatával tehetjük meg.

Új azonosító-leképezési séma készítése

Tételezzük fel, hogy meghívjuk a MyPlugin azonosító-leképezési sémát. Most kiválasztjuk a MyPlugin azonosító-leképezési sémát az eszköztár legördülő listájából,

A MyPlugin azonosító-leképezési séma kiválasztása

és hozzáadjuk a következő leképezéshez:

Új leképezés létrehozása a beállítási oldalról     Új leképezés létrehozása a helyzetérzékeny menü használatával

Ez végrehajtható a beállítási oldalról (balra), vagy a szerkezeti nézet helyzetérzékeny menüjéből (jobbra).
A különbségfa most a következőre változik:
(A szerkezeti nézet frissítéséhez kattintson a Nézetfrissítő gomb elemre az eszköztár legördülő listájában).

Különbségfa az általános egyeztetési algoritmus használatával

Ez az összehasonlítási eredmény, amire vágytunk, és amit egy azonosító-leképezési séma készítésével értünk el.

Az XML Compare bedolgozó egy bedolgozófájlokhoz használható azonosító-leképezési sémával érkezik, amely személyre szabható az adott bedolgozófájlokhoz.

Figyelmeztetés:
Ha létrejött egy azonosító-leképezés, ez azt feltételezi, hogy az azonosító egyedi, vagyis nincs két azonos nevű XML-elem és útvonal, amelyeknek ugyanaz lenne az azonosítója. Ha nem ez lenne az eset, az azonosító-leképezési séma lehet, hogy nem adna értelmes különbségfát.
Ha egy azonosító többször is megjelenhet, csak az általános algoritmusra lehet támaszkodni.

Ugyanígy, ha azonosító-leképezési sémát használunk, és vannak megadott azonosító-leképezés nélküli elemek is, akkor a rendezetlen összehasonlítási metódust kell használni, vagyis az elemeket hasonlóságuk, és nem a dokumentumban látható megjelenési sorrendjük alapján kell egyeztetni. Annak megadásához, hogy egy elem leszármazottját a megjelenés sorrendjében kell összehasonlítani, lásd a következő, rendezett bejegyzésekről szóló részt.

Rendezett bejegyzések hozzáadása

A rendezett bejegyzések annak megadására használhatók, hogy egy xml elem - elérési útjukkal azonosított - közvetlen leszármazottjait (kivéve az attribútumokat) rendezett módon kell-e összehasonlítani az alapértelmezett rendezetlen módszer helyett.
Példaként gondolja végig a következő ANT fájlt két kicsit eltérő változatban:

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


A két dokumentum között különbségek félkövérrel vannak szedve. Két elem fel van cserélve (<mkdir dir="${dest}"/> és <delete dir="${dest}"/>), valamint egy új elem (<copy .../>) került hozzáadásra a cél elemhez.
Egy rendezetlen összehasonlítás a következő különbségfát fogja eredményezni:

Különbségfa rendezetlen egyeztetés használatával

Az a tény, hogy két elem fel van cserélve, nem látszik, mivel az elemek sorrendje nem számít.
Az ANT szempontjából viszont a két dokumentum rendkívül eltérően viselkedik, mivel az elemek sorrendje fontos a cél elemen belül. Ezért aztán szeretnénk egy rendezett bejegyzést létrehozni a célhoz, hogy utasítsuk az összehasonlító alrendszert, hogy rendezett módon hasonlítsa össze a cél közvetlen leszármazottjait.
Ezt úgy tehetjük meg, hogyha először létrehozunk egy új azonosító-leképezési sémát. Ez az eszköztár megfelelő gombjának használatával tehető meg.

Új azonosító-leképezési séma készítése

Tételezzük fel, hogy meghívjuk a MyANT azonosító-leképezési sémát.
Most kiválasztjuk a MyANT azonosító-leképezési sémát az eszköztár legördülő listájából, és hozzáadjuk a következő rendezett bejegyzéshez:

Új rendezett bejegyzés készítése a beállítási oldalból     Új rendezett bejegyzés készítése a helyzetérzékeny menü használatával

Ez végrehajtható a beállítási oldalról (balra), vagy a szerkezeti nézet helyzetérzékeny menüjéből (jobbra).
A különbségfa most a következőre változik:
(A szerkezeti nézet frissítéséhez kattintson a Nézetfrissítő gomb elemre az eszköztár legördülő listájában).

Különbségfa a MyANT azonosító-leképezési séma használatával

Ez az összehasonlítási eredmény, amire vágytunk, és amit egy rendezett bejegyzés létrehozásával értünk el.

Az azonosító-leképezések (lásd azelőző részt) emellett a rendezett leszármazottak egyedi azonosítására is használhatók. Ez javítja az összehasonlítások eredményét, különösen akkor, ha sok a változás.

Az XML Compare bedolgozó egy ANT fájlokhoz használható azonosító-leképezési sémával érkezik, amely személyre szabható az adott ANT fájlokhoz.