Guias de Iniciação e Exemplos

Correspondência Geral face a Esquemas de Correlação de ID:
Como criar um esquema de correlação de ID para melhorar os resultados da comparação

Pense num ficheiro XML de exemplo em duas versões ligeiramente diferentes, esquerda e direita. Parta do princípio que o elemento extension-point é identificado de modo único pelo atributo id. As diferenças textuais são mostradas a negrito.

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


Parta do princípio que a ordem dos elementos deve ser ignorada. A diferença estrutural entre dois documentos consiste no elemento extension-point à esquerda com a substituição de id="importWizards" à direita, e um novo elemento extension-point com id="exportWizards". Utiliza-se o algoritmo de correspondência geral designado por Unordered, porque ignora a ordem pela qual os elementos XML aparecem no documento, e obtém-se a seguinte árvore de diferenças.

Árvore de diferenças utilizando algoritmo de correspondência geral

Os primeiros dois elementos extension-point são idênticos e, por conseguinte, são correspondidos e não são apresentados na árvore de diferenças. Permanece um terceiro elemento extension-point em ambos os lados que, tendo o menos nome de elemento, são também correspondidos. A árvore de diferenças mostra as diferenças entre o terceiro elemento extension-point da esquerda e o terceiro elemento extension-point da direita. Estas diferenças consistem nos valores dos atributos id e name.
No entanto, não era isso que se pretendia ver. Pretendia-se que a árvore de diferenças mostrasse um elemento extension-point que foi removido do lado esquerdo e um novo elemento extension-point que foi adicionado ao lado direito.
Para o conseguir, criamos um novo esquema de correlação de ID. Pode fazer-se utilizando o botão apropriado na barra de ferramentas.

Criar um novo esquema de correlação de ID

Parta do princípio que se designa o esquema de correlação de ID como MyPlugin. Selecciona-se o Esquema de Correlação de ID MyPlugin na lista pendente na barra de ferramentas

Seleccionar Esquema de Correlação de ID MyPlugin

e adicione-o à seguinte correlação:

Criar uma nova correlação na página de preferências     Criar uma nova correlação utilizando o menu de contexto

Isto pode fazer-se a partir da página das preferências (esquerda) ou a partir do menu de contexto na vista de estrutura (direita).
A árvore de diferenças altera-se da seguinte forma:
(Para renovar a vista da estrutura, fazer clique no botão Botão para actualizar vista da lista pendente na barra de ferramentas.)

Árvore de diferenças utilizando esquema de correlação de ID MyPlugin

Este é o resultado da comparação que se pretendia e que se conseguiu criando um esquema de correlação de ID.

O conector Compare de XML já traz um esquema de correlação de ID para ficheiros do conector, que pode ser personalizado para ficheiros do conector específicos.

Aviso:
Se for criada uma correlação de ID, presume-se que o id é único, ou seja, não existem dois elementos XML com o mesmo nome e o mesmo caminho com o mesmo id. Se não for esse o caso, o esquema de correlação de ID poderá não fornecer uma árvore de diferenças perceptíveis.
Quando um id pode aparecer mais do que uma vez, devemos basear-nos no algoritmo geral.

Além disso, quando é utilizado um esquema de correlação de ID, e existirem elementos sem qualquer correlação de id especificada, será utilizado o método de comparação Unordered, ou seja, os elementos serão correspondidos pela sua semelhança, e não pela qual ordem pela qual aparecem no documento. Para especificar que os descendentes de um elemento devem ser comparados pela ordem em que aparecem, consulte a secção seguinte sobre as entradas ordenadas.

Adicionar entradas ordenadas

As entradas ordenadas são utilizadas para especificar que os descendentes directos (excluindo os atributos) de um elemento xml - identificado pelo respectivo caminho - devem ser comparados de forma ordenada em vez da forma desordenada predefinida.
Como um exemplo, considere o seguinte ficheiro ANT com duas versões ligeiramente 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>


As diferenças entre os dois documentos aparecem a negrito. Dois elementos foram trocados <mkdir dir="${dest}"/> e <delete dir="${dest}"/>) e foi anexado um novo elemento (<copy .../>) ao elemento de destino.
Executar uma comparação desordenada irá dar origem à seguinte árvore de diferenças:

Árvore de diferenças utilizando correspondência desordenada

O facto de dois elementos terem sido trocado não aparece, uma vez que a ordem dos elementos é ignorada.
No entanto, do ponto de vista do ficheiro ANT, os dois documentos podem causar comportamentos bastante diferentes, porque a ordem dos elementos dentro de um destino é importante. Por conseguinte, pretende criar-se uma entrada ordenada para o destino para instruir o motor de comparação a comparar os descendentes directos do destino de forma ordenada.
Primeiro, cria-se um novo esquema de correlação de ID. Isto pode fazer-se utilizando o botão apropriado na barra de ferramentas.

Criar um novo esquema de correlação de ID

Parta do princípio que se designa o esquema de correlação de ID como MyANT.
Selecciona-se o Esquema de Correlação de ID MyANT na lista pendente na barra de ferramentas e adiciona-se à seguinte entrada ordenada:

Criar uma nova entrada ordenada na página de preferências     Criar uma nova entrada ordenada utilizando o menu de contexto

Isto pode fazer-se a partir da página das preferências (esquerda) ou a partir do menu de contexto na vista de estrutura (direita).
A árvore de diferenças altera-se da seguinte forma:
(Para renovar a vista da estrutura, fazer clique no botão Botão para actualizar vista da lista pendente na barra de ferramentas.)

Árvore de diferenças utilizando esquema de correlação de ID MyANT

Este é o resultado da comparação que se pretendia e que se conseguiu criando uma entrada ordenada.

Adicionalmente, as correlações de IDs (consultar secção anterior) podem ser utilizadas para identificar de modo único os descendentes ordenados. Especialmente quando existem muitas alterações, isso irá melhorar os resultados da comparação.

O conector Compare de XML já traz um esquema de correlação de ID para ficheiros ANT, que pode ser personalizado para ficheiros ANT.