• Aucun résultat trouvé

Etape de fusion

Dans le document en fr (Page 115-122)

Le contenu de cette section n’est pas une contribution personnelle. La formalisation de l’étape de fusion a été faite par Marina Sahakyan qui, dans sa thèse [Sah11], s’est focalisée par ailleurs sur l’implémentation et la validation expériementale de l’évaluation des mises à jour XQuery Update en utilisant la projection.

Cette section a pour but de formaliser la dernière étape du scénario de l’évaluation des mises à jour par projection. Cette étape consiste à construire le résultat finalu(t) à partir du document initialt et de la mise à jour partielle u(π(t)). Cette construction est assurée par la fonctionMerge

que nous avons présentée de manière informelle dans la Section 4.1. Nous rappelons que la fusion et doncMerges’appuie sur les deux hypothèses suivantes :

2. L’application de la mise à jouru peut introduire de nouveaux identifiants correspondant aux nouveaux noeuds introduits par l’insertion et le remplacement.

La fusion du document originalt et de la mise à jour partielle u(π(t)) est assurée par deux fonctions Merge et CMerge qui sont formalisées dans la Figures 4.25. Le tri-projecteur π est un paramètre de ces fonctions. Pour allèger la notation, il restera implicite dans la présentation de ces fonctions.

Chacune de ces deux fonctions spécifie un parcours synchronisé de deux forêts : d’une part, la forêtFi appartenant au document initialt et d’autre part, la forêt cFu appartenant au résultat de la

mise à jour partielleu(π(t)). Dans la suite, nous notons σtle store associé àt suivant la convention

habituelle) et cσu le store associé à u(π(t)). La synchronisation de la fusion est capturée ici par

l’hypothèse que les forêtsFi et cFu paramètres des fonctionsMergeetCMergesont les éléments fils

d’un seul noeudn de t, respectivement d’un seul noeud m de u(π(t)) telle que n et m partagent le même identifiant. En d’autre terme, le noeudm de u(π(t)) est issu de la projection du noeud n de t dont il a pu ou non conservé l’étiquette suivant que la mise à jour a effectué un renomage.

La fusion du documentt avec le document u(π(t)) utilise les fonctions suivantes :

TreeMerge Cette fonction prend comme paramètre deux sous-arbresti et btu et construit un arbre

tree(rtb

u, Fr) dont la racine est la racine de btu et dont la sous-forêtFr est définie à partir deMerge ouCMergeselon la catégorie de lab(rti). Cette fonction est illustrée par la Figure 4.24.

ai ti fi Fi bi tu fu Fu TreeMerge bi tr fr Fr

FIGURE4.24 – Illustration deTreeMerge

Formellement,

TreeMerge(ti | btu) =tree(rtbu,lab(rtbu), Fr) où

t.1 Fr = Merge(subfor(ti) |subfor( btu)) silab(rti)∈πno t.2 CMerge(subfor(ti) |subfor( btu)) si lab(rti)∈πolb

t.3 subfor( btu) silab(rti)∈πeb

Dans le cas oùlab(rti)∈πeb,TreeMerge(ti | btu) = btu.

MergeetCMerge Les fonctions Merge et CMerge sont formalisées dans la Figure 4.25. Elles se distinguent sur la base des deux pré-conditions ci-dessous :

Mergesuppose que(†) le type du noeud n parent de la forêt Fiest de la catégorie node only

(i) aucun noeud racine d’un arbre deFun’est de type String,

(ii) toute racine d’un arbre deFuappartient àFi, c’est à dire plus formellement, roots(Fu) ⊆

roots(Fi). Ceci est garanti parce qu’il n’y a pas d’insertion sous le noeud m.

CMerge suppose que (††) le type du noeud n est de la catégorie ’one level below’, ce qui implique que, du fait de la synchronisation,

(i) tout noeud de roots(Fi) a été projeté et roots(Fu) contient exactement les noeuds fils de m devant être retournés parCMerge.

Nous allons procéder à l’explication deMerge.

Ligne 1. Cette ligne traite le cas terminal :Fi a été complètement parcourue. Dans ce cas, cFu est

