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. 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. 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.
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. 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. 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. 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. 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. Structure XML : commentaire
Permet de commenter et simplifier la lecture du
contenu XML pour l’humain.
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. 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. 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. 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. 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
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. 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. 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. 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. 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. 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. 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. 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. 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. DTD
Utiliser une DTD interne
La DTD est déclaré directement dans le document
XML dans la balise DOCTYPE
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. 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
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. 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
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. 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. 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. 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
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. 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. 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>
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. 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. 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. 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. 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
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é
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. 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. 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. 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. 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. 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. 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. 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. Partie 2
XML Transformation
XPath
Utiliser un CSS pour formater un
contenu XML
XSLT
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. 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. 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. 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. 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. 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. 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. 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. 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. 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’
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. 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. 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. 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. 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
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. 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. 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. 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. 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
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.
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. 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. 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. 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, …)
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. 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. 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. 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. 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. 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. 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. Partie 3
XML Query – XQuery
Définition
Syntaxe & Expressions
Selection et filtrage de données
Fonctions
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. 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. 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. 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. 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. 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. 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>