• Aucun résultat trouvé

E.11 Complétude de la fonction T R

4.21 Exemple de règle VXT à traduire

TMJvK = Pred( articleinfo, TPJv1K)/TMJgscn(v, 1, 0)K (M11) avec v1= gscn(v, 1, 0) = Va(Txt(author), Box0(Shp2(star, s12), s2))

= Pred( articleinfo, TPJv1K)/TPJv1K (M10)

= Pred( articleinfo, TPJv1K)/Pred( author, TPJShp2(star, s12)K) (P36)

= Pred( articleinfo, TPJv1K)/Pred( author, ε ) (P30)

= Pred( articleinfo, Pred( author, TPJShp2(star, s12)K) )/Pred( author, ε ) (P36)

= Pred( articleinfo, Pred( author, ε ) )/Pred( author, ε ) (P30)

= Pred( articleinfo, Pred( author, ε ) )/author (pred)

= Pred( articleinfo, author )/author (pred)

= articleinfo[author]/author (pred)

Traduction du corps de la règle TRJrKΓ v = TR1JrKΓ v (R0) avec Γ/ϕ1= {h2, 3, texti}, ϕ2= ∅, ϕ3= ∅, ϕ4= ∅ TR1JrKΓ v = <rdf:Description> (R6)

TR1JVa(Txt(dc : Creator), Box2(Shp3(circle, blue), gray))KΓ v

</rdf:Description>

= <rdf:Description> (R6)

<dc:Creator>

TR1JShp3(circle, blue)KΓ⊂ϕ1,h2,3,texti

v </dc:Creator> </rdf:Description> = <rdf:Description> (R14) <dc:Creator> <xsl:value-of select=" TSJvK2"/> </dc:Creator> </rdf:Description>

Traduction de l’expression XPath associée à l’attribut select

Nous avons :

gp(Va(Txt(articleinf o), Box1(Va(Txt(author), Box0(Shp2(star, s12), s2)), s8)), 0, 2) = [0, 2] donc :

Définition formelle du langage de transformation 125 Alors : TSJvK2 = . TS1Jgscn(v, 0, 2)K2 v (S0b) = . TS1JShp2(star, s12)K2v (gscn) = ./node() (S1k) Résultat final

TJhv, r, liK = <xsl:template match="articleinfo[author]/author"> <rdf:Description> <dc:Creator> <xsl:value-of select="./node()"/> </dc:Creator> </rdf:Description> </xsl:template> 4.4.5 Propriétés de la fonction de traduction

Nous venons de définir formellement la syntaxe visuelle des règles de transformation VXT ainsi que la fonction de traduction générant des feuilles de transformation XSLT à partir de programmes VXT. Nous allons maintenant utiliser ces définitions pour établir deux propriétés de la fonction de traduction : sa validité (correctness) et sa complétude (completeness).

Validité des feuilles de transformation produites

Il n’est pas possible de prouver la validité17des feuilles de transformation XSLT en général car celles-ci mélangent des instructions XSLT avec des fragments d’arbre résultat. Le W3C fournit un fragment de DTD non normatif pour les feuilles de transformation XSLT ([82], en particulier les annexes C et D). Il ne s’agit que d’un fragment de DTD, une DTD complète ne pouvant être obtenue que par l’association de fragments de la DTD des documents cibles (la feuille de transformation mêlant dans les règles ins-tructions XSLT et fragments de résultat). On parle alors d’instanciation d’une DTD résultat spécifique propre à la feuille de transformation. Dans notre cas, ne connaissant a priori rien sur la classe des docu-ments produits par la transformation, nous ne pouvons pas vérifier que la fonction de traduction génère des feuilles de transformation valides, faute d’avoir une DTD générale pour les feuilles de transformation XSLT. Nous pouvons par contre montrer que la fonction de traduction produit des feuilles de transfor-mation XSLT bien formées au sens XML et que les expressions XPath associées aux attributs match et select des instructions de transformation sont syntaxiquement correctes.

Nous énonçons ici les propriétés qui doivent être établies sur les différentes fonctions composant la fonction de traduction T. Le détail des démonstrations est donné en annexe E.

Propriété 1 (Correction syntaxique des expressions engendrées par TP)

TPJvK = x =⇒ x ∈ L(eXQual)

Preuve par induction sur la structure. Voir Annexe E.2

TRJrK = x =⇒ x ∈ X S

