• Aucun résultat trouvé

E.11 Complétude de la fonction T R

4.20 Combinaison des fonctions de traduction

La traduction utilise un contexte Γ = ϕ1, ϕ2, ϕ3, ϕ4. Les index i et j correspondent à des références sur des racines de sous-arbres des VPMEs et des productions. Ces références ont été introduites dans la section 4.4.1.

L’élément ϕ1 établit les relations entre les nœuds extraits de la VPME et la production. Il contient l’ensemble des instructions d’extraction et de transformation associées aux deux nœuds correspondants dans la VPME et dans la production (désignés par leurs index) :

ϕ1 = {hi, j, opi} où i et j sont des indices désignant respectivement un nœud de v et un nœud de r et op un opérateur de transformation VXT.

ϕ2 permet de stocker la valeur d’un nœud de type attribut dans la production, cette information n’ap-paraissant pas directement dans la représentation visuelle des règles de transformation (seul le nom des attributs est représenté) :

ϕ2 = {hi, valuei} où i est un indice désignant un nœud de r et value une chaîne de caractères. De manière similaire, ϕ3 stocke les valeurs associées aux nœuds #PCDATA de la production :

ϕ3 = {hi, texti} où i est un indice désignant un nœud de r et text une chaîne de caractères. ϕ4 permet de relier les nœuds de type boucle for-each au nœud principal de l’itération, c’est-à-dire le nœud associé à l’instruction extrayant un ensemble d’éléments sources sur lequel l’itération est effec-tuée :

On suppose t une chaîne de caractères conforme à la définition des noms qualifiés XML ([35], production [5] valable pour les noms d’éléments et les noms d’attributs).

Cette fonction est définie par deux composantes : TR1 et TR2. Nous utilisons la notation TRc avec c ∈ {1, 2}pour désigner les cas d’applications communs aux deux composantes.

TRJ KΓ v: L(ASR) → X S TRJXKΓ v = TR1JXKΓ v [R0] TRcJVa(X1, X2)KΓ v = TRcJX1KΓ vTRcJX2KΓ v [R1] TRcJHa(X1, X2)KΓ v = TRcJX1KΓ vTRcJX2KΓ v [R2]

TRcJVa(Txt(t), Shpj(triangle, gray))KΓ⊂ϕ2,hj,valuei

v = <xsl:attribute name="t"> [R3] value

</xsl:attribute> TRcJShpj(lozenge, gray)KΓ⊂ϕ3,hj,texti

v = text [R4]

TRcJVa(Txt(t), Shpj(square, gray))KΓ

v = <t/> [R5]

TRcJVa(Txt(t), Boxj(X,gray))KΓ

v = <t> [R6]

TR1JXKΓ v </t> TRcJBoxj(X,hatched)KΓ⊂ϕ4,hj,ki

v = <xsl:for-each select="TSJvKk"> [R7] TR2JXKΓ

v </xsl:for-each> TRcJBoxj(X,blue)KΓ⊂ϕ1,hi,j,copyi

v = <xsl:copy> [R8]

TR1JXKΓ v </xsl:copy> TR1JShpj(square, blue)KΓ⊂ϕ1,hi,j,copyi

v = <xsl:copy-of select="TSJvKi"/> [R9] TR1JShpj(triangle, blue)KΓ⊂ϕ1,hi,j,copyi

v = <xsl:copy-of select="TSJvKi"/> [R10] TR1JShpj(lozenge, blue)KΓ⊂ϕ1,hi,j,copyi

v = <xsl:copy-of select="TSJvKi"/> [R11] TR1JShpj(lozenge, blue)KΓ⊂ϕ1,hi,j,texti

v = <xsl:value-of select="TSJvKi"/> [R12] TR1JShpj(circle, blue)KΓ⊂ϕ1,hi,j,copyi

v = <xsl:copy-of select="TSJvKi"/> [R13] TR1JShpj(circle, blue)KΓ⊂ϕ1,hi,j,texti

Définition formelle du langage de transformation 115 TR1JShpj(circle, blue)KΓ⊂ϕ1,hi,j,apply-rulesi

v = <xsl:apply-templates select="TSJvKi"/> [R15] TR2JShpj(square, blue)KΓ⊂ϕ1,hi,j,copyi

v = <xsl:copy-of select="."/> [R16] TR2JShpj(triangle, blue)KΓ⊂ϕ1,hi,j,copyi

