Vous êtes sur la page 1sur 73

XML (eXtensible Markup Language)

Présentation
XML est un langage de balisage générique qui permet de structurer des
données afin qu'elles soient lisibles aussi bien par les humains que par des
programmes de toute sorte. Il est souvent utilisé pour faire des échanges de
données entre un programme et un serveur ou entre plusieurs programmes.

Exemple:
Une application demande à un serveur web les dernières informations dont il
dispose. Après être allé les chercher, ce dernier doit les communiquer. C'est là
qu'intervient le XML. Le serveur web se sert du XML pour structurer les
informations qu'il doit renvoyer à l'application téléphonique. Lorsque cette
dernière reçoit les informations ainsi structurées, elle sait comment les lire et
les exploiter rapidement !

Maurice AHOUMENOU 2
Les bases du XML
Le XML ou eXtensible Markup Language est un langage informatique
de balisage générique.
En informatique il y a plusieurs centaines de langages, qui peuvent être
regroupé en trois catégories:
• langages de programmation.
C, le Java, C++, Objective-C, C#, PHP, Basic, Python, etc
•langages de requête.
SQL, Xquery, etc
•langages de description.
SGML, XML ou HTML

Les balises permettent de structurer de manière hiérarchisée et organisée


les données d'un document.

Maurice AHOUMENOU 3
Les objectifs du XML
•Objectif du XML est de faciliter les échanges de données entre les machines.

•De décrire les données de manière aussi bien compréhensible par les
hommes qui écrivent les documents XML que par les machines qui les
exploitent.

•XML se veut également compatible avec le web afin que les échanges de
données puissent se faire facilement à travers le réseau Internet.
Le XML se veut donc standardisé, simple, mais surtout extensible et
configurable afin que n'importe quel type de données puisse être décrit.

Maurice AHOUMENOU 4
Les outils
Notepad++, Editix, oXygen

Les balises et les attributs


En XML, on distingue 2 types de balises : les balises par paires et les
balises uniques.
Les règles de nommages:
Les noms peuvent contenir des lettres, des chiffres ou des caractères spéciaux.
Les noms ne peuvent pas débuter par un nombre ou un caractère de
ponctuation.
Les noms ne peuvent pas commencer par les lettres XML (quelle que soit la
casse).
Les noms ne peuvent pas contenir d'espaces.
On évitera les caractères - , ; . < et > qui peuvent être mal interprétés dans
vos programmes.
Maurice AHOUMENOU 5
Exemple de balise et d’attribut XML: <prix devise= "FCFA">25000</prix>

Dans l'exemple ci-dessus, l'information principale est le prix. L'attribut devise


nous permet d'apporter des informations supplémentaires sur ce prix, mais ce
n'est pas l'information principale que souhaite transmettre la balise <prix/>.

Syntaxe des commentaires:


<!-- Ceci est un commentaire -->

Maurice AHOUMENOU 6
Structure d’un document XML
Un document XML peut être découpé en 2 parties : le prologue et le
corps.
Le prologue est la première ligne du document
Exemple: <?xml version = "1.0" encoding="UTF-8" standalone="yes" ?>
Le corps d'un document XML est constitué de l'ensemble des balises qui
décrivent les données.
Dans la constitution du document, il faut retenir qu’il y a une balise paire
qui doit contenir tout le reste, on l’appelle élément racine

Exemple: <racine>
<balise_paire>texte</balise_paire>
<balise_paire2>texte</balise_paire2>
<balise_paire>texte</balise_paire>
</racine>

Maurice AHOUMENOU 7
Exemple de description d’un répertoire téléphonique
<repertoire>
<personne>Bernard</personne>
<personne>Patrick</personne>
</repertoire>

Pour qu’un document XML soit bien formé, il faut qu’il respecte les
règles ci-dessous:
•S'il s'agit d'un document utilisant la version 1.1 du XML, le prologue
doit être bien renseigné.
•Le document XML ne possède qu'une seule balise racine.
•Le nom des balises et des attributs est conforme aux règles de
nommage.
•Toutes les balises en paires sont correctement fermées.

Maurice AHOUMENOU 8
• Toutes les valeurs des attributs sont entre guillemets simples ou doubles.
Les balises de votre document XML ne se chevauchent pas, il existe une
arborescence dans votre document.

Testons ce exemple avec Editix

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>


<repertoire>
<personne>Roger</personne>
<personne>John</personne>
</repertoire>

