Πρόγραμμα εκμάθησης και παραδείγματα

Γενική αντιστοίχιση έναντι σχημάτων αντιστοίχισης ταυτότητων:
Πώς να δημιουργήσετε ένα σχήμα αντιστοίχισης ταυτότητων για τη βελτίωση των αποτελεσμάτων σύγκρισης

Θεωρήστε ένα παράδειγμα αρχείου XML σε δυο ελάχιστα διαφορετικές εκδοχές, δεξιά και αριστερά. Έστω ότι το στοιχείο extension-point προσδιορίζεται μοναδικά από το γνώρισμα id. Οι διαφορές κειμένου εμφανίζονται με έντονη γραφή.

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


Έστω ότι η σειρά των στοιχείων θα πρέπει να αγνοηθεί. Οι δομική διαφορά ανάμεσα στα δυο έγγραφα αποτελεί το στοιχείο extension-point στα αριστερά με το id="importWizards" να αντικαθιστάται στα δεξιά με ένα νέο extension-point με id="exportWizards". Χρησιμοποιώντας τον αλγόριθμο γενικής αντιστοίχισης Τυχαία σύγκριση, επειδή αγνοεί τη σειρά με την οποία τα στοιχεία XML εμφανίζονται στο έγγραφο, λαμβάνουμε την ακόλουθη διακλάδωση διαφορών.

Διακλάδωση διαφορών με τη χρήση του αλγορίθμου γενικής αντιστοίχισης

Τα πρώτα δυο στοιχεία extension-point είναι πανομοιότυπα και συνεπώς αντιστοιχούνται και δεν εμφανίζονται στη διακλάδωση διαφορών. Απομένει το τρίτο στοιχείο extension-point και στις δυο πλευρές οι οποίες, επειδή έχουν το ίδιο όνομα στοιχείου, αντιστοιχούνται επίσης. Η διακλάδωση διαφορών εμφανίζει κατόπιν τις διαφορές ανάμεσα στο τρίτο στοιχείο extension-point αριστερά και το τρίτο στοιχείο extension-point δεξιά. Αυτές οι διαφορές αποτελούνται από τις τιμές των γνωρισμάτων id και name.
Ωστόσο, δεν είναι αυτό που θα θέλαμε να δούμε. Θα θέλαμε η διακλάδωση διαφορών να μας εμφανίζει ότι ένα στοιχείο extension-point αφαιρέθηκε από την αριστερή πλευρά και ότι προστέθηκε ένα νέο στοιχείο extension-point στη δεξιά πλευρά.
Για να το επιτύχουμε, δημιουργούμε ένα νέο σχήμα αντιστοίχισης ταυτότητων. Αυτό μπορεί να γίνει χρησιμοποιώντας το κατάλληλο κουμπί στη γραμμή εργαλείων.

Δημιουργία νέου σχήματος αντιστοίχισης ταυτότητων

Θεωρήστε ότι ονομάζουμε αυτό το σχήμα αντιστοίχισης ταυτότητων MyPlugin. Επιλέγουμε το σχήμα αντιστοίχισης ταυτότητων MyPlugin από την αναπτυσσόμενη λίστα στη γραμμή εργαλείων

Επιλογή του σχήματος αντιστοίχισης ταυτότητων MyPlugin

και προσθέστε σε αυτό την ακόλουθη αντιστοίχιση:

Δημιουργία νέας αντιστοίχισης από τη σελίδα προτιμήσεων     Δημιουργία νέας αντιστοίχισης χρησιμοποιώντας το μενού περιβάλλοντος

Αυτό μπορεί να επιτευχθεί από τη σελίδα προτιμήσεων (αριστερά) ή από το μενού περιβάλλοντος στην προβολή δομής (δεξιά).
Η διακλάδωση διαφορών πλέον γίνεται:
(Για την ανανέωση της προβολής δομής, πατήστε στο Κουμπί ανανέωσης προβολής κουμπί της αναπτυσσόμενης λίστας στη γραμμή εργαλείων.)

Διακλάδωση διαφορών χρησιμοποιώντας το σχήμα αντιστοίχισης ταυτότητων MyPlugin

Αυτό αποτελεί το αποτέλεσμα σύγκρισης που επιθυμούσαμε και το οποίο επιτύχαμε δημιουργώντας ένα σχήμα αντιστοίχισης ταυτότητων.

Η πρόσθετη λειτουργία σύγκρισης XML διαθέτει ήδη ένα σχήμα αντιστοίχισης ταυτότητων για αρχεία πρόσθετων λειτουργιών, τα οποία μπορούν να ρυθμιστούν για συγκεκριμένα αρχεία πρόσθετων λειτουργιών.

Προειδοποίηση:
Εάν δημιουργηθεί μια αντιστοίχιση ταυτότητων, θεωρείται ότι η ταυτότητα είναι μοναδική, δηλαδή ότι δεν υπάρχουν δυο στοιχεία XML με το ίδιο όνομα και διαδρομή που να έχουν την ίδια ταυτότητα. Εάν αυτό δεν συμβαίνει, το σχήμα αντιστοίχισης ταυτότητων μπορεί να μην είναι σε θέση να παραδώσει μια λογική διακλάδωση διαφορών.
Όταν μια ταυτότητα μπορεί να εμφανιστεί παραπάνω από μια φορά, θα πρέπει να βασιστείτε στο γενικό αλγόριθμο.

