17/03/14 1
XML Avancé
DTD, XSD, XPATH, XSLT, XQuery
Rachid NID SAID
rachid.nidsaid@gmail.com
17/03/14 2
Plan
 Introduction
 XML validation
 DTD
 XSD
 XPath
 XML Transformation - XSLT
 XML query – XQuery
17/03/14 3
Partie 1
 Introduction
 XML
 XML Validation
 DTD
 Structure
 Entités
 Utiliser DTD
 XSD
 Schéma XML
 ...
XML
 XML pour « eXtensible Markup Language »
 XML C’est est un langage à balise définissant un
format universel de repré...
XML
 XML décrit les données de manière aussi bien
compréhensible par les Hommes qui écrivent les
documents XML que par le...
XML
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éfa...
Structure XML : balise
 Les balises sont les éléments de base d'un
document XML
 Les balises permettent de décrire les d...
Structure XML : racine
 L’ensemble du contenu d’un document XML est
encapsulé au sein d’une balise qui vient directement
...
Structure XML : attribut
 Un attribut est une information supplémentaire qui
est ajouté à la balise pour apporter plus de...
Structure XML : CDATA
 Le contenu d’une balise ne peut contenir certains
caractères comme > < & et doivent être remplacés...
Structure XML : commentaire
 Permet de commenter et simplifier la lecture du
contenu XML pour l’humain.
Structure XML : processing-instruction
 Les processing-instructions sont le moyen d'envoyer
des ordres à l‘éditeur XML.
...
Les parseurs XML
 DOM : Document Object Model
 Le document est chargé en entier en mémoire
 Une api offre la possibilit...
Validation XML
 Pour qu'un document XML soit utilisé comme un
langage ou comme un format d'échange, il doit
respecter cer...
Validation XML
 La validation XML est contrôle du contenu XML par
rapport à une grammaire fournie.
 DTD : le plus ancien...
DTD
 DTD pour Document Type Definition
 DTD permet de décrire la structure d'un document
XML
 liste des balises
 attri...
DTD
DTD
Structure : élément
Définit une balise XML
 ELEMENT : mot clé pour déclarer une balise
 nom : le nom de la balise
 ...