Maurice AHOUMENOU 9
TP1: Structuration d’un répertoire téléphonique
Le but de ce TP est de créer un document XML structurant les données d'un
répertoire.
Votre répertoire doit comprendre au moins 2 personnes. Pour chaque
personne, on souhaite connaître les informations suivantes
Son sexe (homme ou femme).
Son nom.
Son prénom.
Son adresse.
Un ou plusieurs numéros de téléphone (téléphone portable, fixe,
bureau, etc.).
Une ou plusieurs adresses e-mail (adresse personnelle,
professionnelle, etc.).

Maurice AHOUMENOU 10
Schéma XML

Schéma XML: les fichier portent l’extension .xsd


Le schéma XML aussi est constitué d’un prologue et d’un corps
L’élément racine du corps est fixe <xsd:schema />

Exemple:
<!-- Prologue -->
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Elément racine -->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

</xsd:schema>
Référencer un schema XML
Le référencement d'un schéma XML se fait au niveau de l'élément racine du fichier
XML grâce à l'utilisation de 2 attributs.

L’espace de noms:
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance

Maurice AHOUMENOU 11
Schéma XML

Schéma XML décrivant un espace de noms:


Code:
xsi:schemaLocation="chemin_vers_fichier.xsd">

Schéma XML ne décrivant pas un espace de noms


Code:
xsi:noNamespaceSchemaLocation="chemin_vers_fichier.xsd">

Exemple complet du document XML:

<?xml version="1.0" encoding="UTF-8"?>


<racine xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="chemin_vers_fichier.xsd">

</racine>

Maurice AHOUMENOU 12
Schéma XML : les éléments simples

Un élément simple est un élément qui ne contient qu'une valeur dont le type
est dit simple. Il ne contient pas d'autres éléments.

Un élément simple peut donc être une balise qui ne contient aucun attribut
et dans laquelle aucune autre balise n'est imbriquée.

Un attribut d'une balise peut également être considéré comme un élément


simple.
En effet, la valeur d'un attribut est un type simple.

Maurice AHOUMENOU 13
Schéma XML : les éléments simples
Exemple:
<!-- Ne contient ni attribut ni aucun autre élément => élément simple -->
<nom>Roger</nom>
<!-- Contient un attribut => n'est pas un élément simple -->
<!-- Cependant l'attribut "sexe" est un élément simple -->
<personne sexe="masculin>Roger DURAND</personne>
<!-- La balise personne contient d'autres éléments (les balises nom
et prénom) => n'est pas un élément simple -->
<personne>
<!-- Ne contient ni attribut ni aucun autre élément => élément simple -->
<nom>DURAND</nom>
<!-- Ne contient ni attribut ni aucun autre élément => élément simple -->
<prenom>Roger</prenom>
</personne>.

Maurice AHOUMENOU 14
Schéma XML : les éléments simples
Déclarer une balise comme un élément simple

On utilise le mot clé element précédé de <xsd:>


Syntaxe: <xsd:element name="mon_nom" type="xsd:mon_type" />

Soit les éléments simple suivant:


<nom>DURAND</nom>
<prenom>Roger</prenom>
<age>38</age>

Correspondance de la déclaration d’un schema:

<xsd:element name="nom" type="xsd:string" />


<xsd:element name="prenom" type="xsd:string" />
<xsd:element name="age" type="xsd:int" />

Valeur par défaut et valeur inchangeable


valeur par défaut
on utilise l’attribut default
Exemple:

<xsd:element name="prenom" type="xsd:string" default="Roger" />


Maurice AHOUMENOU 15
Schéma XML : les éléments simples
Valeur par défaut et valeur constante

<!-- valide -->


<prenom>Jean</prenom>
<!-- valide -->
<prenom>Marie</prenom>
<!-- valide -->
<!-- la balise prenom vaut "Robert" -->
<prenom />

valeur par constante


on utilise l’attribut l'attribut fixed
Exemple:

<xsd:element name="prenom" type="xsd:string" fixed="Robert" />

<!-- valide -->


<prenom>Robert</prenom>
<!-- invalide -->
<prenom>Marie</prenom>
<!-- invalide -->
<prenom/>
Maurice AHOUMENOU 16
Schéma XML : les éléments simples
Les attributs
Il sont considérés comme des éléments simple parce qu’ils ne peuvent
prendre qu’une valeur de type simple (Nombre, chaîne de caractère, entier,
etc).
Pour déclarer un attribut, on utilise le mot clef attribute
Syntaxe:
<xsd:attribute name="mon_nom" type="xsd:mon_type" />
Exemple d’une balise XML:
<personne sexe="masculin">Maurice AHOUMENOU</personne>
Schéma XML correspondant:
<xsd:attribute name="sexe" type="xsd:string" />

Maurice AHOUMENOU 17
Schéma XML : les éléments simples
Les attributs

Valeur par défaut, obligatoire et constante d’un attribut

