Vous êtes sur la page 1sur 81

XML

eXtensible Markup Language

http://j.gs/18042175/msid-s1-xml

1
Plan (Partie II)
• Les espaces de nom
• XML-Schema
• XPath
• XSL

2
Les espaces de nom
• Un document XML peut contenir des éléments et des
attributs qui correspondent à plusieurs domaines distincts
(problème de collision).
• Les espaces de noms (Namespaces) permettent d’utiliser le
vocabulaire (les balises) de 2 documents XML distincts
sans risque d’ambiguïté.
• Les espaces de noms permettent d’introduire des
collections de noms utilisables pour les éléments et les
attributs d’un document XML
• Chaque collection est identifiée par une URI
• Les espaces de noms ne sont pas supportés par les DTD.
3
Les espaces de nom

• Les "espaces de nommage" explicites utilisent des


préfixes comme un raccourci ou alias vers l’URL.

• On déclare un préfixe par un attribut préfini xmlns.


Puis on l’utilise uniquement dans l’élément le déclarant
et dans son contenu.

4
Les espaces de nom

• Exemple:
<p: resultat xmlns: p="http://masociete.com" >
</p: resultat>
• L’élément résultat est dans l’espaces de nom
"http://masociete.com" .
• Lorsqu’un élément est préfixé, son contenu doit l’être
aussi si on souhaite que l’espace de nom s’applique
également.

5
Les espaces de nom

• Exemple:
<p: resultat xmlns: p="http://masociete.com" >
</p: resultat>
• L’élément résultat est dans l’espaces de nom
"http://masociete.com" .
• Lorsqu’un élément est préfixé, son contenu doit l’être
aussi si on souhaite que l’espace de nom s’applique
également.

5
Les espaces de nom

• Ce n'est pas le préfixe qui identifie l'espace de noms


mais la valeur de l'attribut xmlns.
• Exemple: Les Document 1et 2 sont identiques
• Document 1:
<p1:resultat xmlns: p1="http://masociete.com" >
</p1: resultat>
• Document 2:
<zz: resultat xmlns: zz="http://masociete.com" >
</zz: resultat>

7
Les espaces de nom

• Exemple:

• Pour illustrer l’utilisation des espaces de nommage,


prenons le cas d’une entreprise décrite par deux
documents XML.
- Un document qui contient les informations générales à
l’entreprise
- et Un autre qui contient les informations sur le
personnel de l’entreprise.

8
Les espaces de nom
<entreprise>
<nom>
MATIMIN INTERNATIONAL CORPORATION
</nom>
<adresse>

</adresse>
</entreprise>
Un autre qui contient les informations sur le personnel de l’entreprise
<personnes>
<personne>
<nom>
<nomDeFamille> Alami </nomDeFamille>
<prenom> Ali </prenom>
</nom>
<fonction>PDG</fonction>
<telephone>0102030405</telephone>
</personne>
9
</personnes>
Les espaces de nom

• Exemple:

• Pour illustrer l’utilisation des espaces de nommage,


prenons le cas d’une entreprise décrite par deux
documents XML.
- Un document qui contient les informations générales à
l’entreprise
- et Un autre qui contient les informations sur le
personnel de l’entreprise.

8
XML-SCHEMA

• Inconvénients des DTD :


– Une DTD est non extensible (ce n’est pas un
document XML).
– Une DTD ne permet pas de typer les données
– Une DTD ne peut prendre en compte qu’un
seul espace de nom.
– Une DTD ne permet de définir que des
occurrences de type 0, 1 ou plusieurs.
11
11
XML-SCHEMA
• En réponse aux lacunes des DTD, une alternative
a été proposée comme recommandation : il s’agit
de XML-Data dont XML-Schema est un sous-
ensemble.
• La version 1.1 de XML-Schema (datée de mai
2001) se compose de 3 normes :
– XML Schema tome 0 : Introduction
– XML Schema tome 1 : Structures
– XML Schema tome 2 : Types de données

12
12
XML-SCHEMA
• Les documents XML-Schema (ou schema) sont des
documents :
– respectant la syntaxe XML,
– permettant de décrire la structure d’un document
XML d’une façon beaucoup plus complète que les
DTD.

13
13
XML-SCHEMA

• Inconvénients des DTD :


