SlideShare une entreprise Scribd logo
1  sur  376
Cours XML
Brahim ER-RAHA
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
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
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!
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>
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 :
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 :
Brahim ER-RAHA
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 )
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/)
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.
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
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
É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)
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 ?
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
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 ?
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 :
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.
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
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
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
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
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
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.
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
Brahim ER-RAHA
exemple :
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
Exemple de document XML
<?xml version="1.0" encoding="UTF-8"?>
<biblio>
<etudiant code="1" nom="A" prenom="B" age="23">
<livre id="534" titre="java" datePret="2006-11-12" rendu="oui"/>
<livre id="634" titre="XML" datePret="2006-11-13" rendu="non"/>
</etudiant>
<etudiant code="2" nom="C" prenom="D" age="22">
<livre id="33" titre="E-Commerce" datePret="2006-1-12" rendu="non"/>
</etudiant>
</biblio> biblio
+ etudiant
@code
@nom
@prenom
@age
+ livre
@id
@titre
@datePret
@rendu
Biblio
Etudiant Etudiant Etudiant
livre livre livre
Représentation graphique de l’arbre XML
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.
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.
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
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>
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
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 &#38; ou &#x2267; 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 «
&lt; <
&gt; >
&amp; &
&apos; ‘
&quot; "
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
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é
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
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
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
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
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
)
+
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 ?
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
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
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 :
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
Corrigé : DTD operateur
+client
@code
@nom
+abonnement
@num
@type
@dateAb
+facture
@numFact
@dateFact
@montant
@reglee
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT operateur (client+) >
<!ELEMENT client (abonnement+) >
<!ELEMENT abonnement (facture+) >
<!ELEMENT facture EMPTY >
<!ATTLIST client
code NMTOKEN #REQUIRED
nom CDATA #REQUIRED>
<!ATTLIST abonnement
num NMTOKEN #REQUIRED
type (GSM|FIXE) 'FIXE'
dateAb CDATA #REQUIRED>
<!ATTLIST facture
numFact NMTOKEN #REQUIRED
dateFact CDATA #REQUIRED
montant CDATA #REQUIRED
reglee (oui|non) 'non'>
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<html>
<head></head>
<body>
<xsl:for-each select="operateur/client">
<h3>
Nom Client : <xsl:value-of select="@nom"/>
</h3>
<table border="1" width="80%">
<tr>
<th>Num</th><th>Type</th><th>Date</th><th>Total Factures</th>
</tr>
<xsl:for-each select="abonnement">
<tr>
<td><xsl:value-of select="@num"/></td>
<td><xsl:value-of select="@type"/></td>
<td><xsl:value-of select="@dateAb"/></td>
<td><xsl:value-of select="sum(facture/@montant)"/></td>
</tr>
</xsl:for-each>
</table>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
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" />
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
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;)>
..
]>
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
&amp; &
&lt; <
&gt; >
&apos; '
&quot; "
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 "&#xCODEHEXA;">
Par exemple
<! ENTITY ccedille "&#x00E7;">
<!ENTITY CopieRight "&#169;">
<!ENTITY Delta "&#948;" >
Dans le document l’appel s’effectue avec &nom;
<code> le petit Delta est : &Delta;</code>
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>
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 »>
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 :
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
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
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
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
Brahim ER-RAHA
Voir le dossier Exemple cours XML
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
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
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
Les types simples (2)
 long
 -1, 12678967543233
 unsignedLong
 0, 12678967543233
 short
 -1, 12678
 unsignedShort
 0, 12678
 decimal
 -1.23, 0, 123.4, 1000.00
 float
 -INF, -1E4, -0, 0, 12.78E-2, 12,
INF, NaN
 double
 -INF, -1E4, -0, 0, 12.78E-2, 12,
INF, NaN
 boolean
 true, false 1, 0
 time
 13:20:00.000, 13:20:00.000-
05:00
 dateTime
 1999-05-31T13:20:00.000-
05:00
 duration
 P1Y2M3DT10H30M12.3S
 date
 1999-05-31
 gMonth
 --05--
 gYear
 1999
