Académique Documents
Professionnel Documents
Culture Documents
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
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
7
Les espaces de nom
• Exemple:
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:
8
XML-SCHEMA
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
<entree xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="entree.xsd">
<nom>Harry Cover</nom>
<telephone>0102030405</telephone>
</entree>
<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"/>
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>
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 :
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>
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:
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>
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é
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.
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>
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">
<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>
</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
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
98
Syntaxe de base de Xpath
Recherche simple
Symbole Rôle Exemple Résultat
</star>
</stars>
71
Exemple des feuilles de style XSL
Exemple style1 : utiliser template match ... value-of select et quelques styles
HTML (<p>, <h1>)
<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
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>
<xsl:template match=”nom”>
Parcours de nom
</xsl:template>
</xsl:stylesheet>
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