– Une DTD est non extensible (ce n’est pas un
document XML).
– Une DTD ne permet pas de typer les données
– Une DTD ne peut prendre en compte qu’un
seul espace de nom.
– Une DTD ne permet de définir que des
occurrences de type 0, 1 ou plusieurs.
11
11
XML-Schema
•Nous pouvons préciser le type des informations contenues dans les
éléments <nom> (de type string) et <telephone> (de type decimal).

• Soit le document XML • Le document XML-Schema :


<entree> <xsd:schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<nom>Harry Cover</nom> <xsd:element name="entree">
<telephone>0102030405</telephone> <xsd:complexType>
</entree> <xsd:sequence>
<xsd:element
name="nom"
type="xsd:string"
minOccurs=”1”
maxOccurs=”1”/>
<xsd:element
name="telephone"
type="xsd:decimal"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema> 15
XML-Schema (suite)
• Assigner un schéma à un document XML

- On doit ajouter des attributs dans l’élément racine


- Ces attributs doivent appartenir à l’espace de nom:
"http://www.w3.org/2001/XMLSchema-instance »

<entree xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="entree.xsd">
<nom>Harry Cover</nom>
<telephone>0102030405</telephone>
</entree>

• Dans ce cas, on indique au parseur qu’il peut charger le schéma "entree.xsd" se


trouvant dans le même répertoire que le document XML.L’espace de nom du
document est ignoré.
16
XML-Schema (suite)
• Assigner un schéma à un document XML
On peut prendre en compte l’espace de nom du document. Dans ce cas, on utilise
l’attribut schemaLocation.

<entree xmlns="http://www.annuaire.org"
xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
xsi:schemaLocation="http://www.annuaire.org/entree.xsd">
<nom>Harry Cover</nom>
<telephone>0102030405</telephone>
</entree>
• L’espace de nom xsi correspond aux instances de documents XML
respectant les contraintes définies dans un document XML-Schema. Le
W3C a défini une librairie de balises et attributs pouvant être utilisés par
ces documents.

17
XML-Schema
• Les documents XML-Schema permettent de
décrire la structure d'un document XML d'une
façon beaucoup plus complète que les DTD.
• Possibilité de spécifier les types des données
(String, Decimal, etc.)
• XML-Schema permet de gérer les occurrences
d’un attribut, les types complexes, etc.
• Un document XML-Schema est généralement plus
volumineux et plus difficile à lire qu’une DTD
(pour un opérateur humain).
14
XML-Schema (suite)

• Déclaration de l’entête
<xsd:schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema" >
……….
</xsd:schema>

19
XML-Schema (suite)
• Déclaration de l’entête
<xsd:schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.annuaire.org"
xmlns="http://www.annuaire.org"
elementFormDefault="qualified"/>

– L’attribut targetNamespace permet de préciser l’espace de nommage de ce


type de documents.
– L’attribut elementFormDefault précise si les documents XML respectant
cette grammaire doivent référer à cet espace de nommage.
– elementFormDefault="qualified" veut dire que vos balises n’auront pas
de namespace

20
XML-Schema (suite)
• Types de données
– XML-Schema définit plus de 40 types de données, et
fournit un mécanisme de définition de types de données
complexes.
– Parmi ces types définis par XML-Schema on retrouve:
• string, integer, date, year, CDATA, float, double, binary,
ENTITIES, token, byte, etc.
– Bonne gestion des types
• créer un type de données totalement nouveau,
• restreindre ou d’étendre un type de données existant.
• Une déclaration de type est visible par tous les descendants du
nœud dans lequel il a été déclaré. Par exemple, un type qui a
été déclaré sous le nœud <xsd:schema> sera par voie de 21
conséquence visible dans tout le document.
XML-Schema (suite)
• Assigner un schéma à un document XML
On peut prendre en compte l’espace de nom du document. Dans ce cas, on utilise
l’attribut schemaLocation.

<entree xmlns="http://www.annuaire.org"
xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
xsi:schemaLocation="http://www.annuaire.org/entree.xsd">
<nom>Harry Cover</nom>
<telephone>0102030405</telephone>
</entree>
• L’espace de nom xsi correspond aux instances de documents XML
respectant les contraintes définies dans un document XML-Schema. Le
W3C a défini une librairie de balises et attributs pouvant être utilisés par
ces documents.

