• Aucun résultat trouvé

De la comparaison de fichiers à la comparaison structurelle

1.3 Méthodes courantes pour la synchronisation de modèles d’ouvrages

1.3.1 De la comparaison de fichiers à la comparaison structurelle

En informatique, la comparaison d’informations s’est longtemps focalisée sur une compa- raison de fichiers, en particulier les fichiers texte. Le plus connu à ce titre reste l’outil libre du monde UNIX : GNU diff [FSF02]. L’algorithme utilisé est celui de la plus longue sous-séquence commune (LCS en anglais) [Myers86]. Les applications permettant de versionner les fichiers sources d’un projet informatique, comme CVS ou Subversion, utilisent GNU diff pour détecter les différences entre deux versions [Cederqvist06] [Pilato04]. La figure 1.13 montre un exemple

FIGURE1.13 :Illustration de l’interface kompare utilisant l’algorithme LCS. ❁❇✐❜❧✐♦t❤èq✉❡❃ ❁▲✐✈r❡❃ ❁❚✐tr❡❃❈♦♥❝❡♣t✐♦♥ ❞❡s ♣♦♥ts❁✴❚✐tr❡❃ ❁❆✉t❡✉rs❃ ❁❆✉t❡✉r❃❆♥♥❡ ❇❡r♥❛r❞✲●é❧②❁✴❆✉t❡✉r❃ ❁❆✉t❡✉r❃❏❡❛♥✲❆r♠❛♥❞ ❈❛❧❣❛r♦❁✴❆✉t❡✉r❃ ❁❆✉t❡✉rs❃ ❁✴▲✐✈r❡❃ ❁▲✐✈r❡❃ ❁❚✐tr❡❃❚❤❡ ❲❛r ♦❢ ❚❤❡ ❲♦r❧❞s❁✴❚✐tr❡❃ ❁❆✉t❡✉rs❃ ❁❆✉t❡✉r❃❍❡r❜❡rt ●❡♦r❣❡ ❲❡❧❧s❁✴❆✉t❡✉r❃ ❁✴❆✉t❡✉rs❃ ❁✴▲✐✈r❡❃ ❁❚❤ès❡❃ ❁❆✉t❡✉r❃●✉✐❧❧❛✉♠❡ P✐❝✐♥❜♦♥♦❁✴❆✉t❡✉r❃ ❁❚✐tr❡❃▼♦❞è❧❡s ❣é♦♠étr✐q✉❡s ❡t ♣❤②s✐q✉❡s ♣♦✉r ❧❛ s✐♠✉❧❛t✐♦♥ ❞✬✐♥t❡r✈❡♥t✐♦♥s ❝❤✐r✉r❣✐❝❛❧❡s❁✴❚✐tr❡❃ ❁✴❚❤ès❡❃ ❁✴❇✐❜❧✐♦t❤èq✉❡❃

FIGURE1.14 :Exemple de fichier XML

1.3. Méthodes courantes pour la synchronisation de modèles d’ouvrages 35

d’application utilisant l’algorithme LCS pour la comparaison de fichiers texte. Les résultats de comparaison issus d’un outil comme GNU diff attribuent généralement trois types de statut à chaque ligne de fichier texte :

• Modifié : ce statut indique que la ligne a été modifiée entre l’ancienne version et la nou- velle. Sur la figure 1.13, ce sont les lignes surlignées en rouge. Ce statut concerne aussi bien la ligne dans son ancienne version que dans sa nouvelle.

• Supprimé : ce statut indique qu’une ligne de l’ancienne version du fichier n’existe plus dans la nouvelle. Sur la figure 1.13, ce sont les lignes surlignées en vert. Ainsi ce statut ne concerne que les lignes de fichier associées à l’ancienne version.

• Ajouté : ce statut indique qu’un ligne de la nouvelle version n’existait pas auparavant. Sur la figure 1.13, il s’agit des lignes surlignées en bleu. On remarque de la même façon que les lignes de fichier concernées par ce statut se trouvent seulement dans la nouvelle version.

Dans ce mode de comparaison, il n’est pas possible de détecter un « déplacement » de l’infor- mation. En effet, une ligne ou un paragraphe déplacé dans un document sera détecté comme

supprimédans l’ancienne version et ajouté dans la nouvelle. Par exemple, sur le texte de la figure

1.13, le déplacement du paragraphe a été interprété comme un couple suppression/ajout.