• Pour définir une valeur par défaut, on utilise le mot clef default dans la
balise <attribute />
Exemple de règle:
<xsd:attribute name="prenom" type="xsd:string" default="Maurice" />

•Pour définir un attribut obligatoire, on utilise la propriété Use qui prend la


valeur required dans la balise <attribute />
Exemple:
<xsd:attribute name="prenom" type="xsd:string" use="required" />

Maurice AHOUMENOU 18
Schéma XML : les éléments simples
Les attributs
•Pour définir une valeur constante, on utilise la propriété fixed dans la balise
<attribute />
Exemple:
<xsd:attribute name="prenom" type="xsd:string" fixed="Maurice" />

Schéma XML : les types simples


Il existe quatre catégories de type simple

Maurice AHOUMENOU 19
Les types chaînes de caractères

Type Description Commentaire


string représente une chaîne de attention aux caractères
caractères spéciaux
normalizedString représente une chaîne de basé sur le type string
caractères normalisée
token représente une chaîne de basé sur le type
caractères normalisée sans normalizedString
espace au début et à la fin
language représente le code d'une basé sur le type token
langue
NMTOKEN représente une chaîne de basé sur le type token
caractère "simple" applicable uniquement
aux attributs
Name représente un nom XML basé sur le type token

NCName représente un nom XML basé sur le type Name


sans le caractère :

Maurice AHOUMENOU 20
Les types dates

Type Description
duration représente une durée
date représente une date
time représente une heure
dateTime représente une date et un temps
gYear représente une année
gYearMonth représente une année et un mois
gMonth représente un mois
gMonthDay représente un mois et un jour
gDay représente un jour

Maurice AHOUMENOU 21
Exemple:
<xsd:element name="monheure" type="xsd:time" />
Exemple du document XML:

<!-- 10 heures et 24 minutes -->


<monheure>10:24:00</monheure>
<!-- 2,5 secondes -->
<monheure>00:00:02.5</monheure>

Maurice AHOUMENOU 22
Les types numériques

Type Description Commentaire


float représente un nombre flottant sur
32 bits conforme à la norme IEEE
754
double représente un nombre flottant sur
64 bits conforme à la norme IEEE
754
decimal représente une nombre décimal
integer représente un nombre entier basé sur le type decimal
long représente un nombre entier basé sur le type integer
int représente un nombre entier basé sur le type long
short représente un nombre entier basé sur le type int
byte représente un nombre entier basé sur le type short
nonPositiveInt représente un nombre entier non basé sur le type integer
eger positif

Maurice AHOUMENOU 23
Les types numériques

Type Description Commentaire


negativeIntege représente un nombre entier basé sur le type
r négatif nonPositiveInteger
nonNegativeIn représente un nombre entier non basé sur le type integer
teger négatif
positiveInteger représente un nombre entier basé sur le type
positif nonNegativeInteger
unsignedLong représente un nombre entier basé sur le type
positif nonNegativeInteger
unsignedInt représente un nombre entier basé sur le type
positif unsignedLong
unsignedShort représente un nombre entier basé sur le type
positif unsignedInt
unsignedByte représente un nombre entier basé sur le type
positif unsignedShort

Maurice AHOUMENOU 24
Les types numériques
Exemple Schema XML:
<xsd:element name="nombre" type="xsd:float" />
Exemple XML:
<nombre>42</nombre>
<nombre>-42.25</nombre>
<nombre>3E4</nombre>
<nombre>10e-5</nombre>

Les types booléens

Type Description
boolean représente l'état vrai ou faux
QName représente un nom qualifié
NOTATION représente une notation
anyURI représente une URI
base64Binary représente une donnée binaire au format Base64
hexBinary représente une donnée binaire au format hexadecimal

Maurice AHOUMENOU 25
Schéma XML : les types complexes
Définition:
Un élément complexe est un élément qui contient au moins un attribut ou
d’autres éléments imbriqués.

Exemple:
<!-- la balise personne contient d'autres balises => élément complexe -->
<personne>
<!-- la balise nom est un élément simple -->
<nom>AHOUMENOU</nom>
<!-- la balise prenom est un élément simple -->
<prenom>Maurice</prenom>
</personne>
<!-- la balise personne possède un attribut => élément complexe -->
<personne sexe="masculin">Maurice AHOUMENOU</personne>

Maurice AHOUMENOU 26
Schéma XML : les types complexes

Déclarer un élément complexe


Pour déclarer un élément de type complexe, on utilise le mot clef complexType
Syntaxe:
<xsd:element name="mon_nom">
<xsd:complexType>
<!-- contenu ici -->
</xsd:complexType>
</xsd:element>

Maurice AHOUMENOU 27
Schéma XML : les types complexes
Déclarer un élément complexe

