• Aucun résultat trouvé

Un pré−couplage est un ensemble d’associations entre les nœuds des arbres de types source et cible utilisés pour la transformation. Le but d’un pré−couplage est de diriger l’algorithme de transformation automatique sur une relation de massif qui mette en relation les nœuds pré−couplés.

Dans cette section nous définissons précisément la notion de pré−couplage et proposons un langage permettant de spécifier des pré−couples.

VI.3.1 Définitions Pré−couple

Une relation liant un nœud d’un arbre de types source avec un nœud d’un arbre de types cible est appelée pré−couple.

La relation associant un élément avec le nœud représentant son type dans l’arbre canonique n’étant pas bijective. Un pré−couple a la propriété de spécifier le type cible d’un ensemble d’éléments de l’instance source. Un nœud x de l’arbre de types source et un nœud x’ de l’arbre de type cible sont pré−couplés si et seulement si il existe une relation de pré−couple p entre x et x’ ; x = θ(p) est alors appelé origine du pré−couple et x’= ρ(p) est appelé cible du pré−couple.

Pré−couplage

Un ensemble de pré−couples P = {p1, ..., pn) est un pré−couplage si et seulement si ∀ (i, j) ∈ [1,n]×[1,n], θ(pi) ≠ θ(pj). Les nœuds origine des pré−couples composant un pré−couplage sont tous différents.

Un pré−couplage Pγ d’un arbre de types A dans un arbre de types A’ définit une fonction de pré−couplage notée γ associant à chaque nœud origine de l’arbre de type source le nœud cible correspondant dans l’arbre de types cible. L’ensemble des nœuds origine d’un pré−couplage (le domaine de γ) est noté Θ(Pγ).

VI.3.2 Expression d’un pré−couplage

Pour permettre la ré−utilisation des pré−couples définis pour une transfor-mation, ceux−ci doivent être mémorisés.

Pour permettre la ré−utilisation des pré−couples définis pour une transfor-mation, ceux−ci doivent être mémorisés.Il doivent également pouvoir être ex-primés quels que soient les arbres de types considérés. C’est dans ce but que nous proposons un langage d’expression de pré−couplages. Ce langage est basé sur la syntaxe XML. Cette syntaxe permet de décrire facilement les structures de documents (dans section III.3.3.7 nous avons vu comment XSL se sert de XML pour décrire des fragments de structures de documents, avec les tem-plates).

Nous décrivons la syntaxe de ce langage en l’illustrant à l’aide de la trans-formation d’un élément exercice en paragraphe présentée dans le chapitre pré-cédent. Le couplage calculé par l’algorithme automatique est représenté dans la figure 49, en particulier le nœud énoncé de l’arbre source et couplé avec un nœud liste et le nœud solution est couplé avec un nœud groupe.