Nous rappelons que X S désigne l’ensemble des documents XML bien formés décrits par une instan-ciation du fragment de DTD relatif au langage XSLT (voir section 4.4.3). Preuve par induction sur la structure. Voir Annexe E.5

Complétude de la fonction de traduction

Nous venons de montrer que les différentes fonctions composant la fonction de traduction engendrent toujours des expressions XPath syntaxiquement correctes et que le contenu des règles xsl : template est bien formé au sens XML. Nous allons maintenant prouver la complétude de chaque fonction de trans-formation, c’est-à-dire que pour toute règle VXT bien formée (vérifiant les fonctions VFi), il existe une traduction en règle XSLT. Nous combinerons ensuite pour chaque fonction les deux propriétés établies et nous énoncerons la propriété générale sur la fonction complète T.

Pour cela, nous devons prouver les quatre propriétés suivantes :

Propriété 5 (Complétude de TP)

∀ v ∈ L(ASV), ∃ x | (x = TPJvK) Voir Annexe E.7

Propriété 6 (Complétude de TM)

∀ v ∈ V ∧ `D v, ∃ x | (x = TMJvK) Voir Annexe E.9

Propriété 7 (Complétude de TS)

∀ v ∈ L(ASV) ∧ ∀i | (i ≥ 0 ∧ i ∈ I), ∃ x | (x = TSJvKi) Nous rappelons que I est l’ensemble des index de la VPME (voir la Définition 5). Voir Annexe E.10

Propriété 8 (Complétude de TR)

∀ r ∈ R, ∃ x | (x = TRJrK) Voir Annexe E.11

Autres travaux 127 Nous pouvons alors exprimer pour chaque fonction de transformation une propriété combinant les propriétés de complétude et de correction syntaxique.

Propriété 9 (Par combinaison des propriétés 1 et 5)

∀ v ∈ L(ASV), ∃ x | (TPJvK = x ∧ x ∈ L(eXQual))

Propriété 10 (Par combinaison des propriétés 2 et 6)

∀ v ∈ V, ∃ x | (TMJvK = x ∧ x ∈ L(XP ath))

Propriété 11 (Par combinaison des propriétés 3 et 7)

∀ v ∈ L(ASV), ∃ x | (TSJvK = x ∧ x ∈ L(XP ath))

Propriété 12 (Par combinaison des propriétés 4 et 8)

∀ r ∈ R, ∃ x | (TRJrK = x ∧ x ∈ X S)

Nous pouvons alors écrire pour la fonction générale T, en examinant la définition 13 et en utilisant les propriétés ci-dessus :

∀ tr ∈ T R | (tr = hv, r, li ∧ v ∈ V ∧ r ∈ R), ∃ xs ∈ X S | (xs = TJhv, r, liK)

C’est-à-dire que pour toute règle de transformation VXT bien formée, il existe une traduction en règle XSLT bien formée au sens XML et correcte du point de vue de la syntaxe XPath.

4.5 Autres travaux

Par rapport aux langages de transformation textuels, VXT, langage spécialisé dans la transformation de documents XML, se positionne à un niveau d’abstraction assez élevé puisqu’au dessus de XSLT. Son expressivité est cependant proche de celle de ce dernier si l’on tient compte de la possibilité d’exprimer la plupart des prédicats et paramètres non capturés directement par le langage visuel sous forme textuelle (la spécification textuelle se fait dans une fenêtre résumant les propriétés de l’entité sélectionnée comme nous le verrons dans le chapitre 7). Il est ainsi relativement simple de générer des feuilles de transfor-mation XSLT à partir de programmes VXT. La distance entre VXT et Circus est plus grande, ce dernier se trouvant à un niveau d’abstraction inférieur à celui de XSLT. Proposer un mode Circus dans VXT est cependant intéressant pour plusieurs raisons. Premièrement, VXT représente une interface visuelle conviviale pour l’utilisateur débutant non familier avec Circus qui lui permet de créer des transformations sans avoir à apprendre la syntaxe du langage et sans devoir spécifier ou choisir une technique de trans-formation. Le mode Circus est aussi un moyen pour l’utilisateur familier avec XSLT de faire la transition entre les deux langages, puisque VXT peut aussi être utilisé pour générer des transformations partielles, c’est-à-dire des squelettes de code que l’utilisateur finira de remplir manuellement.