DTD
Structure : élément
Type DTD XML
Elément vide <!ELEMENT elt EMPTY> <elt/>
Elément
contenant du
texte
<!ELEMENT elt (#P...
DTD
Structure : élément
Type DTD XML
Elément avec
plusieurs
sous
éléments
<!ELEMENT elt (s1, s2)>
<!ELEMENT s1 EMPTY>
<!EL...
DTD
Structure : élément
Cardinalité Signification
<!ELEMENT elt (s1)> Le contenu de la balise elt est une seule
balise s1
...
DTD
Structure : attribut
Définit l’attribut d’une balise XML
 ATTLIST : mot clé pour déclarer un attribut
 nom : le nom ...
DTD
Structure : attribut
 contrainte : définit les contraintes que doit
respecter l’attribut, n’est pas obligatoire
 #RE...
DTD
Structure : identifiant
 Un attribut peut être déclaré comme identifiant d’un
élément avec le mot clé ID
 Un attribu...
 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...
DTD
Utiliser une DTD
 DOCTYPE permet de déclarer la DTD à utiliser pour
valiser le document XML,
 vient directement aprè...
DTD
Utiliser une DTD interne
 La DTD est déclaré directement dans le document
XML dans la balise DOCTYPE
DTD
Utiliser une DTD externe
 La DTD est déclaré dans un fichier externe
 SYSTEM : la DTD est indiqué en fournissant sa ...
XSD
 XSD pour XML Schema Definition
 Avantages par rapport à DTD :
 Le typage poussé des données (booléens, entiers,
in...
XSD
XSD
Type de données
 Plus de 40 types de données,
 string, integer, date, year, CDATA, float, double,
binary, ENTITIES, ...
XSD
Type simple
 Un élément de type simple ne peut comporter ni
attributs, ni sous-éléments.
 Il est possible d’utiliser...
XSD
Type simple
XSD
Type simple
 La création de nouveaux types simples est réalisée
au travers de la balise <simpleType>
 Trois façons p...
XSD
Type simple : Restriction
 Les restrictions sur les types simples (Facets)
permettent de dériver de nouveaux types à ...
XSD
Type simple : Restriction
 maxExclusive : limite supérieure (exclue)
 maxInclusive : limite supérieure (incluse)
 m...
XSD
Type simple : Restriction
 minLength : nombre minimum de caractères ou d’élément
d’une liste
 pattern : expression r...
XSD
Type simple : Restriction
XSD
Type simple : Listes
 Il existe trois types de liste intégrés NMTOKENS,
ENTITIES, IDREFS
 Ces types existent pour ga...
XSD
Type simple : Union
 XSD permet de définir de nouveaux types simple par
union de types existants
 i.e le nouveau typ...
XSD
Type complexe
 Un élément de type complexe peut contenir d'autres
éléments et / ou des attributs
 Un attribut ne peu...
XSD
Type complexe
 Type avec des attributs et sans contenu
XSD
Type complexe
 Type avec ou sans attributs et un contenu de type
simple
 La balise <simpleContent> précise qu’il ne ...
XSD
Type complexe
 Type avec ou sans attributs et un contenu composé
de sous éléments
 La balise <sequence> dite indicat...
XSD
Type complexe
 Trois balises indicateurs d’ordre peuvent être utilisé
pour indiquer la logique de placements des sous...
XSD
Type complexe
 Les indicateurs d'occurrence sont utilisés pour
exprimer le nombre de fois qu'un sous élément peut
app...
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...
XSD
Type complexe
XSD
Type complexe
 Il est possible de définir un nouveau type complexe
sur la base d'un type complexe existant
 Étendre ...
XSD
Type complexe
XSD
Visibilité des Types
 Un type est visible par tous les descendants du
noeud dans lequel il a été déclaré.
 Un type d...
XSD
Structure : entête
 XSD est un document XML, Il commence par un
prologue et un élément racine (root)
 L’élément raci...
Espaces de nom (XML Namespaces)
 XML Namespaces est une spécification W3C, son
objectif est
 de permettre l’utilisation ...
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’ut...
XSD
Structure : attribut
 La définition d’attributs associés à un élément se fait
dans par la balise <attribute>.
 name ...
XSD
Structure : attribut
 La définition d’attributs peut se faire de deux façons
différents.
 Définir l’attribut et l’ut...
XSD
Annotation
 L'annotation permet d'enrichir la description d'un
XSD, c’est un commentaire.
 L'annotation est réalisée...
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
 xm...
Partie 2
 XML Transformation
 XPath
 Utiliser un CSS pour formater un
contenu XML
 XSLT
XPath
 XPath pour XML Path Langage
 XPath est un standard XML qui définit des règles
grammaticales pour identifier des n...
XPath
Terminologies
 XPath se représente le
document XML en tant
qu’arbre
 dont la racine est
l’élément racine du
docume...
XPath
Terminologies
 Les relations entre nœuds :
 Parent (parent) : l’élément contenant
 Fils (childrens) : les élément...
XPath
Syntaxe
 Une expression XPath décrit l'emplacement
d'éléments et d'attributs XML comme un chemin
similaire à des UR...
XPath
Syntaxe
 Une expression XPath est évalué au sein d’un
contexte
 C’est le nœud par rapport auquel cette expression ...
XPath
Syntaxe
Expression Description Exemple
Nom du nœud Sélectionner Tous les
nœuds fils du même nom
à partir du nœud cou...
XPath
Syntaxe
Symbole Description Exemple
* Sélectionner n’importe quel
élément quel que soit le nom
//*
@* Sélectionner n...
XPath
Syntaxe
 Dans une expression XPath on peut utiliser le
caractère | , pour sélectionner sur plusieurs
chemins.
 Exe...
XPath
Syntaxe
 Pour affiner la sélection, XPath propose la notion de
prédicat pour pouvoir filtrer les nœuds à récupérer
...
XPath
Syntaxe
Exemple Description
/annuaire/entree[1] Sélectionner le 1er
fils ‘entree’ de l’élément
annuaire
Pour IE le 1...
XPath
Fonctions
 Les fonctions XPath permettent d’affiner les expressions
prédicat
 conversion : string(object?), number...
XPath
Fonctions
Expression Description
//*[starts-with(name(),'B')] Recherche de balise dont le nom
commence par B
/ROOT/*...
XPath
Chemin de localisation
 Une expression XPath utilisée pour sélectionner une
collection de nœuds s’appelle un chemin...
XPath
Chemin de localisation
 La syntaxe non abrégé écrit chaque étape sous la forme :
axe::test[prédicat]
 Elle permet ...
XPath
Chemin de localisation
Axe Description
ancestor:: Les ancêtres du nœud courant
ancestor-or-self:: Nœud courant et se...
XPath
Chemin de localisation
Axe Description
following-sibling:: Tous les frères suivants du nœud courant, il ne
comprend ...
XPath
Chemin de localisation
Exemple Résultat
A/B[1]/following::*
A/B[2]/preceding::*
A/B[1]/following::D
A/descendant::*
XPath
Chemin de localisation
 Le test de nœud est la seule partie obligatoire d'une
étape de localisation XPath.
 Trois ...
XPath
Chemin de localisation
Name test Description Exemple
* retourne tous les nœuds de
l’axe
ancestor::*
QName retourne l...
XPath
Chemin de localisation
Type test Description Exemple
Comment() retourne les nœuds de l’axe
de type commentaire
follo...
XPath
Chemin de localisation
Chemin Description
child::chapter/descendant::para Sélectionne les descendants <para> des
élé...
XML Transformation
Utiliser un CSS pour formater un contenu XML
 À l'aide de feuilles de style CSS, il est possible de
fo...
XML Transformation
Utiliser un CSS pour formater un contenu XML
Démo
XSLT
 XSLT pour Extensible Stylesheet Language
Transformation.
 Langage de programmation qui sert à transformer le
conte...
XSLT
Démo
XSLT
Structure
XSLT
Structure
 La racine d’un document XLST est la balise
<stylsheet>
 Indique la version à utiliser et le namespace XS...
XSLT
Templates
 Le processeur XSLT fait subir au document XML des
transformations selon des modèles de transformation
(te...
XSLT
Templates
 La balise template définit un modèle de transformation.
 match : expression XPath qui permet de sélectio...
XSLT
Templates
 Le contenu de la balise template représente les
règles de transformation à appliquer sur les
éléments sél...
XSLT
Templates
XSLT
Templates
 La balise <apply-templates> permet de demander au
processeur XSLT d’appliquer un modèle définie et qui
co...
XSLT
Logique : boucle
 <for-each> permet d’effectuer une boucle sur les
éléments qui correspondent au résultat de
l’expre...
XSLT
Logique : traitement conditionnel
 <if> permet d’effectuer un traitement conditionnel
si le résultat de l’expression...
XSLT
Logique : traitement conditionnel
 <choose> permet de faire un choix parmi plusieurs
alternatives.
 <when>, traitem...
XSLT
Logique : ordonnancement
 <sort> permet d’effectuer l’ordonnancement d’un
ensemble d’éléments
 <sort> vient comme f...
XSLT
Génération de contenu XML
 <copy> fournit un moyen simple pour copier le
noeud courant dans la sortie
 use-attribut...
XSLT
Sortie
 La balise <output> est le 1er
fils de la racine du
document XSLT, cette balise indique :
 method : le forma...
Partie 3
 XML Query – XQuery
 Définition
 Syntaxe & Expressions
 Selection et filtrage de données
 Fonctions
XQuery
Définition
 XQuery pour XML Query
 C’est un langage de requête permettant d'extraire
des informations d'un docume...
XQuery
Syntaxes
 La syntaxe FLWOR dont le nom vient des cinq
clauses principales qui la composent
(for, let, where, order...
XQuery
Clause LET
 Une expression FLWR permet d’utiliser des
affectations de variables, et d’utiliser ces variables
dans ...
XQuery
Clause FOR
 La clause For permet d’effectuer des itérations sur
un ensemble de noeuds obtenus dans une requête.
 ...
XQuery
Clause RETURN
 La clause RETURN permet d’envoyer une valeur de retour à
chaque itération de la boucle FOR,
 La va...
XQuery
Clause WHERE
 La clause WHERE permet de filtrer les noeuds obtenus par
la requête dans une clause For, à la manièr...
XQuery
Imbrication de requêtes
 XQuery permet d’imbriquer les requêtes.
LET $entrees:=//entree
RETURN
FOR $nom IN $entree...
XQuery
Requêtes XQuery avancées
Nächste SlideShare
Wird geladen in …5
×

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

4.090 Aufrufe

Veröffentlicht am

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

Veröffentlicht in: Technologie

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

×