Date post: | 12-Apr-2017 |
Category: |
Technology |
Upload: | rachid-nid-said |
View: | 3,995 times |
Download: | 9 times |
03/05/23 2
Plan
Introduction XML validation
DTD XSD
XPath XML Transformation - XSLT XML query – XQuery
03/05/23 3
Partie 1
Introduction XML
XML Validation DTD
Structure Entités Utiliser DTD
XSD Schéma XML Types simples Types complexes Annotation
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.
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.
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é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)
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/>
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
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.
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.
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.
Une processing-instruction commence par <? et se termine par ?>.
Exemple : <?xml-stylesheet type="text/css" href="style.css" ?>
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.).
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.
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.
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
DTD
DTDStructure : é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
DTDStructure : é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>
DTDStructure : élément
Type DTD XMLElé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.
DTDStructure : é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
DTDStructure : 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
DTDStructure : 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
DTDStructure : 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
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
DTDUtiliser 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
DTDUtiliser une DTD interne
La DTD est déclaré directement dans le document XML dans la balise DOCTYPE
DTDUtiliser 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
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
XSD
XSDType 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
XSDType 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
XSDType simple
XSDType 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
XSDType 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>
XSDType 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é
XSDType 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
XSDType simple : Restriction
XSDType 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>
XSDType 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>
XSDType 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>
XSDType complexe
Type avec des attributs et sans contenu
XSDType 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
XSDType 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
XSDType 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é
XSDType 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
XSDType 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
XSDType complexe
XSDType 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é
XSDType complexe
XSDVisibilité 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.
XSDStructure : 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
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.
XSDStructure : é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.
XSDStructure : 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.
XSDStructure : 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.
XSDAnnotation
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
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)
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 noeuds ou des ensembles de noeuds dans des documents XML. XPath est un standard W3C
XPathTerminologies
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
XPathTerminologies
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, …
XPathSyntaxe
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
XPathSyntaxe
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’
XPathSyntaxe
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
XPathSyntaxe
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.
XPathSyntaxe
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
XPathSyntaxe
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 : (..)
XPathSyntaxe
Exemple Description/annuaire/entree[1] Sélectionner le 1er fils ‘entree’ de l’élément
annuairePour 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’
/annuaire//entree[nom|telephone]
Sélectionner les descendants ‘entree’ qui au moins un fils ‘nom’ ou ‘telephone’
XPathFonctions
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()
XPathFonctions
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
XPathChemin 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é
XPathChemin 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 [ ] .
XPathChemin 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.
XPathChemin 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
XPathChemin de localisation
Exemple RésultatA/B[1]/following::*
A/B[2]/preceding::*
A/B[1]/following::D
A/descendant::*
XPathChemin 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é.
XPathChemin 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
XPathChemin 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")
XPathChemin 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.
XML TransformationUtiliser 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
XML TransformationUtiliser un CSS pour formater un contenu XML
Démo
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.
XSLT
Démo
XSLTStructure
XSLTStructure
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
XSLTTemplates
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
XSLTTemplates
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
XSLTTemplates
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, …)
XSLTTemplates
XSLTTemplates
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
XSLTLogique : 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
XSLTLogique : 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.
XSLTLogique : 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é
XSLTLogique : 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
XSLTGé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
XSLTSortie
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.
Partie 3
XML Query – XQuery Définition Syntaxe & Expressions Selection et filtrage de données Fonctions
XQueryDé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
XQuerySyntaxes
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
XQueryClause 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”)//nomRETURN$noms
XQueryClause 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 //entreeRETURN$element/nom
XQueryClause 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 //entreeRETURN $element/nom
Résultat :<nom>Nom1</nom><nom>Nom2</nom><nom>Nom3</nom>
XQueryClause 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 //entreeWHERE $ element /nom = “Harry Cover”OR $ element /nom = “Paul Lafargue”RETURN $element
XQueryImbrication de requêtes
XQuery permet d’imbriquer les requêtes.
LET $entrees:=//entreeRETURNFOR $nom IN $entrees/nomRETURN$nom
Résultat :<nom>Nom1</nom><nom>Nom2</nom>
XQueryRequêtes XQuery avancées