Guía de aprendizaje y ejemplos

Comparación general y esquemas de correlación de ID:
Cómo crear un esquema de correlación de ID para mejorar los resultados de la comparación

Considere un archivo XML de ejemplo en dos versiones ligeramente diferentes, izquierda y derecha. Supongamos que el elemento extension-point se identifica de forma exclusiva mediante 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>


Supongamos que el orden de los elementos debe pasarse por alto. La diferencia estructural entre los dos documentos consiste en el elemento extension-point a la izquierda, en el que id="importWizards" se sustituye a la derecha por un nuevo extension-point con id="exportWizards". Utilizando el algoritmo de comparación general denominado Unordered obtendríamos el siguiente árbol de diferencias, ya que pasa por alto el orden de aparición de los elementos XML en el documento.

Árbol de diferencias si se utiliza el algoritmo de comparación general

Los dos primeros elementos extension-point son idénticos y, por tanto, se emparejan y no se muestran en el árbol de diferencias. En éste permanece el tercer elemento extension-point en ambos lados, que al tener el mismo nombre de elemento, también se emparejan. 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.
Sin embargo, esto no es lo que deseamos ver. Deseamos que el árbol de diferencias nos muestre que un elemento extension-point se ha eliminado del lado izquierdo y un nuevo elemento extension-point se ha añadido al lado derecho.
para lograrlo, crearemos un nuevo esquema de correlación de ID. Podemos hacerlo mediante el botón adecuado de la barra de herramientas.

Crear un nuevo esquema de correlación de ID

Supongamos que llamamos al esquema de correlación de ID MyPlugin. Ahora seleccionaremos el esquema de correlación de ID MyPlugin en la lista desplegable de la barra de herramientas

Seleccionar el esquema de correlación de ID MyPlugin

y le añadiremos la siguiente correlación:

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

Esta acción puede realizarse desde la página de preferencias (izquierda) o desde el menú de contexto de la vista de estructuras (derecha).
El árbol de diferencias es ahora el siguiente:
(Para renovar la vista de estructuras, pulse el botón Botón para actualizar la vista de la lista desplegable de la barra de herramientas).

Árbol de diferencias si se utiliza el esquema de correlación de ID MyPlugin

Este es el resultado de comparación que deseábamos y que hemos obtenido mediante la creación de un esquema de correlación de ID.

El conector de comparación XML ya se suministra con un esquema de correlación de ID para archivos de conector, que puede personalizarse para archivos de conector determinados.

Aviso:
Si se crea una correlación de ID, se presupone que el ID es exclusivo, es decir, que no existen dos elementos XML con el mismo nombre y vía de acceso que tengan el mismo ID. Si este no es el caso, es posible que el esquema de correlación de ID no muestre un árbol de diferencias coherente.
Si un ID puede aparecer más de una vez, debe confiarse en el algoritmo general.

Asimismo, si se utiliza un esquema de correlación de ID y existen elementos que no especifican correlación de ID, se utilizará el método de comparación Unordered, es decir, los elementos se compararán por su semejanza y no por el orden de aparición en el documento. Para especificar que los hijos de un elemento deben compararse por orden de aparición, consulte la próxima sección, relativa a las entradas ordenadas.

Añadir entradas ordenadas

Las entradas ordenadas se utilizan para especificar que los hijos directos (excluyendo los atributos) de un elemento xml -identificado por su vía de acceso- deben compararse de forma ordenada en lugar de hacerlo según el método desordenado por omisión.
Como ejemplo, considere el siguiente archivo ANT en dos versiones ligeramente diferentes:

<?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 los dos documentos se muestran en negrita. Dos elementos se han intercambiado (<mkdir dir="${dest}"/> y <delete dir="${dest}"/>) y se ha añadido un elemento nuevo (<copy .../>) al elemento destino.
La realización de una comparación desordenada producirá el siguiente árbol de diferencias:

Árbol de diferencias si se utiliza la comparación desordenada

El hecho de que se hayan intercambiado dos elementos no se muestra, ya que el orden de los elementos se pasa por alto.
Sin embargo, desde el punto de vista de ANT, los dos documentos provocan un comportamiento muy diferente, ya que el orden de los elementos dentro de un destino es importante. Por tanto, vamos a crear una entrada ordenada para el destino a fin de indicar al motor de comparación que compare los hijos directos del destino de forma ordenada.
Para ello, crearemos primero un nuevo esquema de correlación de ID. Esta acción puede realizarse mediante el botón adecuado de la barra de herramientas.

Crear un nuevo esquema de correlación de ID

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

Crear una entrada ordenada nueva desde la página de preferencias     Crear una entrada ordenada nueva mediante el menú de contexto

Esta acción puede realizarse desde la página de preferencias (izquierda) o desde el menú de contexto de la vista de estructuras (derecha).
El árbol de diferencias es ahora el siguiente:
(Para renovar la vista de estructuras, pulse el botón Botón para actualizar la vista de la lista desplegable de la barra de herramientas).

Árbol de diferencias si se utiliza el esquema de correlación de ID MyANT

Este es el resultado de comparación que deseábamos y que hemos obtenido mediante la creación de una entrada ordenada.

Además, pueden utilizarse correlaciones de ID (consulte la sección anterior) para identificar de forma exclusiva los hijos ordenados. Con ello mejorarán los resultados de comparación, especialmente si hay muchos cambios.

El conector de comparación XML ya se suministra con un esquema de correlación de ID para archivos ANT, que puede personalizarse para archivos ANT determinados.

Copyright IBM Corporation y otros 2000, 2003. Reservados todos los derechos.