{exercice} titre T (énoncé) [énoncé#1] p T question T (solution) [pa] T réponse T [paragraphe]

simple cite (liste) (groupe) {titré}

titre

T

(corps)

[paragraphe]

simple cite (liste)

(item)

[paragraphe]

(groupe)

[paragraphe]

{titré}

Supposons maintenant que l’on veuille que l’énoncé et la solution soient transformés en groupes, il faut alors pré−coupler le type énoncé et le type solu-tion avec le type groupe. Le pré−couplage est représenté par les flèches rouges sur la figure 50. {exercice} titre T (énoncé) [énoncé#1] p T question T (solution) [pa] T réponse T [paragraphe]

simple cite (liste) (groupe) {titré}

titre

T

(corps) [paragraphe]

simple cite (liste)

(item)

[paragraphe]

(groupe)

[paragraphe]

{titré}

Figure 50 : Pré−couples entre les arbre de type exercice et paragraphe. Un pré−couplage est décrit par une structure d’éléments XML node. Cette structure est une projection de l’arbre de types source ne conservant que les nœuds appartenant aux branches comprenant un nœud de Θ(P). Dans l’exemple cette structure comprend les nœuds exercice, énoncé et solution.

Les éléments correspondant aux nœuds source des pré−couples ont un en-semble d’éléments destnode parmi leurs fils qui définit le nœud cible du pré−couplage. Cet ensemble d’éléments est composé des nœuds ancêtres suc-cessifs compris entre la racine de l’arbre de types cible et le nœud cible du pré−couple. Ces nœuds sont présentés en bleu dans la figure 50.

La figure 51 présente l’expression du pré−couplage. Un élément XML pre-couples contient les éléments node décrivant les nœuds pré−couplés de l’arbre de type source. Cet élément porte impérativement un attribut target−type don-nant le nom du type racine de l’arbre cible. L’élément precouples est composé d’un ou plusieurs éléments de type node correspondant aux racines des arbo-rescences des types source. Chaque élément node porte impérativement un at-tribut type contenant le nom du type représenté par le nœud. S’il représente un nœud origine d’un pré−couple, un élément node contient une séquence d’élé-ments targetnode identifiant le nœud cible en donnant la descendance des

éléments depuis la racine de l’arbre de types cible jusqu’au nœud cible du pré−couple. Les éléments node peuvent également contenir d’autre éléments node représentant leurs fils dans l’arbre de types source, permettant ainsi de définir des pré−couplages impliquant des descendants de nœuds pré−couplés.

<precouples targettype="paragraphe"> <node type="exercice"> <node type="énoncé"> <targetnode type="paragraphe"/> <targetnode type="titré"/> <targetnode type="corps"/> <targetnode type="paragraphe"/> <targetnode type="groupe"/> </node> <node type="solution"> <targetnode type="paragraphe"/> <targetnode type="titré"/> <targetnode type="corps"/> <targetnode type="paragraphe"/> <targetnode type="groupe"/> </node> </node> </precouples>

Figure 51 : Déclaration d’un pré−couplage

La syntaxe du langage présenté ici reprend l’idée de XSL qui consiste à dé-crire les structures de documents en utilisant le marquage. Mais à la différence de ce langage de transformation, nous décrivons ici des arbres de types et non des structures d’éléments car la localisation des types pré−couplés est relative aux arbres de types alors que les transformations XSL se fondent sur la struc-ture spécifique des documents. De plus, nous n’associons pas à ces strucstruc-tures des règles de génération, mais l’identification d’un nœud dans l’arbre de types cible. Pour cela une séquence d’éléments est suffisante.

Les pré−couples pouvant être spécifiés de façon interactive, les expressions de ce langage doivent pouvoir être construites à partir des arbres de types. Contrairement aux patterns du langage XSL qui décrivent un sous−arbre spéci-fique, la syntaxe XML présentée ici permet de représenter directement une partie de l’arbre de types cible.

Notons que l’arbre de types source n’est pas représenté intégralement dans l’expression d’un pré−couplage, seules les branches contenant des nœuds ori-gines d’un pré−couple sont nécessaires. Ainsi dans l’exemple précédent, le nœud titre n’est pas représenté dans l’expression du pré−couplage.

La syntaxe du langage des expressions de pré−couplage est donnée sous la forme d’une DTD XML :

<!ELEMENT precouples (node+) > <!ATTRLIST precouples

target−type CDATA #REQUIRED > <!ELEMENT node ((targetnode)*, (node)*) > <!ATTRLIST node

type CDATA #REQUIRED > <!ELEMENT targetnode EMPTY > <!ATTRLIST targetnode

type CDATA #REQUIRED >

L’exemple de la figure 51 montre que la syntaxe des spécifications de pré−couplage peut être complexe et réclamer des spécifications assez longues. Cela va à l’encontre des objectifs que nous nous sommes fixés dans le cha-pitre II.

Il est également difficile de prévoir quels pré−couplages seront nécessaires pour la correction d’une relation de massif retrouvée par la comparaison d’arbres de types. Le pré−couplage permettant de compléter ou de préciser la relation trouvée par cette comparaison, il est logique que la spécification d’un pré−couplage intervienne suite à une première transformation automatique. Le mode d’utilisation de la méthode proposée dans ce chapitre est donc le plus souvent un processus cyclique impliquant la transformation automatique et la spécification explicite.

Pour ces deux raisons, nous proposons de n’utiliser ce langage que pour la mémorisation des pré−couples et d’intégrer la spécification de pré−couplage à l’application de transformation. L’utilisateur ne verra donc pas ce langage, mais pourra spécifier les pré−couples à travers une interface simple.