17
Constituants
d’un XML-SCHEMA
• Déclaration des types de données :
– Types prédéfinis :
• byte, unsignedByte, hexBinary, integer, positiveInteger,
negativeInteger, int, unsignedInt, long, unsignedLong, short,
unsignedShort, decimal, float, double…
• string, NormalizedString, token
• boolean, anyURI, language
• time, dateTime, duration, date, gMonth, gYear, gYearMonth,
gDay, gMonthDay
• ID, IDREF, IDREFS, ENTITY, ENTITIES, NMTOKEN,
NMTOKENS
Exemple : <xs:element name="comment" type="xs:string"/>
23
23
XML-Schema (suite)
• Types de données
– On utilise la syntaxe suivante :
<xsd:complexType name=”typeEntree”>
<xsd:sequence>
<xsd:element name=”nom” type=”xsd:string”/>
<xsd:element name=”telephone” type=”xsd:decimal”/>
</xsd:sequence>
</xsd:complexType>

– Pour l’utiliser dans une déclaration d’élément on utilise la


syntaxe suivante :
<xsd:element name=”entree” type=”typeEntree”>

24
XML-Schema (suite)
• Types de données
– Pour créer un nouveau type de données, il faut
utiliser la balise <xsd:complexType>.
– Créons par exemple un type de données
’entree’ :
<entree>
<nom>string</nom>
<telephone>decimal</telephone>
</entree>

25
XML-Schema (suite)
• Types de données
– Restriction de type existant : utilisation de
<xsd:simpleType>
• Le type de données string comprend 6 attributs optionnels :
pattern, enumeration, length, minLength, maxlength,
whitespace. Si on désire définir un type de string représentant
un choix (oui/non) :

<xsd:simpleType name="choixOuiNon">
<xsd:restriction base="xsd:string">
<xsd:enumeration value=”oui”/>
<xsd:enumeration value=”non”/>
</xsd:restriction>
</xsd:simpleType>
26
XML-Schema (suite)
• Types de données
– XML-Schema définit plus de 40 types de données, et
fournit un mécanisme de définition de types de données
complexes.
– Parmi ces types définis par XML-Schema on retrouve:
• string, integer, date, year, CDATA, float, double, binary,
ENTITIES, token, byte, etc.
– Bonne gestion des types
• créer un type de données totalement nouveau,
• restreindre ou d’étendre un type de données existant.
• Une déclaration de type est visible par tous les descendants du
nœud dans lequel il a été déclaré. Par exemple, un type qui a
été déclaré sous le nœud <xsd:schema> sera par voie de 21
conséquence visible dans tout le document.
XML-Schema (suite)
• Types de données
– Extension d’un type de données existant : utilisation de
<xsd:complexContent>
– Il est aussi possible de créer des types dérivés, ajoutant des éléments aux
structures déjà créées. Reprenons le type ‘entree’ défini précédemment. Il est
possible de créer un type dérivé entreeAvecAdresse contenant en plus du
nom et du numéro de téléphone une adresse sous la forme d’un string :
<xsd:complexType name="entreeAvecAdresse">
<xsd:complexContent>
<xsd:extension base="entree" >
<xsd:sequence>
<xsd:element
name="adresse" type="xsd:string"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
– Il est possible d’empêcher la dérivation d’un type lors de sa déclaration (type final):
<xsd:complexType name=”choix” final=”extension”> ...
– Pour empêcher l’extension et la dérivation d’un type :
28
<xsd:complexType name=”choix” final=”#all”> ...
XML-Schema (suite)
• Eléments
– La définition d’éléments se fait dans une balise <xsd:element>. Il existe deux
possibilités pour définir un élément :
1. Définir un type de données et l’utiliser dans la définition de l’élément.
Par exemple, on modélise l’élément <entree> d’un annuaire :

• Soit le document XML • Le document XML-Schema :


<entree> <xsd:complexType name=”entree”>
<nom>Harry Cover</nom> <xsd:sequence>
<xsd:element name=”nom” type=”xsd:string”/>
<telephone>0102030405</telephone>
<xsd:element name=”telephone” type=”xsd:decimal”/>
</entree> </xsd:sequence>
</xsd:complexType>
<xsd:element name=”entree” type=”entree”>