retournée et du fait de l’hypothèse(† − ii), il se trouve que cFuest forcément vide.

Ligne 2. Cette ligne traite le cas où l’élément ti traité est de type String. L’hypothèse (†) nous

permet de savoir que ce noeud a été élagué à l’aide de tri-projecteur et doit donc être réintroduit. La situation capturée par cette ligne est illustrée dans l’exemple suivant.

Exemple 58. Soit la DTDD6 donnée par les règles suivantes :

a → (b | c | d)∗

b → (e | c)?

d → (e | f | g)∗ La DTDD6 Soit la mise à jouru1spécifiée par :

for $x in self :: a return rename $x/c with ”b”

Le tri-projecteur inféré pouru1etD6est donné pour chacun de ses composants par :πno = {a, c}

etπolb= πeb= ∅.

La Figure 4.27 présente la sous-forêtFi du document initial, la sous-forêt cFu du document projeté

et mis à jour et la sous-forêtFr du résultat de la fusion deFi avec cFu. Comme le parent de Fi est

étiqueté aveca ∈ πno, cette fusion est réalisée par la fonctionMerge. Le parsing des deux forêts

commence avec le texte ’uz’ du côté deFi et le noeud cFu@1.1 du côté de cFu. Le texte ’uz’ est

immédiatement retourné car il a été élagué par le tri-projecteur. Le parsing se poursuit avec les noeudsFi@1.1 et cFu@1.1. Le traitement de ces noeuds est assuré par la ligne 4. 

Ligne 3. Cette ligne traite le cas où l’étiquettea de la racine rti de ti appartient au tri-projecteur π (et donc, un sous-arbre de ti à été projeté), et où rti n’apparaît pas dans cFu (signifiant que la projection detia été supprimée paru). Lorsque cFun’est pas vide, cette situation est identifiée en

comparant les identifiants (positions) des noeuds examinés. Dans ce cas,rtb

u > rti indique que l’arbretiprécède l’arbre btudans la forêtFi. Donc,ti n’est pas retourné.

Exemple 59. Considérons la DTDD6et la mise à jouru2spécifiée par : for $x in self :: a/b where not $x/c return delete $x/c

Le tri-projecteur inféré pouru2 etD6est :πno= {a, b, c}, πolb= πeb= ∅.

. E ta p e d e fu si o n 1 1 1 1 Merge(Fi| cFu) = Fcu si roots(Fi)=∅, sinon supposonsFi=ti· fi 2 ti · Merge(fi| cFu) si σt(rti)=text[st],

sinon supposonsσt(rti)=a[J],

3 Merge(fi| cFu) si a∈π et si roots(cFu)=∅ ou si cFu= btu· bfuetrtbu>rti 4 TreeMerge(ti | btu) · Merge(fi | bfu) si a∈π, cFu= btu· bfuetrti=rtbu

5 ti · Merge(fi| cFu) si a6∈π

(a) Définition deMerge

c.1 CMerge(Fi | cFu) = Fcu si roots(Fi)=∅,

c.1′ () si roots(cFu)=∅,

sinon supposons cFu= btu· bfu

c.2 tbu · CMerge(Fi| bfu) sicσu(rtbu)=text[st] ou new(rtbu)=true, sinon supposonsσcu(rtbu)=b[K] et Fi=ti· fi

c.3 CMerge(fi | cFu) si σt(rti)=text[st] ou σt(rti)=a[J] avec a∈π et rtbu > rti c.4 TreeMerge(ti| btu) · CMerge(fi| bfu) si a∈π, σt(rti)=a[J], et rti=rtbu

c.5 ti · Merge(fi| bfu) si a6∈π et σt(rti)=a[J] (b) Définition deCMerge

a [1] ′ uz′ c [1.1] (1) sous-forêtFi a [1] b [1.1] (2) sous-forêt cFu a [1] ′ uz′ b [1.1] (3) résultatFr

FIGURE4.26 – Illustration deMerge: line 2

