Guía de Aprendizaje y ejemplos

Esquemas de coincidencia general frente a correlación de ID:
Cómo crear un esquema de correlación de ID para mejorar los resultados de una comparación

Piense en un archivo XML de ejemplo en dos versiones ligeramente distintas, la de la izquierda y la de la derecha. Suponga que el elemento extension-point está identificado de manera exclusiva por el atributo id. Las diferencias textuales se muestran en negrita.

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


Suponga que el orden de los elementos debe pasarse por alto. La diferencia estructural entre los dos documentos radica en el elemento extension-point de la izquierda con id="importWizards" que se ha sustituido en la derecha con un nuevo extension-point con id="exportWizards". Si utiliza el algoritmo de coincidencias generales denominado Unordered, porque pasa por alto el orden en que los elementos XML aparecen en el documento, obtenemos el siguiente árbol de diferencias.

Árbol de diferencias utilizando el algoritmo de Coincidencias generales

Los dos primeros elementos extension-point son idénticos y, por tanto, coinciden y no se muestran en el árbol de diferencias. Queda el tercer elemento extension-point en ambos lados que, al tener el mismo nombre de elemento, también coincide. A continuación, el árbol de diferencias muestra las diferencias entre el tercer elemento extension-point de la izquierda y el tercer elemento extension-point de la derecha. Estas diferencias consisten en los valores de los atributos id y name.
No obstante, no es esto lo que queremos ver. Queremos que el árbol de diferencias nos muestre que un elemento extension-point se ha eliminado del lado izquierdo y que un elemento extension-point nuevo se ha añadido en el lado derecho.
Para conseguir esto hemos creado un nuevo Esquema de correlación de ID. Para poder hacerlo, se utiliza el botón adecuado en la barra de herramientas.

Creación de un nuevo esquema de correlación de ID

Supongamos que llamamos al Esquema de correlación de ID MyPlugin. Ahora seleccionamos el Esquema de correlación de ID MyPlugin de la lista desplegable de la barra de herramientas.

Seleccionar esquema de correlación de ID MyPlugin

y le añadimos la siguiente correlación:

Creación de una nueva correlación desde la página de preferencias     Creación de una nueva correlación utilizando el menú de contexto

Esto puede realizarse desde la página de preferencias (izquierda) o desde el menú de contexto en la vista de estructura (derecha).
El árbol de diferencias cambia de la manera siguiente:
(Para renovar la vista de estructura, pulse en el botón Botón para actualizar vista de la lista desplegable de la barra de herramientas.)

Árbol de diferencias utilizando el Esquema de correlación de ID MyPlugin

Este es el resultado de la comparación que queríamos y que hemos conseguido creando un Esquema de correlación de ID.

El conector XML Compare ya viene con un esquema de correlación de ID para archivos Plugin, que pueden personalizarse para archivos Plugin concretos.

Aviso:
Si se crea una Correlación de ID, se supone que el ID es exclusivo, es decir, que no hay dos elementos XML con el mismo nombre y vía de acceso que tengan el mismo ID. Si éste no fuera el caso, el Esquema de correlación de ID no podrá entregar un árbol de diferencias perceptibles.
Cuando un ID puede aparecer más de una vez, es necesario basarse en el algoritmo general.

Además, cuando se utiliza un Esquema de correlación de ID y hay elementos sin ninguna correlación de ID especificada, se utilizará el método de comparación Unordered, o sea, elementos que coinciden por su similitud y no por el orden en que aparecen en el documento. Para especificar que los hijos de un elemento deben compararse por orden de aparición, consulte la sección siguiente sobre Entradas ordenadas.

Añadir entradas ordenadas

Las entradas ordenadas se utilizan para especificar que los hijos directos (excluidos los atributos) de un elemento XML -identificados por su vía de acceso- deben compararse de forma ordenada, en lugar del método desordenado por omisión.
Como ejemplo, estudie el archivo ANT siguiente en dos versiones ligeramente distintas:

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


Las diferencias entre ambos documentos se muestran en negrita. Dos elementos se han intercambiado (<mkdir dir="${dest}"/> y <delete dir="${dest}"/>) y un elemento nuevo (<copy .../>) se ha agregado al elemento de destino.
Si realiza una comparación desordenada, obtendrá el siguiente árbol de diferencias:

Árbol de diferencias que utiliza coincidencias desordenadas

El hecho de que dos elementos se han intercambiado no se muestra, ya que se pasa por alto el orden de los elementos.
Sin embargo, desde el punto de vista de los archivos ANT, ambos documentos generarán un comportamiento muy distinto, ya que el orden de los elementos en target es importante. Por consiguiente, queremos crear una entrada ordenada para el destino con el fin de dar instrucciones al motor de comparación para que compare los hijos directos del destino de manera ordenada.
Para ello, en primer lugar creamos un nuevo esquema de correlación de ID. Esto puede realizarse utilizando el botón adecuado de la barra de herramientas.

Creación de un nuevo esquema de correlación de ID

Supongamos que llamamos al Esquema de correlación de ID MyANT.
Ahora seleccionamos el Esquema de correlación de ID MyANT de la lista desplegable de la barra de herramientas y lo añadimos en la siguiente entrada ordenada:

Creación de una nueva entrada ordenada desde la página de preferencias     Creación de una nueva entrada ordenada utilizando el menú de contexto

Esto puede realizarse desde la página de preferencias (izquierda) o desde el menú de contexto en la vista de estructura (derecha).
El árbol de diferencias cambia de la manera siguiente:
(Para renovar la vista de estructura, pulse en el botón Botón para actualizar vista de la lista desplegable de la barra de herramientas.)

Árbol de diferencias utilizando el esquema de correlación de ID MyANT

Este es el resultado de la comparación que queríamos y que hemos conseguido creando una entrada ordenada.

Además, las Correlaciones de ID (consulte la sección anterior) pueden utilizarse para identificar los hijos ordenados de manera exclusiva. Esto mejorará los resultados de la comparación, especialmente si hay muchos cambios.

El conector XML Compare ya viene con un esquema de correlación de ID para archivos ANT, que pueden personalizarse para archivos ANT concretos.