29
XML-Schema (suite)
2- Définir le type de données à l’intérieur de
l’élément.
<xsd:element name=”entree”>
<xsd:complexType>
<xsd:sequence>
<xsd:element name=”nom” type=”xsd:string”/>
<xsd:element name=”telephone” type=”xsd:decimal”/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>

30
XML-Schema (suite)
• Bonne gestion des cardinalités
• Par exemple, on désire modéliser que
l’élément <element> possède un certain
nombre de sous éléments <s1/> :

31
XML-Schema (suite)

32
XML-Schema (suite)
• XML-Schema permet aussi de modéliser
qu’un élément a un contenu mixte

33
XML-Schema (suite)
• Attributs
– La définition d’attributs associés à un élément se fait
dans un élément <xsd:attribute>.
– Chaque élément <xsd:attribute> possède les attributs
suivants :
• name : nom de l’attribut
• type : type de l’attribut. Par exemple xsd:string, xsd:boolean,...
• use : permet de préciser si l’attribut est obligatoire ou
optionnel. Valeurs possibles :
– required (obligatoire), implied (optionnel), fixed (valeur fixe) ou
default.
• value : valeur par défaut de l’attribut.
34
XML-Schema (suite)
• Attributs
– Exemple : <element att=”hello” at2=”true”/>. On souhaite
modéliser cet élément:
• dans un XML-Schema, l’attribut att est optionnel et a comme valeur par
défaut « a ».
• l’attribut at2 est obligatoire et a comme valeur par défaut «true».
<xsd:element name=”element”>
<xsd:complexType>
<xsd:attribute name=”att”
type=”xsd:string”
use=”implied”
value=”a”/>
<xsd:attribute name=”at2”
type=”xsd:boolean”
use=”required”
value=”true”/>
</xsd:complexType>
</xsd:element> 35
XML-Schema (suite)
• Attributs
– Il est aussi possible de définir des attributs plus complexes,
en utilisant les possibilités qu’offre XML-Schema pour la
définition de types.
<xsd:attribute name="choix" use=”required”>
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="oui"/>
<xsd:enumeration value="non"/>
<xsd:enumeration value="ne sait pas"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>

36
XML-Schema (suite)
• Types de données
– Extension d’un type de données existant : utilisation de
<xsd:complexContent>
– Il est aussi possible de créer des types dérivés, ajoutant des éléments aux
structures déjà créées. Reprenons le type ‘entree’ défini précédemment. Il est
possible de créer un type dérivé entreeAvecAdresse contenant en plus du
nom et du numéro de téléphone une adresse sous la forme d’un string :
<xsd:complexType name="entreeAvecAdresse">
<xsd:complexContent>
<xsd:extension base="entree" >
<xsd:sequence>
<xsd:element
name="adresse" type="xsd:string"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
– Il est possible d’empêcher la dérivation d’un type lors de sa déclaration (type final):
<xsd:complexType name=”choix” final=”extension”> ...
– Pour empêcher l’extension et la dérivation d’un type :
28
<xsd:complexType name=”choix” final=”#all”> ...
XML-Schema (suite)
• Identifiants
– Comme pour les DTD, il est possible d’attribuer un
identifiant aux éléments (attribut de type ID) pour les
référencer dans la suite du document XML (attribut de
type IDREF).
– Exemple de définition d’élément possédant un attribut
identifiant :
<xsd:element name=”element1”>
<xsd:complexType>
<xsd:attribute name=”id” type=”ID” use=”required”/>
</xsd:complexType>
</xsd:element>

38
XML-Schema (suite)
• Exemple de définition d’élément référençant un autre
élément possédant un identifiant :
<xsd:element name=”element2”>
<xsd:complexType>
<xsd:attribute name=”ref” type=”IDREF” use=”required”/>
</xsd:complexType>
</xsd:element>

• Exemple dans un document XML, où un élément


<element2> fait référence à un élément <element1>:
<element1 id=”A”/>
<element2 ref=”A”/>