Exemple code XML:


<personne>
<nom>AHOUMENOU</nom>
<prenom>Maurice</prenom>
</personne>

Exemple de déclaration du schéma correspondant:

<xsd:element name="personne">
<xsd:complexType>
<!-- contenu ici -->
</xsd:complexType>
</xsd:element>

Les contenus de type complexe

Il existe 3 types de contenus possibles :


Les contenus simples.
Les contenus "standards".
Les contenus mixtes.

Maurice AHOUMENOU 28
Schéma XML : les types complexes

Les contenus simples

On appelle contenu simple, le contenu d'un élément complexe qui n'est composé
que d'attributs et d'un texte de type simple.

Exemple:
<prix devise="FCFA">100</prix>
<!-- contient un attribut et du texte -->
<voiture marque="Toyota">Avensis</voiture>

Syntaxe Schema XML:

<xsd:element name="mon_nom">
<xsd:complexType>
<xsd:simpleContent>
<xsd:extension base="mon_type">
<xsd:attribute name="mon_nom" type="mon_type" />
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>

Maurice AHOUMENOU 29
Schéma XML : les types complexes

Les contenus simples


Exemple:
Document XML:
<prix devise="euros">35</prix>
Schéma XML:
<xsd:element name="prix">
<xsd:complexType>
<xsd:simpleContent>
<xsd:extension base="xsd:positiveInteger">
<xsd:attribute name="devise" type="xsd:string" />
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>

Maurice AHOUMENOU 30
Schéma XML : les types complexes

Les contenus "standards "

c'est le contenu d'un élément complexe qui n'est composé que d'autres éléments
(simples ou complexes) ou uniquement d'attributs.

Exemple de document XML


<personne>
<nom>AHOUMENOU</nom>
<prenom>Maurice</prenom>
</personne>
<!-- contient un attribut -->
<voiture marque= " Toyota" />

Balise contenant d'autres éléments

La séquence
On utilise une séquence lorsqu’on souhaite que les éléments contenus dans un
type complexe apparaissent dans un ordre précis.

Maurice AHOUMENOU 31
Schéma XML : les types complexes
La séquence
Syntaxe:
<xsd:element name="mon_nom">
<xsd:complexType>
<xsd:sequence>
<!-- liste des éléments -->
</xsd:sequence>
<!-- listes des attributs -->
</xsd:complexType>
</xsd:element>
Exemple:
<xsd:element name="personne">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="nom" type="xsd:string"/>
<xsd:element name="prenom" type="xsd:string"/>
</xsd:sequence>
<xsd:attribute name="sexe" type="xsd:string" />
</xsd:complexType>
</xsd:element>

Maurice AHOUMENOU 32
Schéma XML : les types complexes

Le type all
On utilise le type all lorsqu’on souhaite que les éléments contenu dans un type
complexe apparaissent dans n’importe quel ordre.
Syntaxe:
<xsd:element name="mon_nom">
<xsd:complexType>
<xsd:all>
<!-- liste des éléments -->
</xsd:all>
<!-- listes des attributs -->
</xsd:complexType>
</xsd:element>

Maurice AHOUMENOU 33
Schéma XML : les types complexes

Le type all
Exemple:
<xsd:element name="personne">
<xsd:complexType>
<xsd:all>
<xsd:element name="nom" type="xsd:string"/>
<xsd:element name="prenom" type="xsd:string"/>
</xsd:all>

</xsd:complexType>
</xsd:element>

Maurice AHOUMENOU 34
Schéma XML : les types complexes

Le choix
On utilise le choix lorsqu’on souhaite que les éléments contenus dans un type
complexe soient choisis dans une liste prédéfinie.

Syntaxe:
<xsd:element name="mon_nom">
<xsd:complexType>
<xsd:choice>
<!-- liste des éléments -->
</xsd:choice>
<!-- listes des attributs -->
</xsd:complexType>
</xsd:element>

Maurice AHOUMENOU 35
Schéma XML : les types complexes

Le choix
Exemple:
<xsd:element name="personne">
<xsd:complexType>
<xsd:choice>
<xsd:element name="nom" type="xsd:string"/>
<xsd:element name="prenom" type="xsd:string"/>
</xsd:choice>

</xsd:complexType>
</xsd:element>

Maurice AHOUMENOU 36
Schéma XML : les types complexes

Cas d'un type complexe encapsulant un type complexe

Exemple de document XML:


<?xml version="1.0" encoding="UTF-8"?>
<personne>
<identite>
<nom>AHOUMENOU</nom>
<prenom>Maurice</prenom>
</identite>
</personne>

Maurice AHOUMENOU 37
Schéma XML : les types complexes