Schema
Les types simples (3)
 gYearMonth
 1999-02
 gDay
 ---31
 gMonthDay
 --05-31
 Name
 shipTo
 QName
 po:USAddress
 NCName
 USAddress
 anyURI
 http://www.example.com/,
 http://www.example.com/doc.html#ID
5
 language
 en-GB, en-US, fr
 ID
 "A212"
 IDREF
 "A212"
 IDREFS
 "A212" "B213"
 ENTITY
 ENTITIES
 NOTATION
 NMTOKEN, NMTOKENS
 US
 Brésil Canada Mexique
Schema
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"/>
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
Brahim ER-RAHA
<xsd:simpleType name="Code">
<xsd:restriction base="xsd:integer">
<xsd:minInclusive value="1000" />
<xsd:maxInclusive value="9999" />
</xsd:restriction>
</xsd:simpleType>
<xsd:element name="AA" type="Code"/>
<AA> 9999 </AA>
<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:element name="AA" type="JourDeSemaine"/>
<AA> lundi </AA>
<xsd:simpleType name="Date"> <xsd:restriction
base="xsd:string"><xsd:pattern value="d{2}-
d{2}-d{4}"/>
</xsd:restriction></xsd:simpleType>
<xsd:element name="AA" type="Date"/>
<AA> 23-05-1998 </AA>
<xsd:simpleType name="code"> <xsd:restriction
base="xsd:string"><xsd:pattern value="[A-Za-z]{6}-
d{2}"/> </xsd:restriction></xsd:simpleType>
<xsd:element name="AA" type="code"/>
<AA> Agadir-25 </AA>
<xs:simpleType name="type-no-tel">
<xs:restriction base="xs:string">
<xs:pattern
value="0[1-9]{1,2} [0-9]{3} [0-9]{3}" />
</xs:restriction>
</xs:simpleType>
<xsd:element name="AA" type="type-no-yel"/>
<AA> 066 000 000 </AA>
<xs:simpleType name="AS">
<xs:restriction base="xs:float">
<xs:totalDigits value="4"/>
<xs:fractionDigits value="2"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="AA" type="AS"/>
<AA> 12.56 </AA>
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
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
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"/>
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>
Brahim ER-RAHA
<xsd:complexType name="EnteteType" >
<xsd:sequence minOccurs=2>
<xsd:element name="titre" type="xsd:string" />
<xsd:element name="auteur" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
<xsd:element name="entete" type="EnteteType" />
<entete>
<titre>...</titre>
<auteur>...</auteur>
<titre> …</titre>
<auteur>…</auteur>
</entete>
sequence
Brahim ER-RAHA
<xsd:complexType name="EnteteType" >
<xsd:sequence minOccurs=2>
<xsd:element name="titre" type="xsd:string" minOccurs=2/>
<xsd:element name="auteur" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
<xsd:element name="entete" type="EnteteType" />
<entete>
<titre>...</titre>
<titre>….</titre>
<auteur>...</auteur>
<titre> …</titre>
<titre>….</titre>
<auteur>…</auteur>
</entete>
Brahim ER-RAHA
<xsd:complexType name="EnteteType" >
<xsd:choice minOccurs=2>
<xsd:element name="titre" type="xsd:string" />
<xsd:element name="auteur" type="xsd:string" />
</xsd:choice>
</xsd:complexType>
<xsd:element name="entete" type="EnteteType" />
<entete>
<titre>...</titre>
<auteur>…</auteur>
</entete>
Choice
Brahim ER-RAHA
<xsd:complexType name="EnteteType" >
<xsd:choice minOccurs="2">
<xsd:element name="titre" type="xsd:string" minOccurse="2" />
<xsd:element name="auteur" type="xsd:string" />
</xsd:choice>
</xsd:complexType>
<xsd:element name="entete" type="EnteteType" />
<entete>
<titre>...</titre>
<titre>….</titre>
<auteur>...</auteur>
</entete>
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
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:
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>
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>
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.
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
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>
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>
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.
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>
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 :
Brahim ER-RAHA
Brahim ER-RAHA
Brahim ER-RAHA
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
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" ?>
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
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
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
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
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 ;
}
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.
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 }
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*/
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 :
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
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
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%' ;
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.
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)
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
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…
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
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>
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.
Brahim ER-RAHA
Brahim ER-RAHA
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
Brahim ER-RAHA
<?xml version="1.0" encoding="iso-8859-1" ?>
<classification_atomique>
<famille type="gaz rare">
<atome>
<nom>hélium</nom>
<symbole>He</symbole>
<numero>2</numero>
<masse>4</masse>
</atome>
<atome>
<nom>néon</nom>
<symbole>Ne</symbole>
<numero>10</numero>
<masse>20</masse>
</atome>
<atome>
<nom>argon</nom>
<symbole>Ar</symbole>
<numero>18</numero>
<masse>40</masse>
</atome>
</famille>…..
< /classification_atomique>
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
Brahim ER-RAHA
Figure1 : Exemple de syntaxe Xpath sur un document
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
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()
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 &gt;= 4] Remarquons qu'il faut utiliser &lt; (respectivement &gt;) à 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.
Brahim ER-RAHA
../famille[(@type="non métal") and (atome/masse &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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
Brahim ER-RAHA
Correspondance entre syntaxe Xpath simple et étendu
Syntaxe Etendu Syntaxe Simple
/child::film/child::acteur /film/acteur
/child::cinéma/descendant::acteur /cinéma//acteur
/descendant::* //*
/descendant::film[@année=’2000’] //film[@année=’2000’]
Self .
Parent ..
Brahim ER-RAHA
1- AAA : Sélectionne l'élément racine AAA
<AAA>
<BBB/>
<CCC/> <xsl:template match="/">
<BBB/> <xsl:value-of select="AAA"/>
<BBB/> </xsl:template>
<DDD>
<BBB/>
</DDD>
<CCC/>
</AAA>
2- /AAA/CCC : Sélectionne tous les éléments CCC qui sont enfants de l'élément
racine AAA
<AAA>
<BBB/>
<CCC/>
<BBB/>
<BBB/>
<DDD>
<BBB/>
</DDD>
<CCC/>
</AAA>>
I- Syntaxe Simple
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>
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
Brahim ER-RAHA
6- /*/*/*/BBB
Sélectionne tous les éléments BBB qui ont trois ancêtres
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>
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>
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>
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>
Brahim ER-RAHA
18- //*[count(*)=3] : Sélectionne les éléments ayant trois enfants
Brahim ER-RAHA
19- //*[name()='BBB']
La fonction name() retourne le nom de l'élément
Brahim ER-RAHA
21- //*[starts-with(name(),'B')] :
la fonction start-with retourne vrai si la chaîne du premier argument commence
par celle du deuxième
<AAA>
<BCC>
<BBB/>
<BBB/>
<BBB/>
</BCC>
<DDB>
<BBB/>
<BBB/>
</DDB>
<BEC>
<CCC/>
<DBD/>
</BEC>
</AAA>
22- //*[contains(name(),'C')]
<AAA>
<BCC>
<BBB/>
<BBB/>
<BBB/>
</BCC>
<DDB>
<BBB/>
<BBB/>
</DDB>
<BEC>
<CCC/>
<DBD/>
</BEC>
</AAA>
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt
Cours XML_2019_final (1).ppt

Contenu connexe

Similaire à Cours XML_2019_final (1).ppt

Xml un panorama
Xml un panoramaXml un panorama
Xml un panoramallobel
 
La Solution Xml
La Solution XmlLa Solution Xml
La Solution XmlMGTissues
 
Les bases pour utiliser SPARQL
Les bases pour utiliser SPARQLLes bases pour utiliser SPARQL
Les bases pour utiliser SPARQLBorderCloud
 
Introduction aux Technologies Web élaborée par Marouan OMEZZINE
Introduction aux Technologies Web élaborée par Marouan OMEZZINEIntroduction aux Technologies Web élaborée par Marouan OMEZZINE
Introduction aux Technologies Web élaborée par Marouan OMEZZINEMarouan OMEZZINE
 
Les technologies du web, les standards de l'innovation ouverte : état de l'ar...
Les technologies du web, les standards de l'innovation ouverte : état de l'ar...Les technologies du web, les standards de l'innovation ouverte : état de l'ar...
Les technologies du web, les standards de l'innovation ouverte : état de l'ar...Fabien Gandon
 
xml_bd_ouahdikrid.ppt
xml_bd_ouahdikrid.pptxml_bd_ouahdikrid.ppt
xml_bd_ouahdikrid.pptLeilaAmrane
 
Xml un panorama
Xml un panoramaXml un panorama
Xml un panoramam100grech
 
Modèles de données et langages de description ouverts 2021-2022 - 2
Modèles de données et langages de description ouverts   2021-2022 - 2Modèles de données et langages de description ouverts   2021-2022 - 2
Modèles de données et langages de description ouverts 2021-2022 - 2François-Xavier Boffy
 
Cyxml2 formation-technologies-xml-mise-en-oeuvre
Cyxml2 formation-technologies-xml-mise-en-oeuvreCyxml2 formation-technologies-xml-mise-en-oeuvre
Cyxml2 formation-technologies-xml-mise-en-oeuvreCERTyou Formation
 
Cyxml2 formation-technologies-xml-mise-en-oeuvre (1)
Cyxml2 formation-technologies-xml-mise-en-oeuvre (1)Cyxml2 formation-technologies-xml-mise-en-oeuvre (1)
Cyxml2 formation-technologies-xml-mise-en-oeuvre (1)CERTyou Formation
 
xml dtd schema
xml dtd schemaxml dtd schema
xml dtd schemaDame Sy
 
2 20 presentations_generales_des_web_services
2 20 presentations_generales_des_web_services2 20 presentations_generales_des_web_services
2 20 presentations_generales_des_web_servicesCamus LANMADOUCELO
 
S51 vos projets web services ibm i a l aide de php
S51   vos projets web services ibm i a l aide de phpS51   vos projets web services ibm i a l aide de php
S51 vos projets web services ibm i a l aide de phpGautier DUMAS
 
1- XML généralités technologies xml1.pdf
1- XML généralités technologies xml1.pdf1- XML généralités technologies xml1.pdf
1- XML généralités technologies xml1.pdfKokitaKaty
 
Cyxlm formation-xml-synthese (1)
Cyxlm formation-xml-synthese (1)Cyxlm formation-xml-synthese (1)
Cyxlm formation-xml-synthese (1)CERTyou Formation
 

Similaire à Cours XML_2019_final (1).ppt (20)

Xml un panorama
Xml un panoramaXml un panorama
Xml un panorama
 
La Solution Xml
La Solution XmlLa Solution Xml
La Solution Xml
 
Metadonnees et SID
Metadonnees et SIDMetadonnees et SID
Metadonnees et SID
 
Les bases pour utiliser SPARQL
Les bases pour utiliser SPARQLLes bases pour utiliser SPARQL
Les bases pour utiliser SPARQL
 
RIA
RIARIA
RIA
 
1 introduction
1 introduction1 introduction
1 introduction
 
Introduction aux Technologies Web élaborée par Marouan OMEZZINE
Introduction aux Technologies Web élaborée par Marouan OMEZZINEIntroduction aux Technologies Web élaborée par Marouan OMEZZINE
Introduction aux Technologies Web élaborée par Marouan OMEZZINE
 
Les technologies du web, les standards de l'innovation ouverte : état de l'ar...
Les technologies du web, les standards de l'innovation ouverte : état de l'ar...Les technologies du web, les standards de l'innovation ouverte : état de l'ar...
Les technologies du web, les standards de l'innovation ouverte : état de l'ar...
 
xml_bd_ouahdikrid.ppt
xml_bd_ouahdikrid.pptxml_bd_ouahdikrid.ppt
xml_bd_ouahdikrid.ppt
 
Xml un panorama
Xml un panoramaXml un panorama
Xml un panorama
 
Modèles de données et langages de description ouverts 2021-2022 - 2
Modèles de données et langages de description ouverts   2021-2022 - 2Modèles de données et langages de description ouverts   2021-2022 - 2
Modèles de données et langages de description ouverts 2021-2022 - 2
 
Cyxml2 formation-technologies-xml-mise-en-oeuvre
Cyxml2 formation-technologies-xml-mise-en-oeuvreCyxml2 formation-technologies-xml-mise-en-oeuvre
Cyxml2 formation-technologies-xml-mise-en-oeuvre
 
Cyxml2 formation-technologies-xml-mise-en-oeuvre (1)
Cyxml2 formation-technologies-xml-mise-en-oeuvre (1)Cyxml2 formation-technologies-xml-mise-en-oeuvre (1)
Cyxml2 formation-technologies-xml-mise-en-oeuvre (1)
 
xml dtd schema
xml dtd schemaxml dtd schema
xml dtd schema
 
Base donnes my_sql
Base donnes my_sqlBase donnes my_sql
Base donnes my_sql
 
XML
XMLXML
XML
 
2 20 presentations_generales_des_web_services
2 20 presentations_generales_des_web_services2 20 presentations_generales_des_web_services
2 20 presentations_generales_des_web_services
 
S51 vos projets web services ibm i a l aide de php
S51   vos projets web services ibm i a l aide de phpS51   vos projets web services ibm i a l aide de php
S51 vos projets web services ibm i a l aide de php
 
1- XML généralités technologies xml1.pdf
1- XML généralités technologies xml1.pdf1- XML généralités technologies xml1.pdf
1- XML généralités technologies xml1.pdf
 
Cyxlm formation-xml-synthese (1)
Cyxlm formation-xml-synthese (1)Cyxlm formation-xml-synthese (1)
Cyxlm formation-xml-synthese (1)
 

Plus de ManalAg

AOP.pptx
AOP.pptxAOP.pptx
AOP.pptxManalAg
 
analex-slides.pdf
analex-slides.pdfanalex-slides.pdf
analex-slides.pdfManalAg
 
Cours05.pdf
Cours05.pdfCours05.pdf
Cours05.pdfManalAg
 
5_Modulation.pptx
5_Modulation.pptx5_Modulation.pptx
5_Modulation.pptxManalAg
 
0B.E1BACSEG1L'organisation de travail dans une entrepriseMeryemAfa (1).pptx
0B.E1BACSEG1L'organisation de travail dans une entrepriseMeryemAfa (1).pptx0B.E1BACSEG1L'organisation de travail dans une entrepriseMeryemAfa (1).pptx
0B.E1BACSEG1L'organisation de travail dans une entrepriseMeryemAfa (1).pptxManalAg
 
3_Multiplexage_TDM_FDM_CDM.pptx.pdf
3_Multiplexage_TDM_FDM_CDM.pptx.pdf3_Multiplexage_TDM_FDM_CDM.pptx.pdf
3_Multiplexage_TDM_FDM_CDM.pptx.pdfManalAg
 
Controller_Rest.pptx
Controller_Rest.pptxController_Rest.pptx
Controller_Rest.pptxManalAg
 
Journalisation_log4J.pptx
Journalisation_log4J.pptxJournalisation_log4J.pptx
Journalisation_log4J.pptxManalAg
 
testUnitaire (1).pptx
testUnitaire (1).pptxtestUnitaire (1).pptx
testUnitaire (1).pptxManalAg
 
programmation_shell_2022 (1).pptx
programmation_shell_2022 (1).pptxprogrammation_shell_2022 (1).pptx
programmation_shell_2022 (1).pptxManalAg
 
MSIL (1).pptx
MSIL (1).pptxMSIL (1).pptx
MSIL (1).pptxManalAg
 
03-05_Execution_Suivi des couts.pdf
03-05_Execution_Suivi des couts.pdf03-05_Execution_Suivi des couts.pdf
03-05_Execution_Suivi des couts.pdfManalAg
 
3-ADO.NET.pdf
3-ADO.NET.pdf3-ADO.NET.pdf
3-ADO.NET.pdfManalAg
 
05_La Cloture du projet.pdf
05_La Cloture du projet.pdf05_La Cloture du projet.pdf
05_La Cloture du projet.pdfManalAg
 

Plus de ManalAg (14)

AOP.pptx
AOP.pptxAOP.pptx
AOP.pptx
 
analex-slides.pdf
analex-slides.pdfanalex-slides.pdf
analex-slides.pdf
 
Cours05.pdf
Cours05.pdfCours05.pdf
Cours05.pdf
 
5_Modulation.pptx
5_Modulation.pptx5_Modulation.pptx
5_Modulation.pptx
 
0B.E1BACSEG1L'organisation de travail dans une entrepriseMeryemAfa (1).pptx
0B.E1BACSEG1L'organisation de travail dans une entrepriseMeryemAfa (1).pptx0B.E1BACSEG1L'organisation de travail dans une entrepriseMeryemAfa (1).pptx
0B.E1BACSEG1L'organisation de travail dans une entrepriseMeryemAfa (1).pptx
 
3_Multiplexage_TDM_FDM_CDM.pptx.pdf
3_Multiplexage_TDM_FDM_CDM.pptx.pdf3_Multiplexage_TDM_FDM_CDM.pptx.pdf
3_Multiplexage_TDM_FDM_CDM.pptx.pdf
 
Controller_Rest.pptx
Controller_Rest.pptxController_Rest.pptx
Controller_Rest.pptx
 
Journalisation_log4J.pptx
Journalisation_log4J.pptxJournalisation_log4J.pptx
Journalisation_log4J.pptx
 
testUnitaire (1).pptx
testUnitaire (1).pptxtestUnitaire (1).pptx
testUnitaire (1).pptx
 
programmation_shell_2022 (1).pptx
programmation_shell_2022 (1).pptxprogrammation_shell_2022 (1).pptx
programmation_shell_2022 (1).pptx
 
MSIL (1).pptx
MSIL (1).pptxMSIL (1).pptx
MSIL (1).pptx
 
03-05_Execution_Suivi des couts.pdf
03-05_Execution_Suivi des couts.pdf03-05_Execution_Suivi des couts.pdf
03-05_Execution_Suivi des couts.pdf
 
3-ADO.NET.pdf
3-ADO.NET.pdf3-ADO.NET.pdf
3-ADO.NET.pdf
 
05_La Cloture du projet.pdf
05_La Cloture du projet.pdf05_La Cloture du projet.pdf
05_La Cloture du projet.pdf
 

Cours XML_2019_final (1).ppt

  • 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
  • 29. Exemple de document XML <?xml version="1.0" encoding="UTF-8"?> <biblio> <etudiant code="1" nom="A" prenom="B" age="23"> <livre id="534" titre="java" datePret="2006-11-12" rendu="oui"/> <livre id="634" titre="XML" datePret="2006-11-13" rendu="non"/> </etudiant> <etudiant code="2" nom="C" prenom="D" age="22"> <livre id="33" titre="E-Commerce" datePret="2006-1-12" rendu="non"/> </etudiant> </biblio> biblio + etudiant @code @nom @prenom @age + livre @id @titre @datePret @rendu Biblio Etudiant Etudiant Etudiant livre livre livre Représentation graphique de l’arbre XML
  • 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 &#38; ou &#x2267; 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 « &lt; < &gt; > &amp; & &apos; ‘ &quot; "
  • 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
  • 48. Corrigé : DTD operateur +client @code @nom +abonnement @num @type @dateAb +facture @numFact @dateFact @montant @reglee <?xml version="1.0" encoding="UTF-8"?> <!ELEMENT operateur (client+) > <!ELEMENT client (abonnement+) > <!ELEMENT abonnement (facture+) > <!ELEMENT facture EMPTY > <!ATTLIST client code NMTOKEN #REQUIRED nom CDATA #REQUIRED> <!ATTLIST abonnement num NMTOKEN #REQUIRED type (GSM|FIXE) 'FIXE' dateAb CDATA #REQUIRED> <!ATTLIST facture numFact NMTOKEN #REQUIRED dateFact CDATA #REQUIRED montant CDATA #REQUIRED reglee (oui|non) 'non'>
  • 49. <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="/"> <html> <head></head> <body> <xsl:for-each select="operateur/client"> <h3> Nom Client : <xsl:value-of select="@nom"/> </h3> <table border="1" width="80%"> <tr> <th>Num</th><th>Type</th><th>Date</th><th>Total Factures</th> </tr> <xsl:for-each select="abonnement"> <tr> <td><xsl:value-of select="@num"/></td> <td><xsl:value-of select="@type"/></td> <td><xsl:value-of select="@dateAb"/></td> <td><xsl:value-of select="sum(facture/@montant)"/></td> </tr> </xsl:for-each> </table> </xsl:for-each> </body> </html> </xsl:template> </xsl:stylesheet>
  • 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 &amp; & &lt; < &gt; > &apos; ' &quot; " 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 "&#xCODEHEXA;"> Par exemple <! ENTITY ccedille "&#x00E7;"> <!ENTITY CopieRight "&#169;"> <!ENTITY Delta "&#948;" > Dans le document l’appel s’effectue avec &nom; <code> le petit Delta est : &Delta;</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
  • 61. Brahim ER-RAHA Voir le dossier Exemple cours XML
  • 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
  • 65. Les types simples (2)  long  -1, 12678967543233  unsignedLong  0, 12678967543233  short  -1, 12678  unsignedShort  0, 12678  decimal  -1.23, 0, 123.4, 1000.00  float  -INF, -1E4, -0, 0, 12.78E-2, 12, INF, NaN  double  -INF, -1E4, -0, 0, 12.78E-2, 12, INF, NaN  boolean  true, false 1, 0  time  13:20:00.000, 13:20:00.000- 05:00  dateTime  1999-05-31T13:20:00.000- 05:00  duration  P1Y2M3DT10H30M12.3S  date  1999-05-31  gMonth  --05--  gYear  1999 Schema
  • 66. Les types simples (3)  gYearMonth  1999-02  gDay  ---31  gMonthDay  --05-31  Name  shipTo  QName  po:USAddress  NCName  USAddress  anyURI  http://www.example.com/,  http://www.example.com/doc.html#ID 5  language  en-GB, en-US, fr  ID  "A212"  IDREF  "A212"  IDREFS  "A212" "B213"  ENTITY  ENTITIES  NOTATION  NMTOKEN, NMTOKENS  US  Brésil Canada Mexique 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
  • 69. Brahim ER-RAHA <xsd:simpleType name="Code"> <xsd:restriction base="xsd:integer"> <xsd:minInclusive value="1000" /> <xsd:maxInclusive value="9999" /> </xsd:restriction> </xsd:simpleType> <xsd:element name="AA" type="Code"/> <AA> 9999 </AA> <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:element name="AA" type="JourDeSemaine"/> <AA> lundi </AA> <xsd:simpleType name="Date"> <xsd:restriction base="xsd:string"><xsd:pattern value="d{2}- d{2}-d{4}"/> </xsd:restriction></xsd:simpleType> <xsd:element name="AA" type="Date"/> <AA> 23-05-1998 </AA> <xsd:simpleType name="code"> <xsd:restriction base="xsd:string"><xsd:pattern value="[A-Za-z]{6}- d{2}"/> </xsd:restriction></xsd:simpleType> <xsd:element name="AA" type="code"/> <AA> Agadir-25 </AA> <xs:simpleType name="type-no-tel"> <xs:restriction base="xs:string"> <xs:pattern value="0[1-9]{1,2} [0-9]{3} [0-9]{3}" /> </xs:restriction> </xs:simpleType> <xsd:element name="AA" type="type-no-yel"/> <AA> 066 000 000 </AA> <xs:simpleType name="AS"> <xs:restriction base="xs:float"> <xs:totalDigits value="4"/> <xs:fractionDigits value="2"/> </xs:restriction> </xs:simpleType> <xs:element name="AA" type="AS"/> <AA> 12.56 </AA>
  • 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>
  • 74. Brahim ER-RAHA <xsd:complexType name="EnteteType" > <xsd:sequence minOccurs=2> <xsd:element name="titre" type="xsd:string" /> <xsd:element name="auteur" type="xsd:string" /> </xsd:sequence> </xsd:complexType> <xsd:element name="entete" type="EnteteType" /> <entete> <titre>...</titre> <auteur>...</auteur> <titre> …</titre> <auteur>…</auteur> </entete> sequence
  • 75. Brahim ER-RAHA <xsd:complexType name="EnteteType" > <xsd:sequence minOccurs=2> <xsd:element name="titre" type="xsd:string" minOccurs=2/> <xsd:element name="auteur" type="xsd:string" /> </xsd:sequence> </xsd:complexType> <xsd:element name="entete" type="EnteteType" /> <entete> <titre>...</titre> <titre>….</titre> <auteur>...</auteur> <titre> …</titre> <titre>….</titre> <auteur>…</auteur> </entete>
  • 76. Brahim ER-RAHA <xsd:complexType name="EnteteType" > <xsd:choice minOccurs=2> <xsd:element name="titre" type="xsd:string" /> <xsd:element name="auteur" type="xsd:string" /> </xsd:choice> </xsd:complexType> <xsd:element name="entete" type="EnteteType" /> <entete> <titre>...</titre> <auteur>…</auteur> </entete> Choice
  • 77. Brahim ER-RAHA <xsd:complexType name="EnteteType" > <xsd:choice minOccurs="2"> <xsd:element name="titre" type="xsd:string" minOccurse="2" /> <xsd:element name="auteur" type="xsd:string" /> </xsd:choice> </xsd:complexType> <xsd:element name="entete" type="EnteteType" /> <entete> <titre>...</titre> <titre>….</titre> <auteur>...</auteur> </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
  • 116. Brahim ER-RAHA <?xml version="1.0" encoding="iso-8859-1" ?> <classification_atomique> <famille type="gaz rare"> <atome> <nom>hélium</nom> <symbole>He</symbole> <numero>2</numero> <masse>4</masse> </atome> <atome> <nom>néon</nom> <symbole>Ne</symbole> <numero>10</numero> <masse>20</masse> </atome> <atome> <nom>argon</nom> <symbole>Ar</symbole> <numero>18</numero> <masse>40</masse> </atome> </famille>….. < /classification_atomique>
  • 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
  • 118. Brahim ER-RAHA Figure1 : Exemple de syntaxe Xpath sur un document
  • 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 &gt;= 4] Remarquons qu'il faut utiliser &lt; (respectivement &gt;) à 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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
  • 123. Brahim ER-RAHA Correspondance entre syntaxe Xpath simple et étendu Syntaxe Etendu Syntaxe Simple /child::film/child::acteur /film/acteur /child::cinéma/descendant::acteur /cinéma//acteur /descendant::* //* /descendant::film[@année=’2000’] //film[@année=’2000’] Self . Parent ..
  • 124. Brahim ER-RAHA 1- AAA : Sélectionne l'élément racine AAA <AAA> <BBB/> <CCC/> <xsl:template match="/"> <BBB/> <xsl:value-of select="AAA"/> <BBB/> </xsl:template> <DDD> <BBB/> </DDD> <CCC/> </AAA> 2- /AAA/CCC : Sélectionne tous les éléments CCC qui sont enfants de l'élément racine AAA <AAA> <BBB/> <CCC/> <BBB/> <BBB/> <DDD> <BBB/> </DDD> <CCC/> </AAA>> I- Syntaxe Simple
  • 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
  • 127. Brahim ER-RAHA 6- /*/*/*/BBB Sélectionne tous les éléments BBB qui ont trois ancêtres
  • 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>
  • 132. Brahim ER-RAHA 18- //*[count(*)=3] : Sélectionne les éléments ayant trois enfants
  • 133. Brahim ER-RAHA 19- //*[name()='BBB'] La fonction name() retourne le nom de l'élément
  • 134. Brahim ER-RAHA 21- //*[starts-with(name(),'B')] : la fonction start-with retourne vrai si la chaîne du premier argument commence par celle du deuxième <AAA> <BCC> <BBB/> <BBB/> <BBB/> </BCC> <DDB> <BBB/> <BBB/> </DDB> <BEC> <CCC/> <DBD/> </BEC> </AAA> 22- //*[contains(name(),'C')] <AAA> <BCC> <BBB/> <BBB/> <BBB/> </BCC> <DDB> <BBB/> <BBB/> </DDB> <BEC> <CCC/> <DBD/> </BEC> </AAA>