XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

3,767 views

Published on

XML validation
DTD
XSD
XPath
XML Transformation - XSLT
XML query – XQuery

Published in: Technology

XML Avancé : DTD, XSD, XPATH, XSLT, XQuery

  1. 1. 17/03/14 1 XML Avancé DTD, XSD, XPATH, XSLT, XQuery Rachid NID SAID rachid.nidsaid@gmail.com
  2. 2. 17/03/14 2 Plan  Introduction  XML validation  DTD  XSD  XPath  XML Transformation - XSLT  XML query – XQuery
  3. 3. 17/03/14 3 Partie 1  Introduction  XML  XML Validation  DTD  Structure  Entités  Utiliser DTD  XSD  Schéma XML  Types simples  Types complexes  Annotation
  4. 4. XML  XML pour « eXtensible Markup Language »  XML C’est est un langage à balise définissant un format universel de représentation des données.  XML est issue du langage de balise SGML dont est issue HTML  Si HTML est conçu pour l’affichage, XML est conçu pour le représentation des données.
  5. 5. XML  XML décrit les données de manière aussi bien compréhensible par les Hommes qui écrivent les documents XML que par les machines qui les exploitent.  Un document XML contient à la fois des données et les méta données qui les décrivent.  Ces méta données permettent de déterminer la structure du document : ce sont des balises.
  6. 6. XML
  7. 7. Structure XML : entête  version : de façon générale 1.0  Il existe deux versions 1.0 et 1.1  encoding : valeur par défaut UTF-8  standalone : valeur par défaut yes  Indique si le document en lui seul est suffisant pour être interprété ou s'il nécessite l'adjonction d'un autre document externe (DTD)
  8. 8. Structure XML : balise  Les balises sont les éléments de base d'un document XML  Les balises permettent de décrire les données contenu dans le document XML  Deux types de balise :  balise par pair : <balise>contenu</balise>  balise unique : <balise/>
  9. 9. Structure XML : racine  L’ensemble du contenu d’un document XML est encapsulé au sein d’une balise qui vient directement après l’entête. c’est la balise racine (root)  Un document XML ne contient qu’une seule balise racine
  10. 10. Structure XML : attribut  Un attribut est une information supplémentaire qui est ajouté à la balise pour apporter plus de détail.  On peut ajouter autant d’attributs qu’on veut à la balise  Deux attributs d’une même balise peuvent avoir le même nom.
  11. 11. Structure XML : CDATA  Le contenu d’une balise ne peut contenir certains caractères comme > < & et doivent être remplacés par leur encodage html.  CDATA permet de contourner cette limitation et de saisir n’importe quel caractère comme contenu.  Le contenu du CDATA est interpréter par l’éditeur XML comme du texte brute.
  12. 12. Structure XML : commentaire  Permet de commenter et simplifier la lecture du contenu XML pour l’humain.
  13. 13. Structure XML : processing-instruction  Les processing-instructions sont le moyen d'envoyer des ordres à l‘éditeur XML.  Une processing-instruction commence par <? et se termine par ?>.  Exemple : <?xml-stylesheet type="text/css" href="style.css" ?>
  14. 14. Les parseurs XML  DOM : Document Object Model  Le document est chargé en entier en mémoire  Une api offre la possibilité d’accéder aux différents éléments du document de façon hiérarchique  SAX : Simple API for XML  API basé sur un modèle événementiel qui transforme un document XML en un flux d'événements déclenchés par la lecture d'éléments syntaxiques XML (balise ouvrante, balise fermante, etc.).
  15. 15. Validation XML  Pour qu'un document XML soit utilisé comme un langage ou comme un format d'échange, il doit respecter certaines contraintes syntaxiques :  Nom des éléments et des attributs autorisés,  Hiérarchie(père/fils) et appartenance des éléments et attributs,  Séquencement et itérations des éléments,  Contraintes d'unicités et de référence.
  16. 16. Validation XML  La validation XML est contrôle du contenu XML par rapport à une grammaire fournie.  DTD : le plus ancien, très restreints en termes de contraintes pouvant être exprimées;  XML Schéma : norme fournie par le W3C, permet un très grand choix de contraintes et de types.  Relax NG : l'équivalent de XML Schéma mais proposé par OASIS.  Schematron : il est orienté « sémantique » en permettant d'ajouter des contraintes sur les valeurs des éléments et des attributs.
  17. 17. DTD  DTD pour Document Type Definition  DTD permet de décrire la structure d'un document XML  liste des balises  attributs des balises  organisation des balises  La validation est le mécanisme qui vérifie qu’un document XML respecte une DTD
  18. 18. DTD
  19. 19. DTD Structure : élément Définit une balise XML  ELEMENT : mot clé pour déclarer une balise  nom : le nom de la balise  (contenu) : le contenu de la balise  Un contenu peut être vide, texte, ou contenir des sous éléments
  20. 20. DTD Structure : élément Type DTD XML Elément vide <!ELEMENT elt EMPTY> <elt/> Elément contenant du texte <!ELEMENT elt (#PCDATA)> <elt>texte</elt> Elément avec sous éléments <!ELEMENT elt (sous-elt)> <!ELEMENT sous-elt EMPTY> <elt> <sous-elt/> </elt>
  21. 21. DTD Structure : élément Type DTD XML Elément avec plusieurs sous éléments <!ELEMENT elt (s1, s2)> <!ELEMENT s1 EMPTY> <!ELEMENT s2 EMPTY> <elt> <s1/> <s2/> </elt> Elément avec contenu variable <!ELEMENT elt (#PCDATA|s1)> <!ELEMENT s1 EMPTY> <elt>texte</elt> ou <elt><s1/></elt> Elément à contenu non défini <!ELEMENT elt ANY> <!ELEMENT s1 EMPTY> <elt>texte</elt> ou <elt><s1/></elt> etc.
  22. 22. DTD Structure : élément Cardinalité Signification <!ELEMENT elt (s1)> Le contenu de la balise elt est une seule balise s1 <!ELEMENT elt (s1*)> Le contenu de la balise elt est 0 à n occurrence de la balise s1 <!ELEMENT elt (s1?)> Le contenu de la balise elt est 0 à 1 occurrence de la balise s1 <!ELEMENT elt (s1+)> Le contenu de la balise elt est 1 à n occurrence de la balise s1
  23. 23. DTD Structure : attribut Définit l’attribut d’une balise XML  ATTLIST : mot clé pour déclarer un attribut  nom : le nom de la balise  nom-attribut : le nom de l’attribut  type : type de l’attribut  CDATA : chaîne de caractères  liste de valeurs possibles ("v1"|"v2"|"v3")  valeur-par-defaut : valeur par défaut de l’attribut si aucune valeur n’est fournie
  24. 24. DTD Structure : attribut  contrainte : définit les contraintes que doit respecter l’attribut, n’est pas obligatoire  #REQUIRED : l’attribut est obligatoire  #IMPLIED : l’attribut est optionnel  #FIXED : la valeur de l’attribut est fixé, et prends comme valeur la valeur par défaut
  25. 25. DTD Structure : identifiant  Un attribut peut être déclaré comme identifiant d’un élément avec le mot clé ID  Un attribut peut être déclaré comme référence vers un autre élément (clé étrangère) avec le mot clé IDREF
  26. 26.  Mécanisme qui permet de déclarer un alias vers une information qui va être réutilisé dans un XML ou une DTD  entité générale : utilisé dans le document XML  entité paramètre : utilisé dans une DTD  entité externe : même rôle que l’entité générale, sauf que les informations sont stockés dans un fichier externe  L’attribut standalone au niveau de l’entête doit être a no DTD Les entités
  27. 27. DTD Utiliser une DTD  DOCTYPE permet de déclarer la DTD à utiliser pour valiser le document XML,  vient directement après l’entête  balise-racine : l’élément XML qui sera la racine (root) du document XML
  28. 28. DTD Utiliser une DTD interne  La DTD est déclaré directement dans le document XML dans la balise DOCTYPE
  29. 29. DTD Utiliser une DTD externe  La DTD est déclaré dans un fichier externe  SYSTEM : la DTD est indiqué en fournissant sa location par son URI  PUBLIC : la DTD est dans le domaine public (norme), indiqué par son identifiant (FPI) et sa location par son URI
  30. 30. XSD  XSD pour XML Schema Definition  Avantages par rapport à DTD :  Le typage poussé des données (booléens, entiers, intervalles de temps...)  Possibilité de créer de nouveaux types à partir de types existants.  Dérivation, Les éléments peuvent hériter du contenu et des attributs d'un autre élément..  Les indicateurs d'occurrences des éléments peuvent être tout nombre non négatif autre que 0,1 ou infini
  31. 31. XSD
  32. 32. XSD Type de données  Plus de 40 types de données,  string, integer, date, year, CDATA, float, double, binary, ENTITIES, token, byte, etc.  Fournit un mécanisme pour définir des types de données complexes  Créer un type de données totalement nouveau,  Restreindre ou d’étendre un type de données existant.  On distingue deux sortes de types, simple et complexe
  33. 33. XSD Type simple  Un élément de type simple ne peut comporter ni attributs, ni sous-éléments.  Il est possible d’utiliser les types prédéfinis ou d’en dériver de nouveaux à partir de types déjà existant.  La liste complète des types prédéfinis est disponible à http://www.w3.org/TR/xmlschema-0/#CreatDt
  34. 34. XSD Type simple
  35. 35. XSD Type simple  La création de nouveaux types simples est réalisée au travers de la balise <simpleType>  Trois façons pour créer un nouveau type :  Restriction : <restriction> permet de dériver un nouveau type sur la base d’un existant en ajoutant de nouvelles contraintes  List : <list> permet de créer un nouveau type liste  Union : <union> permet de créer un nouveau type en faisant l’union de plusieurs types existants
  36. 36. XSD Type simple : Restriction  Les restrictions sur les types simples (Facets) permettent de dériver de nouveaux types à partir de types existants  La restriction de type permet de définir des contraintes sur le nouveau type à créer  La restriction est exprimée par la balise <restriction>
  37. 37. XSD Type simple : Restriction  maxExclusive : limite supérieure (exclue)  maxInclusive : limite supérieure (incluse)  minExclusive : limite inférieure (exclue)  minInclusive : limite inférieure (incluse)  enumeration : liste de valeurs autorisée  length : nombre de caractères ou d’élément d’une liste autorisé
  38. 38. XSD Type simple : Restriction  minLength : nombre minimum de caractères ou d’élément d’une liste  pattern : expression régulière à respecter  fractionDigits : nombre maxi de digits autorisé  totalDigits : nombre exact de digits autorisé  whiteSpace : politique de gestion des espaces blancs (tab, retour ligne, fin de ligne, …) La définition de l’ensemble des restrictions pour chaque type est disponible à www.w3.org/TR/xmlschema-0/# SimpleTypeFacets
  39. 39. XSD Type simple : Restriction
  40. 40. XSD Type simple : Listes  Il existe trois types de liste intégrés NMTOKENS, ENTITIES, IDREFS  Ces types existent pour garder la compatibilité avec les DTD  Il est possible de créer de nouveaux liste de types simple par dérivation de type existant  La création de liste est exprimé par <list>
  41. 41. XSD Type simple : Union  XSD permet de définir de nouveaux types simple par union de types existants  i.e le nouveau type accepte les valeurs de l’ensemble des types qui participent à l’union  L’union est exprimé par <union>
  42. 42. XSD Type complexe  Un élément de type complexe peut contenir d'autres éléments et / ou des attributs  Un attribut ne peut être de type complexe  Un élément de type complexe peut être  Elément vide qui ne contient que des attributs  Elément de type simple qui contient des attributs  Elément qui contient des sous éléments et des attributs  Elément qui contient des attributs, des sous éléments et du texte  La création d'un éléments de type complexe est réalisée au travers de la balise <complexType>
  43. 43. XSD Type complexe  Type avec des attributs et sans contenu
  44. 44. XSD Type complexe  Type avec ou sans attributs et un contenu de type simple  La balise <simpleContent> précise qu’il ne peut y avoir que des attributs et un contenu de type simple
  45. 45. XSD Type complexe  Type avec ou sans attributs et un contenu composé de sous éléments  La balise <sequence> dite indicateur d’ordre, indique la logique de placement des sous éléments dans le document XML
  46. 46. XSD Type complexe  Trois balises indicateurs d’ordre peuvent être utilisé pour indiquer la logique de placements des sous éléments dans le document XML:  <all> : les sous éléments sont placés quelque soit l’ordre  <sequence> : les sous éléments doivent respectés l’ordre de déclaration dans le type  <choice> : un seul des sous éléments déclarés est utilisé
  47. 47. XSD Type complexe  Les indicateurs d'occurrence sont utilisés pour exprimer le nombre de fois qu'un sous élément peut apparaître dans le document XML  maxOccurs : précise le nombre d'occurrence maximum, la valeur par défaut est 1  minOccurs : précise le nombre d'occurrence minimum, la valeur par défaut est 1  Pour définir une valeur infinie, fixer la valeur à unbounded
  48. 48. XSD Type complexe  Il est possible de créer un type d’élément dont le contenu est composé de texte et de sous éléments en même temps  L’attribut mixed de la balise complexType doit être positionné à true
  49. 49. XSD Type complexe
  50. 50. XSD Type complexe  Il est possible de définir un nouveau type complexe sur la base d'un type complexe existant  Étendre le type existant en y ajoutant des attributs est des sous éléments <extension>  Restreindre le type existant en limitant les valeurs possibles des attributs et sous éléments existants <restriction>  La balise <complexContent> est utilisé pour implémenter cette possibilité
  51. 51. XSD Type complexe
  52. 52. XSD Visibilité des Types  Un type est visible par tous les descendants du noeud dans lequel il a été déclaré.  Un type déclaré sous le noeud principal (root) <schema> est visible dans tout le document XSD.  Un type déclaré sous un nœud autre que le root, n’est visible que dans ce nœud.
  53. 53. XSD Structure : entête  XSD est un document XML, Il commence par un prologue et un élément racine (root)  L’élément racine est <schema>  targetNameSpace : libelle du namespace associé au document XSD  elementFormDefault : indique si les éléments du XSD doivent être préfixé par l’alias du namespace lors de son utilisation dans un document XML
  54. 54. Espaces de nom (XML Namespaces)  XML Namespaces est une spécification W3C, son objectif est  de permettre l’utilisation de plusieurs grammaires dans un seul document.  de lever les ambiguïtés lorsque plusieurs grammaires offre des éléments avec les même nom.
  55. 55. XSD Structure : élément  La définition d’éléments se fait dans une balise <element>.  Définir un type de données et l’utiliser dans la définition de l’élément.  Définir le type de données à l’intérieur de l’élément.
  56. 56. XSD Structure : attribut  La définition d’attributs associés à un élément se fait dans par la balise <attribute>.  name : nom de l’attribut  type : type de l’attribut, ne peut être qu’un type simple.  use : permet de préciser si l’attribut est obligatoire, optionnel ou interdit. Valeurs possibles :  required : obligatoire  optional : optionnel  prohibited : interdite  fixed : valeur fixe, ne change pas  default : valeur par défaut.
  57. 57. XSD Structure : attribut  La définition d’attributs peut se faire de deux façons différents.  Définir l’attribut et l’utiliser dans la définition du type.  Définir l’attribut directement à l’intérieur du type.
  58. 58. XSD Annotation  L'annotation permet d'enrichir la description d'un XSD, c’est un commentaire.  L'annotation est réalisée au travers de la balise <annotation> et propose deux sous éléments (occurrences multiples)  <documentation> : son contenu est en direction de l’utilisateur humain  <appinfo> : son contenu est en direction des outils d’édition XML
  59. 59. Utiliser un XSD  A la différence du DTD, n’importe quel élément de la XSD peut servir de racine pour le document XML  xmlns:xsi : identifier le namespace de la norme W3C  xmlns:… : identifier les autres namespaces à utiliser dans le document XML  xsi:schemaLocation : identifier pour chaque namespace utilisé par le document XML, la localisation physique du document XSD (sauf pour le namespace de la norme W3C)
  60. 60. Partie 2  XML Transformation  XPath  Utiliser un CSS pour formater un contenu XML  XSLT
  61. 61. XPath  XPath pour XML Path Langage  XPath est un standard XML qui définit des règles grammaticales pour identifier des noeuds ou des ensembles de noeuds dans des documents XML.  XPath est un standard W3C
  62. 62. XPath Terminologies  XPath se représente le document XML en tant qu’arbre  dont la racine est l’élément racine du document XML  les noeuds sont les différents éléments et attributs du XML root element processing-instruction attribute text namespace comment element
  63. 63. XPath Terminologies  Les relations entre nœuds :  Parent (parent) : l’élément contenant  Fils (childrens) : les éléments contenues  Fréres (siblings) : les éléments ayant le même parent  Ancetres (ancestors) : l’élément parent, le parent du prent, …  Descendants (descendants) : les éléments fils, les fils des fils, …
  64. 64. XPath Syntaxe  Une expression XPath décrit l'emplacement d'éléments et d'attributs XML comme un chemin similaire à des URL.  Une expression XPath est composée de segments séparés par « / ».  Exemple : l’expression /annuaire/entree/nom permet de sélectionner le nœud nom du fragment XML ci-dessous
  65. 65. XPath Syntaxe  Une expression XPath est évalué au sein d’un contexte  C’est le nœud par rapport auquel cette expression est évalué  La même expression retourne des résultats différents selon son contexte d’évaluation  Exemple : /nom  Si le contxet est le root : retourne 2 éléments  Si le contexte est est un élément entree : retourne l’élément fils ‘nom’
  66. 66. XPath Syntaxe Expression Description Exemple Nom du nœud Sélectionner Tous les nœuds fils du même nom à partir du nœud courant telephone / (début de l’expression) Sélectionner à partir de la racine du document /annuaire/entree/nom //node Sélectionner tous les nœuds descendants à partir du nœud courant du même nom //nom . Sélectionner le nœud courant ./telephone .. Sélectionner le nœud parent ../entree @attribut Sélectionner l’attribut du même nom //entree/@attribut
  67. 67. XPath Syntaxe Symbole Description Exemple * Sélectionner n’importe quel élément quel que soit le nom //* @* Sélectionner n’importe quel attribut quel que soit le nom /annuaire//*/@*  Dans une expression XPath on peut utiliser le caractère générique *, pour sélectionner des noeuds dont le nom est inconnu.
  68. 68. XPath Syntaxe  Dans une expression XPath on peut utiliser le caractère | , pour sélectionner sur plusieurs chemins.  Exemple : /annuaire/entree/nom | //entree  Sélectionner les éléments fils nom de la racine et tous les descendants entree de la racine
  69. 69. XPath Syntaxe  Pour affiner la sélection, XPath propose la notion de prédicat pour pouvoir filtrer les nœuds à récupérer  La syntaxe : /elt1/elt2/eltAVerifier[predicat]  Le prédicat est une expression que doit vérifier le ou les nœuds à sélectionner.  L’expression prédicat accepte :  les opérateurs de comparaison : <, >, <=, >=, =, !=  les opérateurs logiques : not(..), and, or  les opérateurs arithmétiques : +, -, *, div, mod  les opérateurs de regroupement : (..)
  70. 70. XPath Syntaxe Exemple Description /annuaire/entree[1] Sélectionner le 1er fils ‘entree’ de l’élément annuaire Pour IE le 1er fils est l’indice 0 /annuaire/entree[last()] Sélectionner le dernier fils ‘entree’ de l’élément annuaire /annuaire/entree[last()-1] Sélectionner l’avant dernier fils ‘entree’ de l’élément annuaire / annuaire/entree[position() <3] Sélectionner le deux 1er fils ‘entree’ de l’élément annuaire / annuaire/entree[position() =3] Sélectionner le 3éme fils ‘entree’ de l’élément annuaire / annuaire/entree[nom=‘paul ’ ]/telephone Sélectionner les fils ‘telephone’ des éléments ‘entree’ dont le contenu du fils ‘nom’ est paul / annuaire/entree[@attribut =‘value’] Sélectionner les fils ‘entree’ dont la valeur de l’attribut ‘attribut’ est ‘value’
  71. 71. XPath Fonctions  Les fonctions XPath permettent d’affiner les expressions prédicat  conversion : string(object?), number(object?), boolean(object?)  ensemble de nœud : position(), last(), count(), name(node- set?), local-name(node-set?), Namespace_uri(node-set?)  traitement de string : concat( string , string , string *), starts-with( string , string ), contains( string , string ), substring-before( string , string ), substring-after( string , string ) …  numériques : sum( node-set ), floor( number ), ceiling( number ), round( number )  booléennes : not( boolean ), true(), false()
  72. 72. XPath Fonctions Expression Description //*[starts-with(name(),'B')] Recherche de balise dont le nom commence par B /ROOT/*[contains(translate(.,'0123456789',''),‘abs')] <ROOT><A>ab128s</A><A>ab9877V</A></ROOT> Recherche de contenu de chaîne dont on exclut certains caractères /ROOT/A[concat( substring(., 7, 4),substring(., 4, 2),substring(., 1, 2))<20071201] Comparaison de dates sum(/ROOT/A[number(.)!='NaN']) <ROOT><A>abs</A><A>10</A><A>15</A></ROOT> Éliminer les noeuds non numériques lors d'une somme
  73. 73. XPath Chemin de localisation  Une expression XPath utilisée pour sélectionner une collection de nœuds s’appelle un chemin de localisation.  Un chemin de localisation se compose d'une ou de plusieurs étapes de localisation, séparées par /.  Chaque étape sélectionne à son tour des nœuds par rapport à l’étape précedente  Un chemain de localisation qui commence par / est un chemain absolu  La syntaxe /elt1/elt2/elt3 est dite abrégé
  74. 74. XPath Chemin de localisation  La syntaxe non abrégé écrit chaque étape sous la forme : axe::test[prédicat]  Elle permet plus de possibilité de sélection (voisins, commentaire, processing-instruction, …)  axe : spécifie la relation d'arborescence entre le nœud de contexte et les nœuds que l'étape de localisation doit sélectionner : parents, fils, ancêtres, voisin...  exemple :Child, parent, ancestor, self....  test : indique parmi tous les nœuds de l'axe spécifié, celui ou ceux à considérer comme des candidats, Il suit l'axe et doit être précédé de :: .  exemple : parent::*, child::comment(), child::A ...  Prédicat (optionnel) : il consiste en des conditions sur les noeuds parcourus. Il est encadré par [ ] .
  75. 75. XPath Chemin de localisation Axe Description ancestor:: Les ancêtres du nœud courant ancestor-or-self:: Nœud courant et ses ancêtres attribute:: Attributs du nœud courant child:: Les fils du nœud courant, n'inclut pas de nœud d'attribut ou d'espace de noms descendant:: Les descendants du nœud courant , n'inclut pas de nœud d'attribut ou d'espace de noms descendant-or-self:: Nœud courant et ses descendants following:: Tous les nœuds qui suivent le nœud courant dans l'arborescence, sauf ses nœuds descendants, d'attribut et d'espace de noms.
  76. 76. XPath Chemin de localisation Axe Description following-sibling:: Tous les frères suivants du nœud courant, il ne comprend pas les autres enfants qui apparaissent avant le nœud courant. namespace:: Nœuds d'espace de noms du nœud courant. parent:: Le parent du nœud de contexte preceding:: Tous les nœuds qui précèdent le nœud de contexte dans l'arborescence, sauf les nœuds ancêtres, d'attribut et d'espace de noms. preceding-sibling:: Tous les frères suivants du nœud courant, il ne comprend pas les autres enfants qui apparaissent avant le nœud courant. self:: Nœud courant
  77. 77. XPath Chemin de localisation Exemple Résultat A/B[1]/following::* A/B[2]/preceding::* A/B[1]/following::D A/descendant::*
  78. 78. XPath Chemin de localisation  Le test de nœud est la seule partie obligatoire d'une étape de localisation XPath.  Trois types de test :  name test : utilise un nom développé et la relation entre ce nom et l'axe spécifié pour identifier les nœuds à sélectionner.  node type test : sélectionne les nœuds en se basant sur leur type.  targeted processing instruction test : ne sélectionne que les nœuds processing-instruction qui correspondent au type spécifié.
  79. 79. XPath Chemin de localisation Name test Description Exemple * retourne tous les nœuds de l’axe ancestor::* QName retourne les nœuds de l’axe qui ont le même nom local (QName) child::entree NSName:* retourne tous les nœuds de l’axe dont le nom développé comprend le namespace NSName child::tns:* NSName:QName retourne les nœuds de l’axe dont le nom développé est NSName:QName child::tns:entree
  80. 80. XPath Chemin de localisation Type test Description Exemple Comment() retourne les nœuds de l’axe de type commentaire following::comment() Node() retourne les nœuds de l’axe de n’importe quel type preceding::node() text() retourne les nœuds de l’axe de type texte (contenu texte d’un élément) child::text() processing- instruction() retourne les nœuds de l’axe de type processing- instruction self::processing instruction() processing- instruction(‘name ’) retourne les nœuds de l’axe de type processing- instruction dont le nom est name /child::processing- instruction("xml- stylesheet")
  81. 81. XPath Chemin de localisation Chemin Description child::chapter/descendant::para Sélectionne les descendants <para> des éléments <chapter> enfants du nœud de contexte. /descendant::olist/child::item Sélectionne tous les éléments <item> qui ont un parent <olist> contenu dans le même document que le nœud de contexte. / child::doc/child::chapter[position()=5]/ child::section[position()=2] Sélectionne le deuxième élément <section> contenu dans le cinquième élément <chapter> de l'élément de document <doc>. child::para[attribute::type="warning"] [position()=5] Sélectionne le cinquième enfant <para> du nœud de contexte ayant un attribut type dont la valeur est "warning". child::para[position()=5 and attribute::type="warning"] Sélectionne le cinquième enfant <para> du nœud de contexte ayant un attribut type dont la valeur est "warning". child::*[self::chapter or self::appendix and position()=last()] Sélectionne le dernier enfant <chapter> ou <appendix> du nœud de contexte.
  82. 82. XML Transformation Utiliser un CSS pour formater un contenu XML  À l'aide de feuilles de style CSS, il est possible de formater des éléments HTML (h1, div, href, span, …)  Il est aussi possible de réaliser le même formatage pour des éléments d’un document XML, peut importe le nom de ces éléments.  L’incorporation d’un CSS dans un XML se fait de la même façon que dans un HTML
  83. 83. XML Transformation Utiliser un CSS pour formater un contenu XML Démo
  84. 84. XSLT  XSLT pour Extensible Stylesheet Language Transformation.  Langage de programmation qui sert à transformer le contenu d'un document XML source en un autre document dont le format et la structure diffère.  XML  HTML  XHTML  Texte (C++, php, java, csv, …)  XSLT est un standard de la W3C  Un document XSLT est exprimée comme un document XML , pouvant aussi bien contenir des éléments définis par XSLT que d'autres éléments non définis par XSLT.
  85. 85. XSLT Démo
  86. 86. XSLT Structure
  87. 87. XSLT Structure  La racine d’un document XLST est la balise <stylsheet>  Indique la version à utiliser et le namespace XSLT http://www.w3.org/1999/XSL/Transform  La balise <transform> peut aussi être utilisé comme racine
  88. 88. XSLT Templates  Le processeur XSLT fait subir au document XML des transformations selon des modèles de transformation (template) décrits dans la feuille XSL pour produire un nouveau document selon le type de sortie souhaité.  Chaque modèle de transformation définit des traitements à effectuer sur un élément ou un ensemble d’éléments du document XML source.  Un modèle est représenté par la balise <template> dans la feuille XSL  Une feuille XSL peut contenir plusieurs modèles
  89. 89. XSLT Templates  La balise template définit un modèle de transformation.  match : expression XPath qui permet de sélectionner des éléments du document XML sur lesquels sera appliqué la transformation  name : nom du modèle, il permet de faire appel au modèle directement sans passer par l’évaluation des nœuds du document <xsl:call-template>  priority : priorité du modèle, utilisé si le processeur XSLT identifie plusieurs modèles de transformation pour le même noeud
  90. 90. XSLT Templates  Le contenu de la balise template représente les règles de transformation à appliquer sur les éléments sélectionnés par l’expression du match  texte, balises XSLT, balises d’autres namespace (XSLFO, XHTML, …)
  91. 91. XSLT Templates
  92. 92. XSLT Templates  La balise <apply-templates> permet de demander au processeur XSLT d’appliquer un modèle définie et qui correspond à l’expression XPath fournit par son attribut select  select : expression XPath, sert à identifier les modèles qui vont être appliqués, la correspondance est effectué sur la base de l’attribut match du modèle  Si select n’est pas fourni, le modèle est appliqué sur tous les fils du nœud courant.  Au cas ou plusieurs modèles correspondent à l’expression select  Utilisation de l’attribut priority du modèle  Utilisation du modèle dont l’expression match est la plus spécifique
  93. 93. XSLT Logique : boucle  <for-each> permet d’effectuer une boucle sur les éléments qui correspondent au résultat de l’expression XPath de l’attribut select
  94. 94. XSLT Logique : traitement conditionnel  <if> permet d’effectuer un traitement conditionnel si le résultat de l’expression de l’attribut test est vrai  L’expression test accepte la même syntaxe que les prédicats XPath.
  95. 95. XSLT Logique : traitement conditionnel  <choose> permet de faire un choix parmi plusieurs alternatives.  <when>, traitement a effectuer si l’expression test est vrai  <otherwise>, traitement a effectuer si aucune condition <when> n’est réalisé
  96. 96. XSLT Logique : ordonnancement  <sort> permet d’effectuer l’ordonnancement d’un ensemble d’éléments  <sort> vient comme fils d’un <template> ou d’un <for-each> pour en ordonner les éléments  select : expression qui sert de critère de tri  data-type : text ou number ,spécifie le type de tri  order : ascending ou descending  case-order : upper-first ou lower-first
  97. 97. XSLT Génération de contenu XML  <copy> fournit un moyen simple pour copier le noeud courant dans la sortie  use-attribute-sets : les attributs du nœud qui seront copiés, si vide tous  <copy> ne copie pas les enfants du nœud  <element> permet de créer un element XML dans la sortie  name : nom local de l’élément  use-attribute-sets : es attributs du nœud qui seront associés à l’élément.  <attribute> utilisé en association avec <element> pour y ajouter un attribut  name : nom de l’attribut
  98. 98. XSLT Sortie  La balise <output> est le 1er fils de la racine du document XSLT, cette balise indique :  method : le format de sortie xml, html ou texte.  doctype-public : est le nom du standard respecté par la sortie.  doctype-system : est le lien vers la DTD de ce standard.  indent=yes : indique que le fichier généré sera automatiquement indenté.  désactiver l'indentation diminue la taille des fichiers générés.
  99. 99. Partie 3  XML Query – XQuery  Définition  Syntaxe & Expressions  Selection et filtrage de données  Fonctions
  100. 100. XQuery Définition  XQuery pour XML Query  C’est un langage de requête permettant d'extraire des informations d'un document XML, ou d'une collection de documents XML  XQuery joue par rapport aux données XML un rôle similaire à celui du langage SQL vis-à-vis des données relationnelles
  101. 101. XQuery Syntaxes  La syntaxe FLWOR dont le nom vient des cinq clauses principales qui la composent (for, let, where, order by et return)  La syntaxe XQueryX pour « XML Syntax for XQuery », dans laquelle une requête est un document XML.  XQuery se base sur XPath pour sélectionner les éléments à traiter
  102. 102. XQuery Clause LET  Une expression FLWR permet d’utiliser des affectations de variables, et d’utiliser ces variables dans la suite de la requête.  L’affectation se fait au moyen de la clause LET  les variables sont ensuite non mutables. LET $noms := document(“annuaire.xml”)//nom RETURN $noms
  103. 103. XQuery Clause FOR  La clause For permet d’effectuer des itérations sur un ensemble de noeuds obtenus dans une requête.  A chaque itération un élément de cette liste est affecté à une variable de boucle, et le traitement explicité dans le For est appliqué à cette variable. FOR $element IN //entree RETURN $element/nom
  104. 104. XQuery Clause RETURN  La clause RETURN permet d’envoyer une valeur de retour à chaque itération de la boucle FOR,  La valeur de retour est concaténée à une variable de sortie, qui est renvoyée à l’utilisateur lors de la dernière itération.  RETURN ne provoque pas de sortie de la boucle For, le retour effectif à l’utilisateur se fait uniquement lors de la dernière itération ! FOR $element IN //entree RETURN $element/nom Résultat : <nom>Nom1</nom> <nom>Nom2</nom> <nom>Nom3</nom>
  105. 105. XQuery Clause WHERE  La clause WHERE permet de filtrer les noeuds obtenus par la requête dans une clause For, à la manière du WHERE SQL.  Le contenu de la clause WHERE est une expression dont le résultat de l’évaluation est booléen.  il est possible d’utiliser des opérations logiques AND et OR.  il est possible d’utiliser des expressions et fonctions XPath FOR $element IN //entree WHERE $ element /nom = “Harry Cover” OR $ element /nom = “Paul Lafargue” RETURN $element
  106. 106. XQuery Imbrication de requêtes  XQuery permet d’imbriquer les requêtes. LET $entrees:=//entree RETURN FOR $nom IN $entrees/nom RETURN $nom Résultat : <nom>Nom1</nom> <nom>Nom2</nom>
  107. 107. XQuery Requêtes XQuery avancées

×