Cas d'un type complexe encapsulant un type complexe

Schéma XML illustrant cet exemple:

<?xml version="1.0" encoding="UTF-8"?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="personne">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="identite">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="nom" type="xsd:string"/>
<xsd:element name="prenom" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>

Maurice AHOUMENOU 38
Schéma XML : les types complexes

Les contenus mixtes

Un contenu mixte est le contenu d'un élément complexe qui est composé
d'attributs, d'éléments et de texte.

Exemple de document XML illustrant un contenu mixte:


<balise1>
Ceci est une chaîne de caractères
<balise2>10</balise2>
7.5
</balise1>

Syntaxe du Schéma XML:

<xsd:element name="mon_nom">
<xsd:complexType mixed="true">
<!-- liste des éléments -->
</xsd:complexType>
<!-- liste des attributs -->
</xsd:element>

Maurice AHOUMENOU 39
Schéma XML : les types complexes

Les contenus mixtes

Exemple de document XML:


<facture>
<acheteur>Rony</acheteur>, doit payer
<somme>1000</somme>€
.</facture>
Schéma XML:

<xsd:element name="facture">
<xsd:complexType mixed="true">
<xsd:sequence>
<xsd:element name="acheteur" type="xsd:string" />
<xsd:element name="somme" type="xsd:int" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>

Maurice AHOUMENOU 40
Schéma XML : les types complexes

Le nombre d'occurrences

Par défaut, si rien n’est précisé, la balise n’apparaît qu’une et une seule fois.

Pour indiquer le nombre minimum d'occurrences d'un élément, on utilise l'attribut


minOccurs, sa valeur doit être supérieure à zéro.

Pour indiquer le nombre maximum d'occurrences d'un élément, on utilise l'attribut


maxOccurs, on peut également ne pas spécifier le nombre d’occurrence en
Utilisant l’attribut unbounded.

Exemple de schema XML:

<xsd:complexType name="personne">
<xsd:sequence>
<xsd:element name="nom" type="xsd:string" />
<xsd:element name="prenom" type="xsd:string" minOccurs="2"
maxOccurs="unbounded" />
</xsd:sequence>
</xsd:complexType>

Maurice AHOUMENOU 41
Schéma XML : les types complexes

Réutilisation des types complexes

Pour diviser le document XML dans le but de réutiliser les blocs d’éléments,
on utilise le mot clef ref

Syntaxe: <xsd:element ref= "nom_ref" />

Exemple: écrivez le document XML qui représente une banque et ses clients.
Pour chaque client, on connaît son identité, le montant de son livret A ainsi que le
montant de son compte courant.

Maurice AHOUMENOU 42
Schéma XML : les types complexes

Réutilisation des types complexe

Solution:
<?xml version="1.0" encoding="UTF-8"?>
<banque>
<client>
<identite>
<nom>NOE</nom>
<prenom>Talk</prenom>
</identite>
<comptes>
<livretA>
<montant>2500</montant>
</livretA>
<courant>
<montant>4000</montant>
</courant>
</comptes>
</client>
</banque>

Maurice AHOUMENOU 43
Schéma XML : les types complexes

Créer ses propres types

Les types à créer peuvent être de deux types à savoir le type simple et complexe

Type simple

Syntaxe:

<!-- création -->


<xsd:simpleType name="mon_type_perso">
<xsd:restriction base="mon_type">
<!-- liste des restrictions -->
</xsd:restriction>
</xsd:simpleType>

Utilisation:
<xsd:element name="mon_nom" type="mon_type_perso" />

Maurice AHOUMENOU 44
Schéma XML : les types complexes

Créer ses propres types

Les types à créer peuvent être de deux types à savoir le type simple et complexe

Type complexe

Syntaxe:

<xsd:ComplexeType name="mon_type_perso">
<!-- personnalisation du type complexe -->
</xsd:ComplexeType>

Utilisation:
<xsd:element name="mon_nom" type="mon_type_perso" />

Maurice AHOUMENOU 45
Schéma XML : les types complexes

L'héritage

L'héritage permet de réutiliser les éléments d'un Schéma XML pour en construire de nouveau. Il
existe deux types d’héritage:
L’héritage par restriction et par extension. Dans les deux cas, c'est le mot clef base qu’on
utilise pour indiquer un héritage.

L'héritage par restriction

Elle peut s'appliquer aussi bien aux éléments qu'aux attributs et qui permet de déterminer plus
précisément la valeur attendue via la détermination d'un certain nombre de contraintes.

Syntaxe:

<xsd:element name="mon_nom">
<xsd:simpleType>
<xsd:restriction base="type_de_base">
<!-- détail de la restriction -->
</xsd:restriction>
</xsd:simpleType>
</xsd:element>