a [1] b [1.1] e [1.1.1] b [1.2] e [1.2.1] b [1.3] c [1.3.1] (1) sous-forêtFi a [1] ddd ddddd ddd ddddd b [1.3] c [1.3.1] (2) sous-forêt cFu a [1] b [1.3] c [1.3.1] (3) résultatFr

FIGURE4.27 – Illustration deMerge: line 3

à jour projeté dans lequel les noeudsFi@1.1 et Fi@1.2 ont été projetés (puisque b ∈ πno) puis

supprimés paru2et la sous-forêtFrle résultat de la fusion deFiet cFu. Cette fusion est assurée par

Mergecar le parent deFi est étiquetéa et que a ∈ πno. Le parsing deMergecommence avec les

noeudsFi@1.1 et cFu@1.3. Comme la position 3 du noeud cFu@1.3 est supérieure à la position 1

du noeudFi@1.1, la ligne 3 deMergeest appliquée. Le traitement effectué par cette ligne consiste

à ignorer le noeudFi@1.1 et à examiner le prochain noeud dans Fi. Les noeuds qui sont examinés

parMerge sont maintenant Fi@1.2 et cFu@1.3. La position de cFu est toujours supérieure à celle

deFi@1.2 entraînant l’application de la ligne 3 à nouveau. Les noeuds examinés par Merge sont Fi@1.3 et cFu@1.3, ils possèdent la même position. Le traitement est maintenant assuré par la ligne

4 deMerge. 

Ligne 4. Cette ligne traite le cas de la synchronisation des noeudsrtb

u etrti dont les étiquettes peuvent être différentes, du fait d’un renommage. Dans ce cas, l’arbreTreeMerge(ti | btu) défini

ci-dessus est retourné.

Ligne 5. Cette ligne traite le cas où l’étiquettea de rti n’appartient pas au tri-projecteur impli- quant quetia été élagué. Dans ce cas,tiest retourné.

Nous procédons maintenant à l’explication deCMerge. Rappelons queCMergefait l’hypothèse (††) décrite ci-dessus. Cela implique que le parcours simultané de Fiet cFu est guidé par cFu.

Lignes c.1, c.1’ Ces lignes traitent les cas terminaux. Lorsque la forêtFi est vide (ligne c.1), c

Fu est retournée. Lorsque la forêt cFu est vide (ligne c.1’) l’hypothèse(††) implique que la

forêtFiest vide aussi. Donc, la forêt vide est retournée.

Ligne c.2 Cette ligne traite le cas où l’arbre btu est un texte ou un nouvel élément. Ce dernier

sous-cas est capturé par le fait que l’identifiant de la racinertbuest nouveau (new(rtbu)=true). Donc, l’arbre btu est retourné. Le parsing de Fi est arrêté. La synchronisation reprend après

Exemple 60. Considérons la mise à jouru3spécifiée par :

for $x in self :: a return insert (”txt”<new/>) as first into $x a [1] f [1.1] g [1.2] (1) sub-forestFi a [1] ”txt” [i1] new [i2] [1.1]f g [1.2] (2) sub-forest cFu a [1] ”txt” [i1] new [i2] [1.1]f g [1.2] (3) resultFr

FIGURE4.28 – Illustration deCMerge: ligne c.2

Le tri-projecteur pouru3etD6est :πno = πeb= ∅, πolb= {a}.

Les forêts Fi, cFu etFr sont présentées dans la Figure 4.28. La forêt cFu possède deux nou-

veaux noeuds : un texte ’txt’ suivi d’un élément vide new. Le noeud parent de la forêt Fi@1 est étiqueté a ∈ πolb. Par conséquent, les forêts Fi et cFu doivent être fusionnées

par CMerge. Les premiers noeuds examinés par CMerge sont Fi@1.1 et cFu@i1. La condi-

tion cσu(rtbu) = text[st] est vérifiée donc la ligne c.2 est appliquée : le noeud texte cFu@i1 est retourné, le parsing avance dans cFu. Le prochain noeud de cFu examiné est celui dont

l’identifiant est i2 indiquant qu’il est nouveau et étiqueténew. Dans ce cas, la ligne c.2 est

