Självstudiekurs och exempel

Allmän matchning jämfört med ID-avbildningsscheman:
Skapa ett ID-avbildningsschema för att förbättra jämförelseresultat

Överväg en exempel-XML-fil i två, något annorlunda versioner, vänster och höger. Anta att elementet extension-point identifieras unikt med attributet id. Textskillnaderna visas i fet stil.

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


Anta att elementordningen ska ignoreras. Den strukturella skillnaden mellan de två dokumenten består av att elementet extension-point till vänster med id="importWizards" ersätts på högra sidan av en ny extension-point med id="exportWizards". Med hjälp av den allmänna matchningsalgoritmen som kallas Osorterad, eftersom den ignorerar i vilken ordning XML-elementen visas i dokumentet, får vi följande träd med skillnader.

Skillnadsträd med hjälp av allmän matchningsalgoritm

De första två extension-point-elementen är identiska och matchar, de visas inte i skillnadsträdet. Ett tredje extension-point-element återstår på båda sidor. Dessa har samma elementnamn och matchas också. I skillnadsträdet visas sedan skillnaderna mellan det tredje extension-point-elementet till vänster och det tredje extension-point-elementet till höger. Dessa skillnader består av olika värden i attributen id och name.
Detta är emellertid inte vad vi skulle vilja se. Vi skulle vilja att skillnadsträdet visade oss att ett extension-point-element tagits bort på vänstra sidan och att ett nytt extension-point-element lagts till på den högra sidan.
Om vi vill åstadkomma detta behöver vi skapa ett nytt ID-avbildningsschema. Det kan vi göra genom att använda lämplig knapp i verktygsfältet.

Skapa ett nytt ID-avbildningsschema

Anta att vi kallar ID-avbildningsschemat för MittInstick. Vi kan nu markera ID-avbildningsschemat MittInstick i listrutan i verktygsfältet.

Markera ID-avbildningsschemat MittInstick

och lägg till det i följande avbildning:

Skapa en ny avbildning från inställningssidan     Skapa en ny avbildning med hjälp av kontextmenyn

Detta kan göras från inställningssidan (vänster) eller från kontextmenyn i strukturvyn (höger).
Skillnadsträdet blir nu:
(Du kan uppdatera strukturvyn genom att klicka på knappen knapp för vyuppdatering i listrutan i verktygsfältet.)

Skillnadsträd med hjälp av ID-avbildningsschemat MittInstick

Detta är det jämförelseresultat vi ville ha och som vi åstadkom genom att skapa ett ID-avbildningsschema.

XML-jämförelse innehåller redan ett ID-avbildningsschema för insticksprogramfiler. Detta kan anpassas för speciella insticksprogramfiler.

Varning:
Om en ID-avbildning skapas, antas att IDt är unikt, dvs det finns inte två XML-element med samma ID, samma namn och samma sökväg. Om detta inte stämmer kan ID-avbildningsschemat inte ge ett rimligt skillnadsträd.
När ett ID visas flera gånger bör man förlita sig på den allmänna algoritmen.

Dessutom, när ett ID-avbildningsschema används och det finns element utan någon angiven ID-avbildning, används jämförelsemetoden Unordered, dvs. element matchas på likhet och inte enligt den ordning i vilken de visas i dokumentet. Om du vill ange att de underordnade objekten till ett element ska jämföras i den ordning de visas, se nästa avsnitt om sorterade poster.

Lägga till sorterade poster

Sorterade poster används för att ange att direkt underordnade objekt (exklusive attribut) till ett xml-element, som identifieras med hjälp av sökvägen, ska jämföras med en sorterad, i stället för en osorterad metod.
Som ett exempel kan du titta på följande ANT-fil i två versioner som skiljer sig något:

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


Skillnaderna mellan de två dokumentet visas i fetstil. Två element har bytt plats (<mkdir dir="${dest}"/> and <delete dir="${dest}"/>) och ett nytt element (<copy .../>) har lagts till i målelementet.
En osorterad jämförelse resulterar i följande skillnadsträd:

Skillnadsträd med hjälp av osorterad matchning

Det faktum att två element har bytt plats visas inte eftersom elementsorteringen ignoreras.
Från en ANT-synpunkt ger de två dokumenten däremot mycket olika funktioner, eftersom sorteringen av elementen inuti etttarget är viktigt. Vi vill därför skapa en sorterad post för målet som instruerar jämförelsemotorn att jämföra direkt underordnade objekt till målet på ett sorterat sätt.
Vi gör detta genom att först skapa ett nytt ID-avbildningsschema, vilket vi kan göra med hjälp av lämplig knapp i verktygsfältet.

Skapa ett nytt ID-avbildningsschema

Anta att vi kallar ID-avbildningsschemat för MittANT.
Vi kan nu markera ID-avbildningsschemat MittANT i listrutan i verktygsfältet och lägga till det i följande sorterade post:

Skapa en ny sorterad post från inställningssidan     Skapa en ny sorterad post med hjälp av kontextmenyn

Detta kan göras från inställningssidan (vänster) eller från kontextmenyn i strukturvyn (höger).
Skillnadsträdet blir nu:
(Du kan uppdatera strukturvyn genom att klicka på knappen knapp för vyuppdatering i listrutan i verktygsfältet.)

Skillnadsträd med hjälp av ID-avbildningsschemat MittANT

Detta är det jämförelseresultat vi ville ha och som vi åstadkom genom att skapa en sorterad post.

Dessutom kan ID-avbildningar (se föregående avsnitt) användas till att unikt identifiera sorterade underordnade objekt. Speciellt om det är många ändringar förbättras jämförelseresultaten med hjälp av detta.

XML-jämförelse innehåller redan ett ID-avbildningsschema för ANT-filer. Detta kan anpassas för speciella ANT-filer.