Øveprogram og eksempler

Generelle sammenligninger og id-tilknytningsskemaer:
Sådan opretter du et id-tilknytningsskema, som kan give en bedre sammenligning af resultater

Lad os se på et eksempel på en XML-fil i to lidt forskellige udgaver, venstre og højre. Vi antager, at elementet extension-point er entydigt defineret af attributten id. De tekstmæssige forskelle er fremhævede.

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


Lad os antage, at elementernes rækkefølge skal ignoreres. Den strukturmæssige forskel på de to dokumenter består i, at elementet extension-point til venstre medid="importWizards" til højre erstattes af et nytextension-point med id="exportWizards". Når vi bruger den generelle lighedsalgoritme, som hedderUnordered, fordi den ignorerer den rækkefølge, XML-elementerne optræder i i dokumentet, får vi følgende træstruktur med forskelle.

Træstruktur med forskelle som resultat af generel lighedsalgoritme

De første to extension-point-elementer er identiske, og derfor vises de ikke i træstrukturen med forskelle. Det tredje extension-point-element på begge sider har samme elementnavn og sammenstilles derfor også. Træstrukturen med forskelle viser herefter forskellene på det tredje extension-point-element til venstre og det tredje extension-point-element til højre. Disse forskelle består af værdierne for attributterne id og name.
Det er imidlertid ikke det ønskede resultat. Vi vil gerne have, at træstrukturen med forskelle viser, at der er fjernet et extension-point-element til venstre, og at der er tilføjet et nyt extension-point-element til højre.
Det opnår vi ved at oprette et nyt id-tilknytningsskema. Det kan vi gøre ved hjælp af den relevante knap på værktøjslinjen.

Opret nyt id-tilknytningsskema

Lad os sige, at vi kalder id-tilknytning-skemaet for MinPlugin. Nu skal vi vælge id-mappingskemaet MinPlugin på undermenuen til værktøjslinjen

Vælg id-mappingskemaet MinPlugin

og tilføje den til følgende tilknytning vha. mapping:

Opret ny tilknytning vha. mapping fra indstillingssiden     Opret ny tilknytning vha. mapping fra kontekstmenuen

Det kan gøres fra indstillingssiden (til venstre) eller fra kontekstmenuen i strukturoversigten (til højre).
Træstrukturen med forskelle ser nu sådan ud:
(Du opfrisker strukturoversigten ved at klikke på Knap til opdatering af oversigt på undermenuen til værktøjslinjen.)

Træstruktur med forskelle som resultat af id-tilknytningsskema til MinPlugin

Det er det sammenligningsresultat, vi gerne ville se, og som vi har opnået ved at oprette et id-tilknytningsskema.

Plugin-funktionen til XML-sammenligning leveres med et færdigt id-tilknytningsskema til plugin-filer, som kan tilpasses bestemte plugin-filer.

Advarsel:
Hvis du opretter en id-tilknytning, antages det, at id'en er entydig, hvilket vil sige, at der ikke er to XML-elementer med det samme navn og den samme sti, som har denne id. Hvis det ikke er tilfældet, giver id-mappingskemaet måske ikke et meningsfyldt resultat i træstrukturen.
Hvis en id kan forekomme mere end én gang, skal du bruge den generelle algoritme.

Det er desuden sådan, at når du bruger et id-tilknytningsskema, og der ikke er defineret id-tilknytn ing for alle elementer, bruges sammenligningsmetodenUnordered, dvs., at elementerne sammenstilles efter lighedsgrad og ikke i henhold til den rækkefølge, de vises i i dokumentet. Hvis du vil angive, at underordnede elementer til et element skal sammenlignes i den rækkefølge, de optræder i, skal du læse næste afsnit om sorterede indgange.

Tilføj sorterede indgange

Sorterede indgange bruges til at angive, at direkte underordnede elementer (med undtagelse af attributter) til et XML-element - identificeret vha. dets sti - skal sammenlignes på en sorteret måde i stedet for med standardmetoden, som er usorteret.
Lad os som eksempel se på følgende ANT-fil i to lidt forskellige versioner:

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


Forskellene på det to dokumenter er fremhævet. Der er byttet om på to elementer(<mkdir dir="${dest}"/> and <delete dir="${dest}"/>), og et nytelement (<copy .../>) er tilføjet målelementet.
Når du udfører en ikke-sorteret sammenligning, resulterer det i følgende træstruktur med forskelle:

Træstruktur vha. ikke-sorteret sammenligning

Det fremgår ikke, at der er byttet om på to elementer, da elementernes rækkefølge ignoreres.
Fra et ANT-synspunkt medfører de to dokumenter imidlertid meget forskellig funktionsmåde, fordi rækkefølgen af elementer i target er vigtig. Derfor vil vi gerne oprette en ordered entry (sorteret indgang) for "target", så sammenligningsprogrammet får besked på at sammenligne de direkte underordnede target-elementer på en sorteret måde.
Det gør vi ved først at oprette et nyt id-tilknytningsskema. Det kan gøres vha. en knap på værktøjslinjen.

Opret nyt id-tilknytningsskema

Lad os sige, at vi kalder id-mappingskemaet for MinANT.
Nu vælger vi id-mappingskemaet MinANT på undermenuen til værktøjslinjen og tilføjer det til følgende sorterede indgang:

Opret ny sorteret indgang fra indstillingssiden     Opret ny sorteret indgang vha. kontekstmenuen

Det kan gøres fra indstillingssiden (til venstre) eller fra kontekstmenuen i strukturoversigten (til højre).
Træstrukturen med forskelle ser nu sådan ud:
(Du opfrisker strukturoversigten ved at klikke på Knap til opdatering af oversigt på undermenuen til værktøjslinjen.)

Træstruktur med forskelle vha. id-mappingskemaet MinANT

Det er det sammenligningsresultat, vi gerne ville se, og som vi har opnået ved at oprette en sorteret indgang.

Desuden kan du bruge id-tilknytninger (se forrige afsnit) til entydig identifikation af sorterede underordnede elementer. Det vil især forbedre sammenligningsresultaterne, når der er tale om mange ændringer.

Plugin-funktionen til XML-sammenligning leveres med et færdigt id-tilknytningsskema til ANT-filer, som kan tilpasses bestemte ANT-filer.