Maurice AHOUMENOU 46
Schéma XML : les types complexes

L'héritage par restriction


Syntaxe:
<xsd:attribute name="mon_nom">
<xsd:simpleType>
<xsd:restriction base="type_de_base">
<!-- détail de la restriction -->
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>

Maurice AHOUMENOU 47
Schéma XML : les types complexes
L'héritage par restriction

Tableau récapitulatif des types de restriction

Nom de la Description
restriction
minExclusive permet de définir une valeur minimale exclusive
minInclusive permet de définir une valeur minimale inclusive
maxExclusive permet de définir une valeur maximale exclusive
maxInclusive permet de définir une valeur maximale inclusive
totalDigits permet de définir le nombre exact de chiffres qui
composent un nombre
fractionDigits permet de définir le nombre de chiffres autorisés après
la virgule
length permet de définir le nombre exact de caractères d'une
chaîne

Maurice AHOUMENOU 48
Schéma XML : les types complexes
L'héritage par restriction

Tableau récapitulatif des types de restriction

Nom de la Description
restriction
minLength permet de définir le nombre minimum de caractères
d'une chaîne
maxLength permet de définir le nombre maximum de caractères
d'une chaîne
enumeration permet d'énumérer la liste des valeurs possibles

whiteSpace permet de déterminer le comportement à adopter avec


les espaces
pattern permet de définir des expressions rationnelles

Maurice AHOUMENOU 49
Schéma XML : les types complexes
L'héritage par restriction

Exemple:

<xsd:complexType name="personne">
<xsd:attribute name="age">
<xsd:simpleType>
<xsd:restriction base="xsd:nonNegativeInteger">
<xsd:minExclusive value="17" />
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:complexType>

Maurice AHOUMENOU 50
Schéma XML : les types complexes
L'héritage par extension

Elle permet d'ajouter des informations à un type existant. On peut, par exemple, vouloir
ajouter un élément ou un attribut.

Syntaxe:

<!-- contenu complexe -->


<xsd:complexType name="mon_nom">
<xsd:complexContent>
<xsd:extension base="type_de_base">
<!-- détail de l'extension -->
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>

<!-- contenu simple -->


<xsd:complexType name="mon_nom">
<xsd:simpleContent>
<xsd:extension base="type_de_base">
<!-- détail de l'extension -->
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>

Maurice AHOUMENOU 51
Schéma XML : les types complexes
L'héritage par extension

Exemple:

<xsd:element name="montant" type="xsd:double" />


<!-- compte sans intérêts -->
<xsd:complexType name="compte">
<xsd:sequence>
<xsd:element ref="montant" />
</xsd:sequence>
</xsd:complexType>
<!-- compte avec intérêts grâce à l'héritage par extension -->
<xsd:complexType name="compteInteret">
<xsd:complexContent>
<xsd:extension base="compte">
<xsd:attribute name="interet" type="xsd:float" />
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>

Maurice AHOUMENOU 52
XPATH
C’est une technologie qui repose sur l'écriture d'expressions permettant d'extraire de manière très
précise les informations contenues dans un document XML.

Quelques vocabulaires:

Parent
Le parent d'un nœud est le nœud qui est directement au-dessus de lui d'un point de vue hiérarchique.
Chaque nœud a au moins un parent.

Enfant
Un nœud a pour enfants tous les nœuds situés un niveau en dessous dans la hiérarchie. Un nœud
peut donc avoir une infinité d'enfants.

Descendant
Un nœud a pour descendants tous les nœuds situés en dessous dans la hiérarchie. Un nœud peut
donc avoir une infinité de descendants.

Maurice AHOUMENOU 53
XPATH
Dissection d’une étape

Une étape est décrite par 3 éléments :


Un axe.
Un nœud ou un type de nœud.
Un ou plusieurs prédicats (optionnel).

Rôle des 3 éléments:

L'axe va nous permettre de définir le sens de la recherche. Par exemple, si l'on souhaite se
diriger vers un nœud enfant ou au contraire remonter vers un nœud parent voir un ancêtre.

Le nœud va nous permettre d'affiner notre recherche en indiquant explicitement le nom d'un
nœud ou le type de nœud dont les informations nous intéressent.

Maurice AHOUMENOU 54
XPATH
Rôle des 3 éléments:

Les prédicats, dont le nombre n'est pas limité, agissent comme un filtre et vont nous
permettre de gagner en précision lors de nos recherches. Ainsi, grâce aux prédicats, il sera par
exemple possible de sélectionner les informations à une position précise.

Syntaxe:

axe::nœud[predicat][predicat]...[predicat]

Maurice AHOUMENOU 55
XPATH

