• Aucun résultat trouvé

3.3 D´efinition du mod`ele

3.3.1 Motifs d’Arbres

Dans une requˆete XQuery, nous pouvons d´eclarer des ensembles d’arbres grˆace aux mots cl´es for et let, auxquels nous associons une variable que nous nommons une variable de d´efinition, permettant de d´eterminer un domaine de valeur. A chacune

3.3.3 D´efinition du mod`ele 49

de ces variables peut ˆetre associ´e un ou plusieurs chemins (ou XPath) produisant une structure arborescente d’´el´ements qu’un document XML doit respecter pour ˆetre s´electionn´e. Nous pouvons identifier ces ´el´ements par des nœuds correspondant aux noms des balises. Les liens reliant deux nœuds d´eterminent les axes de recherches (d´evelopp´e en annexe B) entre ces deux ´el´ements. Enfin, la notion d’optionalit´e (´etudi´e dans l’annexe C) d’un ´el´ement provient des chemins d´eclar´es dans la clause return d’une requˆete, ainsi la liaison entre deux nœuds peut ˆetre optionnelle. Ainsi, un motif d’arbre (ou TreePattern) repr´esente les diff´erentes balises qu’un document doit contenir pour ˆetre s´electionn´e. Il contient une hi´erarchie de nœuds donnant la structure arborescente du document requis. Chaque chemin d’une requˆete XQuery g´en`ere un ensemble de nœuds et de liens entre nœuds li´e `a une variable de d´efinition.

D´efinition 3.2 : Nœud (Node)

Un nœud est un ´el´ement d’un motif d’arbre. Il d´efini la correspondance entre un ´el´ement du document XML et le nom du nœud. Cette correspondance d´epend du type de motif d’arbre du nœud.

Un nœud d´efini la correspondance entre un ´el´ement d’un document XML et le nom de l’´element du motif d’arbre. Chaque nœud d’un TreePattern doit ˆetre pr´esent dans le document cibl´e. Dans le cas des motifs d’arbre source et interm´ediaire, chaque nœud filtre l’´el´ement cibl´e. Dans le cas des motifs d’arbre r´esultat ou d’agr´egation, les nœuds correspondent `a la cr´eation d’un ´el´ement dans le document XML. Afin de repr´esenter les sp´ecificit´es de XQuery, les namespace et les ast´erisques sont int´egr´es aux noms des nœuds.

D´efinition 3.3 : Lien de nœud (NodeLink)

Un lien de nœud est un axe de parcours entre deux nœuds. Il contient trois informations : axe de parcours entre les deux nœuds, optionalit´e du lien (obligatoire ou optionnel) et l’indice de d´eclaration dans la requˆete.

Un lien de nœud repr´esente une relation entre deux nœuds. Ainsi, deux ´el´ements d’un document XML doivent respecter cette relation pour ˆetre valid´e par le motif d’arbre. L’association entre les deux nœuds d´epend de l’axe de parcours du docu-ment. Seuls les axes child, descendant, descendant-or-self, ancestor, following-sibling, preceding-sibling, following, preceding, et ancestor-or-self sont utilis´es des liens (les autres sont simplifi´es et consid´er´es comme des nœuds).

Concernant l’information d’optionalit´e d’un nœud, le second ´el´ement du lien doit apparaˆıtre si cette information est obligatoire. Tandis que si cette information est optionnelle, alors l’arbre XML n’est pas ´elimin´e si cette information est absente. L’indice de d´eclaration correspond `a l’ordre de d´eclaration des XPath dans une