v = <xsl:copy-of select="."/> [R17] TR2JShpj(lozenge, blue)KΓ⊂ϕ1,hi,j,copyi

v = <xsl:copy-of select="."/> [R18] TR2JShpj(lozenge, blue)KΓ⊂ϕ1,hi,j,texti

v = <xsl:value-of select="."/> [R19] TR2JShpj(circle, blue)KΓ⊂ϕ1,hi,j,copyi

v = <xsl:copy-of select="."/> [R20] TR2JShpj(circle, blue)KΓ⊂ϕ1,hi,j,texti

v = <xsl:value-of select="."/> [R21] TR2JShpj(circle, blue)KΓ⊂ϕ1,hi,j,apply-rulesi

v = <xsl:apply-templates select="."/> [R22] Nous définissons ensuite la fonction TP, qui génère les prédicats représentant les conditions de sélec-tion d’un nœud. Cette foncsélec-tion n’est pas appelée directement par T mais est utilisée dans la définisélec-tion de TM et TS. Cette fonction, ainsi que les suivantes, utilise deux autres fonctions nommées Pred et And. Pred génère les délimiteurs de prédicats (crochets) quand ceux-ci sont nécessaires et And détermine s’il est nécessaire d’insérer le connecteur XPath and pour lier les prédicats passés en paramètre.

Définition 15 (P red, Fonction de génération de délimiteurs de prédicats XPath)

P red : L(XP ath), L(eXQual) → L(XP ath) Pred( a, b ) =



a[b] si (b 6= ε) a si (b = ε)

Définition 16 (And, Fonction de liaison de prédicats XPath)

And : L(eXQual), L(eXQual) → L(eXQual)

And(a, b) =        a and b si (a 6= ε ∧ b 6= ε) a si (a 6= ε ∧ b = ε) b si (a = ε ∧ b 6= ε) ε si (a = ε ∧ b = ε)

TPJShp(square, s5|s6)K = //∗ [P3] TPJShp(square, s9)K = not(//∗) [P4] TPJShp(square, s11|s12)K = ε [P5] TPJVa(Txt(n), Shp(square, s1|s2|s3|s4|s7|s8))K = n [P6] TPJVa(Txt(n), Shp(square, s10))K = not(n) [P7] TPJVa(Txt(n), Shp(square, s5|s6))K = //n [P8] TPJVa(Txt(n), Shp(square, s9))K = not(//n) [P9] TPJVa(Txt(n), Shp(square, s11|s12))K = ε [P10] TPJShp(triangle, s1|s2|s3|s4|s7|s8)K = @∗ [P11] TPJShp(triangle, s10)K = not(@∗) [P12] TPJShp(triangle, s5|s6)K = //@∗ [P13] TPJShp(triangle, s9)K = not(//@∗) [P14] TPJShp(triangle, s11|s12)K = ε [P15] TPJVa(Txt(n), Shp(triangle, s1|s2|s3|s4|s7|s8))K = @n [P16] TPJVa(Txt(n), Shp(triangle, s10))K = not(@n) [P17] TPJVa(Txt(n), Shp(triangle, s5|s6))K = //@n [P18] TPJVa(Txt(n), Shp(triangle, s9))K = not(//@n) [P19] TPJVa(Txt(n), Shp(triangle, s11|s12))K = ε [P20] TPJShp(lozenge, s1|s2|s3|s4|s7|s8)K = text() [P21] TPJShp(lozenge, s10)K = not(text()) [P22] TPJShp(lozenge, s5|s6)K = //text() [P23]