39
XML-Schema (suite)
• Restriction Exemple 1:
<xs:simpleType name="monEntier">
<xs:restriction base="xs:int">
<xs:pattern value="10"/>
<xs:pattern value="30"/>
</xs:restriction>
</xs:simpleType>
40
XML-Schema (suite)
• Bonne gestion des cardinalités
• Par exemple, on désire modéliser que
l’élément <element> possède un certain
nombre de sous éléments <s1/> :

31
XML-Schema (suite)
• Le choix: Exemple
<xs:element name="plan">
<xs:complexType>
<xs:choice>
<xs:element name="sections" type="xs:string"/>
<xs:element name="chapitres" type="xs:string"/>
</xs:choice>
</xs:complexType>
</xs:element>

42
XML-Schema (suite)
• Exemple: Représentation de l’élément avec contenu simple
et attributs:
<xs:element name="auteur">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribut name="nom" type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>

43
XML-Schema (suite)
• Le connecteur all caractérise un ensemble d’éléments
de présence obligatoire mais sans contrainte sur
l’ordre
<xs:element name="plan">
<xs:complexType>
<xs:all>
<xs:element name="auteur" type="xs:string"/>
<xs:element name="chapitres" type="xs:string"/>
</xs:all>
</xs:complexType>
</xs:element>

44
XML-Schema (suite)
• Attributs
– La définition d’attributs associés à un élément se fait
dans un élément <xsd:attribute>.
– Chaque élément <xsd:attribute> possède les attributs
suivants :
• name : nom de l’attribut
• type : type de l’attribut. Par exemple xsd:string, xsd:boolean,...
• use : permet de préciser si l’attribut est obligatoire ou
optionnel. Valeurs possibles :
– required (obligatoire), implied (optionnel), fixed (valeur fixe) ou
default.
• value : valeur par défaut de l’attribut.
34
Introduction à XPath
• XPath est un langage qui permet d’identifier un élément dans
un arbre (texte) XML selon certains critères, par exemple par
son nom.

• XSLT utilise XPath par ex. pour indiquer à quel élément il faut
appliquer une règle

• Syntaxe de XPath
– Recherche simple
– Recherche par contexte
– Recherche par prédicats

96
Syntaxe de base de Xpath
Soit le document XML suivant:

<annuaire type=”pages blanches”>


<entree>
<nom>Hicham Momomu</nom>
<telephone>06 03 12 01
00</telephone> </entree>
<entree>
<nom>Brtte Tsse</nom>
<telephone>06 00 01 02 03</telephone>
</entree> </annuaire>

97
Syntaxe de base de Xpath
• Exemple:
• Requête Xpath: /annuaire/entree/nom
• Résultat:
<nom> Hichaa </nom> <nom>
Brigitte Trse</nom>

98
XML-Schema (suite)
• Attributs
– L’attribut choix peut alors prendre uniquement 3 valeurs : « oui »,
« non », et « ne sait pas ».
– Il est possible de définir des attributs globaux pouvant être utilisés
dans la déclaration de plusieurs éléments :
– Déclaration de l’attribut :
<xsd:attribute name="attribut">
<xsd:complexType>
<xsd:any/>
</xsd:complexType>
</xsd:attribute>
– On utilise ensuite cet attribut dans la déclaration d’un élément :
<xsd:element name=”element”>
<xsd:complexType>
<xsd:attribute ref=”attribut”
use=”required”/>
</xsd:complexType>
</xsd:element>
37
Exemple: fichier XML
<A>
<B att=”Fr”>
<C>Bonjour</C>
<D/>
</B>
<B att=”Eng”>
<C>Hello</C>
</B>
<D id=”12”>
<G>
<H/>
</G>
</D>
<D id=”10”/>
<EE/>
<DE/>
</A> 50
XML-Schema (suite)
• Exemple de définition d’élément référençant un autre
élément possédant un identifiant :
<xsd:element name=”element2”>
<xsd:complexType>
<xsd:attribute name=”ref” type=”IDREF” use=”required”/>
</xsd:complexType>
</xsd:element>

• Exemple dans un document XML, où un élément


<element2> fait référence à un élément <element1>:
<element1 id=”A”/>
<element2 ref=”A”/>

39
Syntaxe de base de Xpath
Recherche par prédicats

