comprendre xml : les notions fondamentales
TRANSCRIPT
![Page 1: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/1.jpg)
XML eXtensible Markup Language
![Page 2: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/2.jpg)
XML Introduction
![Page 3: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/3.jpg)
Introduction• XML est une notation• Méta-langage• une manière d'écrire les informations• Langage descriptif: décrit des propriétés plutôt que des traitements• utilise des balises pour délimiter les informations• Données Hiérarchiques• Compréhensible par un humain et par un ordinateur• Un fichier XML est un fichier texte.• Utilisé pour Echanger les données • Supporte tous les alphabets du monde (UTF8)
![Page 4: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/4.jpg)
Méta langage
![Page 5: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/5.jpg)
Utilisation
• XHTML, HTML5• OpenOffice, Microsoft Office Open XML (docx, xlsx, pptx = dossier
zip avec xml + img)• Format graphique : SVG • Les Flux de news : RSS • Les WebServices : XML-RPC et SOAP• JAVA (persistance, hibernate ..), .Net (xaml, dataset …), C++ …• MAthML (échange formule), SMIL(présentation multimédia), UBL
Rosetta.Net (Universal Business Language : commandes, factures, devis ..) …
• Et bien d’autres …
![Page 6: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/6.jpg)
![Page 7: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/7.jpg)
Exemple<BIBLIOTHEQUE> <ROMAN> <TITRE>Imajica</TITRE> <AUTEUR>Clive Barker</AUTEUR> <PRIX>6</PRIX> </ROMAN>
<ROMAN> <TITRE>Dune</TITRE> <AUTEUR>Frank Herbert</AUTEUR> <PRIX>7</PRIX> </ROMAN>
<MAGAZINE> <TITRE>Science et Vie</TITRE> <DATEPARUTION>2005-02-01</DATEPARUTION> </MAGAZINE>
<ROMAN> <TITRE>Christine</TITRE> <AUTEUR>Stephen King</AUTEUR> <PRIX>5</PRIX> </ROMAN></BIBLIOTHEQUE>
![Page 8: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/8.jpg)
Exemplede: Julia Royerà: Jean Valjean
Sylvie Picardcc: Luc Royer
Jonas DuprasSujet: InvitationSVP, nous aviser si vous ne pouvez pas y
assister.
<?xml version="1.0" encoding=« utf9" ?><MEMO>
<AUTEUR>Julia Royer</AUTEUR><DESTINATAIRES>
<NOM>Jean Valjean</NOM><NOM>Sylvie Picard</NOM>
</DESTINATAIRES><SUJET>Invitation</SUJET><CC>
<NOM>Luc Royer</NOM><NOM>Jonas Dupras</NOM>
</CC><CORPS><PAR>SVP, nous aviser si vous ne pouvez
pas y assister.</PAR></CORPS>
</MEMO>
![Page 9: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/9.jpg)
Arbre
![Page 10: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/10.jpg)
Structure XML• Ensemble de règles qui définissent la grammaire d'un
dialecte XML :– DTD : Définition du type de document !doctype (.dtd) – Schémas XML (.xsd)
• Permet de vérifier la validité d'un document ;• Permet d'exercer des contraintes sur les contenus;• Permet une prévisibilité des contenus pour un type de document
donné.
Valider
![Page 11: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/11.jpg)
Style XML• Permet de préciser le rendu, la disposition, le formatage
du contenu;– CSS - Cascading Style Sheets– XSL - eXtensible Style Sheets :
• XSL Formating Objects (XSL-FO)• XSL Transformations (XSLT)
Formater / Transformer
![Page 12: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/12.jpg)
Requêtes sur XML• Parcourir les fichiers xml• Xpath : XML Path Language (chemins fichiers)
• Xquery : langage de requête (SQL)
• Xpointer : un fragment de document XML en ligne (URL)
Trouver / Extraire
![Page 13: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/13.jpg)
Parsing• SAX : Simple API for XML, parseur
événementiel (java, c++, perl, php …)
• DOM : Document Object Model, parseur orientés hiérarchie (JavaScript, java, c++ …)
Traiter / programmer
![Page 14: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/14.jpg)
![Page 15: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/15.jpg)
XML Structure du document XML
![Page 16: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/16.jpg)
Structure du document XML• Débute par un prologue (facultatif et non répétable)• Contient un et un seul élément racine; (obligatoire et non répétable)• Peut, par la suite, contenir des commentaires, des instructions de
traitement ou des espaces (facultatifs et répétables)
![Page 17: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/17.jpg)
Le prologue• Une déclaration XML• Des instructions de traitement (<?nom-du-traitement arg1 arg2 argn ?>)• Une déclaration de type de document.
<?xml version="1.0" encoding="iso-8859-1" standalone="no"?><?xml-stylesheet type="text/css" href="maFeuille.css"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
![Page 18: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/18.jpg)
Les éléments• L'élément racine est obligatoire et ne peut être répété dans un
document XML. Il forme le contenu proprement dit du document. L'élément racine peut être vide.
• Un élément (element) se compose d'une balise d'ouverture, d'un contenu et d'une balise de fermeture : <para>Bonjour le monde!</para>
• Lorsque le contenu de l'élément est vide, on peut utiliser la forme abrégée suivante : <para />
![Page 19: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/19.jpg)
Les attributsUn attribut (attribute) se compose d'un nom d'attribut, d'un indicateur de valeur, et d'une valeur précédée et suivie par des délimiteurs de littéral " ou ‘ : nom-attribut="valeur-attribut"
<personne nom="John" prenom="Smith"/>Ou<personne>
<nom>John</nom><prenom>Smith</prenom>
</personne>
– Les attributs sont toujours situés à l'intérieur de la balise d'ouverture d'un élément.– Les attributs n'ont pas d'ordre;– Chaque attribut doit être précédé d'un espace;
![Page 20: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/20.jpg)
Sections littérales (section CDATA)
• Les sections littérales constituent un mécanisme qui permet d'insérer dans un document XML une chaîne de caractères qui doit être traitée par le processeur comme étant une chaîne littérale.
• Tout caractère servant de délimiteur sera alors traité comme simple caractère.
<![CDATA[ Voici le <contenu> de la section littérale ]]>
![Page 21: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/21.jpg)
Commentaires<!-- Voici le contenu du commentaire -->
![Page 22: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/22.jpg)
XML Les Chemins XPath
![Page 23: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/23.jpg)
XPath• Permet d’indiquer un ou plusieurs éléments dans un
document xml à l’aide de chemins• Le chemin s’évalue en fonction d’un nœud contexte• A pour résultat :
– un ensemble de nœuds (nodeset)– Une valeur numérique, booléenne ou alphanumérique
• Existe sous une forme abrégé et non abrégé, la forme non abrégé couvre plus de possibilités
![Page 24: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/24.jpg)
XPath• Une suite d’étape :
– [/]étape /étapex/.../étapen• Chemin absolue (nœud context est la racine) :
– /A/B/@att1 • Chemin relatif (à un nœud contexte)
– A/B/@att1• Une étape comprend trois composants :
– axe::filtre[prédicat1][prédicat2] …– l’axe: relation entre le nœud contexte et ceux sélectionnés – le filtre: type des nœuds qui seront retenus– le(s) prédicat(s): propriétés que doivent satisfaire les nœuds
retenus• On peut faire une union de chemins: //A | B/@att1
![Page 25: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/25.jpg)
Xpath : fonctionnement• à partir du nœud contexte, on évalue l’étape1; on obtient
un ensemble de nœuds;• on prend alors, un par un, les nœuds de cet ensemble,
et on les considère chacun à leur tour comme nœud contexte pour l’évaluation de l’étape 2;
• à chaque étape, on prend successivement comme nœud contexte chacun des nœuds faisant partie du résultat de l’étape précédente.
![Page 26: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/26.jpg)
Xpath : les axesAxe résultat
ancestor tout les ancêtres (parent, grandparent ..) du nœud contexte
ancestor-or-self Tout les ancêtres du nœud contexte et le nœud contexte lui-même
attribute Tout les attribut du nœud contexte
child Tout les fils du nœud courant. (axe par défaut, peut être omis)
descendant Tout les descendants (fils, petit fils ..)
descendant-or-self Les descendants et le nœud contexte
following Tout ce qui se trouve dans le document apres la balise de fermeture du nœud courant
following-sibling Les nœuds frères qui suivent le nœud contexte
namespace Tout les nœuds espace de nom du nœud contexte
parent Le nœud parent du nœud courant
preceding Les nœuds qui précédent le nœud courant sauf les parents, ancêtres, attributs et namespace
preceding-sibling Les nœuds frères avant le nœud courant
Self Le nœud contexte lui même
![Page 27: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/27.jpg)
Xpath : les axes
![Page 28: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/28.jpg)
Xpath : les axes
![Page 29: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/29.jpg)
Xpath : filtrer par type de noeud
• text() : nœud de type texte• comment() : nœud de type commentaire• processing-instruction() : nœud de type
instruction de traitement• node() : tout type de nœud
![Page 30: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/30.jpg)
Xpath : les operateurs
+ - * div mod= != < > <= >=
or and
![Page 31: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/31.jpg)
Xpath : Fonctions• string-length( ... ) : longueur d’une chaîne • starts-with( chaîne1, chaîne2 ) : tester si chaîne1 commence par chaîne2 • substring( chaîne1, position1, longueur) : extraction d’une sous-chaîne • normalize-space( chaîne ) : normalisation des occurrences de blancs à 1
blanc ;suppression des blancs d’en-tête et de fin • translate( chaîne, caractères source, caractères destination ) : convertit dans la
chaîne tous les caractères source par leur correspondance (en fonction de la position) dans le dernier argument
• number( chaîne ) : conversion en nombre • string( expression ) : conversion en chaîne • concat( chaîne1, chaîne2 ) : concaténation • contains( chaîne1, chaîne2 ) : tester si chaîne1 contient chaîne2 • floor( nombre décimal ) : arrondi inférieur (10.9 devient 10, par exemple) • ceil( nombre décimal ) : arrondi supérieur (10.1 devient 11, par exemple) • round( nombre décimal ) : arrondi au plus juste (10.4 devient 10 et 10.6 devient 11,
par exemple)
![Page 32: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/32.jpg)
Xpath : Fonctions• count( NodeSet? ) : nombre de noeuds (avg , min , max, sum )• position() : position courante commençant par 1• last( NodeSet? ) : dernière position • name( NodeSet? ) : nom du noeud (tag s’il s’agit d’un élément) avec préfixe éventuel • local-name( NodeSet? ) : nom du noeud sans préfixe • namespace-uri( NodeSet? ) : espace de noms • generate-id( NodeSet? ) : génération d’un identifiant unique• not() : la négation booléenne• …
![Page 33: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/33.jpg)
Xpath : prédicatExpression Description
/bookstore/book[1] Selectionne le premier element enfant book
/bookstore/book[last()] Selectionne le dernier element enfant book
/bookstore/book[last()-1] L’avant dernier element enfant book
/bookstore/book[position()<3] Les deux premiers elements enfant book
//title[@lang] Selectionne tout les titres qui ont un attribut lang
//title[@lang='eng'] Selectionne tout les titre qui ont un attribut lang qui vaut eng
/bookstore/book[price>35.00] Tout les éléments book enfant de l’element racine bookstore qui ont un élément price avec une valeur supérieur à 35
/bookstore/book[price>35.00]/title Selects all the title elements of the book elements of the bookstore element that have a price element with a value greater than 35.00
![Page 34: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/34.jpg)
Xpath : abréviationsExpression Descriptionnodename Sélectionne tout les nœud nommés "nodename"/ Sélectionne depuis le nœud racine
//Sélectionne depuis le nœud contexte tout les nœuds correspondant au critères quelque soit leur niveau dans le document
. Sélectionne le nœud courant
.. Sélectionne le nœud parent@ Sélectionne l’attribut* N’importe quel élément@* N’importe quel attributnode() N’importe quel noeud
![Page 35: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/35.jpg)
Exemple• child::B[child::C]
– B[C]• /descendant::B[attribute::att1and attribute::att2]
– //B[@att1 and @att2]• child::B[position()=last() - 1]
– B[last()-1]• Following-sibling::B[position()=1]
– Following-sibling::B[1]
![Page 36: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/36.jpg)
XML Les Styles CSS / XSLT
![Page 37: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/37.jpg)
Lier un fichier XML avec CSSAprès la déclaration xml dans le prologue du fichier xml :
<?xml-stylesheet href= " style.css" type="text/css"?>
![Page 38: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/38.jpg)
Exemple CSS<contact>
<nom>Logan Lee</nom><tel type="mobile">03 28 41 26 20</tel><tel type="bureau">04 01 49 94 42</tel><tel type="domicile">04 29 79 52 15</tel><email>[email protected]</email><adresse>546 Rutrum Street</adresse><ville>Gentbrugge</ville>
</contact><contact>
<nom>Alisa Brady</nom><tel type="mobile">08 56 96 88 56</tel><tel type="bureau">02 20 31 78 32</tel><tel type="domicile">01 76 46 92 49</tel><email>[email protected]</email><adresse>P.O. Box 557, 1452 Orci Ave</adresse><ville>Gap</ville>
</contact>
![Page 39: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/39.jpg)
Exemple CSScontact{
display:block;width:50%;border: 4px inset #06F;
}nom{
font-weight:bold;color:#006;display:block;text-align:center;
} tel{
display:block;margin-left:20px;
}tel:before{
content:attr(type) " : ";}
![Page 40: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/40.jpg)
XSLT• Fichier XML
– <?xml version="1.0" encoding="utf-8"?>– un namespace "http://www.w3.org/1999/XSL/Transform"– Un élément racine xsl:stylesheet
• Appliqué à un fichier XML (comme CSS)– <?xml-stylesheet href= " style.xsl" type="text/xsl"?>
• Ensemble de règles / modèles de transformation : les templates– xsl:template
• Les transformations XSL seront appliqué au fichier xml par un processeur (java : Saxon et Xalan, php5 : XSLTProcessor .NetFramework : XslCompiledTransform, les navigateurs ..)– Pour googleChrome la transformation requiert un serveur web
• Transforme un document XML (arbre source) en un autre document (arbre résultat, output )
• Le résultat est un fichier html, svg, fichier texte, pdf, un autre fichier xml …
![Page 41: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/41.jpg)
XSLT<?xml version="1.0" ?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform">...</xsl:stylesheet>
![Page 42: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/42.jpg)
XSLT fonctionnement• Un processeur XSLT traite un document XML en parcourant
les éléments de l’arbre XML correspondant, et en appliquant à certains d’entre eux une règle de transformation choisie parmi l’ensemble des règles constituant le programme XSLT
• Un fichier XSLT contient un ensemble de règles (modèles) :– <xsl:template match="...">
• Une règle se compose de : – un motif (pattern) en xpath indique si l’élément courant est à
traiter ou non– Un modèle de transformation (template) : qui dit par quoi
remplacer l’élément courant (sil correspond au motif)
![Page 43: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/43.jpg)
XSLT : modèle<xsl:template match="...pattern...">
<!-- modèle de transformation -->...<!-- fin du modèle de transformation -->
</xsl:template>
• Le modèle le plus spécifique est le premier à être appliqué– on peut préciser la priorité avec l’attribut priority
• Un modèle contient du texte et/ou des instructions xsl
![Page 44: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/44.jpg)
XSLT : les instructions• on peut mettre des instructions xslt dans le modèle
<xsl:instruction> ... </xsl:instruction>• Le résultat d’une instruction est un texte
– En exception les deux expression <xsl:apply-templates> et <xsl:for-each> qui produisent une liste de nœuds sources à traiter
• Instructions de premier niveau :– <xsl:output method=‘ …type...‘ encoding=‘…' />– <xsl:template match="...">
![Page 45: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/45.jpg)
XSLT : les instructions• Exemple d’instructions :
– <xsl:value-of select="... chemin de localisation ..." /> est remplacée par la valeur (textuelle) de la sélection
– <xsl:copy-of select="..."/> est instanciée sous la forme d’une copie conforme des éléments sélectionnés. (xsl:copy : Copie le noeud courant )
– <xsl:if test=" ... expression XPath ... "> Si la valeur de l’attribut test est égale à true, le modèle de transformation associé est instancié ; sinon, il ne l’est pas
![Page 46: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/46.jpg)
XSLT : les instructions• Exemple d’instructions :
– <xsl:apply-templates/> est remplacée par le fragment de document qui résulte du traitement de la liste des enfants du noeud courant
– <xsl:for-each select="... chemin de localisation ..."> est remplacée par le fragment de document qui résulte du traitement de la liste des noeuds sélectionnés par son attribut select="…"
– <xsl:sort select=“…" data-type=“…"/> est une instruction de tri qui ne s’emploie que comme complément à xsl:apply-templates ou xsl:for-each : elle sert à trier le node-set sélectionné par l’une de ces deux instructions.
![Page 47: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/47.jpg)
XSLT : les instructions<xsl:choose>
<!-- autant de xsl:when que l'on veut, mais au moins 1 en tout --><xsl:when test=" ... expression XPath ... ">
<!-- modèle de transformation --><!-- fin du modèle de transformation -->
</xsl:when><xsl:when test=" ... expression XPath ... ">
<!-- modèle de transformation --><!-- fin du modèle de transformation -->
</xsl:when> ...
<!-- l'élément xsl:otherwise est facultatif --><xsl:otherwise>
<!-- modèle de transformation --> <!-- fin du modèle de transformation -->
</xsl:otherwise></xsl:choose>
![Page 48: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/48.jpg)
XSLT : les instructions• <xsl:text> : insérer un texte non balisé (espaces blancs)
– Si les espaces proviennent du fichier xml utiliser la fonction XPath normalize-space() ou l’instruction xslt <xsl:strip-space>
• <xsl:element name="xxx"> : produit dans le document résultat un élément XML de la forme <xxx> ... </xxx>, dont le nom est fourni par l’attribut name, et dont le contenu est le résultat de l’instanciation du modèle de transformation associé
• <xsl:attribute> : permet de créer un nouvel attribut, dont le nom est fourni par l’attribut name, et la valeur par le modèle de transformation associé. Il est mis dans un xsl:element ou dans un élément literal
• <xsl:attribute-set> : permet de définir un ensemble d’attributs qui pourront être attachés en une seule fois à un élément en utilisant l’instruction <xs:element name="..." use-attribute-sets="...">, ou bien en utilisant un élément source littéral avec un attribut <xsl:use-attribute-sets="..."
![Page 49: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/49.jpg)
Apply-templates• L'élément <xsl:apply-templates> sélectionne d'abord une collection de
nœuds à l'aide de l'expression spécifiée dans l'attribut select. Si cet attribut n'est pas spécifié, tous les enfants du nœud actuel sont sélectionnés.
• Pour chacun des nœuds sélectionnés, <xsl:apply-templates> demande au processeur XSLT de trouver un <xsl:template> approprié à appliquer. Pour vérifier si les modèles sont applicables, le processeur compare le nœud à l'expression XPath spécifiée dans l'attribut match du modèle.
• Si plusieurs modèles sont applicables, celui qui possède la plus haute priorité est choisi. Si plusieurs modèles ont la même priorité, celui qui apparaît en dernier dans la feuille de style est sélectionné.
• Si aucun modèle n’est trouvé le processeur appliquera un modèle par défaut
![Page 50: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/50.jpg)
Les modèles par défaut<xsl:template match="text()|@*“>
<xsl:value-of select="."/></xsl:template>
<xsl:template match="text()|@*"> <xsl:value-of select="."/>
</xsl:template>
<xsl:template match="processing-instruction() | comment()"/>
![Page 51: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/51.jpg)
Identity transform
<xsl:template match="/ | @* | node()"><xsl:copy>
<xsl:apply-templates select="@* | node()" /></xsl:copy>
</xsl:template>
![Page 52: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/52.jpg)
Les modes• traiter un même élément du document XML source plusieurs fois de
plusieurs façons différentes dans une même transformation
<xsl:template match="/"><h2>Table des Matières</h2><xsl:apply-templates select="titre" mode="tdm"/> <h2>Contenu</h2> <xsl:apply-templates select="titre" mode="contenu"/>
</xsl:template>
<xsl:template match="titre" mode="tdm"> ... </xsl:template><xsl:template match="titre" mode="contenu"> ... </xsl:template>
![Page 53: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/53.jpg)
Transformation sous PHP<?php
$doc = new DOMDocument();$doc->load( "carnet.xml" );$xsl = new XSLTProcessor();$xslt = new DOMDocument();$xslt->load( "carnet.xslt" );$xsl->importStyleSheet( $xslt );echo $xsl->transformToXML($doc);
?>
NB: dans le fichier php.ini activer l’extension XSLT en enlevant le point-virgule avant la ligne : extension=php_xsl.dll
![Page 54: Comprendre XML : les notions fondamentales](https://reader034.vdocuments.pub/reader034/viewer/2022042611/58f051ad1a28ab567d8b4615/html5/thumbnails/54.jpg)
Transformation sous JAVAimport javax.xml.transform.Transformer;import javax.xml.transform.TransformerFactory;import javax.xml.transform.stream.StreamResult;import javax.xml.transform.stream.StreamSource;
…
TransformerFactory factory = TransformerFactory.newInstance();Transformer t = factory.newTransformer(
new StreamSource("carnet.xslt" ) );t.transform(new StreamSource("carnet.xml" ),
new StreamResult("c:/carnet.html" ) );