Définition formelle du langage de transformation 117 TPJShp(lozenge, s9)K = not(//text()) [P24] TPJShp(lozenge, s11|s12)K = ε [P25] TPJShp(star, s1|s2|s3|s4|s7|s8)K = node() [P26] TPJShp(star, s10)K = not(node()) [P27] TPJShp(star, s5|s6)K = //node() [P28] TPJShp(star, s9)K = not(//node()) [P29] TPJShp(star, s11|s12)K = ε [P30] TPJBox(X, s1|s2|s3|s4|s7|s8)K = Pred( ∗, TPJXK) [P31]

avec X 6= Va(X1, X2)sauf X = Va(Txt(n), X2)

TPJBox(X, s10)K = not(Pred( ∗, TPJXK) ) [P32]

avec X 6= Va(X1, X2)sauf X = Va(Txt(n), X2)

TPJBox(X, s5|s6)K = Pred( //∗, TPJXK) [P33]

avec X 6= Va(X1, X2)sauf X = Va(Txt(n), X2)

TPJBox(X, s9)K = not(Pred( //∗, TPJXK) ) [P34]

avec X 6= Va(X1, X2)sauf X = Va(Txt(n), X2)

TPJBox(X, s11|s12)K = ε [P35]

avec X 6= Va(X1, X2)sauf X = Va(Txt(n), X2)

TPJVa(Txt(n), Box(X, s1|s2|s3|s4|s7|s8))K = Pred( n, TPJXK) [P36]

avec X 6= Va(X1, X2)sauf X = Va(Txt(n), X2)

TPJVa(Txt(n), Box(X, s10))K = not(Pred( n, TPJXK) ) [P37]

avec X 6= Va(X1, X2)sauf X = Va(Txt(n), X2)

TPJVa(Txt(n), Box(X, s5|s6))K = Pred( //n, TPJXK) [P38]

avec X 6= Va(X1, X2)sauf X = Va(Txt(n), X2)

TPJVa(Txt(n), Box(X, s9))K = not(Pred( //n, TPJXK) ) [P39]

avec X 6= Va(X1, X2)sauf X = Va(Txt(n), X2)

TPJVa(Txt(n), Box(X, s11|s12))K = ε [P40]

avec X 6= Va(X1, X2)sauf X = Va(Txt(n), X2)

TPJBox(Va(X1, X2), s1|s2|s3|s4|s7|s8)K = Pred( ∗, And(TPJX1K, TPJX2K) ) [P41]

avec X1 6= Txt(n)

TPJBox(Va(X1, X2), s10)K = not(Pred( ∗, And(TPJX1K, TPJX2K) ) ) [P42]

avec X1 6= Txt(n)

TPJBox(Va(X1, X2), s5|s6)K = Pred( //∗, And(TPJX1K, TPJX2K) ) [P43]

avec X1 6= Txt(n)

TPJBox(Va(X1, X2), s9)K = not(Pred( //∗, And(TPJX1K, TPJX2K) ) ) [P44]

TPJVa(Txt(n), Box(Va(X1, X2), s9))K = not(Pred( //n, And(TPJX1K, TPJX2K) ) ) [P49]

avec X1 6= Txt(n)

TPJVa(Txt(n), Box(Va(X1, X2), s11|s12))K = ε [P50]

avec X1 6= Txt(n)

TPJHa(X1, X2)K = And(TPJX1K, TPJX2K) [P51]

Nous définissons maintenant TM, fonction de traduction de VPMEs en attributs match de règles XSLT.

Définition 18 (TM, Fonction de traduction de VPME en attribut match)

On suppose t une chaîne de caractères conforme à la définition des noms qualifiés XML ([35], production [5] valable pour les noms d’éléments et les noms d’attributs).

TMJ K : V → L(XP ath) TMJShp(square, s1|s2|s3|s4)Kv = [M1] TMJVa(Txt(n), Shp(square, s1|s2|s3|s4))Kv = n [M2] TMJShp(triangle, s1|s2|s3|s4)Kv = @∗ [M3] TMJVa(Txt(n), Shp(triangle, s1|s2|s3|s4))Kv = @n [M4] TMJShp(lozenge, s1|s2|s3|s4)Kv = text() [M5] TMJShp(star, s1|s2|s3|s4)Kv = node() [M6] TMJBox(X, s1|s2|s3|s4)Kv = TPJBox(X, s)K [M7]

avec X 6= Va(X1, X2)sauf X = Va(Txt(n), X2)

TMJBoxi(X, s7|s8)Kv = Pred( ∗, TPJXK) /TMJgscn(v, i, 0)Kv [M8] avec X 6= Va(X1, X2)sauf X = Va(Txt(n), X2)

TMJBoxi(X, s5|s6|s11|s12)Kv = Pred( ∗, TPJXK) //TMJgscn(v, i, 0)Kv [M9] avec X 6= Va(X1, X2)sauf X = Va(Txt(n), X2)

TMJVa(Txt(n), Box(X, s1|s2|s3|s4))Kv = TPJVa(Txt(n), Box(X, s))K [M10] avec X 6= Va(X1, X2)sauf X = Va(Txt(n), X2)

Définition formelle du langage de transformation 119

TMJVa(Txt(n), Boxi(X, s7|s8))Kv = Pred( n, TPJXK) /TMJgscn(v, i, 0)Kv [M11] avec X 6= Va(X1, X2)sauf X = Va(Txt(n), X2)

TMJVa(Txt(n), Boxi(X, s5|s6|s11|s12))Kv = Pred( n, TPJXK) //TMJgscn(v, i, 0)Kv [M12] avec X 6= Va(X1, X2)sauf X = Va(Txt(n), X2)

TMJBox(Va(X1, X2), s1|s2|s3|s4)Kv = TPJBox(Va(X1, X2), s)K [M13] TMJBoxi(Va(X1, X2), s7|s8)Kv = Pred( ∗, And(TPJX1K, TPJX2K) ) /TMJgscn(v, i, 0)Kv [M14]

avec X16= Txt(n)

TMJBoxi(Va(X1, X2), s5|s6|s11|s12)Kv = Pred( ∗, And(TPJX1K, TPJX2K) ) //TMJgscn(v, i, 0)Kv [M15] avec X16= Txt(n)

TMJVa(Txt(n), Box(Va(X1, X2), s1|s2|s3|s4))Kv = TPJVa(Txt(n), Box(Va(X1, X2), s))K [M16] TMJVa(Txt(n), Boxi(Va(X1, X2), s7|s8))Kv = Pred( n, And(TPJX1K, TPJX2K) ) /TMJgscn(v, i, 0)Kv [M17]

avec X16= Txt(n)

TMJVa(Txt(n), Boxi(Va(X1, X2), s5|s6|s11|s12))Kv = Pred( n, And(TPJX1K, TPJX2K) ) //TMJgscn(v, i, 0)Kv [M18] avec X16= Txt(n)

En appelant la fonction TP pour générer les prédicats associés aux ancêtres du nœud contextuel, nous obtenons une expression XPath non optimale car contenant des conditions de sélection redondantes, puisque les nœuds sur l’axe principal se trouvent aussi exprimés en tant que prédicats de leur parents respectifs. Par exemple, pour la VPME suivante où d est le nœud contextuel :

a b d c TM générera a[b and c]/c[d]/d alors que l’expression optimale est

a[b]/c/d

Les deux expressions sont équivalentes et sélectionnent donc le même ensemble de nœuds. La version non optimisée peut cependant être plus coûteuse en temps puisque le processeur XSLT aura parfois à vérifier deux fois la même condition, exprimée de deux manières différentes. L’implémentation Java de la fonction de traduction tient compte de ce problème et génère des expressions XPath optimisées.

Note : la fonction TM n’est pas définie pour certains styles comme s9et s10car ces cas ne peuvent pas se produire si l’on fait l’hypothèse que les VPMEs traduites appartiennent à L(ASV)et qu’elles vérifient VF1 et VF2. La fonction TM est donc complète par rapport aux VPMEs vérifiant VF1 et VF2, et non pas par rapport à toute expression appartenant à L(ASV)(la propriété de complétude de la fonction TM est établie dans la section 4.4.5).

Nous allons dans la suite utiliser la fonction gcca (pour Get Closest Common Ancestor) qui, étant donné une VPME et un nœud sélectionné (désigné par son index), retourne l’index du nœud racine du plus petit sous-arbre de la VPME contenant à la fois le nœud contextuel et le nœud sélectionné, c’est-à-dire le sous-arbre dont la racine est le nœud le plus proche possible du nœud sélectionné et ancêtre à la fois du nœud contextuel et du nœud sélectionné. L’opération consistant à identifier le plus proche ancêtre commun de deux nœuds d’un arbre est une opération commune et bien définie dans le cadre général de la manipulation d’arbres. Nous nous contentons donc ici de définir la signature de notre fonction.

Définition 19 (gcca : Fonction d’extraction du plus petit sous-arbre contenant le nœud d’indice i et le nœud contextuel)

gcca : V × index → index

Définition 20 (TS, Fonction de traduction de VPME en attribut select)

TSJ Ki : L(ASV) → L(XP ath)

TSJvKi = . (S0a)

avec i = 0

TSJvKi = . TS1Jgscn(v, 0, i)Ki

v (S0b) avec card(gp(v, 0, i)) ≥ 2

TSJvKi = . TS2Ji2v(v, i)Kv (S0c)

avec card(gp(v, i, 0)) ≥ 2

TSJvKi = . TS3Ji2v(v, gcca(v, i))Ki

v (S0d) avec card(gp(v, i, 0)) = card(gp(v, 0, i)) = 0 ∧ i 6= 0

cardest la fonction standard retournant la cardinalité d’un ensemble ou d’une séquence. La première option (i = 0) définit le cas où le nœud sélectionné est aussi le nœud contextuel (qui a toujours par convention l’index 0). La seconde (card(gp(v, 0, i)) ≥ 2), le cas où le nœud sélectionné est un descen-dant du nœud contextuel. La troisième (card(gp(v, i, 0)) ≥ 2) représente le cas où le nœud sélectionné est un ancêtre du nœud contextuel. Enfin, la dernière option représente le reste des solutions, c’est-à-dire les cas où le nœud contextuel et le nœud sélectionné sont dans des branches différentes mais ont un ancêtre commun.

Définition formelle du langage de transformation 121 Le point (.) inséré devant chaque appel aux fonctions TSi sert à référencer le nœud contextuel dans l’expression XPath. Toutes les expressions retournées par TSont donc la forme .X où X commence par le séparateur slash (/).

Définition 21 (TS1, 1er cas de traduction de VPME en attribut select)

On suppose t une chaîne de caractères conforme à la définition des noms qualifiés XML ([35], production [5] valable pour les noms d’éléments et les noms d’attributs).

TS1J K : L(ASV) → L(XP ath) TS1JShpi(square, s7|s12)Ki v = /∗ [S1a] TS1JShpi(square, s5|s11)Ki v = //∗ [S1b] TS1JVa(Txt(n), Shpi(square, s7|s12))Ki v = /n [S1c] TS1JVa(Txt(n), Shpi(square, s5|s11))Ki v = //n [S1d] TS1JShpi(triangle, s7|s12)Ki v = /@∗ [S1e] TS1JShpi(triangle, s5|s11)Ki v = //@∗ [S1f] TS1JVa(Txt(n), Shpi(triangle, s7|s12))Ki v = /@n [S1g] TS1JVa(Txt(n), Shpi(triangle, s5|s11))Ki v = //@n [S1h] TS1JShpi(lozenge, s7|s12)Ki v = /text() [S1i] TS1JShpi(lozenge, s5|s11)Ki v = //text() [S1j] TS1JShpi(star, s7|s12)Ki v = /node() [S1k] TS1JShpi(star, s5|s11)Ki v = //node() [S1l] TS1JBoxj(X, s7|s8|s12)Ki v = Pred( /∗, TPJXK) TS1Jgscn(v, j, i)Ki [S1m] avec X 6= Va(X1, X2)et i 6= j TS1JBoxj(X, s5|s6|s11)Ki v = Pred( //∗, TPJXK) TS1Jgscn(v, j, i)Ki [S1n] avec X 6= Va(X1, X2)et i 6= j TS1JBoxi(X, s7|s12)Ki v = Pred( /∗, TPJXK) [S1o] avec X 6= Va(X1, X2) TS1JBoxi(X, s5|s11)Ki v = Pred( //∗, TPJXK) [S1p] avec X 6= Va(X1, X2) TS1JVa(Txt(n), Boxj(X, s7|s8|s12))Ki v = Pred( /n, TPJXK) TS1Jgscn(v, j, i)Ki [S1q] avec X 6= Va(X1, X2)et i 6= j TS1JVa(Txt(n), Boxj(X, s5|s6|s11))Ki v = Pred( //n, TPJXK) TS1Jgscn(v, j, i)Ki [S1r] avec X 6= Va(X1, X2)et i 6= j

TS1JBoxi(Va(X1, X2), s7|s12)Ki

v = Pred( /∗, And(TPJX1K, TPJX2K) ) [S1w] TS1JBoxi(Va(X1, X2), s5|s11)Ki

v = Pred( //∗, And(TPJX1K, TPJX2K) ) [S1x] TS1JVa(Txt(n), Boxj(Va(X1, X2), s7|s8|s12))Ki

v = Pred( /n, And(TPJX1K, TPJX2K) ) TS1Jgscn(v, j, i)Ki [S1y] avec i 6= j

TS1JVa(Txt(n), Boxj(Va(X1, X2), s5|s6|s11))Ki

v = Pred( //n, And(TPJX1K, TPJX2K) ) TS1Jgscn(v, j, i)Ki [S1z] avec i 6= j

TS1JVa(Txt(n), Boxi(Va(X1, X2), s7|s12))Ki

v = Pred( /n, And(TPJX1K, TPJX2K) ) [S1α] TS1JVa(Txt(n), Boxi(Va(X1, X2), s5|s11))Ki

v = Pred( //n, And(TPJX1K, TPJX2K) ) [S1β]

Définition 22 (TS2, 2ème cas de traduction de VPME en attribut select)

On suppose t une chaîne de caractères conforme à la définition des noms qualifiés XML ([35], production [5] valable pour les noms d’éléments et les noms d’attributs).

TS2J K : L(ASV) → L(eXP ath)

TS2JShpi(f, s1|s2|s3|s4)Kv = ε [S2a]

TS2JBoxi(X, s1|s2|s3|s4)Kv = ε [S2b]

TS2JVa(Txt(n), Shpi(f, s1|s2|s3|s4))Kv = ε [S2c] TS2JVa(Txt(n), Boxi(X, s1|s2|s3|s4))Kv = ε [S2d] TS2JBoxi(X, s7|s8|s12)Kv = TS2Jgscn(v, i, 0)Kv/parent(Pred( ∗, TPJXK) ) [S2e]

avec X 6= Va(X1, X2)

TS2JBoxi(X, s5|s6|s11)Kv = TS2Jgscn(v, i, 0)Kv/ancestor(Pred( ∗, TPJXK) ) [S2f] avec X 6= Va(X1, X2)

TS2JBoxi(Va(X1, X2), s7|s8|s12)Kv = TS2Jgscn(v, i, 0)Kv/parent(Pred( ∗, And(TPJX1K, TPJX2K) ) )

[S2g] TS2JBoxi(Va(X1, X2), s5|s6|s11)Kv = TS2Jgscn(v, i, 0)Kv/ancestor(Pred( ∗, And(TPJX1K, TPJX2K) ) )

Définition formelle du langage de transformation 123 TS2JVa(Txt(n), Boxi(X, s7|s8|s12))Kv = TS2Jgscn(v, i, 0)Kv/parent(Pred( n, TPJXK) ) [S2k]

avec X 6= Va(X1, X2)

TS2JVa(Txt(n), Boxi(X, s5|s6|s11))Kv = TS2Jgscn(v, i, 0)Kv/ancestor(Pred( n, TPJXK) ) [S2l] avec X 6= Va(X1, X2)

TS2JVa(Txt(n), Boxi(Va(X1, X2), s7|s8|s12))Kv = TS2Jgscn(v, i, 0)Kv/parent(Pred( n, And(TPJX1K, TPJX2K) ) )

[S2m] TS2JVa(Txt(n), Boxi(Va(X1, X2), s5|s6|s11))Kv = TS2Jgscn(v, i, 0)Kv/ancestor(Pred( n, And(TPJX1K, TPJX2K) ) )

[S2o]

Définition 23 (TS3, 3ème cas de traduction de VPME en attribut select)

On suppose t une chaîne de caractères conforme à la définition des noms qualifiés XML ([35], production [5] valable pour les noms d’éléments et les noms d’attributs).

TS3J K : L(ASV) → L(XP ath) TS3JBoxj(X, s7|s8|s12)Ki v = TS2Jgscn(v, j, 0)Kv/∗ TS1Jgscn(v, j, i)Ki v [S3a] TS3JBoxj(X, s5|s6|s11)Ki v = TS2Jgscn(v, j, 0)Kv//∗ TS1Jgscn(v, j, i)Ki v [S3b] TS3JVa(Txt(n), Boxj(X, s7|s8|s12))Ki v = TS2Jgscn(v, j, 0)Kv/n TS1Jgscn(v, j, i)Ki v [S3c] TS3JVa(Txt(n), Boxj(X, s5|s6|s11))Ki v = TS2Jgscn(v, j, 0)Kv//n TS1Jgscn(v, j, i)Ki v [S3d]

4.4.4 Exemple de traduction d’une règle de transformation

Nous illustrons ici le processus de traduction par l’exemple de règle VXT de la figure 4.21, qui extrait des informations sur l’auteur d’un article au format DocBook et génère des méta-données Dublin Core [69] exprimées au moyen de RDF. La règle VXT est décrite de la manière suivante :

T R = hv, r, li avec

v = Va(Txt(articleinf o), Box1(Va(Txt(author), Box0(Shp2(star, s12), s2)), s8))

r = Va(Txt(rdf : Description), Box1(Va(Txt(dc : Creator), Box2(Shp3(circle, blue), gray)), gray)) l = {h2, 3, texti}