requˆete XQuery, cet indice implique un ordre de v´erification1, et non un ordre d’ap-parition dans le document XML (cette information correspondant `a une contrainte). Repr´esentation graphique des nœuds et des liens de nœuds

Pour repr´esenter graphiquement cet ensemble de nœuds, chaque nœud est mod´elis´e par son label, chaque NodeLink reliant deux nœuds est repr´esent´e sous forme d’un lien ; (1) plein lorsqu’il est obligatoire, (2) en pointill´es lorsqu’il est optionnel, (3) simple lorsque l’axe entre les deux nœuds est de type ’child ’, et (4) double lorsqu’elle est de type ’descendant’, ces deux repr´esentations ´etant les plus courantes en XQuery sont utilis´es tel quel. Concernant les autres axes possibles, les liens sont annot´es par leur nom respectif :

– descendant-or-self : lien double avec mot-cl´e or-self ; – ancestor : un lien double avec mot-cl´e a ;

– ancestor-or-self : lien double avec mot-cl´e a-or-self ; – following : lien avec mot-cl´e f ;

– following-sibling : lien avec mot-cl´e fs ; – preceding : lien avec mot-cl´e p ;

– preceding-sibling : lien avec mot-cl´e ps ;

L’ordre des nœuds d´efinit la position du lien lors de sa d´eclaration dans la requˆete, il n’influe pas sur sa position dans le document (induit par une contrainte ou un lien).

catalog book Patterns title author Pattern Links Ancestor/ Descendant Parent/Child Optionnal

Fig.3.3 – Ensemble de nœuds

Nous pouvons ainsi repr´esenter les nœuds «catalog», «book», «title» et «author» `a l’aide de NodeLink s interconnectant cet ensemble de nœuds. La repr´esentation gra-phique de cet ensemble illustr´e par la figure 3.3 contient trois NodeLink s. Le premier entre catalog et book est obligatoire (trait plein). Le second lien entre book et title est obligatoire, en premi`ere position et la relation est de type ancˆetre/descendant, alors que le troisi`eme lien entre book et author est optionnel, de type parent/enfant et en seconde position.

La figure 3.4 illustre un motif d’arbre (`a gauche) que l’on applique sur un document XML (`a droite). Ce document est un catalogue contenant deux livres («l’assassin royal» et «la nef du cr´epuscule»), tous deux ont un titre, par contre seulement un

1

3.3.3 D´efinition du mod`ele 51

seul poss`ede un auteur. Chaque livre contient une ou plusieurs sections avec un titre. Le motif d’arbre s´electionne tous les titres quelque soit son ascendance (double lien) et un auteur optionnel. Ainsi, la r´eponse `a ce motif d’arbre correspond `a la s´election des deux livres, avec tous les titres, y compris ceux des sections, et l’auteur s’il existe (premier livre). catalog book title author catalog book

title author section

title book title section title section "L’assassin Royal" "Robin Hobb" "Chapitre I" title "La nef du crépuscule"

"Chapitre I" "Chapitre II"

Fig. 3.4 – Motif d’arbre appliqu´e `a un document XML

Ainsi, grˆace aux nœuds et liens de nœuds nous pouvons former un motif d’arbre (TreePattern) que nous pouvons utiliser afin de d´efinir un filtre pour document XML. Un domaine est d´etermin´e par sa variable de d´efinition et une racine de document (chemin de d´eclaration d’une clause for ), cette racine d´etermine le sous-ensemble du document XML qui est d´efini par la variable de d´efinition. Chaque chemin associ´e `a cette variable est li´e `a la racine produisant ainsi le motif d’arbre. La source du motif est le nœud d´eterminant l’ensemble de s´election (ie. nom de collection) `a laquelle est reli´ee la racine.

D´efinition 3.4 : Motif d’arbre (TreePattern)

Un motif d’arbres est un ensemble de Node et de NodeLink associ´e `a une variable de d´efinition, une source et une racine.

Un motif d’arbre est l’ensemble des nœuds et des liens de nœuds qu’un document XML doit poss´eder pour ˆetre filtr´e par celui-ci. La variable de d´efinition correspond `

a son nom unique qui est utilis´e en r´ef´erence dans la requˆete XQuery. La source correspond au premier nœud du motif, alors que la racine correspond au(x) nœud(s) auquel(s) est associ´e les XPath d´efinissant le domaine de s´election.

Repr´esentation graphique d’un motif d’arbre

La repr´esentation graphique d’un TreePattern s’appuie sur la mod´elisation des liens entre les diff´erents nœuds par l’interm´ediaire des NodeLink s. Pour compl´eter le Tree-Pattern, nous encapsulons l’ensemble de nœuds dans une bulle `a laquelle nous asso-cions la variable de d´efinition. Diff´erents types de bulles sont propos´es par la suite, ils d´ependent du type de motif d’arbre `a repr´esenter.

Ainsi dans l’exemple de la figure 3.5, nous pouvons remarquer un motif d’arbre dont la source est le nœud catalog, et book en est la racine. Le lien entre author et book est

$a

catalog

book

title author

Fig. 3.5 – Motif d’arbre simple (TreePattern)

optionnel car il est repr´esent´e en pointill´e et de type p`ere/fils car le trait est simple. Le lien entre les nœuds book et title est de type ancˆetre/descendant car il est double et obligatoire car il est en trait plein. Pour finir, nous pouvons voir que la variable de d´efinition de ce motif d’arbre est $a annot´e dans la bulle de ce TreePattern. Diff´erents types de motifs d’arbres

Comme nous pouvons le constater dans le langage de requˆetes XQuery, plusieurs types d’expressions permettent de d´efinir un ensemble d’´el´ements, chacun correspond `

a un motif d’arbres. Nous pouvons identifier deux types de clauses for (document cible ou red´efinition de variable) pour s´electionner des arbres et sous arbres dans un document XML, une clause let pour cr´eer des agr´egats sur des arbres, et la clause return pour cr´eer un motif de cr´eation de document XML `a partir des s´elections. Nous pouvons donc d´efinir quatre types de TreePattern :

– Motif d’arbre source (SourceTreePattern ou STP) : Un motif d’arbre source est un motif d’arbre d´efinissant un document ou un ensemble de docu-ment XML cible. Il est associ´e `a une racine.

un motif d’arbre source correspond `a un document XML cibl´e par une clause for auquel est associ´e un XPath racine, permettant de s´electionner un sous-ensemble du document XML cibl´e. Ce motif nous permet de d´efinir un domaine qui peut ˆetre utilis´e dans le reste du mod`ele.

– Motif d’arbre Interm´ediaire (IntermediateTreePattern ou ITP) : Un motif d’arbre interm´ediaire est un motif d’arbre d´efinissant un sous-ensemble de nœuds `a partir d’un motif d’arbre existant.

Un motif d’arbre interm´ediaire correspond `a une d´efinition d’une variable dans la clause for `a partir d’une variable d´ej`a d´eclar´ee. Cette d´eclaration permet de sp´ecialiser un ´el´ement sur un nouveau motif d’arbres.

– Motif d’arbre r´esultat (ReturnTreePattern ou RTP) : Un motif d’arbre r´esultat est un motif d’arbre qui d´efinit la construction d’un document XML. Chaque nœud du motif co¨ıncide avec une balise du document XML r´esultat ou `a un nœud texte.

Un motif d’arbre r´esultat correspond `a la clause return d’une requˆete XQuery permettant de produire un document XML. Nous pouvons identifier les balises de

3.3.3 D´efinition du mod`ele 53

ce document par les nœuds du motif, les attributs ´etant pr´ec´ed´es par le symbole «@» et les ´el´ements textuels par des guillemets. Les XPaths projet´es sont associ´es `

a des nœuds vides de ce motif par des hyperliens directionnels (section 3.3.3) – Motif d’arbre d’agr´egation (AggregateTreePattern ou ATP) : Un

mo-tif d’arbre d’agr´egation est un momo-tif d’arbre g´en´erant un ensemble r´esultat tem-poraire. La fonction d’agr´egat est associ´ee au motif pour un traitement sur un ensemble d’arbres. Le motif d’arbre d’agr´egation h´erite des propri´et´es du Return-TreePattern

Un motif d’arbre d’agr´egation correspond `a la clause let qui d´efinit un traite-ment sur un ensemble d’arbres. Les fonctions d’agr´egat sont appliqu´ees sur un ensemble d’arbres produit par le motif d’arbre. Grˆace aux r`egles de canonisation, les requˆetes imbriqu´ees sont d´efinies dans des clauses let et produisent donc un ensemble d’arbres temporaires.

Motif d’arbre source et Motif d’arbre r´esultat

$a catalog book title author contains ("King") livres "catalogs" titre auteur text() text() ReturnTreePattern for $a in collection("catalogs")/catalog/book where

contains ($a//title, "King") return <livres> <titre> {$a//title/text()} </titre> <auteur> {$a/author/text()} </auteur> </livres> SourceTreePattern

Fig. 3.6 – Motif d’arbre source (STP) et r´esultat (RTP)

Dans la figure 3.6, le motif d’arbre du haut repr´esente la d´eclaration d’un motif d’arbre source associ´e `a la variable $a. La source est la collection «catalogs» sur la-quelle nous pouvons d´efinir la racine /catalog/book. Nous pouvons y voir le Node title avec la fonction contains, et le nœd author auquel est associ´e un ProjectionHyperlink vers le motif d’arbre r´esultat (en bas). Il est repr´esent´e `a l’horizontale pour faciliter la lisibilit´e des hyperliens verticaux. De plus, cet arbre est inscrit dans un rectangle pour repr´esenter la construction du r´esultat final. Ce motif d’arbre r´esultat contient une racine «livres», `a laquelle ont ´et´e ajout´es deux XPaths : «/titre» et «/auteur ». Nous avons associ´e `a ces deux nœud s du RTP des ProjectionHyperlink s provenant des nœud s «text()» du STP . Ces deux nœud s s´electionnent en XQuery la valeur du texte contenue dans le nœud courant (les nœud s title et author).

Motif d’arbre interm´ediaire et Motif d’arbre d’agr´egation $a catalog book title author contains ("King") nb_authors "catalogs" author $b for $a in collection("catalogs")/catalog/book let $c := for $b in $a/author

return count ($b) where

contains ($a//title, "King") return <nb_authors> {$c} </nb_authors> IntermediateTreePattern count() AggregateTreePattern

Fig. 3.7 – Motif d’arbre interm´ediaire (ITP) et d’agr´egat (ATP)

Dans l’exemple de la figure 3.7, nous pouvons observer quatre motifs d’arbre, un motif d’arbre source (en haut), un motif d’arbre r´esultat (en bas), ainsi qu’un motif d’arbre intem´ediaire (milieu haut) et un motif d’arbre d’agr´egation .

Le motif d’arbre intem´ediaire de variable $b permet l’exploration du nœud author `

a partir de l’ensemble d´efini par le motif d’arbre source «$a». Le label de la racine est ´egal `a celui du nœud author. Par ailleurs, nous pouvons remarquer que le Ex-plorationHyperlink reliant author `a l’ITP est optionnel puisque celui-ci est en traits pointill´es. Chaque auteur est projet´e dans le motif d’arbre d’agr´egation.

Le motif d’arbre d’agr´egation prend les auteurs d´efinis pour chaque livre du cata-logue, et compte le nom d’auteurs (fonction «count»). L’hyperlien en dessous de ce motif d’arbre projette le r´esultat dans le motif d’arbre r´esultat.

Les motifs d’arbres permettent de d´efinir des motifs pour les documents XML qui peuvent ˆetre utilis´e dans notre mod`ele. Chacun des types de motifs permet de sp´ecia-liser le mod`ele en fonction des sp´ecificit´es du langage de requˆetes XQuery. Toutefois, il nous faut introduire les contraintes pour exprimer les filtres permettant de res-treindre les documents XML.