Tableau récapitulatif des axes

Nom de l'axe Description


ancestor oriente la recherche vers les ancêtres du nœud courant
ancestor-or-self oriente la recherche vers le nœud courant et ses
ancêtres
attribute oriente la recherche vers les attributs du nœud courant
child oriente la recherche vers les enfants du nœud courant
descendant oriente la recherche vers les descendants du nœud
courant

Maurice AHOUMENOU 56
XPATH

Tableau récapitulatif des axes

Nom de l'axe Description


descendant-or-self oriente la recherche vers le nœud courant et ses
descendants

following oriente la recherche vers les frères suivants du nœud


courant

parent oriente la recherche vers le père du nœud courant

preceding oriente la recherche vers les nœuds précédant le nœud


courant

preceding-sibling oriente la recherche vers les frères précédents du nœud


courant

self oriente la recherche vers le nœud courant

Maurice AHOUMENOU 57
XPATH

Tableau récapitulatif des tests des nœuds

Nom du nœud Description

nom du nœud oriente la recherche vers le nœud dont le nom a


explicitement été spécifié

* oriente la recherche vers tous les nœuds

node() oriente la recherche vers tous les types de nœuds


(éléments, commentaires, attributs, etc.)

text() oriente la recherche vers les nœuds de type texte

comment() oriente la recherche vers les nœuds de type


commentaire

Maurice AHOUMENOU 58
XPATH
Exemple:

Le but va être de récupérer le pays de domiciliation de Maurice. Commençons par


décrire les étapes à suivre:
Etape 1 : descendre au nœud "repertoire" .
Etape 2 : descendre au nœud "personne".
Etape 3 : descendre au nœud "adresse".
Etape 4 : descendre au nœud "pays".

Traduisons maintenant ces étapes sous la forme d'expressions XPath :


Etape 1 : child::repertoire.
Etape 2 : child::personne.
Etape 3 : child::adresse.
Etape 4 : child::pays.

Code xpath:

/child::repertoire/child::personne/child::adresse/child::pays

Maurice AHOUMENOU 59
XPATH
Tableau récapitulatif des prédicats

Nom du prédicats Description


attribute permet d'affiner la recherche en fonction d'un attribut
count() permet de compter le nombre de nœuds
last() permet de sélectionner le dernier nœud d'une liste
position() permet d'affiner la recherche en fonction de la position
d'un nœud

Exemple:

Récupérer le nœud contenant le numéro de téléphone fixe de


AHOUMENOU Maurice

Code Xpath:

/repertoire/personne/telephones/telephone[attribute::type="fixe"]

Maurice AHOUMENOU 60
XPATH

TRAVAUX PRATIQUES

Maurice AHOUMENOU 61
XSLT

XSLT ou eXtensible Stylesheet Language Transformations est une technologie qui permet de
transformer les informations d'un document XML vers un autre type de document comme un autre
document XML ou encore une page web.

Maurice AHOUMENOU 62
XSLT
Structure d'un document XSLT

L'extension portée par les documents XSLT est ".xsl".

Un document XSLT est constitué d’un prologue et d’un corps.

Prologue:
<?xml version="1.0" encoding="UTF-8" ?>

Le corps d'un fichier XSLT est constitué d'un ensemble de balises dont l'élément racine

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

</xsl:stylesheet>
La balise output
Elle permet de décrire le document à générer à l'issue des différentes transformations.
Elle contient les attributs suivantes :

Maurice AHOUMENOU 63
XSLT

Structure d'un document XSLT

La balise output
Elle permet de décrire le document à générer à l'issue des différentes transformations.
Elle contient les attributs suivantes :
L'attribut method

Valeurs possibles: XML, HTML, Texte

L'attribut encoding

Valeurs possibles: UTF-8, ISO-8859-1, …


L'attribut indent

Valeurs possibles: Yes, No

<xsl:output
method="xml"
encoding="UTF-8"
indent="yes"
/>

Maurice AHOUMENOU 64
XSLT

Structure d'un document XSLT

<!-- le prologue -->


<?xml version="1.0" encoding="UTF-8" ?>

<!-- l'élément racine -->


<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<!-- l'élément output -->


<xsl:output
method="html"
encoding="UTF-8"
doctype-public="-//W3C//DTD HTML 4.01//EN"
doctype-system="http://www.w3.org/TR/html4/strict.dtd"
indent="yes"
/>

<!-- reste du document XSLT -->

</xsl:stylesheet>

Maurice AHOUMENOU 65
XSLT
Référencer un document XSLT
Le référencement d'un document XSLT se fait au niveau du document XML dont les informations seront utilisées au
cours de la transformation.