appliquée : le noeud cFu@i2 est retourné, le parsing avance dans cFu. Les noeuds qui sont

examinés,Fi@1.1 et cFu@1.1, sont traités par la ligne c.5 puisque leur étiquette f /∈ π. 

Ligne c.3 Cette ligne est similaire à la ligne 3 deMerge. Elle traite le cas où le sous-arbretide Fia été projeté et supprimé. Notez que cette ligne traite également le cas oùtiest un texte.

Dans ce cas, il est ignoré puisque le texte qui lui correspond dans cFu, ayant été éventuellement

mis à jour paru, a pu être retourné par l’application de la ligne c.2.

Ligne c.4 Cette ligne traite le cas dual de celui de la ligne 4 deMerge(synchronisation). Ligne c.5 Cette ligne traite le cas dual de celui de la ligne 5 deMerge. Dans ce cas, bien qu’elle

soit implicite, l’égalitérti=rtbuest vérifiée du fait de l’hypothèse(††). Le noeud identifié par rti=rtbu appartient aux deux forêts d’où la nécessité de poursuivre le parcours surFi et cFu simultanément.

Nous venons de présenter l’étape de fusion qui constitue la dernière étape de notre scénario. Pour rappel, ce scénario est composé, pour une DTDD, une mise à jour u et un document t valide pourD de quatre étapes :

1. inférence du tri-projecteurπ pour u et D,

2. élagage du documentt à l’aide du tri-projecteur π produisant la projection π(t),

3. application de la mise à jour u sur la projection π(t) retournant la mise à jour partielle u(π(t)), et

4. fusion du document originalt et de la mise à jour partielle u(π(t)) pour produire le résultat finalu(t).

t u(t) ΠK(t,π) TreeMerge(t | u(π(t))) π(t) u(π(t)) Projection Updateu Fusion

FIGURE4.29 – Méchanisme de mise à jour : illustration

À partir de ce point, l’exposé des travaux est ma contribution : il s’agit des résultats et de la preuve de la correction de la technique de projection.

Le résultat principal énonce la correction de la fusion c.a.d. que la fusion du document original t avec la mise à jour partielle u(π(t)) produit effectivement la mise à jour du document original u(t). Formellement,

Théorème 4.

Soit une DTD D, une mise à jouru , et π le tri-projecteur inféré pour u et D. Alors pour tout p-documentt∈D on a :

TreeMerge(t | u(π(t))) ≃ u(t) (4.1)

La preuve du Théorème 4 s’appuie sur le résultat énoncé par le Théorème suivant :

Théorème 5.

Sous les mêmes hypothèses que le Théorème 4, on a :

u(π(t)) ≃ ΠJ(u(t)) avec J = dom(u(t)) − [dom(t) − K(t, π)] (4.2a)

i∈[dom(u(t)) − J] implique que u(t)(i)=t(i) (4.2b)

Le point (4.2a) est illustré par le diagramme de la Figure 4.30. Intuitivement, il formalise le fait que la projection suivantK(t, π) préserve l’effet de la mise à jour u : élaguer u(t) en se servant des identifiants n’appartenant pas àK(t, π) produit un document équivalent à u(π(t)). Cet élagage revient à projeteru(t) suivant J.

Le point (4.2b) exprime le fait que les noeuds qui ne sont pas projetés sont invariants. Ces noeuds sont donnés dansu(t) par dom(u(t)) − J.

La preuve du Théorème 5 est présenté dans l’Annexe C. La preuve du Théorème 4 n’est pas détaillée. Elle est fondée comme dit précédemment sur le Théorème 5 et s’effectue par une étude de cas suivant la structure de la spécification deTreeMerge.

t σω, ω u(t) ΠK(t,π) ∼ ΠJ π(t) σcω,ωb u(π(t)) Projection Projection pré-évaluation de u pré-évaluation de u Application de laPUL Application de laPUL

FIGURE4.30 – Correction du tri-projecteur pour les mises à jour.

Dans le document en fr (Page 115-122)