Cr©ation de pages Web avec XML/XSLT - Chez Luc Brun
Transcript of Cr©ation de pages Web avec XML/XSLT - Chez Luc Brun
Plan (1/3)
5. De quoi parle t’on
6. Stockage XML
7. Lien avec B.D.I.
8. Partie I
9. Un document XML
10. Le préambule
11. Les balises
12. Combinaisons
13. Remarque sur les attributs
14. Caractères interdits
15. Les DTD
16. Exemple de DTD
17. Éléments d’une DTD
18. DTD : Les attributs
19. DTD : les attributs
20. DTD : les attributs
21. Lien XML/DTD
22. Les espaces de noms
23. Déclaration d’un espace de nom
24. Divers
25. Définition d’un CSS lié à un fichierXML
Creation de pages Web avecXML/XSLT – p.2/58
Plan (2/3)
26. Partie II
27. Un premier exemple
28. Remarques
29. Un exemple plus construit : XML
30. Un exemple plus construit : XSLT(1/2)
31. Un exemple plus construit : XSLT(2/2)
32. Remarques
33. XPath : documents XML et arbres
34. XPath : Chemins absolus
35. XPath : Chemins relatifs
36. XPath : évaluation
37. XPath : Union de chemins
38. XPath : conditions
39. XPath : fonctions et opérateurs debase
40. XPath : Fonctions sur les chaînes(1/2)
41. XPath : Fonctions sur les chaînes(2/2)
42. XPath : fonctions numériques
43. Exercices (1/2)
44. Exercices (2/2)
45. XSLT : importation de documents
46. XSLT : Le triCreation de pages Web avecXML/XSLT – p.3/58
Plan (3/3)
47. XSLT : exemple de tri
48. XSLT : les paramètres (définition)
49. XSLT : les paramètres (appel)
50. XSLT : Les règles (définition)
51. XSLT : les règles (appels 1/2)
52. XSLT : les règles (appels 2/2)
53. XSLT : Les boucles
54. XSLT : expressions conditionnelles (1/2)
55. XSLT : expressions conditionnelles (2/2)
56. XSLT : insertion d’éléments
57. XSLT : exemple d’insertion d’éléments
58. XSLTPROCCreation de pages Web avecXML/XSLT – p.4/58
De quoi parle t’on
XML : eXtensible Markup Language: Langage extensible de structuration de
données.
XSL : eXtensible Stylesheet Language: Langage de transformation.
Avantages :
� Standard libre du W3C (www.w3c.org)
� Prise en compte de nombreuses langues.
� Stockage de données au format texte � Flexibilité.
Creation de pages Web avecXML/XSLT – p.5/58
Stockage XML
Idéal pour :
� la manipulation de données (petites ou moyennes),
� l’archivage.
Utilisation croissante ayant atteint une certainematurité.
� Traitements de textes : StarOffice & Open Office(zip de fichiers XML)
� Navigateurs : Netscape,
� Lecteurs de mail : Evolution,
� Éditeurs de diagrammes : Dia
� . . .
Creation de pages Web avecXML/XSLT – p.6/58
Lien avec B.D.I.
données XML
<cours>
<intitule> BDI</intitule>
<lieu> U11</lieu>
<horaire> 14h-16h</horaire>
</cours>
mise en forme XSL
<div class="cours">
Cours: BDI
<div class="detailcours">
Salle : U11, 14h-16h</div></div>
présentation CSS Cours : BDISalle : U11, 14h-16h
Creation de pages Web avecXML/XSLT – p.7/58
Un document XML
<?xml version="1.0"encoding="ISO-8859-1" ?>
<liste><ouvrage>
<nom>10 sur l echelle de Richter
</nom><parution> 1999-01-01 </parution><sujet> Science-Fiction </sujet><auteur> Arthur C. Clarke</auteur><auteur> Mike Quay(Mc)</auteur>
</ouvrage></liste>
Creation de pages Web avecXML/XSLT – p.9/58
Le préambule
<?xml version="1.0" encoding="ISO-8859-1" ?>
� version : version de la norme XML utilisée par ledocument.
� encoding : type de caractères utilisés dans ledocument :UTF-8 : jeu de caractères universel
ISO-8859-1 : (latin1) Europe occidentale, Amériquelatine.
ISO-8859- : (2) Europe centrale et orientale, (3)Europe du sud-est, (4) scandinavie, pays baltes,(5) Cyrillique, (6) Arabe,. . .
Creation de pages Web avecXML/XSLT – p.10/58
Les balises
Langage de balises : liste, ouvrage, sujet, auteur,nom : balises définies par l’utilisateur. Différentescombinaisons :
�
<balise> valeur</balise>Exemple : <auteur>Arthur C. Clarke</auteur>
�
<balise> <sousbalise> valeur<sousbalise></balise>Exemple : <ouvrage> <auteur>Arthur C.Clarke</auteur></ouvrage>
�
<balise attribut="valeur"></balise>Exemple : <auteurnationalite="française"></auteur>
Creation de pages Web avecXML/XSLT – p.11/58
Combinaisons
<magazin>Micro Info<stock>
<piece compaLinux="yes">USB DISK
</piece><piece compaLinux="no">
Konika 200 Z</piece>
</stock></magazin>
Creation de pages Web avecXML/XSLT – p.12/58
Remarque sur les attributs
<auteur nationalite="francaise">Pierre bordage</auteur>
ou<auteur>Pierre bordage<nationalite> francaise</nationalite></auteur>
Choix en fonction :
1. de la signification de l’attribut,
2. du contrôle que l’on souhaite exercer sur sesvaleurs.
Creation de pages Web avecXML/XSLT – p.13/58
Caractères interdits
caractère Entité
� < ;
� > ;& & ;“ " ;’ &apos ;
Remplacement des caractères non présents par leurscode (ex. = €)
liste des codes : selfhtml.selfhtml.com.fr/
Creation de pages Web avecXML/XSLT – p.14/58
Les DTD
XML ={ balises, relations entre balises, attributs,valeurs attributs}
Échange de documents XML ou maintenance àtravers le temps de données stockées au format XML
� nécessité de définir la structure du document XMLet de la vérifier à chaque altération/création.
� DTD
Creation de pages Web avecXML/XSLT – p.15/58
Exemple de DTD
<!ELEMENT liste (ouvrage)+ >
<!ELEMENT ouvrage (nom,parution,sujet,auteur+)>
<!ELEMENT nom (#PCDATA)>
<!ELEMENT parution (#PCDATA)>
<!ELEMENT sujet (#PCDATA)>
<!ELEMENT auteur (#PCDATA)>
<liste><ouvrage>
<nom> echelle de Richter </nom>
<parution> 1999-01-01 </parution>
<sujet> Science-Fiction </sujet>
<auteur> Arthur C. Clarke</auteur>
<auteur> Mike Quay(Mc)</auteur>
</ouvrage></liste>Creation de pages Web avecXML/XSLT – p.16/58
Éléments d’une DTD
(liste de sous balises), et : impose l’ordre des sous
balises| ou : ordre quelconque
balise une et une seule balisebalise ? au plus une balisebalise+ au moins une balisebalise* un nombre quelconque de ba-
lisesPCDATA parsed character data : Une
chaîne quelconque de carac-tères
Creation de pages Web avecXML/XSLT – p.17/58
DTD : Les attributs
<auteur nationalite="française">
Pierre Bordage
</auteur>
<!ATTLIST auteur nationalite
(française|anglaise) #IMPLIED>
ATTLIST : Attributs de liste.
Creation de pages Web avecXML/XSLT – p.18/58
DTD : les attributs
<!ATTLIST balise attribut valeur option>Valeur Description
(valeur1|valeur2|. . .) liste de valeurs autorisées pourl’attribut
CDATA valeur quelconqueNMTOKEN valeur quelconque, sans espace
ni caractères spéciaux.
Creation de pages Web avecXML/XSLT – p.19/58
DTD : les attributs
<!ATTLIST balise attribut valeur option>Option Description
#REQUIRED attribut obligatoirement pré-sent
#IMPLIED attribut éventuellement pré-sent
"valeur" valeur par défaut#FIXED "valeur" valeur constante
Creation de pages Web avecXML/XSLT – p.20/58
Lien XML/DTD
� DTD externes<!DOCTYPE liste SYSTEM "ouvrage.dtd"><liste>
...</liste>
� DTD internes<!DOCTYPE liste [
la DTD]><liste>
...</liste>
Creation de pages Web avecXML/XSLT – p.21/58
Les espaces de noms
Fusion de plusieurs documents XML utilisant lesmêmes balises � Problème. Solution les espaces denoms (name spaces).Exemple :<perso:ouvrage>. . .</perso:ouvrage><emprunt:ouvrage>. . . </emprunt:ouvrage>
Creation de pages Web avecXML/XSLT – p.22/58
Déclaration d’un espace de nom
<biblio
xmlns:perso="http://www.univ-reims.fr/p.html"
xmlns:emprunt="http://www.univ-reims.fr/e.html"
>
� xmlns : XML name space.
� http ://www.univ-reims.fr/p.html : URI (UniformRessource Identifier) identificateur unique pour le nom.L’adresse n’a pas besoins d’exister.
Creation de pages Web avecXML/XSLT – p.23/58
Divers
� vérification de documents XML :xmllint fichier.xml - -dtdvalid fichier.dtd 1 � /dev/null
� Insérer du HTML dans un fichier XML :<auteur
xmlns="http://www.w3.org/TR/REC-html40">
<html:p> <html:b>
Pierre bordage
</html:b></html:p>
</auteur>
� Référence à un fichier CSS dans un fichier XML :<?xml-stylesheet href="fichier.css"type="text/css" ?>
Creation de pages Web avecXML/XSLT – p.24/58
Définition d’un CSS lié à un fichierXML
Construire des règles CSS pour chaque balise ou desgroupe de balises. Exemple :liste {font-family: sans-sherif;font-size:12pt}auteur,sujet {display:blockmargin: 10px;width: 400px;}
Remarque : La référence à un CSS suffit pour que les
balises HTML soient interprétées.Creation de pages Web avecXML/XSLT – p.25/58
Un premier exemple
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xsl:stylesheet version=’1.0’
xmlns:xsl=’http://www.w3.org/1999/XSL/Transform’>
<xsl:output method="html" version="4.0"
encoding="ISO-8859-1" indent="yes"/>
<xsl:template match="/">
<html>
<head>
<title> Mon premier document XSLT </title>
</head>
<body>
<h1>Mon premier document XSLT </h1>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Creation de pages Web avecXML/XSLT – p.27/58
Remarques
1. Un document XSL est un document XML avecl’espace de nom xsl.
2. xsl :output method=’html’ format du fichierde sortie. Par défaut, method �{html,text,xml}(possibilité de produire du pdf avec xsl-foo)
3. xsl :template match=’/’ est une règle :élément fondamental en XSL. (’/’ est l’élémentracine appliqué au début du traitement d’undocument XML)
Creation de pages Web avecXML/XSLT – p.28/58
Un exemple plus construit : XML
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE liste SYSTEM "associations.dtd">
<associations>
<association departement="GIM">
<nom> ADEMI </nom>
<telephone> 03.26.21.81.81</telephone>
<membres>
<personne>
<nom>Jean Marie Leguerec</nom>
<fonction> President</fonction>
</personne>
</membres>
</association>
...
</associations>
Creation de pages Web avecXML/XSLT – p.29/58
Un exemple plus construit : XSLT(1/2)
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xsl:stylesheet version=’1.0’
xmlns:xsl=’http://www.w3.org/1999/XSL/Transform’>
<xsl:output method="html" version="4.0"
encoding="ISO-8859-1" indent="yes"/>
<xsl:template match="/">
<html><head>
<title> Liste des associations</title>
</head><body>
<h1>Liste des associations</h1>
<table>
<xsl:apply-templates select="associations/association"/>
</table>
</body>
</html>
</xsl:template>
Creation de pages Web avecXML/XSLT – p.30/58
Un exemple plus construit : XSLT(2/2)
<xsl:template match="association">
<tr>
<td> <xsl:value-of select="nom"/>
<xsl:text>(</xsl:text>
<xsl:value-of select="@departement"/>
<xsl:text>)</xsl:text>
</td>
<td><xsl:value-of select="telephone"/> </td>
</tr>
</xsl:template>
</xsl:stylesheet>
Résultat :Liste des associations
ADMI (GIM) 03.26.21.81.81...
...
Creation de pages Web avecXML/XSLT – p.31/58
Remarques
Principe de programmation XSLT :
Définir un ensemble de règles décrivant :
1. le traitement à appliquer sur les données,2. l’agencement de ces traitements.
Comment définir les donnée sur lesquelles doivents’appliquer une règle ?<xsl :template match="toto">
toto : expression XPath
Creation de pages Web avecXML/XSLT – p.32/58
XPath : documents XML et arbres
@departement
text
nom
text
telephone
text
nom
text
fonction
personne �
membres
�������
association � association �
����
associations
<associations>
<association
departement="GIM">
<nom> ADEMI </nom>
<telephone>
03.26.21.81.81
</telephone>
<membres>
<personne>
<nom>
Jean Marie Leguerec
</nom>
<fonction>
President
</fonction>
</personne>
</membres>
</association>
...
</associations>
Creation de pages Web avecXML/XSLT – p.33/58
XPath : Chemins absolus
Syntaxe équivalente à celle des chemins de fichiersUnix.1. Liste des noms d’associations
/associations/association/nom
2. Liste des départements/associations/association/@departementAttention aux répétitions !
3. Liste des noeuds de type nom, petits fils de noeudassociation : /associations/*/nom
4. Liste des attributs des associations/associations/association/@*
Creation de pages Web avecXML/XSLT – p.34/58
XPath : Chemins relatifs
une règle XSLT évalue un noeud qui est le noeudcourant de la règle.1. Le noeud courant : .
ex. ./text() � text() noeud texte fils dunoeud courant.
2. Le noeud père : ..ex. si membres noeud courant ../@departementdonne le département de l’association.
3. Liste des descendants réflexive : //ex. si association noeud courant //fonctiontous les noeuds fonction descendant du noeudcourant.
Creation de pages Web avecXML/XSLT – p.35/58
XPath : évaluation
L’arbre d’un document XML est parcouru par leprocesseur XSLT.
1. following : noeuds suivants dans l’évaluation,2. following-sibling : noeuds suivants de
même type (ex. association) dans l’évaluation.
3. preceding : noeuds précédents dans l’évaluation
4. preceding-sibling : noeuds précédents demême type dans l’évaluation.
5. fonction position() : position du noeud parrapport à l’ordre d’évaluation du noeud parent.
6. fonction last() : dernier noeud évalué pour lenoeud parent. Creation de pages Web avecXML/XSLT – p.36/58
XPath : Union de chemins
� Union ://telephone | //nom
ensemble de tous les numéros de téléphones et denoms présents dans la base.
� Combinaison :(//association | //personnes)/nom
ensemble des noms de personnes et d’associations.
Creation de pages Web avecXML/XSLT – p.37/58
XPath : conditions
Permet de sélectionner des noeuds en fonction d’uncritère.Exemples :
1. associations/association[nom=’ADEMI’] renvoi le (ou lesnoeuds) d’association dont le nom est ADEMI.
2. /associations/association[@departement=’GIM’]/nom renvoi lesnoms de toutes les associations du départementGIM.
� Remarque : noeud[3] � noeud[position()=3]
� Question : Nom des présidents de toutes lesassociations.
Creation de pages Web avecXML/XSLT – p.38/58
XPath : fonctions et opérateurs debase
opérateur signification< ; �> ; �
= égal!= différent
< ;= �
> ;= �
and,ornot non
number count(node-set) nombre de noeuds
Creation de pages Web avecXML/XSLT – p.39/58
XPath : Fonctions sur les chaînes(1/2)
boolean contains( ��� , ��� ) �� contient � �
contains(”01/01/1999”,“1999”)=true
boolean start-with( � � , ��� ) �� commence par � �
start-with(”Mr dupond”,“Mr”)=true
string concat( ��� , ��� ,. . . , ��� ) concatène ��� ,.., ���
concat(”né le”,“01/01/1999”)=”né le 01/01/1999”
string substring-before( � � , � � ) chaine qui précède � �
dans ��
substring-before(“01/01/1999”,”/”)="01"
Creation de pages Web avecXML/XSLT – p.40/58
XPath : Fonctions sur les chaînes(2/2)
string substring-after( �� , �� ) chaîne qui suit � � dans ��
substring-after("01/01/1999","/")="01/1999"string substring( �� , �,l ?) chaîne de longueur l
commençant à la posi-tion �
substring("01/01/1999",7)="1999"number string-length(s) longueur de la chaîne.
string-length("01/01/1999")=10string normalize-space(string ?) normalise les espaces
(avant,milieu, début)normalize-space(" il était ")="il était"
Creation de pages Web avecXML/XSLT – p.41/58
XPath : fonctions numériques
sum(node-set) somme d’un nombre denoeuds
floor floor(4.4)=4ceil ceil(4.4)=5
round round(4.4)=4round(4.6)=5
Creation de pages Web avecXML/XSLT – p.42/58
Exercices (1/2)
� Sélections des associations des départements GIMet INFO,
� Sélection de toutes les associations sauf celles dudépartement GIM,
� Sélection de toutes les associations comportant aumoins 5 membres,
� Sélection de toutes les associations du départementGIM dont Mr Leguerec n’est pas membre,
� Sélection de toutes les associations du départementGIM dont le nom du président contient Leguerec.
Creation de pages Web avecXML/XSLT – p.43/58
Exercices (2/2)
Écrire un programme XSLT qui affiche la liste desassociations sous la forme :
Liste des associations1. ADEMI, Département GMI
Liste des membres
� Jean Marie Leguerec (Président)...
Creation de pages Web avecXML/XSLT – p.44/58
XSLT : importation de documents
� Importation de documents XSLT
� <xsl :import href="url"/> : les règles dufichiers importé ont une priorité inférieure à celledu fichier qui inclut � possibilité de redéfinir unprogramme.
� xsl :include href="url"/> les règles dufichier inclu et courant ont la même priorité.
� Importation de documents XML : fonction documentexemple :
<xsl :value-of
select="document(’config.xml’)/langs[@default=’true’]
charge la langue par défaut dans config.xml
�Possibilité de travailler sur plusieurs documentsXML. Creation de pages Web avecXML/XSLT – p.45/58
XSLT : Le tri
Utilisé uniquement pour <xsl :apply-template>et <xsl :for-each> (voir plus loin).<xsl:sort select="expr"lang="nmtoken"data-type="text|number"order="ascending|descending"case-order="upper-first|lower-first"/>
select : critère de trilang : langue,data-type : texte ou nombres,order : ordre du tri,case-order priorité majuscules/minuscules.Creation de pages Web avecXML/XSLT – p.46/58
XSLT : exemple de tri
Tri des associations par département puis par nom.
<xsl:apply-template select="association"><xsl:sort select="@departement"/><xsl:sort select="nom"/></xsl:apply-template>
Possibilité de tri multiples.
Creation de pages Web avecXML/XSLT – p.47/58
XSLT : les paramètres (définition)
<xsl:param name="nom"select="default value"/>default value</xsl:param>
� Au début d’un document correspond à un paramètredu programme (équivalent de argv en C).
� Dans la définition d’une règle correspond à unparamètre de celle-ci.
� Accès à la valeur d’un paramètre par<xsl :value-of select="$nom" />
Creation de pages Web avecXML/XSLT – p.48/58
XSLT : les paramètres (appel)
<xsl:with-param name="nom"select="default value"/>default value</xsl:with-param>Exemple :<xsl:apply-template select="association">
<xsl:with-param name="lang" select="fr"/>
</xsl:apply-template>
ou<xsl:apply-template select="association">
<xsl:with-param name="lang">
<xsl:value-of
select="document(’config.xml’)/langs[@default=’true’]
</xsl:with-param>
</xsl:apply-template>
Creation de pages Web avecXML/XSLT – p.49/58
XSLT : Les règles (définition)
<xsl:template match="expr xpath"name="nom"priority="number"mode="nom"></xsl:template>
name : défini une règle nommée � procédure.
priority : par défaut la règle la plus prioritaire est ladernière définie � Possibilité de forcer despriorités.
mode : permet de regrouper des règles en familles. ex.mode="item" (représentation des associationssous forme d’items) mode="table" ( représentationsous forme de tables). Creation de pages Web avecXML/XSLT – p.50/58
XSLT : les règles (appels 1/2)
Les regles non nommees :
<xsl:apply-template select="expr xpath"mode="nom"><xsl:sort> ou<xsl:with-param></xsl:apply-template>
� <xsl :apply-template/> applique lesrègles sur tous les fils du noeud courant :dangereux
� <xsl :apply-templateselect="document(’config.xml’)/langs"/>applique une règle à partir d’un fichier XMLexterne. Creation de pages Web avecXML/XSLT – p.51/58
XSLT : les règles (appels 2/2)
Les regles nommees :
<xsl:call-template name="nom"<xsl:with-param> (0 a n)</xsl:call-template>
Exemple :
<xsl:call-template name="display_title"><xsl:with-param name="title"select="Premier appel de regle nommee"/></xsl:call-template>
Creation de pages Web avecXML/XSLT – p.52/58
XSLT : Les boucles
Boucle sur un ensemble de noeuds.<xsl:for-each select="expr xpath"><xsl:sort> (0 a n) contenu</xsl:for-each>Exemple :<ul><xsl:for-each select="membres"><xsl:sort select="nom"><li><xsl:value-of select="nom"/><xsl:text>(</xsl:text><xsl:value-of select="fonction"/><xsl:text>)</xsl:text></li></xsl:for-each></ul> Creation de pages Web avecXML/XSLT – p.53/58
XSLT : expressions conditionnelles(1/2)
L’instruction if :
<xsl:if test="expr xpath">contenu</xsl:if>
Exemple :
<xsl:if test="not(@departement)"><xsl:text>
Departement non specifie</xsl:text>
</xsl:if>
Pas de else. . .Creation de pages Web avecXML/XSLT – p.54/58
XSLT : expressions conditionnelles(2/2)
L’instruction choose :
<xsl:choose><xsl:when test="expr xpath"></xsl:when> (1 a n)<xsl:otherwise> </xsl:otherwise>(0 a 1)</xsl:choose>
Exemple :<xsl:choose>
<xsl:when test="@departement">
<xsl:value-of select="@departement"/>
</xsl:when>
<xsl:otherwise>
<xsl:text> Departement non specifie</xsl:text>
</xsl:otherwise>
</xsl:choose> Creation de pages Web avecXML/XSLT – p.55/58
XSLT : insertion d’éléments
Cas simple : insertion directe <ul>. . .</ul>.Utilisation d’attributs ou de noms variables
�<xsl :element><xsl:element name="nom"use-attribute-sets="names"><xsl:attribute name="nom">contenu</xsl:attribute> (0 a n)contenu</xsl:element>
Creation de pages Web avecXML/XSLT – p.56/58
XSLT : exemple d’insertiond’éléments
<link name="mon code source"> (name non obligatoire)
http://www.univ-reims.fr
</link>
But : <a href=’’http ://www.univ-reims.fr> mon code source </a>
<xsl:template match="link">
<xsl:element name="a">
<xsl:attribute name="href">
<xsl:value-of select="."/>
</xsl:attribute>
<xsl:choose>
<xsl:when test="@name">
<xsl:value-of select="@name"/>
</xsl:when>
<xsl:otherwise>
<xsl:text> url </xsl:text>
</xsl:otherwise>
</xsl:element>
</xsl:template> Creation de pages Web avecXML/XSLT – p.57/58