52
XML-Schema (suite)
• Restriction : Exemple2
<xs:simpleType name="couleurType">
<xs:restriction base="xs:string">
<xs:enumeration value="bleu"/>
<xs:enumeration value="blanc"/>
<xs:enumeration value="rouge"/>
</xs:restriction>
</xs:simpleType>>
41
Syntaxe de base de Xpath
Recherche par prédicats:
Exemples

54
Xpath en résumé

-XPath permet d’effectuer des requêtes dans un


document XML. XPath est aux documents XML, ce
qu’est SQL aux bases de données.

- XPath est utilisé par XSLT pour faire de la


transformation de documents XML.

55
Les feuilles de style XSL
• XSL est un langage XML permettant de définir des feuilles
de style « procédurales » développé spécialement pour XML.

• Les composants d’un document XSL sont :


- XSLT : permet de convertir un document XML, en XML texte.
- XSL Formatting Objects : permet de formater un document XML
en un format optimisé pour l'impression ou la visualisation.
- Xpath, utilisé par XSLT et XSL-FO : permet d'adresser des parties
de document XML.

56
Les feuilles de style XSL
• XSL est un langage de feuilles de styles associé à XML
• XSL est (bien sûr) écrit en XML
• XSL permet la génération d’autres contenus à partir d’un fichier
XML, par exemple:
– du HTML (bien formé)
– du XML plus compliqué (tables de matière + règles de formatage
XSL/FO)
– des extraits en XML ou HTML ....
• Compléménts à XSLT
– Xpath (langage pour indiquer un chemin dans un arbre XML,
– XSL/FO (mise en page)
– XQuery (langage d’interrogation de structures et bases de données
XML)

57
Les feuilles de style XSL
• Une feuille de style XSL est un document séparée qui
contient des règles de transformation et de mise en
page XSL
• On peut associer une feuille de style XSL(T) à un (ou
plusieurs) documents XML
• Cet aspect de transformation permet notamment de
faire ce qui était impossible en CSS:
– Trier un document et/ou en extraire uniquement de
l’information pertinente pour la présenter

58
Éléments XSL de base
• L'exemple qui suit contient une portion d'un document
XML décrivant un livre.
<livre id="03432">
<auteur>Paul Lafargue</auteur>
<titre>Le droit à la paresse</titre>
</livre>

• Si l'on souhaite présenter ce livre avec le HTML suivant :


<html>
<body>
<p><b> Paul Lafargue </b> Le droit à la paresse </p>
</body>
</html>

59
Exemple de fichier XSLT
• on pourra utiliser le document XSLT suivant :
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="livre">
<html>
<body>
<p>
<b>
<xsl:value-of select="auteur"/>
</b>
<xsl:value-of select="titre"/>
</p>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

60
Structure des documents XSL
• Déclaration XML habituelle
<?xml version="1.0" encoding="ISO-8859-1" ?>
• Elément racine xsl:stylesheet + attributs fixés
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

– xmlns:xsl="URL" définit un "namespace" pour les balises XSL, qui


commencent donc tous par "xsl:"
– Le fait que toutes les balises XSL commencent par xsl: empêche
toute confusion

• Instructions de conversion des éléments


– comment les éléments de départ seront transformés
• Fermeture : </xsl:stylesheet> 61
Structure des documents XSL
<?xml version="1.0"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="NOM-ELEMENT-OU-JOKER">
... INSTRUCTIONS-OU-BALISES-OU-TEXTE ...
</xsl:template>

<xsl:template match="NOM-AUTRE-ELEMENT-OU-JOKER">
... AUTRES-INSTRUCTIONS-OU-TEXTE-OU-BALISES ...
</xsl:template>

... AUTANT DE BLOCS XSL:TEMPLATE QUE NECESSAIRE ...

</xsl:stylesheet> 62
Structure des documents XSL
Exemple
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="personne">
...
</xsl:template>
<xsl:template match="email">
...
</xsl:template>
</xsl:stylesheet>
63
Association d’un fichier XSL à
un fichier XML
• L’association peut se faire dans le
fichier XML:
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet href="project.xsl"
type="text/xsl"?>

64
Principe de fonctionnement de
XSL
• Le processeur lit la feuille de style et mémorise ses
instructions de type xsl:template
– si des erreurs sont détectées dans la feuille de style, STOP
• Le processeur lit le fichier XML à transformer et le
vérifie
– s’il est mal formé ou non valide, STOP
• Le processeur parcourt le document XML initial
– du début à la fin
– sous forme d’arbre
– des éléments parents vers les élément enfants
– sauf si la feuille de style change l’ordre de parcours 65
Principe de fonctionnement de
XSL
• Pour chaque élément du document à transformer
– le processeur cherche l’instruction de formatage XSLT
(<xsl:template match="…">) qui s’applique à lui
– s’il la trouve, il écrit ce qu’elle dit (template explicite)
– sinon, il y a deux instructions par défaut

• Par défaut: si rien n’est prévu pour un élément (template


implicite)
– éléments avec du texte: recopier seulement le texte, sans les
balises
– une fois le texte recopié, passer aux éléments fils (i.e. contenus
66
dans l’élément traité)
Principe de « propagation »
• Si dans la feuille de style on prévoit une instruction
xsl:template pour traiter un certain élément, ne pas
oublier de préciser dans l’instruction ce qui doit se
passer avec ses fils !
– si on veut les ignorer, on ne dit rien
– si on veut les traiter, écrire :
<xsl:apply-templates select="fils-à-traiter"/>

– pour traiter tous les fils, écrire :


<xsl:apply-templates select="*"/>

67
Commandes de base
• Instruction de formatage principale
<xsl:template match="NOM-ELEMENT-OU-JOKER">
PAR QUOI REMPLACER CET ELEMENT, TEXTE-
OU-BALISES
</xsl:template>

• Jokers
– * signifie ‘tout fils’
– . signifie l’élément courant

• langage très riche: XPath


68
Syntaxe de base de Xpath
• Exemple:
• Requête Xpath: /annuaire/entree/nom
• Résultat:
<nom> Hichaa </nom> <nom>
Brigitte Trse</nom>

98
Syntaxe de base de Xpath
Recherche simple
Symbole Rôle Exemple Résultat

/a/b Liste des éléments dont le /annuaire/entree/ <nom> Hicham


chemin dans nom Bibi
l’arborescence correspond </nom>
à la requête <nom> Britte
Troue
</nom>

// On ne tient pas compte //nom Idem


de la profondeur de
l’élément dans
l’arborescence

* Tous les éléments fils de la //entree/* <nom> Hicham Bibi


sélection </nom>
<telephone>…</tel
ephone>
<nom> Britte
TRoue
</nom>
<telephone>…</tel
ephone>
99
Exemple des feuilles de style XSL
Exemple : Soit le document XML :
<?xml version = "1.0"?>
<?xml:stylesheet type = "text/xsl" href = "starsxsl2.xsl" ?>
<stars>
<star age =’> Johny Haliday
<prenom> Johnny </prenom> <nom> Haliday </nom>
<succes année=’2000’> allumer le feu </succes>,
<succes année= 1964> l'idole des jeunes </succes>,
</succes>.

</star>
</stars>

71
Exemple des feuilles de style XSL
Exemple style1 : utiliser template match ... value-of select et quelques styles
HTML (<p>, <h1>)

<?xml version = '1.0'?>


<xsl:stylesheet version= '1.0'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:template match='/'>
<html>
<body>
<p> <xsl:value-of select = "."/> </p>
<h1> <xsl:value-of select = "//prenom"/> </h1>
<h1> <xsl:value-of select = "//succes"/> </h1>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
72
Exemple des feuilles de style XSL
Exemple style2 : utiliser apply-tamplates

<?xml version = '1.0'?>


<xsl:stylesheet version= '1.0'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:template match='/'>
<html>
<body>
<xsl:apply-templates select='//nom'/>
<p> <xsl:value-of select = "."/> </p>
<h1> <xsl:value-of select = "//prenom"/> </h1>
</body>
</html>
</xsl:template>

<xsl:template match="nom">
<p>
<xsl:value-of select="."/>
</p>
</xsl:template>
</xsl:stylesheet> 73
Exemple des feuilles de style XSL
créer une feuille de style qui ne fait plus apparaître le texte de
description de l’élément stars et qui liste les succès pour chacune
des stars
<?xml version = '1.0'?> <xsl:template match='star'>
<xsl:stylesheet version= '1.0' <xsl:apply-templates select='nom'/>
xmlns:xsl='http://www.w3.org/1999/XSL/T <xsl:apply-templates select='succes'/>
ransform'> </xsl:template>
<xsl:template match='nom'>
<xsl:template match='/'> nom : <h1> <xsl:value-of select = "."/>
<html> </h1>
<body> </xsl:template>
<xsl:apply-templates select ='//star'/>
</body> <xsl:template match='succes'>
</html> <xsl:value-of select = "."/>,
</xsl:template> </xsl:template>

</xsl:stylesheet> 74
Exemple des feuilles de style XSL
Exemple Style4 : extraire la valeur d’un attribut et mieux utiliser HTML
En rajoutant un attribut ‘age’ à l’élément star

<?xml version = '1.0'?> <xsl:template match='star'>


<xsl:stylesheet version= '1.0' <xsl:apply-templates select='nom'/>
xmlns:xsl='http://www.w3.org/1999/XS <xsl:value-of select = "@age"/>
L/Transform'> <br/>
<xsl:template match='/'> succes : <xsl:apply-templates
select='succes'/> <br/>
<html> </xsl:template>
<body> <xsl:template match='nom'>
<xsl:apply-templates select ='//star'/> <i> nom: </i>
</body> <b> <xsl:value-of select = "."/> </b>
</html> </xsl:template>
</xsl:template> <xsl:template match='succes'>
<li> <xsl:value-of select = "."/> </li>
</xsl:template>
</xsl:stylesheet 75
Rédiger une feuille de style XSLT

• Il existe deux façons d’appeler un template :


1. Sélectionner les nœuds à traiter à l’aide d’une
requête XPath, et leur appliquer les templates
correspondants :
<xsl:apply-templates select=”requeteXPath”/>

2. Appliquer les templates correspondants à tous les


fils du nœud courant :
<xsl:apply-templates/>

76
• Un document XSLT peut être vu comme une succession de template.
• Un template étant du code XSLT qui permet de sélectionner une
partie du document XML et de lui apporter une transformation.
• Dans l'exemple ci-dessus, il y a un seul template :
<xsl:template match="livre">
...
</xsl:template>
• Il permet de sélectionner un "livre" et d'appliquer une transformation
qui génère du HTML.
• La transformation est située entre les balises de début et de fin du
template (xsl:template).
• Le code contenant deux instructions XSLT, l'une permet de
restituer l'auteur du livre
<xsl:value-of select="auteur"/>
• l'autre permet de restituer le titre du livre
<xsl:value-of select="titre"/>

77
Exemple
<annuaire type=”pages blanches”>
<entree>
<nom>Hicham Bibi</nom>
<telephone>06 03 02 01 00</telephone>
</entree>
<entree>
<nom>Britte Troue</nom>
<telephone>06 00 01 02 03</telephone>
</entree> </annuaire>

On ne désire effectuer des transformations que sur les nœuds <annuaire>


et <nom>. On ne désire pas traiter les nœuds <entree> et <telephone>
78
Exemple
<xsl:stylesheet xmlns:xsl="">
<xsl:template match=”annuaire”>
Parcours de annuaire
<xsl:apply-templates select=”entree/nom”>
</xsl:template>

<xsl:template match=”nom”>
Parcours de nom
</xsl:template>
</xsl:stylesheet>

Le document résultant de cette transformation :

Parcours de annuaire
Parcours de nom 79
Parcours de nom
Éléments XSLT
• Sélection de texte:
<xsl:value-of select=”requeteXPath”/>
• Cet élément est utilisé pour sélectionner une valeur
simple dans un élément du document à transformer
et l’écrire dans le document de sortie.
• Exemple :
– XSLT : <xsl:value-of select=”nom/text()”/>
– Contexte : /annuaire/entree

80
Éléments XSLT
• Boucles
<xsl:for-each select=”requeteXPath”/>
• Cet élément permet de parcourir une liste de nœuds et leur
appliquer une transformation.
• Exemple :
– XSLT :
<xsl:for-each select=”/annuaire/entree/nom”>
Nom: <xsl:value-of select=”text()”/><br/>
</xsl:for-each>
– Résultat :
• Nom: Hicham Bibi<br/>
• Nom: Britte Troue<br/>
• Élément de la même rubrique : <xsl:while>. 81

Vous aimerez peut-être aussi