Zelfstudieprogramma en voorbeelden

Algemene matching versus ID-toewijzingsschema's:
het maken van een ID-toewijzingsschema om de vergelijkingsresultaten te verbeteren.

Bekijk onderstaand voorbeeld van een XML-bestand met twee enigszins verschillende versies, links en rechts. Stel dat het element extension-point uniek wordt geïdentificeerd met het kenmerk id. De tekstuele verschillen worden met vetgedrukte tekst aangegeven.

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


Stel dat de volgorde van de elementen moet worden genegeerd. De structurele verschillen tussen de twee documenten bestaan uit het element extension-point aan de linkerkant waarbij id="importWizards" aan de rechterkant wordt vervangen door een nieuw extension-point met id="exportWizards". Als u het algemene matchingalgoritme met de naam Niet gesorteerd gebruikt, omdat hiermee de volgorde wordt genegeerd waarin de XML-elementen in het document verschijnen, vindt u de volgende drie verschillen.

Verschillenboom na gebruik van het algemene matchingalgoritme

De eerste twee extension-point-elementen zijn identiek en komen daarom overeen en worden niet afgebeeld in de verschillenboom. Dan is er nog het derde extension-point-element aan beide kanten die ook overeenkomen omdat deze elementen dezelfde elementnaam hebben. In de verschillenboom worden vervolgens de verschillen aangegeven tussen het derde extension-point-element aan de linkerkant en het derde extension-point-element aan de rechterkant. Deze verschillen bestaan uit de waarden van de kenmerken id en name.
Dit is echter niet wat u wilt zien. De verschillenboom moet aangeven dat een extension-point-element is verwijderd van de linkerkant en dat er een nieuw extension-point-element is toegevoegd aan de rechterkant.
Hiervoor moet een nieuw ID-toewijzingsschema worden gemaakt. U kunt dit doen door de bijbehorende knop op de werkbalk te gebruiken.

Een nieuw ID-toewijzingsschema maken

Stel dat het ID-toewijzingsschema Mijn plugin heet. Vervolgens selecteert u het ID-toewijzingsschema Mijn plugin uit de vervolgkeuzelijst in de werkbalk.

Selecteer het ID-toewijzingsschema Mijn plugin

en voeg het toe aan de volgende toewijzing:

Een nieuwe toewijzing maken van de voorkeurenpagina     Een nieuwe toewijzing maken met het contextmenu

U kunt dit doen vanaf de voorkeuren pagina (links) of vanuit het contextmenu in de structuurview (rechts).
De verschillenboom ziet er nu als volgt uit:
(Als u de structuurview wilt vernieuwen, klikt u op de knopKnop voor bijwerken view van de vervolgkeuzelijst in de werkbalk.)

Verschillenboom met behulp van het ID-toewijzingsschema Mijn plugin

Dit is het vergelijkingsresultaat wat u wilt zien en dat tot stand is gekomen door een ID-toewijzingsschema te maken.

De XML-vergelijkingsplugin wordt geleverd met een ID-toewijzingsschema voor pluginbestanden, dat kan worden aangepast voor specifieke plugin-bestanden.

Waarschuwing:
Als er een ID-toewijzing wordt gemaakt, wordt verondersteld dat het ID uniek is, d.w.z. er bestaan geen twee XML-elementen met dezelfde naam en hetzelfde pad die hetzelfde ID hebben. Als dit niet zo mocht zijn, wordt er door het ID-koppelingsschema geen accurate verschillenboom geproduceerd.
Als een ID meer dan eens zou kunnen verschijnen, moet u zich baseren op het algemene algoritme.

Als er bovendien een ID-toewijzingsschema wordt gebruikt en er elementen zonder ID-toewijzing zijn opgegeven, wordt de vergelijkingsmethode Niet gesorteerd gebruikt, dat wil zeggen de overeenkomst tussen elementen wordt gebaseerd op hun gelijkvormigheid en niet op de volgorde waarin deze worden afgebeeld in het document. Om op te geven dat de subelementen van een elementen op volgorde moeten worden vergeleken, raadpleegt u de volgende sectie over Geordende gegevens.

Geordende gegevens toevoegen

Geordende gegevens worden gebruikt om op te geven dat de directe subelementen (exclusief kenmerken) van een XML-element (dat wordt aangegeven met het pad) op volgorde moeten worden vergeleken in plaats van met de ongeordende standaardmethode.
Als voorbeeld kunt u het volgende ANT-bestand met twee enigszins verschillende versies bekijken:

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


De verschillen tussen de twee documenten worden met vetgedrukte tekst aangegeven. Twee elementen zijn verwisseld (<mkdir dir="${dest}"/> and <delete dir="${dest}"/>) en er is een nieuw element (<copy .../>) toegevoegd aan het doelelement.
Als u een niet gesorteerde vergelijking uitvoert, levert dit de volgende verschillenboom op:

Verschillenboom met behulp van niet gesorteerde overeenkomst

Het feit dat er twee elementen zijn verwisseld, wordt niet afgebeeld omdat de volgorde van de elementen wordt genegeerd.
Vanuit het ANT-oogpunt vertonen de twee documenten een heel ander gedrag, omdat de volgorde van de elementen binnen een target erg belangrijk is. Daarom moet er geordende gegevens voer het doel worden gemaakt zodat de vergelijkingsengine wordt opgedragen om de directe subelementen van het doel op een geordende manier te vergelijken.
U kunt dit doen door eerst een nieuw toewijzingsschema te maken. U kunt dit doen met de bijbehorende knop in de werkbalk.

Een nieuw ID-toewijzingsschema maken

Stel dat het ID-toewijzingsschema Mijn ANT wordt genoemd.
Vervolgens selecteert u het ID-toewijzingsschema Mijn ANT uit de vervolgkeuzelijst in de werkbalk en voegt u hieraan het volgende geordende gegeven toe:

Een nieuw geordend gegeven maken vanaf de voorkeurspagina.     Een nieuw geordend gegeven maken met het contextmenu

U kunt dit doen vanaf de voorkeuren pagina (links) of vanuit het contextmenu in de structuurview (rechts).
De verschillenboom ziet er nu als volgt uit:
(Als u de structuurview wilt vernieuwen, klikt u op de knopKnop voor bijwerken view van de vervolgkeuzelijst in de werkbalk.)

Verschillenboom met behulp van het ID-toewijzingsschema Mijn ANT

Dit is het vergelijkingsresultaat wat u wilt zien en dat tot stand is gekomen door een geordend gegeven te maken.

Daarnaast kunnen ID-toewijzingen (zie vorige sectie) worden gebruikt om geordende subelementen op een unieke manier te identificeren. Vooral als er veel wijzigingen zijn, verbeterd dit de vergelijkingsresultaten.

De XML-vergelijkingsplugin wordt geleverd met een ID-toewijzingsschema voor pluginbestanden, dat kan worden aangepast voor specifieke ANT-bestanden.