Xpath XML Path language par Yves Bekkers Plan
Xpath XML Path language par Yves Bekkers
Plan • • • Pourquoi Xpath ? Syntaxe des expressions de chemin Quelques exemples Opérandes et opérateurs Conclusion
Pourquoi XPath
Déplacements dans un document XML • Xpath : – Un langage fonctionnel pour adresser les sousarbres d'un arbre XML • Norme utilisée dans de nombreux outils XML – XSLT : langage de transformation d'arbre XML – Xlink : outils de définition de liens – XQuery : langage d'interrogation de documents
Transformation XSLT
Problème de repérage • Au sein des feuilles de style XSLT – on doit désigner les branches de l’arbre d’entrée (document source) Repère 1 Repère 2 • Solution : « expression de chemin »
Chemin absolu • Codepostal de la carte de visite : /cartede. Visite/adresse/ville/@codepostal
Chemin relatif • A partir du numéro, la note : . . /note
Racine d’un document • La racine d’un document est au dessus de l’élément racine du document, elle contient – des commentaires éventuels – des instructions de traitements éventuelles – un et un seul élément (l’élément racine)
Type de nœud d’un arbre XPath 1 1. Nœud « élément » /carte. De. Visite/note 2 2. Pseudo-nœud « attribut » /carte. De. Visite/adresse/ville/attribute: : codepostal /carte. De. Visite/adresse/ville/@codepostal 3 3. Nœud « texte » /carte. De. Visite/note/clé/text() 1 2 3
Autres types de nœud • Nœud commentaire <!-- ceci est un commentaire --> • Nœud instruction de traitement <? xml-stylesheet type="text/xsl" href="C: Abekkersoutilsxml 2 treexml 2 svg. xslt"? > Partie name() Partie text()
Syntaxe des expressions de chemin
Expression de chemin • séquence d’étapes • Chemin absolu – /étape 1/étape 2/étape 3/. . . • Chemin relatif – étape 1/étape 2/étape 3/. . .
Étape • Une étape est composée de trois parties – axe de déplacement (optionnel) – test de nœud (obligatoire) – prédicat (optionnel)
Syntaxe d’une section • Exemple axe test prédicat – child: : text()[position()=1] – carte. De. Visite[nom=’Bekkers’] – comment() – ancestor: : nom – attribut: : codepostal • La partie test de nœud est obligatoire • La partie axe se termine par : : • La partie prédicat est délimitée par […]
Axes de déplacement + attribute
Partie test • Un test c’est : – Un nom d’élément, exemple : ville, prénom – * : n’importe quel élément – text() – comment() – processing-instruction(nom) – node() identique à l’union de *, text(), comment() et de processing-instruction()
Filtrage à l’aide du prédicat Une expression Xpath s’évalue en un ensemble de nœuds 1 /html/body/p 1 Filtrage par la position /html/body/p[position()=1] /html/body/p[position()=last()] Filtrage par le contenu /html/body/p[em]
Quelques raccourci
Quelques exemples
Quelques exemples 2 1 1 3 1 2 3 //note/text()[position()=1] //nom[. =’Bekkers’]
Quelques exemples
Quelques exemples - suite
Opérandes et opérateurs
Constantes • Chaînes – 'Paris' – "That's rubbish" – 'He said "Boo"' • Valeurs numériques – 12, 3. 05, - 5. 25
Prédicat - exemples [@codepostal=’ 35700’] [. =’Bekkers’] [nom=’Bekkers’] [position()=last()-1] [not(position()=1)]
Opérateurs • Expression numériques : – +, -, *, div, mod – position(), last(), count(nds), – string-length(expr) • Expression booléenne : – or, and, not(. . . ), false(), true(), – boolean(. . . ), – =, !=, <, <=, >= (à écrire < et > ) • Expression nœud – id(chaîne)
Opérateurs (suite) • Expressions chaîne – string(exp) – concat(exp 1, exp 2, …) – substring(expr, start), – substring(expr, start, length) – substring-before(expr, expr) – substring-after(expr, expr)
Générateur d’identificateur • generate-id(expr) génère automatiquement un identificateur XML spécifique au premier nœud de l’ensemble de nœuds donné par l’expression • generate-id() génère automatiquement un identificateur XML spécifique au nœud courant
Fonction generate-id() • Propriétés – L’ordre alphabétique des identificateurs est le même qui l’ordre des nœuds dans le document – Si generate-id(A) est un préfixe de generate-id(B), alors A est un ancêtre de B – L’identificateur est unique au sein de tous les documents ouverts durant l’exécution.
Opérateur union • Tous les éléments pere ou mere du document //pere | //mere
Séquence de plusieurs prédicats • le dernier fils du nœud courant pourvu que ce soit un élément « ville » ou un élément « rue » [last()][ville or rue] • le dernier des fils « ville » ou « rue » du nœud courant [ville or rue][last()]
SELECT DISTINCT de SQL • tous les premiers éléments "ville" du document différents les uns des autres //ville[not(text()=preceding: : ville/text())] • équivalent de not in
Conclusion
Conclusions • Xpath est puissant et indispensable – permet d’adresser n’importe quel nœud d’un document par sa position ou par contexte • Mais Xpath n’est pas fait pour remplacer SQL et les bases de données – efficacité ? • Dans une feuille de style XSLT, Xpath est rarement employé dans toute sa généralité
- Slides: 35