Opplæring og eksempler

Generell sammenlikning versus ID-tilordningsskjemaer:
Opprette et ID-tilordningsskjema som forbedrer sammenlikningsresultatene

Se på en XML-eksempelfil i to litt forskjellige versjoner, venstre og høyre. Anta at elementet extension-point er unikt identifisert av attributtet id. Teksforskjellene er vist i fete typer.

<?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 at rekkefølgen på elementene skal ignoreres. Den strukturelle forskjellen mellom de to dokumentene består i at extension-point-elementet til venstre med id="importWizards" blir erstattet med et nytt extension-point-element til høyre med id="exportWizards". Vi bruker den generelle sammenlikningsalgoritmen som kalles Usortert, fordi den ignorerer rekkefølgen på XML-elementene i dokumentet, og vi får da følgende differansetre:

Differansetre som bruker generell sammenlikningsalgoritme

De to første extension-point-elementene er identiske. Dermed samsvarer de og blir ikke vist i differansetreet. Det er et tredje extension-point-element på begge sider som, siden det har samme elementnavn, også samsvarer. Differansetreet viser da forskjellen på det tredje extension-point-elementet til venstre og det tredje extension-point-elementet til høyre. Disse forskjellene består i verdiene av attributtene id og name.
Men det er ikke dette vi ønsker å se. Vi vil at differansetreet skal vise at et extension-point-element ble fjernet fra venstre side, og at et nytt extension-point-element ble lagt til på høyre side.
Vi oppnår dette ved å opprette et nytt ID-tilordningsskjema. Det gjør vi ved hjelp av den riktige knappen på verktøylinjen.

Opprette et nytt ID-tilordningsskjema

Anta at vi kaller ID-tilordningsskjemaet MyPlugin. Vi velger nå ID-tilordningsskjemaet MyPlugin fra valglisten på verktøylinjen

Velg ID-tilordningsskjemaet MyPlugin

og legger det til i følgende tilordning:

Opprette en ny tilordning fra preferansesiden     Opprette en ny tilordning ved hjelp av hurtigmenyen

Dette kan gjøres fra preferansesiden (venstre) eller fra hurtigmenyen i strukturvisningen (høyre).
Differansetreet blir nå:
(Du oppdaterer strukturvisningen ved å klikke på knappen Knapp for å oppdatere visningen på valgknappen på verktøylinjen.)

Differansetre som bruker ID-tilordningsskjemaet MyPlugin

Dette er sammenlikningsresultatet vi ønsket, og som vi oppnådde ved å opprette et ID-tilordningsskjema.

Plugin-modulen for XML-sammenlikning leveres med et ID-tilordningsskjema for plugin-filer som kan tilpasses bestemte plugin-filer.

Advarsel:
Hvis du oppretter en ID-tilordning, antas det at IDen er unik, det vil si at det ikke er to XML-elementer med samme navn og bane som har samme ID. Hvis dette ikke er tilfellet, viser kanskje ikke ID-tilordningsskjemaet noe forståelig differansetre.
Når en ID kan forekomme flere ganger, stoler man på den generelle algoritmen.

Når et ID-tilordningsskjema blir brukt og det finnes elementer uten noe spesifisert ID-tilordning, blir sammenlikningsmetoden Usortert brukt, det vi si at elementene blir sammenliknet etter likhet, og ikke etter rekkefølgen de har i dokumentet. Hvis du vil oppgi at de underordnede elementene for et element skal sammenliknes etter rekkefølgen de blir vist i, ser du neste avsnitt om sorterte oppføringer.

Legge til sorterte oppføringer

Sorterte oppføringer blir brukt for å oppgi at de direkte underordnede elementene (bortsett fra attributter) for et xml-element - identifisert av banen - skal sammenliknes på en sortert måte i stedet for på den usorterte standardmåten.
Som et eksempel kan du se på følgende ANT-fil i to litt forskjellige versjoner:

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


Forskjellene mellom de to dokumentene er vist i fete typer. To elementer er byttet ut (<mkdir dir="${dest}"/> og <delete dir="${dest}"/>), og et nytt element (<copy .../>) er tilføyd i målelementet.
Hvis du utfører en usortert sammenlikning, vil det resultere i følgende differansetre:

Differansetre som bruker usortert sammenlikning

Det faktum at to elementer er byttet ut, blir ikke vist, ettersom rekkefølgen på elementene blir ignorert.
Men fra et ANT-synspunkt medfører de to dokumentene svært forskjellig virkemåte, fordi rekkefølgen på elementene i et mål (target) er viktig. Vi ønsker derfor å opprette en sortert oppføring for målet for å be sammenlikningsprogrammet om å sammenlikne de underordnede elementene i målet på en sortert måte.
Når vi skal gjøre det, må vi først opprette et nytt ID-tilordningsskjema. Det gjør vi ved hjelp av den riktige knappen på verktøylinjen.

Opprette et nytt ID-tilordningsskjema

Anta at vi kaller ID-tilordningsskjemaet MyANT.
Vi velger nå ID-tilordningsskjemaet MyANT fra valglisten på verktøylinjen og legger det til i følgende sorterte oppføring:

Opprette en ny sortert oppføring fra preferansesiden     Opprette en ny sortert oppføring ved hjelp av hurtigmenyen

Dette kan gjøres fra preferansesiden (venstre) eller fra hurtigmenyen i strukturvisningen (høyre).
Differansetreet blir nå:
(Du oppdaterer strukturvisningen ved å klikke på knappen Knapp for å oppdatere visningen på valgknappen på verktøylinjen.)

Differansetre som bruker ID-tilordningsskjemaet MyANT

Dette er sammenlikningsresultatet som vi ønsket, og som vi oppnådde ved å opprette en sortert oppføring.

I tillegg kan ID-tilordninger (se forrige avsnitt) brukes for unikt å identifisere sorterte underordnede elementer. Dette vil forbedre sammenlikningsresultatene, spesielt når det er mange endringer.

Plugin-modulen for XML-sammenlikning leveres med et ID-tilordningsskjema for ANT-filer som kan tilpasses bestemte ANT-filer.