Esercitazioni ed esempi

Corrispondenza generale e schemi di associazione ID:
Come creare uno schema di associazione ID per migliorare i risultati del confronto

Consideriamo un esempio di file XML in due versioni leggermente diverse, a destra e sinistra. Assumiamo che l'elemento extension-point sia definito univocamente dall'attributo id. Le differenze di testo sono mostrate in grassetto.

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


Assumiamo che l'ordine degli elementi debba essere ignorato. La differenza strutturale tra i due documenti consiste nell'elemento extension-point con id="importWizards" a sinistra che è sostituito a destra da un nuovo extension-point con id="exportWizards". Utilizzando l'algoritmo di corrispondenza generale denominato Unordered, che ignora l'ordine nel quale gli elementi XML appaiono nel documento, otteniamo la struttura ad albero delle differenze illustrata di seguito.

Struttura ad albero delle differenze con l'algoritmo di
corrispondenza generale

I primi due elementi extension-point sono identici e quindi non sono mostrati nella struttura ad albero delle differenze. I terzi elementi extension-point sui due lati, che presentano lo stesso nome elemento, sono anch'essi considerati corrispondenti. La struttura ad albero delle differenze mostra le differenze tra il terzo elemento extension-point a sinistra e il terzo elemento extension-point a destra. Le differenze consistono nei valori degli attributi id e name.
Tuttavia, questo non rappresenta il risultato desiderato. Ci aspetteremmo di vedere una struttura ad albero delle differenze che mostri che un elemento extension-point è stato rimosso dal lato sinistro e un nuovo extension-point è stato aggiunto a destra.
Per ottenere ciò, occorre creare un nuovo schema di associazione ID. Per crearlo è possibile utilizzare il pulsante sulla barra degli strumenti.

Creazione di un nuovo schema di associazione ID

Chiamiamo lo schema di associazione ID MyPlugin. Selezioniamo lo schema di associazione ID MyPlugin dall'elenco a discesa nella barra degli strumenti

Selezione dello schema di associazione ID MyPlugin

e aggiungiamo la seguente associazione:

Creazione di una nuova associazione dalla pagine delle
preferenze     Creazione di una nuova associazione utilizzando il menu di
scelta rapida

Questa operazione può essere effettuata dalla pagina delle preferenze (a sinistra) o dal menu di scelta rapida nella vista struttura (a destra).
La struttura ad albero delle differenze ora appare così:
(Per aggiornare la vista struttura, fare clic sul pulsante Pulsante di
aggiornamento della vista nell' elenco a discesa della barra degli strumenti).

Struttura ad albero delle differenze con lo schema di associazione ID
MyPlugin

Questo è il risultato del confronto desiderato e che è stato ottenuto tramite la creazione di uno schema di associazione ID.

Il plugin di confronto XML viene distribuito con uno schema di associazione ID per i file plugin, che può essere personalizzato per file di plugin particolari.

Avviso:
Se viene creata un'associazione ID, si suppone che l'id sia univoco, ovvero che non ci siano due elementi XML con lo stesso nome e percorso che abbiano lo stesso id. In caso contrario, lo schema di associazione ID non genererebbe una struttura ad albero delle differenze significativa.
Se un id è presente più volte, deve essere utilizzato l'algoritmo generale.

Inoltre, quando viene utilizzato uno schema di associazione ID e sono presenti elementi che non hanno specificata un'associazione ID, sarà utilizzato il metodo di confronto Unordered, ovvero gli elementi sono confrontati per similarità e non in base all'ordine nel quale appaiono nel documento. Per specificare che un elemento secondario deve essere confrontato in ordine di apparizione, fare riferimento alla successiva sezione sulle voci di ordinamento.

Aggiunta di voci di ordinamento

Le voci di ordinamento sono utilizzate per specificare che gli elementi secondari diretti (esclusi gli attributi) di un elemento XML, identificato dal suo percorso, devono essere confrontati rispettando un ordine invece che nel modo non ordinato predefinito.
Come esempio consideriamo il seguente file ANT in due versioni leggermente diverse:

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


Le differenze tra i documenti sono mostrate in grassetto. Due elementi sono stati scambiati (<mkdir dir="${dest}"/> e <delete dir="${dest}"/>) ed un nuovo elemento (<copy .../>) è stato accodato all'elemento target.
L'esecuzione di un confronto non ordinato produce la seguente struttura ad albero delle differenze:

Struttura ad albero delle differenze con corrispondenza non
ordinata

Lo scambio dei due elementi non viene mostrato in quanto l'ordine degli elementi viene ignorato.
Tuttavia, dal punto di vista ANT, i due documenti possono generare comportamenti diversi, in quanto l'ordine degli elementi all'interno di un target è rilevante. Pertanto, può essere opportuno creare una voce di ordinamento per determinare le modalità di confronto dell'elemento secondario diretto da utilizzare.
Per ottenere ciò, occorre creare prima un nuovo schema di associazione ID. Questa operazione può essere effettuata con il relativo pulsante della barra degli strumenti.

Creazione di un nuovo schema di associazione ID

Chiamiamo lo schema di associazione ID MyANT.
Selezioniamo lo schema di associazione ID MyANT dall'elenco a discesa nella barra degli strumenti e aggiungiamo la seguente voce di ordinamento:

Creazione di una nuova voce di ordinamento dalla
pagine delle preferenze     Creazione di una nuova voce di ordinamento dal menu
di scelta rapida

Questa operazione può essere effettuata dalla pagina delle preferenze (a sinistra) o dal menu di scelta rapida nella vista struttura (a destra).
La struttura ad albero delle differenze ora appare così:
(Per aggiornare la vista struttura, fare clic sul pulsante Pulsante di
aggiornamento della vista nell' elenco a discesa della barra degli strumenti).

Struttura ad albero delle differenze con lo schema di associazione ID
MyANT

Questo è il risultato del confronto desiderato e che è stato ottenuto tramite la creazione di una voce di ordinamento.

Inoltre, le associazioni ID (vedere la sezione precedente) possono essere utilizzate per identificare univocamente gli elementi secondari. In caso di modifiche numerose, questo migliorerà i risultati del confronto.

Il plugin di confronto XML viene distribuito con uno schema di associazione ID per i file ANT, che può essere personalizzato per file ANT particolari.