Επίσης, όταν χρησιμοποιείται ένα σχήμα αντιστοίχισης ταυτότητων και υπάρχουν στοιχεία χωρίς καθορισμένη αντιστοίχιση ταυτότητων, η μέθοδος τυχαίας σύγκρισης θα χρησιμοποιηθεί, π.χ. τα στοιχεία αντιστοιχούνται σύμφωνα με την ομοιότητά τους και όχι με τη σειρά με την οποία εμφανίζονται στο έγγραφο. Για να καθορίσετε ότι τα θυγατρικά ενός στοιχείου θα πρέπει να συγκρίνονται σύμφωνα με τη σειρά εμφάνισης. Δείτε την επόμενη ενότητα για τις εγγραφές σειριακής σύγκρισης.

Προσθήκη εγγραφών σειριακής σύγκρισης

Οι εγγραφές σειριακής σύγκρισης χρησιμοποιούνται για να καθοριστεί ότι τα άμεσα θυγατρικά (εξαιρουμένων των γνωρισμάτων) ενός στοιχείου xml, που προσδιορίζεται από τη διαδρομή του, θα πρέπει να συγκριθούν με τη μέθοδο της σειριακής σύγκρισης αντί της προεπιλεγμένης τυχαίας σύγκρισης.
Ως παράδειγμα, εξετάστε το ακόλουθο αρχείο ANT σε δυο ελάχιστα διαφορετικές εκδοχές:

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


Οι διαφορές ανάμεσα στα δυο έγγραφα εμφανίζονται με έντονη γραφή. Δυο στοιχεία έχουν ανταλλαγεί, το (<mkdir dir="${dest}"/> και το <delete dir="${dest}"/>) και ένα νέο στοιχείο (<copy .../>) έχει προσαρτηθεί στο στοιχείο προορισμού.
Η εκτέλεση μιας τυχαίας σύγκρισης θα έχει ως αποτέλεσμα την ακόλουθη διακλάδωση διαφορών:

Διακλάδωση διαφορών με τη χρήση τυχαίας αντιστοίχισης

Το γεγονός ότι δυο στοιχεία έχουν ανταλλαγεί δεν εμφανίζεται αφού η σειρά των στοιχείων αγνοείται.
Ωστόσο, όσον αφορά το ANT, τα δυο έγγραφα προκαλούν πολύ διαφορετική συμπεριφορά, επειδή η σειρά των στοιχείων μέσα σε ένα target είναι σημαντική. Συνεπώς, θέλουμε να δημιουργήσουμε μια εγγραφή σειριακής σύγκρισης για τον προορισμό για να δώσει οδηγίες στη μηχανή σύγκρισης να συγκρίνει τα άμεσα θυγατρικά του προορισμού με σειριακή σύγκριση.
Αυτό γίνεται καταρχήν με τη δημιουργία ενός νέου σχήματος αντιστοίχισης ταυτότητων. Αυτό μπορεί να γίνει χρησιμοποιώντας το κατάλληλο κουμπί στη γραμμή εργαλείων.

Δημιουργία νέου σχήματος αντιστοίχισης ταυτότητων

Θεωρήστε ότι ονομάζουμε αυτό το σχήμα αντιστοίχισης ταυτότητων MyANT.
Επιλέγουμε το σχήμα αντιστοίχισης ταυτότητων MyANT από την αναπτυσσόμενη λίστα στη γραμμή εργαλείων και προσθέτουμε σε αυτό την ακόλουθη εγγραφή σειριακής σύγκρισης:

Δημιουργία νέας εγγραφής σειριακής σύγκρισης από τη σελίδα προτιμήσεων     Δημιουργία νέας εγγραφής σειριακής σύγκρισης χρησιμοποιώντας το μενού περιβάλλοντος

Αυτό μπορεί να επιτευχθεί από τη σελίδα προτιμήσεων (αριστερά) ή από το μενού περιβάλλοντος στην προβολή δομής (δεξιά).
Η διακλάδωση διαφορών πλέον γίνεται:
(Για την ανανέωση της προβολής δομής, πατήστε στο Κουμπί ανανέωσης προβολής κουμπί της αναπτυσσόμενης λίστας στη γραμμή εργαλείων.)

Διακλάδωση διαφορών χρησιμοποιώντας το σχήμα αντιστοίχισης ταυτότητων MyANT

Αυτό αποτελεί το αποτέλεσμα σύγκρισης που επιθυμούσαμε και το οποίο επιτύχαμε δημιουργώντας μια εγγραφή σειριακής σύγκρισης.

Επιπρόσθετα, οι αντιστοιχίσεις ταυτότητων (δείτε την προηγούμενη ενότητα) μπορούν να χρησιμοποιηθούν για την ταυτοποίηση με τρόπο μοναδικό σειριακής σύγκρισης θυγατρικών. Ειδικά όταν υπάρχουν πολλές αλλαγές, αυτό θα βελτιώσει τα αποτελέσματα σύγκρισης.

Η πρόσθετη λειτουργία σύγκρισης XML διαθέτει ήδη ένα σχήμα αντιστοίχισης ταυτότητων για αρχεία ANT, τα οποία μπορούν να ρυθμιστούν για συγκεκριμένα αρχεία ANT.