Une deuxième limite dans ce type d’algorithme réide dans son incapacité à manipuler des structures hiérarchisées sauvées sous forme de fichier texte (sérialisées) [Chawathe96]. En effet, nous pouvons notamment distinguer deux contextes où l’algorithme LCS donne des résultats incorrects :

1. La gestion de données encapsulées par des tags : Lors de la sérialisation de données structurées, la méthode la plus usuelle consiste à placer des tags (symboles ou mots-clefs réservés) au niveau de chaque segment de données pour indiquer le contexte et son niveau hiérarchique. C’est l’approche suivie par le langage XML [Bray04], comme le montre la figure 1.14. Un moteur de comparaison basé sur le texte pur sera incapable de différencier le contenu des tags de structure et peut ainsi comparer des éléments n’appartenant pas au même contexte [Chawathe96].

2. Multiplicité des sérialisations pour une structure donnée : Rien ne garantit qu’un même ensemble de données structuré aura une et une seule sérialisation possible. En effet, le standard STEP-21, vu à la section 1.2.2, identifie chaque noeud du graphe à un numéro unique. Le choix de ce numéro est totalement libre. Si l’on reprend l’exemple de la figure 1.4, nous sommes libres de numéroter autrement les noeuds du graphe. Nous obtenons alors un fichier texte différent même si les données structurées sont identiques. Les labels★❁♥♦♠❜r❡❃ sont analogues à des variables muettes en mathématiques. La figure 1.15 montre ainsi que l’outil GNU diff est incapable de détecter l’équivalence entre deux sérialisations d’une même structure.

Nous pouvons donc en conclure que la comparaison de fichier texte ne saurait être adaptée dans le cadre de modèles d’ouvrages. Ces derniers sont fortement structurés à cause de la quantité et de la complexité de l’information contenue.

La correspondance de graphes

La comparaison de structures est traitée par le domaine de la Modélisation et la Recherche

Opérationnelle(MRO) puisque le modèle d’un ouvrage est associable à un graphe orienté. Le but

serait donc de comparer les deux versions d’un modèle via leur graphe associé. Contrairement aux sérialisations, on s’assure ici que le passage du graphe de données au modèle de l’ouvrage est bijectif, c’est-à-dire que tout modèle d’ouvrage possède un graphe associé et que si deux modèles sont équivalents alors les graphes associés sont les mêmes. Une littérature assez riche aborde les algorithmes de comparaison d’arbres et de graphes.

Tout d’abord, le problème connu de correspondance de sous-graphes, « subgraph matching » en anglais, consiste à répondre à la question suivante : à partir des graphe G1 et G2, est-ce que G1 est isomorphe à un sous-graphe de G2? Ce problème est reconnu pour être NP-complet [Garey90]. Cela signifie que n’importe quel algorithme répondant de manière générale à cette question a une complexité au moins exponentielle2. Le problème de correspondance de graphe (est-ce que G1 est isomorphe à G2?) n’a pas été démontré comme étant NP-complet mais nous n’avons pas trouvé dans l’étude bibliographique d’algorithme performant, c’est-à-dire en temps polynomial, pour répondre à cette question [Foggia01]. Néanmoins, en restreignant ou en pré- traitant la structure du graphe de données, la complexité peut-être améliorée dans certains cas [Corneil70]. Aujourd’hui, si l’algorithme de Ullmann [Ullmann76] est encore le plus utilisé, il existe de nombreuses alternatives comme celui proposé par Schmidt et Druffel [Schmidt76] ou plus récemment l’algorithme « VF » [Cordella99]. Foggia [Foggia01] montre ainsi que l’on peut obtenir de très bons résultats, avec un temps de résolution de l’ordre de la seconde pour des graphes à mille noeuds pour l’algorithme « VF ».

Dans tous les cas, la correspondance de graphes répond juste par oui ou par non et n’in- dique pas quels changements ont eu lieu entre le graphe G1 et le graphe G2. C’est pourquoi les algorithmes précédents ne peuvent s’appliquer directement à la comparaison de modèles d’ou- vrage. De plus la correspondance de graphes s’attache surtout à la structure même des données, c’est-à-dire l’ensemble des liens entre les noeuds, au détriment des noeuds eux-mêmes. Il s’agit d’une deuxième grande limitation. Nous verrons dans le chapitre suivant que la sémantique d’un modèle d’ouvrage se situe dans les noeuds du graphe, beaucoup plus que dans les liens. Il s’agit d’une des hypothèses fondamentales de ce travail de thèse.

