Cours pour apprendre l’XSLT
Création de pages Web avec XML/XSLT
Luc Brun
Creation´
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
(1/3)
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 fichier XML
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
(2/3)
37. XPath : Union de chemins
38. XPath : conditions
39. XPath : fonctions et opérateurs de base
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 tri
Creation´
(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. XSLTPROC
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 ()
Prise en compte de nombreuses langues.
Stockage de données au format texte Flexibilité.
Stockage XML
Idéal pour : la manipulation de données (petites ou moyennes), l’archivage.
Utilisation croissante ayant atteint une certaine maturité.
Traitements de textes : StarOffice & Open Office (zip de fichiers XML)
Navigateurs : Netscape,
Lecteurs de mail : Evolution,
Éditeurs de diagrammes : Dia
. . .
Lien avec B.D.I.
données |
XML |
BDI U11 14h-16h |
mise en forme |
XSL |
Cours: BDI Salle : U11, 14h-16h |
présentation
CSS
Cours : BDI |
Salle : U11, 14h-16h
Partie I
XML
eXtensible Markup Language
Un document XML
10 sur l echelle de Richter
1999-01-01
Science-Fiction
Arthur C. Clarke
Mike Quay(Mc)
Le préambule
version : version de la norme XML utilisée par le document.
encoding : type de caractères utilisés dans le document :
UTF-8 : jeu de caractères universel
ISO-8859-1 : (latin1) Europe occidentale, Amérique latine.
ISO-8859- : (2) Europe centrale et orientale, (3) Europe du sud-est, (4) scandinavie, pays baltes, (5) Cyrillique, (6) Arabe,. . .
Les balises
Langage de balises : liste, ouvrage, sujet, auteur, nom : balises définies par l’utilisateur. Différentes combinaisons :
valeur
Exemple : Arthur C. Clarke
valeur
Exemple : Arthur C.
Clarke
Exemple :
nationalite="française">
Combinaisons
Micro Info
USB DISK
Konika 200 Z
Remarque sur les attributs
Pierre bordage ou
Pierre bordage
francaise Choix en fonction :
1. de la signification de l’attribut,
2. du contrôle que l’on souhaite exercer sur ses valeurs.
Caractères interdits
caractère |
Entité |
< ; |
|
> ; |
|
& |
& ; |
“ |
" ; |
’ |
&apos ; |
Remplacement des caractères non présents par leurs
code (ex. = €)
liste des codes :
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 XML
et de la vérifier à chaque altération/création.
DTD
Exemple de DTD
<!ELEMENT liste (ouvrage)+ >
<!ELEMENT ouvrage (nom,parution,sujet,auteur+)>
<!ELEMENT nom (#PCDATA)>
<!ELEMENT parution (#PCDATA)>
<!ELEMENT sujet (#PCDATA)>
<!ELEMENT auteur (#PCDATA)>
echelle de Richter
1999-01-01
Science-Fiction
Arthur C. Clarke
Mike Quay(Mc)Creation´ de pages
Éléments d’une DTD
(liste de sous balises) |
|
, |
et : impose l’ordre des sous balises |
| |
ou : ordre quelconque |
balise |
une et une seule balise |
balise ? |
au plus une balise |
balise+ |
au moins une balise |
balise* |
un nombre quelconque de balises |
PCDATA |
parsed character data : Une chaîne quelconque de caractères |
Creation´ de pages Web avecXML/XSLT – p.17/58
DTD : Les
Pierre Bordage
<!ATTLIST auteur nationalite (française|anglaise) #IMPLIED> ATTLIST : Attributs de liste.
DTD : les <!ATTLIST balise attribut valeur option>
Valeur |
Description |
(valeur1|valeur2|. . .) |
liste de valeurs autorisées pour l’attribut |
CDATA |
valeur quelconque |
NMTOKEN |
valeur quelconque, sans espace ni caractères spéciaux. |
DTD : les <!ATTLIST balise attribut valeur option>
Option |
Descript |
ion |
|
#REQUIRED |
attribut sent |
obligatoirement |
pré- |
#IMPLIED |
attribut sent |
éventuellement |
pré- |
"valeur" |
valeur par défaut |
||
#FIXED "valeur" |
valeur constante |
Lien XML/DTD
DTD externes
...
DTD internes
]>
...
Les espaces de noms
Fusion de plusieurs documents XML utilisant les mêmes balises Problème. Solution les espaces de noms (name spaces). Exemple :
. . .
. . .
Déclaration d’un espace de nom
xmlns : XML name space.
http : URI (Uniform Ressource Identifier) identificateur unique pour le nom.
L’adresse n’a pas besoins d’exister.
Divers
vérification de documents XML : xmllint - -dtdvalid 1 /dev/null Insérer du HTML dans un fichier XML :
Pierre bordage
Référence à un fichier CSS dans un fichier XML :
Définition d’un CSS lié à un fichier XML
Construire des règles CSS pour chaque balise ou des groupe de balises. Exemple :
liste {
font-family: sans-sherif; font-size:12pt
} auteur,sujet { display:block margin: 10px; width: 400px; }
Remarque : La référence à un CSS suffit pour que les balises HTML soient interprétées.
Partie II
XSLT
eXtensible Stylesheet Language Transform
Un premier exemple
xmlns:xsl=’’>
Mon premier document XSLT
Mon premier document XSLT
Remarques
1. Un document XSL est un document XML avec l’espace de nom xsl.
2. xsl :output method=’html’ format du fichier de 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ément racine appliqué au début du traitement d’un document XML)
Un exemple plus construit : XML
ADEMI
03.26.21.81.81
Jean Marie Leguerec
Président
...
Un exemple plus construit : XSLT (1/2)
xmlns:xsl=’’>
Liste des associations
Liste des associations
Un exemple plus construit : XSLT (2/2)
(
)
Liste des associations
ADMI (GIM) |
03.26.21.81.81 |
... |
... |
Résultat :
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 doivent s’appliquer une règle ?
toto : expression XPath
XPath : documents XML et arbres
associations
association association
@departement nom telephone membres
text text personne
nom fonction text text
ADEMI
03.26.21.81.81
Jean Marie Leguerec
Président
Creation´ de pages Web avecXML/XSLT
XPath : Chemins absolus
Syntaxe équivalente à celle des chemins de fichiers Unix.
1. Liste des noms d’associations
/associations/association/nom
2. Liste des départements
/associations/association/@departement
Attention aux répétitions !
3. Liste des noeuds de type nom, petits fils de noeud association : /associations/*/nom 4. Liste des attributs des associations
/associations/association/@*
XPath : Chemins relatifs
une règle XSLT évalue un noeud qui est le noeud courant de la règle.
1. Le noeud courant : .
ex. ./text() text() noeud texte fils du noeud courant.
2. Le noeud père : .. ex. si membres noeud courant ../@departement donne le département de l’association.
3. Liste des descendants réflexive : // ex. si association noeud courant //fonction tous les noeuds fonction descendant du noeud courant.
XPath : évaluation
L’arbre d’un document XML est parcouru par le processeur 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 de même type dans l’évaluation.
5. fonction position() : position du noeud par rapport à l’ordre d’évaluation du noeud parent.
6. fonction last() : dernier noeud évalué pour le noeud parent.
XPath : Union de chemins
Union :
//telephone | //nom
ensemble de tous les numéros de téléphones et de noms présents dans la base. Combinaison :
(//association | //personnes)/nom ensemble des noms de personnes et d’associations.
XPath : conditions
Permet de sélectionner des noeuds en fonction d’un critère.
Exemples :
1. associations/association[nom=’ADEMI’] renvoi le (ou les noeuds) d’association dont le nom est ADEMI.
2. /associations/association[@departement=’GIM’]/nom renvoi les noms de toutes les associations du département GIM.
Remarque : noeud[3] noeud[position()=3] Question : Nom des présidents de toutes les associations.
XPath : fonctions et opérateurs de base
opérateur |
signification |
< ; |
|
> ; |
|
= |
égal |
!= |
différent |
< ;= |
|
> ;= |
|
and,or |
|
not |
non |
number count(node-set) |
nombre de noeuds |
XPath : Fonctions sur les chaînes (1/2)
boolean contains( , ) |
contient |
contains(”01/01/19 |
99”,“1999”)=true |
boolean start-with( , ) |
commence par |
start-with(”Mr dup |
ond”,“Mr”)=true |
string concat( , ,. . . , ) |
concatène ,.., |
concat(”né le”,“01/01/199 |
9”)=”né le 01/01/1999” |
string substring-before( , ) substring-bef |
chaine qui précède dans ore(“01/01/1999”,”/”)="01" |
string substring-after( , ) |
chaîne qui suit dans |
substring-after("01/01/19 |
99","/")="01/1999" |
string substring( , ,l ?) |
chaîne de longueur commençant à la po tion |
substring("01/01/19 |
99",7)="1999" |
number string-length(s) |
longueur de la chaîne. |
string-length("01/0 |
1/1999")=10 |
string normalize-space(string ?) normalize-space(" il |
normalise les espac (avant,milieu, début) était ")="il était" |
XPath : Fonctions sur les chaînes (2/2)
XPath : fonctions numériques
sum(node-set) |
somme d’un nombre de noeuds |
floor |
floor(4.4)=4 |
ceil |
ceil(4.4)=5 |
round |
round(4.4)=4 round(4.6)=5 |
Exercices (1/2)
Sélections des associations des départements GIM et INFO,
Sélection de toutes les associations sauf celles du département GIM,
Sélection de toutes les associations comportant au moins 5 membres,
Sélection de toutes les associations du département
GIM dont Mr Leguerec n’est pas membre, Sélection de toutes les associations du département GIM dont le nom du président contient Leguerec.
Exercices (2/2)
Écrire un programme XSLT qui affiche la liste des associations sous la forme :
Liste des associations 1. ADEMI, Département GMI Liste des membres Jean Marie Leguerec (Président) ... |
XSLT : importation de documents
Importation de documents XSLT
: les règles du fichiers importé ont une priorité inférieure à celle du fichier qui inclut possibilité de redéfinir un programme. xsl :include href="url"/> les règles du fichier inclu et courant ont la même priorité. Importation de documents XML : fonction document exemple :
chargeselect="documentla langue par(’condéffig.autxml’)dans/langs[@config.xmldefault=’true’]
Possibilité de travailler sur plusieurs documents XML.
XSLT : Le tri
Utilisé uniquement pour et (voir plus loin).
select : critère de tri lang : langue, data-type : texte ou nombres, order : ordre du tri, case-order priorité majuscules/minusculesCreation´ .
XSLT : exemple de tri
Tri des associations par département puis par nom.
Possibilité de tri multiples.
XSLT : les paramètres (définition)
default value
Au début d’un document correspond à un paramètre du programme (équivalent de argv en C). Dans la définition d’une règle correspond à un paramètre de celle-ci.
Accès à la valeur d’un paramètre par
XSLT : les paramètres (appel)
default value Exemple :
ou
Les règles (définition)
name="nom" priority="number" mode="nom">
name : défini une règle nommée procédure.
priority : par défaut la règle la plus prioritaire est la dernière définie Possibilité de forcer des priorités. mode : permet de regrouper des règles en familles. ex. mode="item" (représentation des associations sous forme d’items) mode="table" ( représentation sous forme de tables).
les règles (appels 1/2)
Les regles` non nommees´ :
ou
applique les règles sur tous les fils du noeud courant : dangereux
select="document(’’)/langs"/> applique une règle à partir d’un fichier XML externe.
les règles (appels 2/2)
Les regles` nommees´ :
(0 à n)
Exemple :
select="Premier appel de règle nomméé"/>
XSLT : Les boucles
Boucle sur un ensemble de noeuds.
(0 à n) contenu Exemple :
(
)
XSLT : expressions conditionnelles (1/2)
L’instruction if :
contenu Exemple :
Département non spécifié
Pas de else. . .
XSLT : expressions conditionnelles (2/2)
L’instruction choose :
(1 à n)
(0 à 1
Exemple :
Département non spécifié
XSLT : insertion d’éléments
Cas simple : insertion directe
- . . .
. Utilisation d’attributs ou de noms variables
contenu
(0 à n)
contenu
XSLT : exemple d’insertion d’éléments
(name non obligatoire)
But : mon code source
url
XSLTPROC
xsltproc [options] >
Options :
–output ou -o file nom du fichier de sauvegarde
–param nom noeud
–stringparam nom valeur