XML Path Language XPath version 1.0 Recommandation 16 Novembre 1999 Sadok Ben Y

XML Path Language XPath version 1.0 Recommandation 16 Novembre 1999 Sadok Ben Yahia Faculté des Sciences de Tunis Sadok.benyahia@fst.rnu.tn 2 Objectifs Spécifier un mini langage de requête pour interroger des documents XML et sélectionner des fragments Fournir une syntaxe et une sémantique communes pour : XSL Transformation Language (XSLT) Feuilles de style XML Pointers (XPointer) Liens hypertextes 3 Introduction Adresser et sélectionner des sections d'un document XML Éléments et hiérarchie Noms et valeurs d'attributs Contenu textuel Fonctionnalités de base pour manipuler : Chaînes de caractères Nombres et booléens 4 Expression Une expression XPath active un objet de type: Collection non-ordonnée de nœuds uniques node-set Booléen true ou false Nombre à virgule (int ou float) Chaîne de caractères Unicode 5 Chemin de localisation 2 syntaxes Longue qui couvre tout le langage Courte/Abrégée pour les cas les plus usuels Attention : quelques différences de comportement entre les deux représentations ! 2 types de chemin Absolu (utilisation des ID par exemple) Relatif  Suivre des axes : – Nœud actuel : self – Nœuds enfants / descendants : child, descendant, descendant-or-self – Nœuds parents / ancêtres : parent, ancestor, ancestor-or-self – Nœuds frères : preceding-sibling, following-sibling – Nœuds avant / après : preceding, following 6 Exemple Nœud contextuel : garage 1. child::voiture  /voiture 2. descendant-or-self::modele  //modele Nœud contextuel : modele(206) 3. following::* 4. preceding-sibling::* <garage> <voiture> <marque>Peugeot</marque> <modele>206</modele> </voiture> <voiture> <marque>Renault</marque> <modele>Clio</modele> </voiture> </garage> garage garage voiture voiture voiture voiture marque marque modele modele marque marque modele modele Peugeot Peugeot 206 206 Renault Renault Clio Clio 1 1 1 1 2 2 2 2 3 3 3 3 3 3 4 4 7 Les axes Direction de la recherche à partir d’un nœud contextuel En général, 3 parties par étape Un axe : suivant, précédant, parent, enfants, … Un test : type d'élément cherché Un élément particulier Les nœuds éléments : * Les nœuds texte : text() Les nœuds : node() Les commentaires : comment() Les instructions de traitement : processing-instruction() Un prédicat : renvoie une valeur booléenne (vrai ou faux) axis::node-test[prédicat] 8 Les axes - Illustration contexte 9 Axe : les enfants child:: Sélectionne les enfants immédiats du nœud/élément contextuel/courant /*  /child::* child:garage/child::voiture/child::*  garage/voiture/* garage garage voiture voiture voiture voiture marque marque modele modele marque marque modele modele Peugeot Peugeot 206 206 Renault Renault Clio Clio 10 Axe : les enfants context child 11 Axe : les descendants descendant:: Sélectionne la descendance du nœud/élément contextuel child::garage/descendant::* descendant-or-self:: Idem mais sélectionne également le nœud courant child::garage/descendant-or-self::*  //* garage garage voiture voiture voiture voiture marque marque modele modele marque marque modele modele Peugeot Peugeot 206 206 Renault Renault Clio Clio garage garage voiture voiture voiture voiture marque marque modele modele marque marque modele modele Peugeot Peugeot 206 206 Renault Renault Clio Clio 12 Axe : les descendants context descendant 13 Axe : les descendants context descendant-or-self 14 Axe : lui-même self:: Réfère au nœud courant (le contexte) Rarement utilisé avec les XPointer mais plus utiles dans XSLT Utile pour tester le nœud courant self::marque Sans test sur le nœud, peut s'abréger par le point . .  self::node() 15 Axe : le parent parent:: Sélectionne le parent immédiat du nœud courant /descendant-or-self::voiture/parent::* Sans test sur le parent, peut-être abrégé par .. parent  .. /descendant-or-self::modele/parent::*  //modele/..  Sélectionne tous les éléments qui ont un fils de type voiture garage garage voiture voiture voiture voiture marque marque modele modele marque marque modele modele Peugeot Peugeot 206 206 Renault Renault Clio Clio garage garage voiture voiture voiture voiture marque marque modele modele marque marque modele modele Peugeot Peugeot 206 206 Renault Renault Clio Clio garage garage voiture voiture voiture voiture marque marque modele modele marque marque modele modele Peugeot Peugeot 206 206 Renault Renault Clio Clio 16 Axe : les ancêtres ancestor:: Sélectionne tous les nœuds/éléments qui contiennent le nœud courant (parent, grand-parent, etc.) descendant-or-self::modele/ancestor::*[position()=1] Sélectionne le parent de chaque descendant de type modele descendant-or-self::modele/ancestor::*[position()=2] Sélectionne le grand-parent pour chacun des descendants de type modele's ancestor-or-self:: Sélectionne le nœud courant et tous les éléments qui contiennent le nœud courant (parent, grand-parent, etc.) child::garage/child::voiture/ancestor-or-self::* garage garage voiture voiture voiture voiture marque marque modele modele marque marque modele modele Peugeot Peugeot 206 206 Renault Renault Clio Clio garage garage voiture voiture voiture voiture marque marque modele modele marque marque modele modele Peugeot Peugeot 206 206 Renault Renault Clio Clio garage garage voiture voiture voiture voiture marque marque modele modele marque marque modele modele Peugeot Peugeot 206 206 Renault Renault Clio Clio garage garage voiture voiture voiture voiture marque marque modele modele marque marque modele modele Peugeot Peugeot 206 206 Renault Renault Clio Clio garage garage voiture voiture voiture voiture marque marque modele modele marque marque modele modele Peugeot Peugeot 206 206 Renault Renault Clio Clio garage garage voiture voiture voiture voiture marque marque modele modele marque marque modele modele Peugeot Peugeot 206 206 Renault Renault Clio Clio 17 Axes : lui-même, parent et ancêtres ancestor ancestor-or-self context parent self 18 Axe : les nœuds précédant preceding:: Sélectionne les nœuds qui précédent le nœud courant descendant-or-self::voiture[position()=2]/preceding::* Sélectionne les éléments voiture et les sous-éléments précédent garage garage voiture voiture voiture voiture marque marque modele modele marque marque modele modele Peugeot Peugeot 206 206 Renault Renault Clio Clio garage garage voiture voiture voiture voiture marque marque modele modele marque marque modele modele Peugeot Peugeot 206 206 Renault Renault Clio Clio 19 Axe : les nœuds suivants following:: Sélectionne les nœuds qui suivent le nœud courant descendant::voiture[position()=1]/following::*  sélectionne les éléments voitures suivants garage garage voiture voiture voiture voiture marque marque modele modele marque marque modele modele Peugeot Peugeot 206 206 Renault Renault Clio Clio garage garage voiture voiture voiture voiture marque marque modele modele marque marque modele modele Peugeot Peugeot 206 206 Renault Renault Clio Clio 20 Axe : les nœuds suivant sauf la descendance du nœud contextuel sauf la descendance du nœud contextuel context following 21 Axe : les nœuds précédant sauf les parents et ancêtres du nœud contextuel sauf les parents et ancêtres du nœud contextuel context preceding 22 Axe : les frères précédant preceding-sibling:: Sélectionne les nœuds qui précédent le nœud courant et partagent le même parent Sélectionne les frères précédant le nœud courant Les aînés descendant-or-self::voiture[position()=2]/preceding-sibling::*  sélectionne l’élément voiture en position 1 garage garage voiture voiture voiture voiture marque marque modele modele marque marque modele modele Peugeot Peugeot 206 206 Renault Renault Clio Clio garage garage voiture voiture voiture voiture marque marque modele modele marque marque modele modele Peugeot Peugeot 206 206 Renault Renault Clio Clio 23 Axe : les frères suivant following-sibling:: Sélectionne les nœuds qui suivent le nœud courant et partagent le même parent Sélectionne les frères suivant le nœud courant Les cadets descendant::voiture[position()=1]/following-sibling::*  sélectionne les éléments voitures suivants garage garage voiture voiture voiture voiture marque marque modele modele marque marque modele modele Peugeot Peugeot 206 206 Renault Renault Clio Clio garage garage voiture voiture voiture voiture marque marque modele modele marque marque modele modele Peugeot Peugeot 206 206 Renault Renault Clio Clio 24 Axes : frères précédant context preceding-sibling 25 Axes : frères suivant context following-sibling 26 Axe : les attributs attributes:: Sélectionne les attributs du nœud courant descendant-or-self::voiture/attribute::id //voiture/@id  Sélectionne tous les éléments voiture avec un attribut id descendant-or-self::voiture/attribute::id ="V1"  //voiture/@id="V1"  Sélectionne tous les éléments voiture avec un attribut id ayant comme valeur v1 //voiture/@*  Sélectionne tous les éléments VOITURE ayant des attributs 27 Node-test : les tests (1) * Tous les éléments node() Tout type de nœud (texte, commentaire, …) descendant::garage/child::*[position()=2] => Élément voiture en 2ème position descendant-or-self::modele[position()=1]/child::node() => 206 28 Node-test : les tests (2) text() Le contenu textuel d'un élément descendant::modele[position()=1]/text() comment() Pour les commentaires descendant-or-self::comment() processing-instruction() Instructions de traitement (PI) /descendant::processing-instruction(xml-stylesheet) /descendant::processing-instruction(php) 29 Un dernier mot sur les versions abrégées Une petite subtilité pratique //voiture[modele] Sélectionne les voitures qui possèdent un élément marque //voiture[modele='206'] Sélectionne les voiture qui possèdent un élément marque dont le contenu est égal à 206 Attention, l'évaluation des deux expressions : //voiture[2][@id='V2'] //voiture[@id='V2'][2]  Ne donne pas le même résultat ! 30 Récapitulatif Opérateur Description element sélectionne tous les éléments element fils du noeud courant (child::element). * sélectionne tous les éléments fils du noeud courant. / représente l'élément racine. // représente n'importe quel descendant de l'élément racine, donc tous les éléments (descendant-or-self::node()). . représente l'élément courant (self::node()). .. permet de remonter d'un niveau dans l'arborescence du document par rapport à l'élément courant (parent::node()). /element sélectionne tous les éléments element sous l'élément racine (). ./element sélectionne tous les éléments element sous l'élément courant (following::element). ../element sélectionne tous les éléments element sous l'élément parent du noeud courant (preceding::element). //element sélectionne tous les éléments element descendants du noeud courant à quelque niveau de profondeur que ce soit. @attribut sélectionne tous les attributs attribut du noeud courant (attribute::attribut). | correspond à un ou. 31 Les opérateurs Les opérateurs booléens : Opérateur Description or représente un OU logique. and représente un ET logique. not() signifie la négation ou NON logique. | permet la sélection de plusieurs motifs. = uploads/s1/ form-xpath-intro.pdf

  • 56
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager
  • Détails
  • Publié le Oct 31, 2021
  • Catégorie Administration
  • Langue French
  • Taille du fichier 1.0819MB