sous le prologue du document XML : <?xml-stylesheet type="text/xsl" href= "document.xsl" ?>

<?xml version="1.0" encoding="UTF-8"?>


<?xml-stylesheet type="text/xsl" href= "document.xsl" ?>
<racine>
<!-- contenu du document XML -->
</racine>

Les templates

Le corps d'un document XSLT est composé d'un ensemble de templates.

Un template est défini par la balise <xsl:template />

Cette balise peut avoir au moins deux attributs:

match qui permet de renseigner une expression xpath

name qui permet de donner un nom au template. Cet attribut permet d’identifier de
manière unique le template dans le document XSLT.

Maurice AHOUMENOU 66
XSLT
<?xml version="1.0" encoding="UTF-8"?>
Les templates <xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
priority qui permet de renseigner la priorité >
<xsl:output
mode qui permet de définir un mode. method="html"
encoding="UTF-8"
doctype-public="-//W3C//DTD HTML
<xsl:template 4.01//EN"
match="expression XPath"
name="nom du template" doctype-system="http://www.w3.org/TR/html4/strict.
> dtd"
<!-- contenu du template --> indent="yes"
</xsl:template> />

<xsl:template match="/">
<html>
<head>
<title>Mon document XSLT</title>
</head>
<body>
<p>Bonjour !</p>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Maurice AHOUMENOU 67
XSLT

Les fonctions

value-of

La fonction<xsl:value-of />, permet d'extraire la valeur d'un élément XML ou la valeur de


ses attributs.

Cette fonction possède un attribut select auquel il convient de renseigner une expression XPath

<xsl:value-of select="expression XPath" />

for-each

La fonction <xsl:for-each /> permet de parcourir l'ensemble des résultats obtenus pour y
appliquer une transformation particulière.

Comme pour la fonction<xsl:value-of />, la fonction<xsl:for-each />possède un


attribut select auquel il convient de renseigner une expression XPath permettant alors de
sélectionner les informations à extraire.

<xsl:for-each select="expression XPath" />

Maurice AHOUMENOU 68
XSLT

Les fonctions

if

La fonction <xsl:if />, permet de conditionner une transformation.

Cette fonction possède un attribut test auquel il convient de renseigner la condition

<xsl:if test="test de comparaison" />

Tests

Condition Explication

a=b Cette condition vérifie que la valeur de l'élément a est égale à la valeur
de l'élément b.

not(a = b) Cette condition vérifie que la valeur de l'élément a n'est pas égale à la
valeur de l'élément b.

a &lt; b Le symbole &lt; (lower than) traduit en réalité le symbole <. La


condition est donc en réalité la suivante : a < b. Cette condition vérifie
que la valeur de l'élément a est strictement inférieure à la valeur de
l'élément b.

Maurice AHOUMENOU 69
XSLT

Les fonctions

Les tests

Condition Explication

a &lt;= b Le symbole &lt; (lower than) traduit en réalité le symbole <. La


condition est donc en réalité la suivante : a <= b. Cette condition
vérifie que la valeur de l'élément a est inférieure ou égale à la valeur
de l'élément b.

a &gt; b Le symbole &gt; (greater than) traduit en réalité le symbole >. La


condition est donc en réalité la suivante : a > b. Cette condition vérifie
que la valeur de l'élément a est strictement supérieure à la valeur de
l'élément b.

a &gt;= b Le symbole &gt; (greater than) traduit en réalité le symbole >. La


condition est donc en réalité la suivante : a >= b. Cette condition
vérifie que la valeur de l'élément a est supérieure ou égale à la valeur
de l'élément b.

Maurice AHOUMENOU 70
XSLT

Les fonctions

Extrait de l’utilisation de function if

<xsl:template match="/">
<html>
<head>
<title>Test de la fonction if</title>
</head>
<body>
<xsl:for-each select="repertoire/personne">
<xsl:if test="@sexe = 'masculin'">
<p><xsl:value-of select="nom" />&#160;<xsl:value-of select="prenom"
/></p>
</xsl:if>
</xsl:for-each>
</body>
</html>
</xsl:template>

Maurice AHOUMENOU 71
CSS appliqué à XML

Comment référencer la feuille de style CSS

Pour inclure une feuille de style dans un document XML, on utilise la syntaxe
suivante:

<?xml-stylesheet href="style.css" type="text/css" ?>

Exemple:

<?xml version = "1.0" encoding="UTF-8">


<?xml-stylesheet href="personne.css" type="text/css" ?>
<personne>
<nom>AHOUMENOU</nom>
<prenom>Maurice</prenom>
</personne>

Maurice AHOUMENOU 72
FIN!

Maurice AHOUMENOU 73

Vous aimerez peut-être aussi