Le langage de requˆ ete XPATH Table des mati` eres 1 Introduction 1.1 Pr´ esent

Le langage de requˆ ete XPATH Table des mati` eres 1 Introduction 1.1 Pr´ esentation • Le langage XPATH offre un moyen d’identifier un ensemble de noeuds dans un document XML. • Toutes les applications ayant besoin de rep´ erer un fragment de document XML peuvent utiliser ce langage. • Les feuilles de style XSL, les pointers XPOINTER et les liens XLINK utilisent de mani` ere intensive les expressions XPATH. • XPATH est un premier pas vers un langage d’interrogation d’une base de donn´ ees XML (XQuery). 1.2 Structure d’arbre d’un document XML produit produit prix nom comment stock Livre 50 Un commentaire / monnaie=’Francs’ nom CD prix 23 monnaie=’Euros’ <!−− −−> Texte <!−− −−> Texte <!-- Texte --> <stock> <produit> <nom> Livre </nom><prix monnaie="Francs"> 50 </prix> <comment> Un commentaire </comment> </produit> <produit> <nom> CD </nom><prix monnaie="Euros"> 23 </prix> </produit> <!-- Texte --> </stock> 1.3 Les expressions La forme g´ en´ erale d’une expression XPATH est 1 s´ electeur1/s´ electeur2/... (exp. relative) /s´ electeur1/s´ electeur2/... (exp. absolue) Chaque s´ electeur s´ electionne un ensemble de noeuds en fonction du r´ esultat du s´ electeur pr´ ec´ edent. L’ensemble initial est soit le noeud courant (forme relative) soit la racine (forme absolue). Exemple : /stock/produit/comment 1.4 Les s´ electeurs de noeuds Les s´ electeurs de noeuds sont de la forme : axe::filtre[condition1][condition2]... - l’axe indique un sens de recherche, - le filtre s´ electionne un type de noeud, - les conditions s´ electionnent sur le contenu. Les parties  axe  et  conditions  sont optionnelles. 2 Les axes de recherche 2.1 Les axes en avant Les axes qui permettent de descendre dans l’arbre : child les fils du noeud courant (c’est l’axe par d´ efaut). C’est deux expressions sont identiques : produit/child::nom produit/nom self le noeud courant, /stock/produit[condition1]/self::produit[condition2] descendant les descendants du noeud courant /stock/descendant::prix descendant-or-self les descendants du noeud courant plus lui-mˆ eme. 2 2.2 Les axes en arri` ere Les axes qui permettent de remonter dans l’arbre : parent le noeud parent du noeud courant, ancestor les ascendants du noeud courant (dans l’exemple ci-dessous le noeud courant est le nom du produit) : ancestor::produit/prix ancestor-or-self que dire ? 2.3 Les axes ` a droite et ` a gauche following-sibling les noeuds fr` eres plac´ es apr` es le noeud courant, produit produit produit stock preceding-sibling les noeuds fr` eres plac´ es avant le noeud courant, 2.4 Les axes avant et apr` es following les noeuds plac´ es apr` es dans le document, produit produit prix nom nom prix comment stock preceding les noeuds plac´ es avant dans le document, 3 2.5 Les axes pour les attributs attribute les noeuds de type attribut du noeud courant, namespace les noeuds de type espace de nom du noeud courant, 3 Les filtres 3.1 Filtrer les noeuds nomm´ es nom les noeuds de l’axe qui portent ce nom. /stock/produit/prix/attribute::monnaie * les noeuds de l’axe qui ont un nom. /stock/*/prix/attribute::* 3.2 Filtrer les noeuds textuels text() tous les noeuds de type texte de l’axe. /stock/produit/*/text() 3.3 Filtrer les commentaires comment() tous les noeuds de type commentaire de l’axe. 3.4 Filtrer les instructions de traitement processing-instructions() tous les noeuds de type instruction de traitement de l’axe, 3.5 Filtrer les noeuds node() tous les noeuds de l’axe sauf la racine, /stock/produit/prix/node() id(label ) le noeud rep´ er´ e par une ´ etiquette, id(’CD’)/prix 4 4 Les conditions Rappel : les s´ electeurs de noeuds sont de la forme : axe::filtre[condition1][condition2]... 4.1 Condition d’existence expression-xpath vraie ssi l’expression renvoie un ensemble non vide de noeuds. /stock/produit[prix/attribute::monnaie] /stock/produit[prix[attribute::monnaie]] Ces expressions s´ electionnent les noeuds produit ` a condition qu’un prix existe avec l’attribut monnaie pr´ ecis´ e. 4.2 Condition de position num´ ero vraie ssi le noeud courant ` a cette position dans le contexte courant. produit[2][comment] produit[comment][2] La premi` ere expression s´ electionne les noeuds produit en deuxi` eme position si il poss` ede un ´ el´ ement fils comment, la seconde s´ electionne le deuxi` eme noeud produit qui poss` ede un ´ el´ ement fil comment. 4.3 Les conditions logiques expr-xpath1 relation expr-xpath2 vraie ssi il existe n1 (dans le r´ esultat de expr-xpath1) et n2 (dans le r´ esultat de expr-xpath2) qui respectent la relation. les relations possibles sont =, !=, <, <=, >, >=. produit[prix = 100] (1) produit[prix != 100] (2) produit[prix < /stock/produit/prix] (3) Explications : (1) les produits qui ont un prix ` a 100 ; (2) les produits qui ont un prix diff´ erent de 100 ; (3) tous les produits sauf les plus on´ ereux. condition1 and condition2 vraie ssi les deux conditions le sont ´ egalement. produit[prix > 10 and comment] condition1 or condition2 vraie ssi au moins une des deux conditions est vraie. 5 not(condition) vraie ssi la condition est fausse. produit[not(prix != 100)] tous les prix sont ´ egaux ` a 100. 5 Fonctions & op´ erations Les fonctions et op´ erations sont utilisables dans - les expressions logiques, - les clauses <xsl:value-of ...> des feuilles de style XSL. 5.1 Op´ erations sur les nombres type de base bool´ een, chaˆ ıne de caract` eres, nombre r´ eel, ensemble de noeuds. +, -, mod, div, op´ erations utilisables sur les nombres (traduction automatique). produit[(prix div 10) = (prix mod 10)] 5.2 Fonctions sur les nombres number(object) traduire l’objet sous la forme d’un nombre. renvoie NaN si l’objet ne repr´ esente pas un nombre. sum(noeuds) renvoie la somme des noeuds apr` es les avoir transform´ es en nombre. count(noeuds) renvoie le nombre de noeuds. floor(nombre) arrondi par le bas. ceiling(nombre) arrondi par le haut. round(nombre) arrondi par le plus proche. 5.3 Fonctions sur les bool´ eens true() toujours vraie. false() toujours fausse. boolean(objet) vraie ssi l’objet est ´ egale ` a la constante  true . not(bool´ een) vraie ssi le param` etre est faux. 6 5.4 Fonctions sur les noeuds last() vraie ssi le noeud est le dernier du contexte courant. position() renvoie la position dans le contexte du noeud courant. local-name(noeuds) renvoie la partie locale de l’´ etiquette d’un noeud. namespace-uri(noeuds) renvoie la partie espaces de nom de l’´ etiquette d’un noeud. name(noeuds) renvoie l’´ etiquette d’un noeud. id(nom) renvoie le noeud identifi´ e par l’´ etiquette nom. 5.5 Fonctions sur les chaˆ ınes string(objet) renvoie une version chaˆ ıne du param` etre. concat(chaˆ ıne1,...,chaˆ ıneN) concat´ enation de chaˆ ınes. string-length(chaˆ ıne) renvoie la longueur d’une chaˆ ıne. normalize-space(chaˆ ıne) renvoie une version normalis´ ee (suppression des blancs au d´ ebut et ` a la fin et remplacement de toute suite de blancs par un seul). translate(ch1,ch2,ch3) renvoie une chaˆ ıne construite ` a partir de ch1 dans laquelle les caract` eres pr´ esents dans ch2 sont remplac´ es par les caract` eres de mˆ eme position dans ch3. substring-before(ch1,ch2) renvoie la chaˆ ıne res d´ efinie par ch1 = res + ch2 + reste. substring-after(ch1,ch2) renvoie la chaˆ ıne res d´ efinie par ch1 = reste + ch2 + res. substring(chaˆ ıne,d´ ebut) et substring(chaˆ ıne,d´ ebut,len) extraction de sous-chaˆ ıne. starts-with(ch1,ch2) vraie ssi ch1 d´ ebute par ch2. contains(ch1,ch2) vraie ssi ch1 contient ch2. 6 Simplifications Afin d’´ eviter une trop grande lourdeur, les simplifications suivantes sont autoris´ ees : 7 originale simplifi´ ee exemple child:: /stock/produit attribute:: @ /prix/@monnaie /descendant-or-self::node()/ // //prix self::node() . prix[. = 10] parent::node() .. prix/../nom [position() = x] [x] produits[4] 8 uploads/Industriel/ 4-xpath.pdf

  • 30
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager