2. Brahim ER-RAHA
Mr Brahim ER-RAHA
ENSA-Département Informatique
135 avenue des FAR
80 000 Agadir
Maroc
bureau 028-55-55-24
fax 061-55-55-55
Je veux envoyer ma carte de visite par courrier électronique
On peut l'envoyer tel quel, dans le texte du courrier
3. Brahim ER-RAHA
Autre possibilité :
A la réception, le lecteur humain saura décoder les différents champs de l'adresse
Mr ER-RAHA Brahim
ENSA-Département Informatique
135 avenue des FAR
80 000 Agadir
Maroc
bureau 028-55-55-24
fax 061-55-55-55
4. Brahim ER-RAHA
• il faut l'extraire du reste du texte => identification
• il faut l'analyser FACILEMENT => moteur de recherche
• il faut le vérifier FACILEMENT => validation
• on doit pouvoir l'utiliser dans d'autres applications => portabilité
• on doit pouvoir la transformer pour d'autres applications => format du
numéro de téléphone.
Plus difficile par un logiciel!
5. Brahim ER-RAHA
<carte>
<!-- ma carte de visite -->
<nom préfixe="Mr">ER-RAHA</nom>
<prénom>Brahim</prénom>
<adresse>
<site>ENSA-Département Informatique</site>
<rue>135 avenue des FAR</rue>
<ville>Agadir</ville>
<code-postal>80 000</code-postal>
<pays>Maroc</pays>
</adresse>
<téléphone type="bureau">028-55-55-24</téléphone>
<téléphone type="fax">061-55-55-55</téléphone>
</carte>
6. Brahim ER-RAHA
HTML est un langage pour présenter des informations à l’écran.
1. il ne permet pas d’échanger des données
2. il ne permet pas un traitement des données autre que l’affichage
On ne sait pas interpréter des données fournies en HTM
Le principal langage du Web est HTML
Commerce électronique : les entreprises veulent échanger des informations
(pas pour les afficher !)
Moteur de recherche : si je sais interpréter les données transmises, je peux les
indexer efficacement
Services en ligne : je peux envoyer mes données à un serveur pour leur
appliquer un traitement donné (ex : publication)
Nouvelles utilisations du Web
Quelques applications :
7. Brahim ER-RAHA
Le réseau est hétérogène : les données doivent être représentées
indépendamment d’une machine donnée.
Les applications sont variées : les données doivent être représentées
indépendamment d’une application.
Une application = un format de données : il faut pouvoir transformer
facilement les données d’un format à un autre.
Nouveaux besoins : échange et publication de données.
Un document XML est au format ASCII : il voyage (relativement) facilement
XML n’est pas lié à un mode d’utilisation : chacun peut se définir son propre
« langage », (SMIL, SVG, WML, etc)
Beaucoup d’outils de manipulation : DOM, SAX, XSLT, XPath, XQuery, etc
Le langage XML est une réponse à ces besoins :
9. Origine de XML
Standard Generalized Markup Language
SGML
HTML
XML
( Sépare les données la structure des données et la
mise en forme )
Hyper Text Markup Language
( Mélange les données et la mise en forme )
eXtensible Markup Language
( Sépare les données la structure des données et la
mise en forme )
10. Brahim ER-RAHA
I- INTRODUCTION
I-1 Définition
XML (eXtensible Markup Language et traduisez Langage à balises étendu, ou
Langage à balises extensibles) est en quelque sorte un langage HTML amélioré
permettant de définir de nouvelles balises. Il s'agit effectivement d'un langage
permettant de mettre en forme des documents grâce à des balises (markup).
En réalité les balises XML décrivent le contenu plutôt que la présentation
(contrairement À HTML). Ainsi, XML permet de séparer le contenu de la
présentation ce qui permet par exemple d'afficher un même document sur des
applications ou des périphériques différents sans pour autant nécessiter de créer
autant de versions du document que l'on nécessite de représentations
XML a été mis au point par le XML Working Group sous l'égide du World Wide
Web Consortium (W3C) dès 1996. Depuis le 10 fevrier 1998, les spécifications
XML 1.0 ont été reconnues comme recommandations par le W3C, ce qui en fait
un langage reconnu. (Tous les documents liés à la norme XML sont
consultables et téléchargeables sur le site web du W3C,
http://www.w3c.org/XML/)
11. XML ?
XML est un langage d’échange de données structurés
entre applications de différents systèmes d’informations.
Les données d’un fichier XML sont organisée d’une
manière hiérarchique
Les données d’un fichier XML peuvent provenir des
bases de données relationnelles. (Documents XML
Dynamiques)
Les fichiers XML sont également utilisés en tant que
fichiers de configuration d’une application. ( Documents
XML Statiques )
Pour lire un fichier XML, une application doit utiliser un
parseur XML.
Un parseur XML est une API qui permet de parcourir un
fichier XML en vue d’en extraire des données précises.
12. XML est au cœur des systèmes
d’informations
Serveur d’application IIS
Application .net
Fichiers XML dont le contenu est généré
Dynamiquement et povient d’une source
De donnée comme une BD relationnelle
Serveur d’application J2EE
Application JEE
XML
SGBD
SGBD XML Parser
SQL Server
Fichier.xml
Client Leger
Ajax
Flash XML
XML Parser
Oracle
Fichier.xml Fichier.xml
Fichiers XML dont le contenu
Est créés manuellement
Pour configurer l’application
13. Publication multi-supports
XML
Base de
Données
Application de
publication
(XSL)
TV Numérique
Pourquoi XML ?
Middleware
XMLizer
Projet GIE Cartes Bancaires:
publication des spécifications de protocoles pour réseau Carte Bancaires
vers les fournisseurs et prestataires du GIE
14. Échange de données: ETL
Extractor
JDBC JDBC
Mapper
BD
relationnelle
Datawarehouse
Datamining
Pourquoi XML ?
Projet MEN : Echange de données avec
les académies (remontée et descente)
15. Gestion documents semi structurés
Feuille
de style
XSL
Feuille
de style
XSL
Requêtes
HTTP GET
HTTP POST
Requêtes
Mapping
XML-SQL
Processeur
XSL
Feuille
de style
XSL
HTML généré
Serveur d’Applications
Projet AMELI : Une application de
serveur XML pour la saisie et la
consultation de documents semi-structurés
par internet/intranet
Interface avec les applications
bureautiques
Amendemen
t
SGBDR
Pourquoi XML ?
16. XML EDI
Échange B2B XML EDI
XMLizer
Internet
(SOAP)
Donneur d’ordre
Fournisseur
Pourquoi XML ?
Projet EDIXML : Expérimentation de la
chaîne pour un grand donneur d'ordres
17. Forces et faiblesses de XML
Une technologie
structurante
Clarifie tous les échanges
Des standards internes et
externes
Transversale à
l'entreprise
Échanges de données
Bureautique
GED
Sites Web
EDI
Bases de données
Intégration e-business
…
Une syntaxe bavarde
Un méta-langage, mais de
nombreux langages
Coûteux en CPU
Parsing
Coûteux en mémoire
Instanciation
Format compressé à l’étude
XML Binaire
Pourquoi XML ?
18. Brahim ER-RAHA
La lisibilité : aucune connaissance ne doit théoriquement être nécessaire pour
comprendre un contenu d'un document XML
Autodescriptif et extensible
Une structure arborescente : permettant de modéliser la majorité des problèmes
informatiques
Universalité et portabilité : les différents jeux de caractères sont pris en compte
Déployable : il peut être facilement distribué par n'importe quels protocoles à
de transporter du texte, comme HTTP
Intégrabilité : un document XML est utilisable par toute application pourvue d'un
parser (c'est-à-dire un logiciel permettant d'analyser un code XML)
Exensibilité : un document XML doit pouvoir être utilisable dans tous les domaines
I-2 Avantages de XML
Voici les principaux atouts de XML :
19. Brahim ER-RAHA
XML est particulièrement adapté à l'échange de données et de documents.
L'intérêt de disposer d'un format commun d'échange d'information dépend du
contexte professionnel dans lequel les utilisateurs interviennent. C'est pourquoi,
de nombreux formats de données issus de XML apparaissent (il en existe plus
d'une centaine) :
AML Astronomical Markup Language langage décrivant les différents types de
données utilisées en astronomie.
MathML Mathematical Markup Language notation mathématique sur le web
CML Chemical Markup Language pour la publication Internet des formules
chimiques, de molécules, des équations
VML Vector Markup Language langage de balisage d’information graphique
vectorielle.
PGML Precision Graphics Markup Language décrit les structures de données
graphiques complexes avec les primitives du langage Postscript. Il permet la
conversion de documents aux formats ps et pdf en XML.
SMIL Synchronized Multimedia Integration Language pour la création
multimédia, il spécifie comment et quand des éléments multimédia peuvent
apparaître dans une page web.
20. Brahim ER-RAHA
CDF Channel Definition Format utilisé par Microsoft pour décrire le contenu
Active Channel. Une chaîne délivre des informations directement à l’utilisateur en
utilisant la technologie push d’un serveur (envoi de contenus web à des
utilisateurs sans que ceux-ci aient besoin d’accéder spécifiquement au site). Les
chaînes fournissent des informations récentes aux utilisateurs qui peuvent
sélectionner le contenu Web qu’ils souhaitent recevoir.
RDF les applications traitant les données RDF peuvent récupérer les informations
(auteur, URL, titre, description) et créer des bases de données permettant la
recherche d’information.
WML Wireless Markup Language le langage de balisage pour l’internet mobile
21. Brahim ER-RAHA
XML est un format de description des données et non de leur représentation,
comme c'est le cas avec HTML. La mise en page des données est assurée par un
langage de mise en page tiers. A l'heure actuelle (fin de l'année 2000) il existe trois
solutions pour mettre en forme un document XML :
CSS (Cascading StyleSheet), la solution la plus utilisée actuellement, étant donné
qu'il s'agit d'un standard qui a déjà fait ses preuves avec HTML
XSL (eXtensible StyleSheet Language), un langage de feuilles de style extensible
développé spécialement pour XML. Toutefois, ce nouveau langage n'est pas
reconnu pour l'instant comme un standard officiel
XSLT (eXtensible StyleSheet Language Transformation). Il s'agit d'une
recommandation W3C du 16 novembre 1999, permettant de transformer un
document XML en document HTML accompagné de feuilles de style
I-3 Mise en page de XML
22. Brahim ER-RAHA
XML fournit un moyen de vérifier la syntaxe d'un document grâce aux DTD
(Document Type Definition). Il s'agit d'un fichier décrivant la structure des
documents y faisant référence grâce à un langage adapté. Ainsi un document
XML doit suivre scrupuleusement les conventions de notation XML et peut
éventuellement faire référence à une DTD décrivant l'imbrication des éléments
possibles.
Un document suivant les règles de XML est appelé document bien formé. Un
document XML possédant une DTD et étant conforme à celle-ci est appelé
document valide.
I-4 Structure des documents XML
23. Brahim ER-RAHA
XML permet donc de définir un format d'échange selon les besoins de
l'utilisateur et offre des mécanismes pour vérifier la validité du document
produit. Il est donc essentiel pour le receveur d'un document XML de pouvoir
extraire les données du document. Cette opération est possible à l'aide d'un
outil appelé analyseur (en anglais parser, parfois francisé en parseur).
Le parseur permet d'une part d'extraire les données d'un document XML (on
parle d'analyse du document ou de parsing) ainsi que de vérifier
éventuellement la validité du document.
I-5 Décodage d'un document XML
24. Structure d’un document XML
Un document XML se compose de 3 fichiers :
Document XML
Fichier XML DTD
Qui contient Ou
Les données Schémas XML
Pour déclarer
La structure
Du fichier XML
Feuille de style
XSL
Pour la présentation
Des données du
Fichier XML
Le fichier XML stocke les données du document sous forme d’un arbre
DTD ( Data Type Definition ) ou Schémas XML définit la structure du fichier XML
La feuille de style définit la mise en forme des données de la feuille xml
25. XML?
Le parseur XML permet de créer une structure
hiérarchique contenant les données contenues
dans le document XML.
Il existe deux types de parseurs XML:
◦ DOM (Document Object Model) : permet
d’accéder et d’agir d’une manière directe sur le
contenu et la structure de l’arbre XML.
◦ SAX (Simple API for XML) : permet de réagir sur le
contenu et la structure d’une document XML
pendant une lecture séquentielle.
26. Brahim ER-RAHA
Tout document XML se compose :
d’un prologue, dont la présence est facultative mais conseillée. Il contiendra un
certain nombre de déclarations. Le prologue peut contenir une déclaration XML,
des instructions de traitement et une déclaration de type de document.
Syntaxe : <?xml version="1.0" encoding="ISO-8859-1" standalone="yes" ?>
Elle indique au programme qui va traiter le document :
• la version du langage XML utilisée
• le codage de caractères utilisé dans le document ; par défaut ISO 10646 mais le
programme doit pouvoir traiter aussi l’UTF-8 et l’UTF-16.
• l’existence ou non de déclarations extérieures au document qui doivent être prise
en compte pour le traitement de celui-ci.
La déclaration est facultative mais fortement conseillée. Chacune des trois
informations est elle aussi facultative mais si elles apparaissent c’est
obligatoirement dans cet ordre.
d’un arbre d’éléments. Il forme le contenu du document.
de commentaires et d’instructions de traitement, dont la présence est facultative.
Ils pourront, moyennant certaines restrictions, apparaître aussi bien dans le
prologue que dans l’arbre d’éléments.
II DOCUMENT XML
28. Quelques outils de travail
DTD, Schéma,
XSL, XPath
XMLMind Editor
XML Mind
DTD, Schéma,
XSL, XPath
XMLMate
Insight Soft.
Schéma
XML Junction
Data Junction
DTD, Schéma XSL,
XQuery
Oxygen
SyncRO Ltd.
DTD, Schéma XSL,
XQuery
XMLSpy
Altova
DTD, XSL, XQuery
Schéma
Turbo XML
Tibco
Support
Outil
Editeur
IDE
30. Brahim ER-RAHA
Un document XML est bien formé (l’analyseur XML peut construire son arborescence) si
il suit les règles suivantes :
a- Choisir le nom de nos propre balise
Il y a quelques règles pour la composition des noms des balises :
- Les noms peuvent contenir des lettres, des chiffres ou d'autres caractères.
- Les noms ne peuvent débuter par un nombre ou un signe de ponctuation.
- Les noms ne peuvent commencer par les lettres xml (ou XML ou Xml...).
- Les noms ne peuvent contenir des espaces.
- La longueur des noms est libre.
- On évitera certains signes qui pourraient selon les logiciels, prêter à confusion comme
"-", ";", ".", "<", ">", etc.
On profitera de cette liberté dans les noms pour les rendre le plus descriptif possible
comme par exemple <gras_et_italique>.
II-1 Documents bien formés
b- Les balises sont sensibles au majuscules et minuscules
Ainsi, la balise <Message> est différente de la balise <message>. La balise
d'ouverture et la balise de fermeture doivent donc être identiques. Ainsi par
exemple ; <Message> ... </message> est incorrect et <message> ... </message>
est correct.
Une tendance se dégage pour n'écrire les balises qu'en minuscules, limitant ainsi
les erreurs possibles.
31. Brahim ER-RAHA
Fini les écritures bâclées du Html où l'on pouvait dans certains cas omettre la balise
de fin comme pour le paragraphe <p> ou l'élément de liste <li>.
Les éventuelles balises uniques ou appelées aussi balises vides, comme <br>,
<meta> ou <img> en Html, doivent également comporter un signe de fermeture soit
<balise/>. Ainsi une balise <meta/> est correcte en XML.
c- Toute balise ouverte doit impérativement être fermée
Le XML étant très préoccupé par la structure des données, des balises
mal imbriquées sont des fautes graves de sens. Ainsi l'écriture suivante est
incorrecte car les balises ne sont pas bien imbriquées :
<parent><enfant>Omar</parent></enfant>
L'écriture correcte avec une bonne imbrication des éléments est :
<parent><enfant>Omar</enfant></parent>
d- Les balises doivent être correctement imbriquées.
32. Brahim ER-RAHA
En fait, la première paire de balises d'un document XML sera considéré
comme la balise de racine [root]. Par exemple :
<racine>
suite du document XML ...
</racine>
Par exemple :
<parents>
<enfants>
<petits_enfants> ... </petits_enfants>
</enfants>
</parents>
e- Tout document XML doit comporter une racine.
Le XML peut avoir (comme le Html) des attributs avec des valeurs. En XML, les
valeurs des attributs doivent obligatoirement être entre des guillemets, au
contraire du Html où leur absence n'a plus beaucoup d'importance. Ainsi,
l'écriture suivante est incorrecte car il manque les guillemets.
<date anniversaire=071185> La bonne écriture est :
<date anniversaire="071185">
f- Les attributs des éléments
33. Brahim ER-RAHA
<test>
<code xml:space="preserve">Ici les espaces ainsi
que les sauts de ligne sont préservés
</code>
<code xml:space="default"> les espaces ainsi que les sauts de ligne
sont traités suivant le mode par défaut de l'application XML.
</code>
</test>
g- Attributs prédéfinis
Exemple1 :
Exemple2 :
<test>
<code xml:lang="fr">Ici, du français</code>
<code xml:lang="fr-FR">Ici, il n'y a pas une seule
bogue</code>
<code xml:lang="fr-CA">Ici, il n'y a pas un seul
bogue</code>
<code xml:lang="en-GB">Watercolour</code>
<code xml:lang="en-US">Watercolor</code>
</test>
34. Brahim ER-RAHA
Un élément peut contenir d’autres éléments, des données, des références à des
entités, des sections littérales et des instructions de traitement.
Un élément peut avoir un contenu récursif, c’est à dire qu’il peut contenir une
instance du même type d’élément que lui-même.
Les données des éléments peuvent contenir tous les caractères autorisés sauf le
et commercial & et le inférieur <. Mais on peut toujours utilisé la section CDATA,
Par exemple :
<test>
<code><![CDATA[Ici on peut mettre ce que l'on
veut, < ou &, sans
problèmes, sauf la chaîne ]]>, bien sûr
</code>
</test>
h- Contenu d’un élément
35. Brahim ER-RAHA
Un auteur peut vouloir insérer un caractère non disponible sur sa plate-forme
ou son clavier. Il utilise pour cela le numéro du caractère dans les tables ISO
10646 ou Unicode.
Ce numéro sera précédé des caractères &# puis suivi d’un point virgule ;. Le
numéro peut être donné en décimal ou en hexadécimal (dans ce cas on le
préfixe par &#x).
Par exemple & ou ≧ correspond au caractère et commercial &
j- Référence à des caractères ou à des idéogrammes
k- Référence à des entités prédéfinies
Il existe quelques entités prédéfinies afin de faciliter leur insertion dans un
document XML. Il s’agit notamment des caractères <, >, &, ‘ et «
< <
> >
& &
' ‘
" "
36. Brahim ER-RAHA
Des commentaires peuvent être insérés dans les documents. Ils sont encadrés
pas les marques de début <!-- et de fin --> de commentaire.
Syntaxe : <!-- commentaire -->
Le corps du commentaire peut contenir n’importe quel caractère à l’exception de
la chaîne --. On ne peut donc pas inclure un commentaire dans un autre. Le
commentaire ne peut pas non plus être inclus à l’intérieur d’une balise.
l- Les commentaires
37. Brahim ER-RAHA
XML permet d'utiliser un fichier afin de vérifier qu'un document XML est conforme à
une syntaxe donnée. La norme XML définit ainsi une définition de document type
appelée DTD (Document Type Definition), c'est-à-dire une grammaire permettant
de vérifier la conformité du document XML. La norme XML n'impose pas l'utilisation
d'une DTD pour un document XML, mais elle impose par contre le respect exact
des règles de base de la norme XML.
Document Valide : pour un document XML bien formé, fait référence a une DTD
et il se conforme à elle.
Document Bien Formé : pour un document XML ne comportant pas de DTD mais
répondant aux règles de base du XML
Une DTD peut être définie de 2 façons:
sous forme interne : c'est-à-dire en incluant la grammaire au sein même du
document
sous forme externe : soit en appelant un fichier contenant la grammaire à partir
d'un fichier local ou bien en y accédant par son URL
II-2 Document XML validé
38. Brahim ER-RAHA
a- DTD interne
Un document valide peut inclure directement sa DTD dans sa déclaration de type.
L'attribut standalone doit prendre la valeur yes, indiquant ainsi que le document
est complet et qu'aucune déclaration externe ne doit être recherchée.
Exemple :
<?xml version="1.0" standalone="yes" ?>
<!DOCTYPE carte [
<!ELEMENT carte (#PCDATA)>
]>
<carte>As de pique</carte>
b- DTD externe
Le document peut aussi faire référence à une DTD stockée dans une entité
externe. L'avantage est alors la réutilisation possible de la DTD.
Exemple : Fichier jeu.xml
<?xml version="1.0" standalone="no" ?>
<!DOCTYPE carte SYSTEM "carte.dtd"> Fichier carte.dtd
<carte>As de pique</carte>
II-3 Utilisation des DTD
39. Brahim ER-RAHA
La déclaration de type de document indique, le cas échéant, la DTD à laquelle
se conforme le document. Elle permet aussi de spécifier certaines déclarations
propres au document. La syntaxe de déclarations est :
Syntaxe : <!DOCTYPE Racine [ déclarations ]>
Racin : est le nom de l’élément racine de document XML.
Déclarations : ils contient la définition de tous les éléments constituant le
document XML. Il s’agit de :
les éléments types, i.e. elle donne les noms de tous les éléments et leur
modèle de contenu ;
les attributs pour chaque élément (nom, type et valeur par défaut) ;
les entités et les notations qui servent à identifier les types spécifiques de
données externes.
1- Syntaxe d’utilisation d’une DTD
40. Brahim ER-RAHA
La syntaxe de déclaration d’un élément est la suivante :
<!ELEMENT nom_element modele_de_contenu>
Élément vide
Un élément vide ne contient aucun texte, aucun autre élément, comme les
éléments IMG, HR, BR de HTML.
<!ELEMENT nom_element EMPTY>
Par exemple, dans la DTD de XHTML 1.0 l’élément img est déclaré :
<!ELEMENT img EMPTY>
2 Déclaration des éléments
Élément non vide
Un élément non vide est formé d’une balise ouvrante, d’un contenu et d’une balise
fermante. Pour décrire ce contenu dans la DTD on utilise un modèle de contenu
dans la déclaration d’éléments
41. Brahim ER-RAHA
Données
Si l’élément contient uniquement des données (autrement dit, s’il n’y a aucun autre
élément inclus dans cet élément) on utilise le type #PCDATA qui signifie Parsed
Character DATA i.e. données caractères analysées :
<!ELEMENT nom_element (#PCDATA)>
Conteneur d’éléments
Si l’élément contient uniquement d’autres éléments, le modèle de contenu définit les
éléments pouvant être inclus dans un élément donné et spécifie également les
éléments devant apparaître obligatoirement, leur ordre et leur fréquence.
Les parenthèses dans la déclaration d’élément introduisent les éléments enfants de
l’élément défini. L’ordre dans lequel les éléments sont précisés est l’ordre dans lequel
ils doivent apparaître dans l’élément en cours de définition. Pour indiquer des choix, il
est possible d’utiliser le |.
Les indicateurs d’occurrences sont les suivants :
? = 0 ou 1 fois
* = 0 ou n fois
+ = au moins une fois
42. Brahim ER-RAHA
Mixte
Si l’élément a un contenu mixte (données + éléments) il est possible d’utiliser
PCDATA et les éléments imbriqués. Dans le cas d'un modèle mixte (Données
textuelles et balises)
• #PCDATA est toujours en première position
• le modèle se termine par le caractère de répétition '*‘
<!ELEMENT mixedElement (#PCDATA | inlineElement1 | inlineElement2 )*>
Élément libre
Élément qui peut contenir tout élément déclaré dans la DTD et du texte.
<!ELEMENT nom_element ANY>
O
p
é
r
a
t
e
u
r S
i
g
n
i
f
i
c
a
t
i
o
n E
x
e
m
p
l
e
+ L
'
é
l
é
m
e
n
td
o
i
tê
t
r
ep
r
é
s
e
n
ta
u
m
i
n
i
m
u
m
u
n
ef
o
i
s A
+
* L
'
é
l
é
m
e
n
tp
e
u
tê
t
r
ep
r
é
s
e
n
tp
l
u
s
i
e
u
r
sf
o
i
s(
o
u
a
u
c
u
n
e
) A
*
? L
'
é
l
é
m
e
n
tp
e
u
tê
t
r
eo
p
t
i
o
n
n
e
l
l
e
m
e
n
tp
r
é
s
e
n
t A
?
| L
'
é
l
é
m
e
n
tA
o
u
B
p
e
u
v
e
n
tê
t
r
ep
r
é
s
e
n
t
s(
p
a
sl
e
sd
e
u
x
) A
|
B
, L
'
é
l
é
m
e
n
tA
d
o
i
tê
t
r
ep
r
é
s
e
n
te
ts
u
i
v
id
el
'
é
l
é
m
e
n
tB A
,
B
(
)
L
e
sp
a
r
e
n
t
h
è
s
e
sp
e
r
m
e
t
t
e
n
td
er
e
g
r
o
u
p
e
rd
e
sé
l
é
m
e
n
t
sa
f
i
n
d
el
e
u
ra
p
p
l
i
q
u
e
rl
e
s
a
u
t
r
e
so
p
é
r
a
t
e
u
r
s
(
A
,
B
)
+
43. Brahim ER-RAHA
<bibliothèque>
<livre>
<titre>N ou M</titre>
<auteur>Agatha Christie</auteur>
<ref>Policier-C-15</ref>
</livre>
<livre>
<titre>Le chien des Baskerville</titre>
<auteur>Sir Arthur Conan Doyle</auteur>
<ref>Policier-D-3</ref>
</livre>
<livre>
<titre>Dune</titre>
<auteur>Franck Heckbert</auteur>
<ref>Fiction-H-1</ref>
</livre>
</bibliothèque>
Proposer une DTD qui valide ce document ?
44. Brahim ER-RAHA
Le rôle de la déclaration d’attributs est de donner pour un élément cible :
les noms d’attributs permis ;
le type de chaque attribut ;
la valeur par défaut de l’attribut.
<!ATTLIST element_cible nom_attribut type_attribut valeur_par_défaut>
3- Déclaration d’attribut
Valeur par défaut
La valeur par défaut est la valeur prise par l’attribut si aucune valeur n’est
précisée dans l’élément. Cette valeur doit être du même type que celui donné à
l’attribut.
"une simple chaîne de caractères"
#REQUIRED = obligatoire, i.e. la valeur d’attribut doit être spécifiée lorsque
l’élément est utilisé dans le document
#IMPLIED = facultatif, i.e. la valeur d’attribut peut rester non spécifiée
#FIXED ‘val’ = fixée à ‘val’ i.e. la valeur de l’attribut est fixe et ne peut pas être
modifiée par l’utilisateur
45. Brahim ER-RAHA
Types de données
- chaînes de caractères CDATA
Le type d'attribut CDATA indique que la valeur de l'attribut sera une chaîne de
caractères prise littéralement, c'est à dire sans reconnaissance et traitement des
caractères spéciaux de la syntaxe XML.
<!ATTLIST element_cible nom_attribut CDATA valeur_par_défaut>
- Énumérations
<!ATTLIST element_cible nom_attribut (val1 | val2 | ... | valN) « valdefaut »>
Ce type d'attribut permet de spécifier la liste des valeurs qu'il peut prendre dans un
document. Il est également possible d'indiquer une valeur par défaut.
-Identificateurs
<!ATTLIST element_cible nom_attribut ID>
<!ATTLIST element_cible nom_attribut IDREF>
Un attribut de type ID représente un identificateur unique d’élément, i.e. un attribut
dont la valeur distingue l’élément de tous les autres dans le document XML courant
Notons que cet attribut prend généralement le nom id
Un attribut ID ne peut être que du type REQUIRED
46. Brahim ER-RAHA
<?xml version="1.0" encoding="UTF-8"?>
<!--DOCTYPE operateur SYSTEM "abonnementVrai.dtd"-->
<operateur>
<client code="1" nom="hassouni">
<abonnement num="123" type="GSM" dateAb="2006-1-11">
<facture numFact="432" dateFact="2006-2-11" montant="350.44" reglee="oui"/>
<facture numFact="5342" dateFact="2006-3-11" montant="450" reglee="oui"/>
<facture numFact="5362" dateFact="2006-4-13" montant="800.54" reglee="non"/>
</abonnement>
<abonnement num="2345" type="FIXE" dateAb="2006-12-1">
<facture numFact="5643" dateFact="2007-1-12" montant="299" reglee="oui"/>
<facture numFact="6432" dateFact="2007-2-12" montant="555" reglee="non"/>
</abonnement>
</client>
<client code="2" nom="abbassi">
<abonnement num="7543" dateAb="2006-12-1" type="GSM">
<facture numFact="7658" dateFact="2007-2-12" montant="350.44" reglee="oui"/>
<facture numFact="7846" dateFact="2007-3-12" montant="770" reglee="non"/>
</abonnement>
</client>
</operateur>
Un opérateur Télécom fournit périodiquement, à l’opérateur de réglementation des
télécoms ANRT un fichier XML qui contient les clients de cet opérateur. Chaque
client possède plusieurs abonnements et chaque abonnement reçoit plusieurs
factures. Un exemple de fichier XML correspondant à ce problème est le suivant :
47. Travail demandé
1.
2.
3.
4.
Faire une représentation graphique de l’arbre XML.
Ecrire une DTD qui permet de valider ce document XML
Créer le fichier XML
Ecrire une feuille de style XSL qui permet de transformer le document
XML en une page HTML qui permet d’afficher pour chaque client la
liste de ses abonnement en affichant le montant total des factures de
chaque abonnement
50. Brahim ER-RAHA
-Attribut ENTITY ou ENTITIES
Les types ENTITY et ENTITIES représentent un nom / une liste de noms d’entités
séparées par des blancs, non-XML précédemment déclarées dans la DTD.
C’est utilisé par exemple pour établir un lien avec une image.
Exemple :
<!ATTLIST image source ENTITY #REQUIRED>
<!ENTITY vacances SYSTEM " plage.gif">
qui sera utilisé dans le document XML : <image source="vacances"/>
-Attributs NMTOKEN ou NMTOKENS
Le type d'attribut NMTOKEN permet d'indiquer que l'attribut de l'élément peut prendre
comme valeur un nom symbolique composé uniquement de caractères
alphanumériques.
Exemple :
<-- Dans une DTD -->
<!ELEMENT livre EMPTY>
<!ATTLIST livre code_editeur NMTOKEN #REQUIRED>
<-- Dans le corps du document -->
<livre code_editeur="G09052" />
51. Brahim ER-RAHA
-Attribut NOTATION
NOTATION signifie que l’attribut attend une notation qui apparaît dans la DTD dans
une déclaration NOTATION Si une liste de valeurs est préfixée par le mot NOTATION
les notations listées comme des valeurs possibles doivent toutes avoir déjà été
déclarées :
Exemple :
<!ATTLIST image type NOTATION(GIF | JPEG | PNG) " GIF ">
4- Déclaration d’entité
Chaque entité XML est définie dans une DTD. Les entités spécifiques au document
sont présentes dans sa DTD interne (images, autres documents non XML,
caractères spécifiques).
Une entité est un alias associant un nom à un groupe de données. Ces données
peuvent prendre un ou plusieurs formats
52. Brahim ER-RAHA
- Entités paramètres
<!ENTITY % nom « chaîne_de_remplacement »>
Ces entités apparaissent uniquement dans les DTD. Ce sont des raccourcis vers des
parties de déclarations de la DTD.
Exemple :
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE article [
<!ENTITY % fich-dtd-1 SYSTEM "fichier-1.dtd">
<!ENTITY % fich-dtd-2 SYSTEM "fichier-2.dtd">
%fich-dtd-1;
%fich-dtd-2;
<!ENTITY % texte "#PCDATA">
<!ELEMENT nom (%texte;)>
<!ELEMENT prénom (%texte;)>
..
]>
53. Brahim ER-RAHA
- Entités caractères
la syntaxe de déclaration est :<!ENTITY nom "&#code;">
Les entités caractères sont des caractères réservés du XML représentés sous forme
d'entités générales afin de pouvoir les insérer dans le document XML. Voici la liste
des entités caractères principales :
Entité caractère Représentation
& &
< <
> >
' '
" "
Il est également possible de définir des entités caractères pour n'importe quel
caractère en utilisant le code hexadécimal du caractère :
<! ENTITY nome "ODEHEXA;">
Par exemple
<! ENTITY ccedille "ç">
<!ENTITY CopieRight "©">
<!ENTITY Delta "δ" >
Dans le document l’appel s’effectue avec &nom;
<code> le petit Delta est : Δ</code>
54. Brahim ER-RAHA
-Entités générales
Les entités générales permettent de définir des éléments pouvant être substitués
dans le corps du document XML (bien qu'ils soient définis au sein de la DTD et non
du document XML lui-même).
La syntaxe d'une entité générale est la suivante :
<! ENTITY nom_de_l_entite "Contenu de l'entite">
Il est par exemple possible de déclarer l'entité générale suivante dans la DTD :
<! ENTITY site "commentcamarche.net">
Les entités définies dans la DTD peuvent ainsi être utilisées dans le code XML en
les appelant avec la syntaxe suivante :
&nom_de_l_entite;
La déclaration précédente pourra donc donner un document XML du style:
<personne>
<nom>Pillou</nom>
<prenom>Jean-Francois</prenom>
<site>&site;</site>
<email>webmaster@&site;</email>
</personne>
55. Brahim ER-RAHA
Entités externes
Les entités générales peuvent aussi être contenues dans un fichier extérieur
(afin d'être utilisé par plusieurs DTD par exemple), on parle alors d'entité externe.
La syntaxe d'une entité externe est la suivante :
<! ENTITY nom_de_l_entite SYSTEM "nom_du_fichier">
Dans l'exemple suivant, le contenu du fichier ccm.txt (situé dans le même
répertoire que la DTD) sera inséré dans le fichier XML à chaque fois que l'entité
&ccm; sera rencontrée :
<! ENTITY ccm SYSTEM "ccm.txt">
Les entités externes représentent des données contenues dans des fichiers
séparés par rapport au document XML.
Analysées
<!ENTITY nom SYSTEM « URL »>
56. Brahim ER-RAHA
<!DOCTYPE book SYSTEM « book.dtd »
[
<!ENTITY toc SYSTEM « toc.xml »>
<!ENTITY chap1 SYSTEM « chapters/c1.xml »>
<!ENTITY chap2 SYSTEM « chapters/c2.xml »>
<!ENTITY index SYSTEM « index.xml »>
]>
<book>
<head>&toc;</head>
<body>
&chap1;
&chap2;
&index;
</body>
</book>
Exemple :
57. Brahim ER-RAHA
Non analysées
La syntaxe de déclaration est :
<!ENTITY nom SYSTEM « URI » NDATA type_notation>
Les entités externes non analysées permettent de déclarer un contenu non XML
dans le document XML (fichiers binaires images, sons...). Ces entités requièrent
en particulier une notation. Une notation identifie le format, ou type, des
ressources auxquelles se réfère l’entité.
Voici un exemple :
<!ENTITY Image SYSTEM « Image02.Gif » NDATA GIF>
Cette déclaration d’entité signifie littéralement, l’entité Image est un fichier binaire
dans la notation GIF. Le mot clé NDATA (Notation DATA) précise le type d’entité
non analysée que le processeur XML doit traiter.
< !NOTATION GIF SYSTEM « /utils/Gifview.exe »>
indique au processeur XML
58. Brahim ER-RAHA
III MODELE SCHAMA XML
Dans le paragraphe précédent nous avons vu la syntaxe et la déclaration d'une DTD
au ceint d'un document XML. Néanmoins, les DTD présentent des inconvénients :
- Ce n'est pas une application XML: il utilise une syntaxe dédiée
- Les types de données sont limités
- Le contrôle du nombre d'occurrences est limité par les opérateurs ?,+,*
- Ils ne tiennent pas compte des espaces de noms (namespaces)
- La modularisation est limitée à la notion d'entité
En remplacement, le consortium W3 a défini la notion de schéma, qui utilise la
notation XML. (2 mai 2001).
Un schéma doit permettre de spécifier le même genre d'information qu'une DTD,
c'est-à-dire la syntaxe d'une classe de documents XML, en définissant les éléments et
attributs ainsi que les contraintes sur les valeurs de ceux-ci.
La validation d'un document XML au moyen d'un schéma englobe :
- La validité du modèle de contenu (structure)
- La validité des types de données
59. Brahim ER-RAHA
Les schémas peuvent être utilisés avec ou sans espace de nom. Sans espace de
nom associé, l'élément racine d'un schéma a la forme suivant :
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
</xs:schema>
l'assignation de ce type de document Schema dans un documnet XMLde racine
Root afin de le valider se fait comme suit :
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="modele.xsd">
</Root>
où modele est le nom du fichier contenant le schéma.
III-1 Syntaxe de Déclaration d'un Schema
1- Sans espace de nom
60. Brahim ER-RAHA
Si un schéma définit un espace de nom, son élément racine définit les attributs
suivants :
-targetNamespace="URI", pour définir l'espace de nom dans lequel le schéma définit
ses éléments
-xmlns="URI", l'espace de nom par défaut (souvent identique à targetNamespace)
-elementFormDefault et attributeFormDefault pour déterminés si les éléments
(resp. les attributs), par défaut, sont qualifiés
l'assignation de ce type de document Schema dans un document XML de racine Root
afin de le valider se fait comme suit :
<Root xmlns="URI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance“
xsi:schemaLocation="URI Modele.xsd">
</Root>
2- Schéma avec espace de nom
62. Brahim ER-RAHA
Les éléments sont les principaux composant d'un document schema.
Un élément ne contenant pas de sous-élément ni d'attribut est considéré
comme étant de type simple (p.ex. <auteur>Bertrand Ibrahim</auteur>).
Un élément contenant soit des sous-éléments (p.ex. <titre> Un journaliste
<souligne> accuse </souligne>, ...</titre>), soit des attributs, ou même les deux
à la fois est considéré de type complexe.
Il y a trois formes de déclaration d'élément
- <xs:element name=" LeNomDeMonElement ">
... simple or complex type definition
</xs:element>
- <xs:element name="LeNomDeMonElement" type="LeTypeDeContenuDeCetElement "/>
-<xs:element ref=" LeNomDeMonElement "/>
Avec name représente le nom de l'élément et type détermine le type de son contenue
III-1 Déclaration des éléments dans un Schema
63. Brahim ER-RAHA
Les éléments peuvent avoir un continue simple de l'un des tes types prédéfinis
suivants :
string, boolean, byte, int, integer, long, float, double, date, time, Name (un nom
conforme à XML), anyURI
Exemple :
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:element name="Prix" type="xs:decimal"/>
</xs:schema>
<Prix xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="C:Untitled2.xsd">192.25</Prix>
----------------------------------------------------------------------------------------------------
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="DateNaissance" type="xs:date"/>
</xs:schema>
<DateNaissance xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="C:Untitled3.xsd">1923-12-05</DateNaissance>
a- Définition des types simples
a-1 Type simple prédéfini
64. Les types simples (1)
string
Confirm this is electric
normalizedString
Confirm this is electric
token
Confirm this is electric
byte
-1, 126
unsignedByte
0, 126
base64Binary
GpM7
hexBinary
0FB7
integer
-126789, -1, 0, 1, 126789
positiveInteger
1, 126789
negativeInteger
-126789, -1
nonNegativeInteger
0, 1, 126789
nonPositiveInteger
-126789, -1, 0
int
-1, 126789675
unsignedInt
0, 1267896754
Schema
67. Brahim ER-RAHA
Les types simples personnalisés peuvent être utilisés soit :
Localement
<xs:element name="myelt">
<xs:simpleType>
definition de type
</xs:simpleType>
</xs:element>
Globalement et réutilisés
<xs:simpleType name="mytype">
definition de type
</xs:simpleType>
La dérivation de ces types à partir des types prédéfinis se fait soit par :
- Restriction (en utilisant des facettes de contrainte)
- List
- Union
- Extension
a-2 Type simple personnalisé (dérivé)
et le déclaration de type dans l'élément se
fait par:
<xs:element name="myelt" type="mytype"/>
68. Brahim ER-RAHA
1- Restriction
Une restriction limite les valeurs possibles d'un type donné (appelé type de base) et est
définie sur certaines propriétés du type de base, appelées facettes de contraintes
dont les valeurs les plus utilisés sont :
-length (longueur de chaîne) ou minLength et maxLength (bornes inf. et sup. de la
langueur)
- pattern (expression régulière)
- enumeration (ens. de valeurs)
- minInclusive, maxInclusive , minExclusive, maxExclusive (bornes des valeurs)
- totalDigits (nombre de chiffres d'un nb. entier)
-fractionalDigits (nombre de chiffres significatifs pour la partie décimale)
la facette pattern permet de contraindre la forme lexicale à l'aide d'une expression
régulière (en perl)
- [abc] désigne les lettres a, b, c
- [a-z] désigne les lettres allant de a à z
- ^[abc] signifie toutes les lettres sauf a, b, c
- E? signifie 0 ou 1 fois
- E* signifie 0 ou plusieurs fois
- E+ signifie 1 ou plusieurs fois
- E{n,m} signifie entre n et m fois
- E{n} signifie exactement n fois
- E|F signifie soit E soit F
- sert de caractère d'échappement
70. Brahim ER-RAHA
2- List
La liste permet de définir un nouveau type à partir d'un type de base, où une valeur du nouveau
type correspond à plusieurs valeurs du type de base séparées par un espace. Exemple :
<xsd:simpleType name="Ville">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Agadir"/>
<xsd:enumeration value="Fes"/>
<xsd:enumeration value="Casa"/>
<xsd:enumeration value="Rabat"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="ListeVille"> <xsd:list
itemType="Ville"/></xsd:simpleType>
<xsd:element name="villes" type="ListeVille"/>
<villes>Agadir </villes>
3- Union
L'union permet de définir un nouveau type incluant toutes les valeurs possibles d'un certain
nombre d'autres types. Par exemple :
<xsd:simpleType name="JourDeSemaine">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="lundi" />
<xsd:enumeration value="mardi" />
<xsd:enumeration value="mercredi" />
<xsd:enumeration value="jeudi" />
<xsd:enumeration value="vendredi" />
<xsd:enumeration value="samedi" />
<xsd:enumeration value="dimanche" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="AbregeSemaine">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="lu" />
<xsd:enumeration value="ma" />
<xsd:enumeration value="me" />
<xsd:enumeration value="je" />
<xsd:enumeration value="ve" />
<xsd:enumeration value="sa" />
<xsd:enumeration value="di" />
</xsd:restriction>
</xsd:simpleType
71. Brahim ER-RAHA
<xsd:simpleType name="JrSemaine">
<xsd:union memberTypes="JourDeSemaine AbregeSemaine" />
</xsd:simpleType>
<xsd:element name="AA" type="JrSemaine"/>
<AA> Lundi lu </AA>
le type JrSemaine ci-dessous est défini à partir des types JourDeSemaine et
AbregeSemaine définis précédemment et correspond à une chaîne de caractères
indiquant un jour de la semaine ou un abrégé de jour de la semaine
4- Extension
Une extension consiste à définir un nouveau type à partir d'un type existant en lui
ajoutant éventuellement des sous-éléments et/ou des attributs. Une extension produit
donc toujours un type complexe. On en verra des exemples plus loin
72. Brahim ER-RAHA
Un type complexe est défini à l'aide de l'élément <xsd:complexType name="..."> qui
pourra contenir, entre autres, une séquence d'éléments, une série d'attributs, etc. On
définit d'abord les sous-éléments, puis les attributs.
Comme les types simples, les types complexe peuvent être utilisés soit:
localement
<xs:element name="myelt">
<xs:complexType>
definition de type
</xs:complexType>
</xs:element>
Un type complexe est définit à l'aide de compositeurs (règles de composition), il existe
trois sortes de compositeurs :
-<xs:sequence> : les sous-éléments énumérés doivent être tous présents dans l'ordre
indiqué
-<xs:choice> : un seul des sous-éléments énumérés doit être présent (exclusion
mutuelle)
-<xs:all> : les sous-éléments énumérés doivent être tous présents au plus une fois,
dans n'importe quel ordre. Les attributs minOccurs et maxOccurs doivent
valoir 0 ou 1.
b- Définition de types complexes
globalement et réutilisés
<xs:complexType name="mytype">
definition de type
</xs:complexType>
<xs:element name="myelt" type="mytype"/>
73. Brahim ER-RAHA
Les attributs minOccurs et maxOccurs contrôlent les occurrences d'apparition
d'un élément, par défaut, minOccurs="1" et maxOccurs="1" et en particulier
minOccurs="0" signifie qu'il est optionnel et maxOccurs="unbouded" signifie qu'il est
répétitif. Ces attributs peuvent être utilisés dans une définition d'élément <element
...> et aussi dans les compositeurs (sequence, choice, all)
b-1 contenu composé uniquement de sous-éléments
Compositeur déclaration du type document XML
valide
sequence <xsd:complexType name="EnteteType" >
<xsd:sequence>
<xsd:element name="titre" type="xsd:string" />
<xsd:element name="auteur" type="xsd:string" />
<xsd:element name="date" type="xsd:string" />
<xsd:element name="lieu" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
<xsd:element name="entete" type="EnteteType" />
<entete>
<titre>...</titre>
<auteur>...</auteur>
<date> …</date>
<lieu>…</lieu>
</entete>
78. Brahim ER-RAHA
<xsd:complexType name="EnteteType" >
<xsd:all minOccurs="1">
<xsd:element name="titre" type="xsd:string" minOccurse="1" />
<xsd:element name="auteur" type="xsd:string" />
</xsd:choice>
</xsd:complexType>
<xsd:element name="entete" type="EnteteType" />
<entete>
<titre>...</titre>
<auteur>...</auteur>
<auteur> …</auteur>
<titre>….</titre>
<auteur>…</auteur>
</entete>
minOccurs ou maxOccurs de et de ses elements n’accepte que 0 ou 1
all
79. Brahim ER-RAHA
b-2 contenu composé uniquement d'attributs (Element vide)
On commence par déclaration du type:
<xsd:complexType name="ImageType">
<xsd:attribute name="src" type="xsd:anyURI" />
</xsd:complexType>
b-3 Exemple de contenu composé d'un contenu simple et d'attributs
Pour indiquer qu'un élément est composé d'un continu simple on utilise
l'élément s:simpleContent avec l'élément de dérivation xs:extension
comme il est monté sur les exemples suivants:
80. Brahim ER-RAHA
Déclaration de type :
<xsd:element name="price">
<xsd:complexType>
<xsd:simpleContent>
<xsd:extension base="xsd:decimal">
<xsd:attribute name="currency" type="xsd:string" />
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>
déclaration d'un élément de ce type:
<xsd:element name="prix" type="PrixType" />
utilisation de l'élément dans un document XML:
<prix currency="EUR">423.46</prix>
81. Brahim ER-RAHA
déclaration du type :
<xsd:simpleType name="NombreDeuxDecimales">
<xsd:restriction base="xsd:decimal">
<xsd:fractionDigits value="2"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:complexType name="PrixType">
<xsd:simpleContent>
<xsd:extension base="NombreDeuxDecimales">
<xsd:attribute name="monaie" type="xsd:string" />
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
déclaration d'un élément de ce type:
<xsd:element name="prix" type="PrixType" />
utilisation de l'élément dans un document XML:
<prix monaie="CHF">3.50</prix>
82. Brahim ER-RAHA
b-4 Exemple de contenu composé de caractères et de sous-éléments (utilisation
de l'attribut mixed="true")
Pour indiquer qu'un élément est d'un continu composé on utilise l'attribut mixed="true"
de l' élément xs:complexType.
déclaration du type :
<xsd:complexType name="TexteType" mixed="true">
<xsd:sequence>
<xsd:element name="grand" type="xsd:string" minOccurs="0" maxOccurs="unbounded" />
</xsd:sequence>
</xsd:complexType>
déclaration d'un élément de ce type :
<xsd:element name="texte" type="TexteType" />
De par l'attribut mixed de l'élément xsd:complexType, l'élément texte pourra contenir du
texte aussi bien qu'un nombre indéterminé de sous-éléments grand. De par sa
déclaration, l'élément grand ne peut contenir que du texte simple.
83. Brahim ER-RAHA
Pour illustrer la définition d'attributs, reprenons l'exemple suivant :
<article titre="Un journaliste accuse, un policier dément" auteur="Alain Connu"
date="14 juin 1972" lieu="banquise">...</article>
Le schéma correspondant serait :
<xsd:element name="article" >
<xsd:complexType>
... <!-- les attributs doivent être déclaré après les sous-éléments -->
<xsd:attribute name="titre" type="xsd:string" />
<xsd:attribute name="auteur" type="xsd:string" use="required" />
<xsd:attribute name="date" type="xsd:date" use="required" />
<xsd:attribute name="lieu" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
Dans une déclaration d'attribut, l'attribut use peut prendre les valeurs suivantes
c-Définitions d'attributs dans un type complexe
valeur de l'attribut use signification
prohibited l'attribut ainsi défini ne doit pas apparaître
optional l'attribut peut apparaître au plus une fois
required l'attribut doit apparaître
84. Brahim ER-RAHA
Si l'attribut use n'est pas utilisé, la valeur par défaut est optional.
fixed et default ne peuvent pas être utilisés simultanément
d- Définition de groupes d'attributs
Les groupes d'attributs permettent de regrouper plusieurs déclarations d'attributs, la syntaxe
d'utilisation est :
<xs:attributeGroup name="N1" ...>
définition des attributs
</xs:attributeGroup>
Ensuite, ils peuvent être utilisés ensemble
<xs:attributeGroup ref="N1"/>
Exemple: groupe d'attributs
<xs:attributeGroup name="books">
<xs:attribute name="pubisher" type="xs:string">
<xs:attribute name="isbn" type="xs:string">
</xs:attributeGroup>
autres attributs signification
fixed
si l'attribut ainsi défini est présent dans la balise, il ne peut prendre que la valeur associée à
fixed. Exemple:
<xsd:attribute name="..." type="xsd:decimal" fixed="0" />
default
l'attribut peut ne pas être défini, auquel cas il prendra une valeur par défaut. Exemple:
<xsd:attribute name="..." type="xsd:decimal" default="10" />
<xs:element ...>
<xs:attributeGroup ref="books">
</xs:element>
85. Brahim ER-RAHA
e- Annotations
Les annotations <xs:annotation> permettent d'ajouter des informations pour :
- l'utilisateur (humain) <xs:documentation>
- une application (machine) <xs:appInfo>
f- Définition de groupes modèles
Les groupes modèles permettent de définir des composants de schéma, la syntaxe
d'utilisation est :
<xs:group name="myGroup">
... composition
</xs:group>
et de les réutiliser comme suis :
<xs:complexType>
<xs:group ref="myGroup">
</xs:complexType>
86. Application
Un service d’envoi des mandats établit
mensuellement un rapport qui contient
les mandats envoyés. Chaque mandat
concerne un expéditeur et un
destinataire. L’expéditeur est défini par
son cin, son nom, son prénom et sa ville.
Le destinataire est défini également par
son cin, son nom, son prénom et sa ville.
87. Application
Un exemple de fichier XML correspondant à ce problème est le suivant :
<?xml version="1.0" encoding="UTF-8"?>
<rapport>
<mandat num="7124536" date="2007-1-1" montant="1000" etat="reçu">
<expediteur cin="A123245" nom="slimani" prenom="youssef" ville="casa"/>
<destinataire cin="P98654" nom="hassouni" prenom="laila" ville="fes"/>
</mandat>
<mandat num="7124537" date="2007-1-1" montant="3200" etat="non reçu">
<expediteur cin="M123245" nom="alaoui" prenom="mohamed" ville="marra
<destinataire cin="M92654" nom="alaoui" prenom="imane" ville="casa"/>
</mandat>
<mandat num="7124538" date="2007-1-2" montant="500" etat="reçu">
<expediteur cin="H123222" nom="qasmi" prenom="slim" ville="oujda"/>
<destinataire cin="B91154" nom="qasmi" prenom="hassan" ville="rabat"/>
</mandat>
</rapport>
88. Travail à faire
Faire une représentation graphique de l’arbre XML
Ecrire une DTD qui permet de déclarer la structure du document XML
Ecrire le schéma XML qui permet de déclarer la structure du document
XML
Créer le fichier XML valide respectant ce schéma.
Ecrire une feuille de style XSL qui permet de transformer le document
XML en document HTML suivant :
92. Brahim ER-RAHA
L’utilisation d’une feuille de style est obligatoire en XML pour contrôler la mise en page
du document, en effet un document XML ne contient que des informations sur la
structure, aucune information relative à la mise en page n’apparaît dans le document.
Il est possible d’utiliser pour présenter un document XML les feuilles de style CSS ou
les feuilles de style XSL (eXtensible StylesheetLanguage). Ces dernières sont issues
de DSSSL (Document Style Semantics and Specification Language) la norme
internationale ISO 10179 de feuilles de style pour les documents SGML
A l'heure actuelle il existe trois solutions pour mettre en forme un document XML :
CSS (Cascading StyleSheet), la solution la plus utilisée actuellement, étant donné qu'il
s'agit d'un standard qui a déjà fait ses preuves avec HTML
XSL (eXtensible StyleSheet Language), un langage de feuilles de style extensible
développé spécialement pour XML. Toutefois, ce nouveau langage n'est
pas reconnu pour l'instant comme un standard officiel
XSLT (eXtensible StyleSheet Language Transformation). Il s'agit d'une
recommandation W3C du 16 novembre 1999, permettant de transformer
un document XML en document HTML accompagné de feuilles de style
IV- Mise en page d'un document XML
93. Brahim ER-RAHA
Les cascading style sheets ont été initialement conçues pour le langage HTML. La
première version du standard, dite CSS niveau 1, a été publiée en 1996. En mai 1998,
le consortium W3 a publié une nouvelle version dite CSS niveau 2 qui introduit des
possibilités nouvelles par rapport a CSS-1.
CSS est un mécanisme puissant et relativement complexe et on a plusieurs manières
de procéder :
1- En incluant en-tête de page HTML les styles que l'on souhaite employer dans la
page en question.
2- En écrivant une feuille de style dans un fichier séparé. Et Cette seconde solution
est celle qui a été retenue pour l'utilisation avec XML
IV-1 feuilles de style CSS.
Cela s'écrit de la façon suivante :
<?xml version='1.0'?>
<?xml-stylesheet href="FeuilleDeStyle.css" type="text/css" ?>
94. Brahim ER-RAHA
Une feuille de style CSS se compose de règles de style qui s'appliquent à un ou
plusieurs éléments du document traité, voire à une partie seulement d'un élément
(première ligne ou première lettre). Chaque règle est composée d'un sélecteur qui
indique quels sont les éléments auxquels elle s'applique, et d'une ou plusieurs
propriétés qui décrivent les conditions de rendu physique de cet élément.
Syntaxiquement, une règle se présente ainsi :
Sélecteur {propriété:valeur; propriété:valeur}
Le nombre de couples "proriété-valeur" contenus dans la régle n'est pas limité. Une
règle très simple pour définir le formatage des éléments titre peut s'écrire :
Titre { font-weight:bold;
Font-size:14pt;
Font-family:Garamond;
Font-style: normal}
Des règles de style alternatives peuvent être définies pour un même élément en fonction
*de type de média visé. Par exemple, une feuille de style spécifiera que le contenu des
éléments titre doit être réalisé en police Garmond 10 points pour le type média Print, et
en police Arial 12 points pour le type de media Screen.
Toutes les feuilles de style CSS sont insensibles à la casse
1- Principe de base
95. Brahim ER-RAHA
Pour chaque propriété définie pour un élément, il est possible d’indiquer si sa valeur
doit être héritée par les éléments descendants du premier. Soit par exemple un
document dont l’élément racine est article, la règle suivante :
Article {background : yellow}
Réalisera tous les éléments du document sur fond jaune, sauf ceux pour les quels
une règles plus spécifique serait indiquée dans la suite de la feuille de style.
Exemple, cette feuille de style :
Article { font-size: 10pt } titre { font-size: 120% }
et cet extrait d'un document :
<Article> <Titre>Un <EM>grand</EM> titre</Titre></Article>
Ici, la propriété 'font-size' de l'élément Titre aura une valeur calculée de '12pt' (120%
de la valeur de son parent). Et, comme la valeur de la propriété 'font-size' est héritée,
la valeur calculée pour l'élément EM sera aussi '12pt'.
Quelque fois, on utilise la valeur Inherit qui signifie que pour un élément donné, la
propriété de cet élément prend la même valeur calculée que pour celle de son parent.
La valeur héritée qui est normalement utilisée comme une valeur refuge, peut être
renforcée par une valeur 'inherit' explicite.
2-Héritage
96. Brahim ER-RAHA
La règle '@import', placée impérativement en tête de la feuille de style avant toute
règle de formatage, permet aux utilisateurs l'importation de règles de style à partir
d'une autre feuille de style. Le mot-clé '@import' doit être suivi de l'URI de la feuille de
style à intégrer.
Les lignes suivantes ont une signification équivalente et illustrent les deux syntaxes
(celle avec "url()" et celle avec une simple chaîne) :
@import "mystyle.css";
ou @import url("mystyle.css");
@import “http://foo.bar.org/somestyle.css”;
Les feuilles de styles importées et enveloppées dans une règle @media produiraient
les mêmes effets, avec ce média, que les feuilles de style suivantes,
@import url("fineprint.css") print;
@import url("bluish.css") screen, tv;
Si le type de média n'est pas précisé, l'import est inconditionnel. De même, si on
spécifie le type de média 'all'
3- Importation des règles
97. Brahim ER-RAHA
Toute règle peut se voir affecter un niveau de priorité parmi deux valeurs possibles.
Par défaut, elles ont toutes le niveau « normale ». Une règle dont on souhaite
quelle ait priorité sur une autre règle concurrente peut avoir le niveau important.
Cela s’indique de la façon suivante :
Sélecteur {propriété : valeur !important}
Lorsque plusieurs règles s’appliquent à un élément si l’une d’entre elle est spécifiée
avec l’indicateur !important elle a priorité sur une règle normale.
En fin, les règles importées par @import participent aussi à la cascade des
propriétés : à niveau d’importance égale, les règles locales définies dans la feuille
de style ont la priorité sur les règles importés.
4- La cascade
98. Brahim ER-RAHA
Exemple :
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/css" href="css.css"?>
<ARTICLE> voila un exemple d’article
<HEADLINE>La rencontre de Frédéric le Grand et de Bach</HEADLINE>
<AUTHOR>Johann Nikolaus Forkel</AUTHOR>
<PARA>
Un soir, alors qu'il préparait sa
<INSTRUMENT>flûte</INSTRUMENT> et que ses
musiciens étaient réunis, un officier lui apporta
la liste des étrangers qui venaient d'arriver.
</PARA>
</ARTICLE>
Fichier css.css
@import url("im.css");
article {
color: #ff45ee;
background: green !important;
}
Fichier im.css
article {
color: red !important;
background: yellow ;
}
99. Brahim ER-RAHA
4- Types Médias
Une des fonctions primordiales des feuilles de style repose sur le fait de pouvoir
spécifier comment représenter un document (réalisation physique d’un document) pour
différents médias : un écran, une feuille de papier, un synthétiseur de parole, un appareil
(TV). Pour spécifier les règles propres à chaque type de media, trois méthodes
complémentaires sont possibles.
La première consiste à réaliser une feuille de style différente par type de média visé.
La seconde méthode consiste à déclarer les différentes règles dans une même
feuille en les regroupant dans des sections spécifiques
@media print { article { font-size: 10pt }
@media screen { article { font-size: 12pt } }
@media screen, print { article { line-height: 1.2 } }
La troisième méthode consiste à réaliser une feuille de style différente
contenant les déclarations propres à chaque style, et à réaliser en outre une
feuille de style contenant les règles communes à l’ensemble des médias visés.
Plus des règles d’importation des feuilles spécifiques ; en indiquant à quels types
de médias elles correspondent.
100. Brahim ER-RAHA
Les types de médias reconnus sont :
All : convient pour tous les appareils ;
Aural : destiné aux synthétiseurs de parole.
Handheld : destiné aux appareils portatifs (typiquement ceux avec petits
écrans, monochromes et à bande passante limitée).
Print : destiné à un support paginé opaque et aux documents vus sur
écran en mode aperçu avant impression.
Projection : destiné aux présentations en projection, par exemple avec
des projecteurs ou des impressions pour des transparents
screen : destiné principalement aux moniteurs couleurs.
tv : destiné aux appareils du type télévision (avec ces caractéristiques :
basse résolution, couleur, défilement des pages limité, sonorisé).
@import “style-papier.css” print;
@import “style-papier.css” screen ;
@media screen, print { ici les régles valides pour les deux types }
101. Brahim ER-RAHA
5- Les commentaires
Dans les feuilles de style les commentaires sont de la même façons que dans les
langages de programmation C ou Java.
Syntaxe est /* Ecrire Commentaire */
Exemple :
@media print {titre { color:red;font-size: 10pt } /*la couleur de contenu est rouge ici*/
@media screen {titre{ color:green;font-size:12pt }/* la couleur de contenu est vert ici*/
102. Brahim ER-RAHA
Motif Signification Décrit au chapitre...
* Correspond à tout élément. Sélecteur universel
E Correspond à tout élément E (c.à.d., un élément de type E). Sélecteurs de type
E F Correspond à tout élément F qui est un descendant de l'élément E. Sélecteurs descendants
E > F Correspond à tout élément F aussi un enfant de l'élément E. Sélecteurs d'enfant
E:first-child
Correspond à un élément E aussi le premier enfant de son élément
parent.
La pseudo-classe :first-
child
E,F,G Groupement des éléments F, E et G Sélecteurs de type
E:lang(c)
Correspond à l'élément de type E qui emploie une langue c (la
détermination de cette langue est spécifique au langage du
document).
La pseudo-classe :lang()
E + F
Correspond à tout élément F immédiatement précédé par un élément
E.
Les sélecteurs adjacents
E[foo]
Correspond à tout élément E avec l'attribut "foo" (quelles qu'en
soient les valeurs).
Sélecteurs d'attribut
E[foo="warni
ng"]
Correspond à tout élément E dont l'attribut "foo" a exactement la
valeur "warning".
Sélecteurs d'attribut
E[foo~="warn
ing"]
Correspond à tout élément E dont l'attribut "foo" a pour valeur une
liste de valeurs séparées par des blancs et dont une de celles-ci est
"warning".
Sélecteurs d'attribut
E[lang|="en"]
Correspond à tout élément E dont l'attribut "lang" a pour valeur une
liste de valeurs séparées par des tirets, cette liste commençant (à
gauche) par "en".
Sélecteurs d'attribut
6- Sélecteurs d’éléments : Les sélecteurs d’éléments disponibles en CSS sont :
103. Brahim ER-RAHA
-Pa > el [att= "foo "] {propriété : valeur} sélectionne tout élément el ayant
l’attribut att= "foo ", et fils d’un élément pa.
- pa [att="bar"]>* {propriété : valeur}sélectionne n'importe quel élément (*), fils
d'un élément pa, et doté de l'attribut att="bar".
Exemple :
7- Propriétés
7-1 Dimension
Lorsque on exprime la dimension (hauteur, largeur, épaisseur, distance) d'une
propriété, celle-ci est généralement indiquer à l'aide d'une unités absolues ou
relatives:
Les unités absolues sont :
- in : pouce, soit 2,54 cm
- cm : centimètre
- mm : millimètre
- pt : point typographique
- pc : pica (=12 points)
Les unités relatives sont :
- em : égale à la taille de la police courante.
- ex : égale à la hauteur de glyphe dans la police
courante
104. Brahim ER-RAHA
7-2 Couleur
Les propriétés CSS permettent aux auteurs la spécification d'une couleur d'avant-
plan et d'arrière-plan pour un élément.
La couleur d'avant-plan : la propriété ‘color’
Cette propriété décrit la couleur d'avant-plan du contenu de texte d'un
élément. Voici plusieurs façons d'indiquer la couleur rouge :
EM { color: red } /* nom de couleur prédéfini */
EM { color: rgb(255,0,0) } /* couleurs en RGB allant de 0 à 255 */
EM { color: #FF0000 } /* couleurs en code héxadécimal */
L'arrière-plan
Les propriétés d'arrière-plan :
'background-color', : mettre une couleur en arrière plan
'background-image' : ajouter une image en arrière plan
105. Brahim ER-RAHA
'background-repeat' : Quand on spécifie une image d'arrière-plan, cette propriété
indique si l'image est répétée (apposée) et la manière de la répétition. Les
significations des valeurs sont :
repeat : L'image se répète à la fois horizontalement et verticalement ;
repeat-x : L'image ne se répète qu'horizontalement ;
repeat-y : L'image ne se répète que verticalement ;
no-repeat : L'image ne se répète pas : un seul exemplaire de celle-ci est dessiné
'background-attachment' : Quand on spécifie une image d'arrière-plan, cette
propriété indique si l'image est fixe par rapport à la zone de visualisation (pour la
valeur 'fixed'), ou si celle-ci défile en même temps que le document (pour la valeur
'scroll')
'background-position' : Quand on spécifie une image d'arrière-plan, cette propriété
indique la position initiale de celle-ci. Les valeurs de cette propriété sont :
top left et left top
Identique à '0% 0%' ;
top, top center et center top
Identique à '50% 0%';
right top et top right
Identique à '100% 0%' ;
bottom left et left bottom
Identique à '0% 100%' ;
bottom, bottom center et center bottom
Identique à '50% 100%'
left, left center et center left
Identique à '0% 50%' ;
center et center center
Identique à '50% 50%' ;
right, right center et center right
Identique à '100% 50%' ;
106. Brahim ER-RAHA
7-3 Police
Les propriétés de police de CSS décrivent l'apparence souhaitée pour le texte dans le
document, on distingue :
famille de polices : la propriété 'font-family' : cette propriété donne une liste, par
ordre de priorité, de noms de familles de polices, exemple :
BODY { font-family: Baskerville, "Heisi Mincho W3", Symbol, serif }
La police "Baskerville" va fournir les glyphes pour les caractères latins, la police "Heisi
Mincho W3", ceux pour les caractères japonais, la police "Symbol", ceux pour les
symboles mathématiques, et la famille de polices générique 'serif', ceux éventuels
d'autres caractères.
style de police : pour déterminer le style de police, on utilise 3 propriétés :
font-style : La propriété 'font-style' sélectionne, parmi les polices d'une famille de
polices, celles avec un dessin normal, italique et oblique.
font-variant : qui prend deux valeurs normal ou small-caps (lettre en petit
majiscule)
font-weight : La propriété 'font-weight' spécifie la graisse de la police. Les
significations des valeurs sont : Normal et bold
taille de police : la propriété utilisé et font-size ces valeurs sont : xx-small | x-
small | small | medium | large | x-large | xx-large ou directemet
par une valeur réelle comme 12 pt.
107. Brahim ER-RAHA
7-4 Formatage de texte
word-spacing : espacement entre les mots (en pt)
letter- spacing:espacement entre les lettres (en pt)
text-decoration: {none, underline, overline, blink} blink : le text clignote
vertical-align: ajuster l'alignement vertical d'un élément
text-transform : {u uppercase, l lowercase}
text-align : { left, right, center, j justify}
text-indent : fixe l'indentation de la première ligne d'un bloc de texte
7-5 modèle de boite
La mise en boite de continue d'un élément se fait par la propriété Display, ces
valeurs sont : Block : boite de type bloc
Inline : boite en ligne
- width : la largeur de bloc
- height : la hauteur de bloc
-margin-top, margin-right, margin-left, margin-bottom : définissent les largeurs
des quatre marges.
-padding, padding-top,…, padding-bottom : déterminent les épaisseurs des
quatres cotés de la boite.
- Border-width, border-top-width,.. : définissent l'épaisseur de la bordure.
- Border-color, Border-top-color,… : définissent la couleur de la bordure
-Border-style, Border-top-style,... : none, hidden, dotted, deshed, solid, double,
ridge (effet de relief)
108. Brahim ER-RAHA
eXtensible Stylesheet Language est un langage construit sur des principes
profondément différents de ceux de CSS et il offre par rapport à ce formalisme
des possibilités nouvelles très puissantes. XSL procède par reconstruction d'un
arbre à partir de l'arbre XML. Ce nouvel arbre peut avoir un ordre différent de
l'arbre source et de nouveaux éléments peuvent y être introduit. Des traitements
spécifiques peuvent même être mis en place au moment de sa construction.
XSL est donc un langage de feuille de style avec des possibilités de traitement
assez puissantes.
Le langage XSL se divise en deux parties :
1- XSLT (eXtensible Stylesheet Language Transformation) il permet de
transformer un document XML en un autre document XML (HTML, xHTML,
WML, SVG, SMIL,…), par défault, cette transformation produit un document
HTML bien formés.
2- XSL FO (Formatting Objects) c'est un langage de mise en page, il permet de
transformer un document XML en document non XML par exemple : PDF,
PostScript, RTF, Doc, text,…
IV-1 feuilles de style XSL
109. Brahim ER-RAHA
1-1 Association d'une feuille XSL à un document XML
Une feuille de style XSL (enregistré dans un fichier dont l'extension est .xsl) peut
être liée à un document XML (de telle manière à ce que le document XML utilise la
feuille XSL) en insérant la balise suivante au début du document XML :
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet href="fichier.xsl" type="text/xsl"?>
Cette dernière instruction de traitement indique le type de la feuille de style et son
emplacement.
1- Langage XSLT
Voir le dossier TestXSLT…
110. Brahim ER-RAHA
XSLT est une application XML, une feuille de style XSL est donc un document
XML. La feuille de style contient donc une déclaration XML et tous ses
éléments sont placés dans l’élément racine <xsl:stylesheet>. D’autre part, les
éléments XSL sont préfixés par xsl : qui fait référence à deux types de
domaines de nom :
- http://www.w3.org/TR/WD-xsl
-http://www.w3.org/1999/XSL/Transform
Exemple :
<?xml version="1.0" encoding="ISO-8859-1">
<xsl:stylesheet>
<xsl:template ... >
<!-- traitements à effectuer -->
</xsl:template >
</xsl:stylesheet>
L’élément racine contient principalement des balises xsl:template (modèle de
transformation) définissant les transformations à faire subir à certains éléments
du document XML
1-2 Structure d’une feuille de style XSLT
111. Brahim ER-RAHA
Une feuille de styles XSL contient un ou plusieurs modèles (templates), chaque
modèle contient des informations sur l’affichage d’une branche des éléments du
document.
I-3 Modèle unique pour un document XML
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl"
href="biblio.xsl" ?>
<bibliotheque>
<livre>
<titre>N ou M</titre>
<auteur>Agatha Christie</auteur>
<ref>Policier-C-15</ref>
</livre>
<livre>
<titre>Le chien des Baskerville</titre>
<auteur>Sir Arthur Conan Doyle</auteur>
<ref>Policier-D-3</ref>
</livre>
<livre>
<titre>Dune</titre>
<auteur>Franck Heckbert</auteur>
<ref>Fiction-H-1</ref>
</livre>
</bibliotheque>
<?xml version= “1.0 “?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XS
L/Transform">
<xsl:template match="/">
<H2>Bibliotheque</H2>
<xsl:for-each
select="bibliotheque/livre">
<P style="font-style:italic">
<xsl:value-of select="titre"/>
</P>
<P style="color:red">
<xsl:value-of select="auteur"/>
</P>
<P style="color:blue">
<xsl:value-of select="ref"/>
</P>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
112. Brahim ER-RAHA
Le modèle est appliqué à la branche spécifiée par l’attribut match de l’élément
template.
La transformation d’un document XML par une feuille de style XSL s’effectue donc
par un modèle traitant un nœud donné. Chaque modèle est divisé en deux parties :
un nœud cible indiqué par l’attribut match et une action sur le nœud :
<xsl:template match="noed_cible">
action
</xsl:template>
L'attribut "match" de la balise <xsl:template> permet de définir (grâce à la notation
XPath) le ou les éléments du document XML sur lesquels s'applique la
transformation.
La notation Xpath permet de définir des patterns, c'est-à-dire des chaînes de
caractères permettant de repérer un nœud dans le document XML.
115. Brahim ER-RAHA
Le langage XPath est un standard du W3C pour décrire des "patterns"
(localisation de nœud) et extraire des valeurs de l'arbre du document XML. Il sert
en fait 2 autres "standards" XML :
XSLT : partie de XSL, ensemble de règles de transformation d'un document XML
vers un autre document.
XPointer : mécanisme de pointage pour les liens XLink de XML.
Un sélecteur de nœud (XPATH) est formée de trois parties :
<xsl:template match="//nom[position()=1]">
• un axe : il permet de se déplacer dans l'arbre du document
• un test : il permet de sélectionner un nœud
• un prédicat (entre crochets [xx]): il effectue une opération booléenne sur le
nœud sélectionné.
Considérons l'exemple suivant: (Fichier atome.xml)
a- Langage Xpath
117. Brahim ER-RAHA
Axes
Les axes décrivent les directions des chemins dans une arborescence, ils ont deux
allure identique :
1- Syntaxe Xpath (notation étendue) : racine, parent, nœud courant, descendant,
les axes s'utilisent ainsi : axe :: test
Supposons que le nœud courant soit <famille type="gaz rare">
• ancestor:: tous les nœuds parent de la branche du nœud courant
• ancestor-or-self:: tous les nœuds parent de la branche du nœud courant et la
branche en cours
• child:: les nœuds fils
• descendant:: les descendant du nœud courant
• descendant-or-self:: les descendant du nœud courant et le nœud courant
• following:: tous les nœuds suivant le nœud courant dans le document
• following-sibling:: sélectionne les nœuds frères du nœud courant se trouvant
après ce nœud courant
• parent:: parent de noeud courant
• preceding:: tous les nœuds précédent le nœud courant dans le document.
• preceding-sibling:: sélectionne les nœuds frères du nœud courant se trouvant
avant ce nœud courant
• self:: le nœud courant
• following :: parent :: tous les nœuds suivants le nœud parent du nœud
courant
119. Brahim ER-RAHA
2- Syntaxe Simple
Supposons que le nœud courant soit <famille type="gaz rare">
/ ou /classification_atomique sélectionne l'élément racine du document, donc
<classification_atomique>
/ classification_atomique /famille sélectionne les éléments famille fils de l'élément
racine
./atome ou atome sélectionne les éléments atome fils du nœud courant.
atome/nom sélectionne les éléments nom fils d'un élément atome fils du nœud
courant
.. sélectionne l'élément père, donc <classification_atomique>
../famille sélectionne les éléments famille fils du père du nœud courant
//atome sélectionne les éléments atome descendant de l'élément racine
.//nom sélectionne les éléments nom descendant du nœud courant
* sélectionne tous les éléments fils du nœud courant
atome/* sélectionne tous les éléments fils d'un élément atome fils du nœud courant
@type sélectionne l'attribut type du nœud courant
/famille/@type sélectionne l'attribut type des éléments famille fils de l'élément
racine
@* sélectionne tous les attributs du nœud courant
./atome | .//nom union des 2 sélections
atome/node() sélectionne tous les nœuds (pas uniquement les nœuds éléments)
fils d'un élément atome fils du nœud courant
comment() tous les nœuds commentaire du nœud courant
120. Brahim ER-RAHA
Test
Il permet de déterminer dans un chemin Xpath le nom ou et le type de nœud
sélectionné. Exemple :
nom d’élément: film
nom d’attribut: @titre
type de nœud:
– nœuds: node() (pas de sélection).
– éléments: *,
– attributs: @*,
– nœuds de type texte (PCDATA): texte():
commentaires: comment()
121. Brahim ER-RAHA
Prédicat
Les prédicats sont utilisés dans les tests de XSLT. De plus, l'ensemble des nœuds
obtenus par un chemin XPtah peut être filtré à l'aide de prédicats entre crochets [].
Supposons que le nœud courant soit <famille type="gaz rare">
./atome[3] sélectionne le 3ème élément atome fils du nœud courant
./atome[position()=3] sélectionne l'élément atome fils du nœud courant dont le
position est en 3ème place.
atome[last()] sélectionne le dernier élément atome fils du nœud courant
atome[numero!=4] sélectionne les éléments atome fils du nœud courant dont le
numéro est différent de 4
atome[numero >= 4] Remarquons qu'il faut utiliser < (respectivement >) à la
place de < (resp. >) dans les documents XML
following-sibling :: .[@type="non métal"] sélectionne les nœuds frère (suivant dans
le document) du nœud courant dont l'attribut type vaut "non métal"
atome[masse mod 2 =1] sélectionne les éléments atome fils du nœud courant dont la
masse est impair.
122. Brahim ER-RAHA
../famille[(@type="non métal") and (atome/masse > 34)] sélectionne les nœuds
famille fils du père du nœud courant dont l'attribut type vaut "non
métal" et dont l'un des fils atome a un fils masse dont le
contenu est > à 34.
../famille[@type="non métal"]/atome[masse > 34] sélectionne les nœuds atome,
ayant un fils masse dont le contenu est > à 34, et qui sont fils de nœud
famille fils du nœud racine dont l'attribut type vaut "non métal".
/famille/atome[3] [masse > 34] sélectionne parmi les 3ème éléments atome des fils
famille du nœud racine ceux dont la masse est > à 34
/famille/atome[masse > 34] [3] sélectionne le 3ème élément parmi les atomes,
dont la masse est > à 34, des fils famille du nœud racine
/famille[count(atome[masse > 34]) != 0] sélectionne les nœuds famille du nœud
racine ayant au moins un fils atome de masse > à 34
/famille[not(contains(@type, 'gaz'))] sélectionne les nœuds famille du nœud racine
ayant un attribut type qui ne comporte pas la chaine 'gaz'
opérateurs : and, or, *, +, -, /, mod
fonctions numériques : number, sum, floor, ceiling, round
fonctions booléennes : not, lang
125. Brahim ER-RAHA
3- /AAA/DDD/BBB : Sélectionne tous les éléments BBB qui sont enfants de DDD, qui
sont enfants de l'élément racine AAA
<AAA>
<BBB/>
<CCC/>
<BBB/>
<BBB/>
<DDD>
<BBB/>
</DDD>
<CCC/>
</AAA>
4- //BBB : Sélectionne tous les éléments BBB
<AAA>
<BBB/>
<CCC/>
<BBB/>
<DDD>
<BBB/>
</DDD>
<CCC>
<DDD>
<BBB/>
<BBB/>
</DDD>
</CCC>
</AAA>
126. Brahim ER-RAHA
5- //DDD/BBB :Sélectionne tous les éléments BBB qui sont enfants de DDD
<AAA>
<BBB/>
<CCC/>
<BBB/>
<DDD>
<BBB/>
</DDD>
<CCC>
<DDD>
<BBB/>
<BBB/>
</DDD>
</CCC>
</AAA>
6- /AAA/CCC/DDD/* : Sélectionne tous les éléments inclus dans les éléments
/AAA/CCC/DDD
128. Brahim ER-RAHA
7- /AAA/BBB[1] : Sélectionne le premier élément BBB, fils de l'élément racine AAA
<AAA>
<BBB/>
<BBB/>
<BBB/>
<BBB/>
</AAA>
8- /AAA/BBB[last()] : Sélectionne le dernier élément :BBB, fils de l'élément racine
AAA
<AAA>
<BBB/>
<BBB/>
<BBB/>
<BBB/>
</AAA>
9- //@id : Sélectionne tous les attributs id
<AAA>
<BBB id = "b1"/>
<BBB id = "b2"/>
<BBB name = "bbb"/>
<BBB/>
</AAA>
129. Brahim ER-RAHA
10- //BBB[@id] : Sélectionne tous les BBB qui ont un attribut id
<AAA>
<BBB id = "b1"/>
<BBB id = "b2"/>
<BBB name = "bbb"/>
<BBB/>
</AAA>
10- //BBB[@name] Sélectionne tous BBB qui ont un attribut name
<AAA>
<BBB id = "b1"/>
<BBB id = "b2"/>
<BBB name = "bbb"/>
<BBB/>
</AAA>
11- //BBB[@*] Sélectionne tous BBB qui ont un attribut
<AAA>
<BBB id = "b1"/>
<BBB id = "b2"/>
<BBB name = "bbb"/>
<BBB/>
</AAA>
12- //BBB[not(@*)] :Sélectionne
Tous les BBB qui n'ont pas d'attribut
<AAA>
<BBB id = "b1"/>
<BBB id = "b2"/>
<BBB name = "bbb"/>
<BBB/>
</AAA>
130. Brahim ER-RAHA
13- //BBB[@id='b1'] :Sélectionne tous les éléments BBB ayant un attribut id dont la
valeur est b1
<AAA>
<BBB id = "b1"/>
<BBB name = " bbb "/>
<BBB name = "bbb"/>
</AAA>
14- //BBB[@name='bbb'] : Sélectionne tous les éléments BBB ayant un attribut name
dont la valeur est bbb
<AAA>
<BBB id = "b1"/>
<BBB name = " bbb "/>
<BBB name = "bbb"/>
</AAA>
15- //BBB[normalize-space(@name)='bbb'] :Sélectionne tous les éléments BBB
ayant un attribut name dont la valeur est bbb. Les espaces de début et de fin sont
supprimés avant la comparaison
<AAA>
<BBB id = "b1"/>
<BBB name = " bbb "/>
<BBB name = "bbb"/>
</AAA>
131. Brahim ER-RAHA
16- //*[count(BBB)=2]
Sélectionne les éléments ayant deux enfants BBB
<AAA>
<CCC>
<BBB/>
<BBB/>
<BBB/>
</CCC>
<DDD>
<BBB/>
<BBB/>
</DDD>
<EEE>
<CCC/>
<DDD/>
</EEE>
</AAA>
17- //*[count(*)=2] : Sélectionne les éléments ayant
deux enfants
<AAA>
<CCC>
<BBB/>
<BBB/>
<BBB/>
</CCC>
<DDD>
<BBB/>
<BBB/>
</DDD>
<EEE>
<CCC/>
<DDD/>
</EEE>
</AAA>