Si l’on réussit à transformer le graphe associé au modèle d’ouvrage en un arbre, procédé qui sera vu au prochain chapitre, nous pouvons alors explorer d’autres pistes de solutions existants en MRO : la comparaison de structures d’arbres.

La comparaison d’arbres

Au-delà du problème de la correspondance d’arbres, qui n’est qu’un cas particulier de la cor- respondance de graphes, le problème de comparaison d’arbres évalue la différence entre deux 2A moins de démontrer que P = NP , problème d’informatique théorique encore ouvert. Aujourd’hui la conjecture

1.3. Méthodes courantes pour la synchronisation de modèles d’ouvrages 37

structures données : soit A1 et A2 deux arbres. Le but est de trouver la succession d’étapes élémentaires pour transformer l’arbre A1 en l’arbre A2 (changement de noeud, effacement, insertion). Ce problème est plus connu sous le nom Tree Edit Distance en anglais. Plusieurs algorithmes existent et ont été comparés [Bille03]. Cette fois, les noeuds ont des noms (le chan- gement du contenu d’un noeud est ainsi détectable), et les algorithmes les plus performants supposent que l’arbre soit ordonné. Ceci signifie qu’à un noeud donné, les fils sont exposés dans un seul ordre possible. Il s’agit d’une contrainte importante dans la mesure où l’ordre d’appari- tion des fils peut avoir une importance sémantique. Ainsi la figure 1.16 montre que deux arbres différents a priori deviennent équivalents avec l’hypothèse des arbres ordonnés.

(a) A K L D Z E (b) A Z K D L E (c) A E K D L Z

FIGURE1.16 :Obtention d’un même arbre ordonné à partir de deux sources différentes. A gauche (a)

et (b) sont deux arbres différents. A droite, l’hypothèse des arbres ordonnés permet de définir une classe d’équivalence dont le représentant (c) devient équivalent à (a) et (b). Il suffit pour cela de trier les noeuds frère par ordre alphabétique.

Les applications de la comparaison d’arbres sont nombreuses car la plupart des structures hiérarchisées de données sont exprimables sont forme d’arbres. Des moteurs de comparaisons se sont notamment spécialisé dans certains formats comme XML avec XyDiff [Cobena02] ou encore X-Diff [Wang03]. Généralement cette comparaison correspond à l’enchainement de deux étapes :

1. Prétraitement des données source : La première étape consiste à charger la structure en mémoire à partir d’un fichier. Cette structure peut être ensuite optimisée selon le type de données ou le type de comparaison (élagage, ordonnancement des noeuds, etc...). Par exemple des techniques de hashing des noeuds sont généralement utilisées pour optimi- ser la comparaison de sous-arbres entiers, comme DOMHash [Maruyama00] et X-Hash [Wang03] dans le cadre de la comparaisons de fichiers XML.

2. Mise en correspondance et comparaison : Ensuite, l’algorithme de mise en correspon- dance permet de calculer le passage de la première structure à la deuxième en un nombre minimal d’étapes. En effet, il existe plusieurs chemins possibles pour passer d’un arbre à l’autre et il convient de trouver le chemin optimal, cf. figure 1.17. Pour cela, il convient de définir les opérations autorisées de transformation (renommage d’un noeud, ajout et suppression d’un noeud ou d’un sous-arbre, etc.), et leur coût à l’unité, pour le calcul du chemin optimal. Les hypothèses pour restreindre le problème (arbres ordonnés, compa- raison de noeuds de même niveau, hashing des sous-arbres) sont alors nécessaires car le problème général de comparaison d’arbres non ordonnés est NP-complet [Zhang92]. Lors de la synchronisation de modèles d’ouvrages, la comparaison permet de détecter les changements et leur nature. Le versionnement va plus loin en stockant les changements sur une

(a) A E K D L Z (b) A E P Z (c) A E P D L Z

FIGURE1.17 :Chemins de transformation d’un arbre à un autre. Le but consiste de transformer (a) en

(c). Il y a deux possibilités. La première consiste à supprimer le sous-arbre de racine K, on obtient alors l’arbre (b), de créer un fils P de A et d’y insérer deux fils D et L. La deuxième possibilité consiste simplement à renommer le noeud K en P. La deuxième possibilité re- présente donc un chemin plus court.

base de données, et surtout, en assurant la cohérence du modèle lors de son évolution.