Cr©ation de pages Web avec XML/XSLT - Chez Luc Brun

58
Création de pages Web avec XML/XSLT Luc Brun Cr ´ eation de pages Web avecXML/XSLT – p.1/58

Transcript of Cr©ation de pages Web avec XML/XSLT - Chez Luc Brun

Création de pages Web avecXML/XSLT

Luc Brun

Creation de pages Web avecXML/XSLT – p.1/58

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

Partie I

XMLeXtensible Markup Language

Creation de pages Web avecXML/XSLT – p.8/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é

� &lt ;

� &gt ;& &amp ;“ &quot ;’ &apos ;

Remplacement des caractères non présents par leurscode (ex. = &#8364)

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

Partie II

XSLTeXtensible Stylesheet Language Transform

Creation de pages Web avecXML/XSLT – p.26/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&lt ; �&gt ; �

= égal!= différent

&lt ;= �

&gt ;= �

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

XSLTPROC

xsltproc [options] file.xsl file.xml > file.html

Options :

–output ou -o file nom du fichier de sauvegarde–param nom noeud–stringparam nom valeur

Creation de pages Web avecXML/XSLT – p.58/58