1
INTRODUCTION À XML
2011/2012 Heithem ABBES [Link]@[Link]
Présentation
2
XML (eXtensible Markup Language) : langage à balises
extensible
permettant de définir de nouvelles balises.
permettant de mettre en forme des documents grâce à des
balises (markup).
Contrairement à HTML (langage défini et figé avec un
nombre de balises limité), XML est un métalangage
permettant de définir d'autres langages
Peut décrire n'importe quel domaine de données grâce
à son extensibilité.
Permet de structurer, poser le vocabulaire (grammaire)
des données
Données structurées
4
XML permet de représenter des données structurées :
données textuelles organisées :
un document constitué d’éléments
un élément peut être constitué de texte ou contenir d’autres
éléments (ou un mélange des deux)
un élément peut être associé à des informations complémentaires,
les attributs
la structure est celle d’un arbre :
un document XML = un arbre
un élément = un nœud de l’arbre
Le standard XML indique comment traduire l’arbre en
un document XML, pas comment organiser les données
Exemple : Annuaire (1/4)
5
But : stocker l’annuaire de Dauphine (nom, prénom, bureau, numéro
de poste, email)
Le texte du document : les informations !
Organisation : s’arranger pour que les informations restent
correctement groupées (ne pas mélanger les données !)
Solution 1:
Exemple : Annuaire (2/4)
6
Traduction en XML de l’arbre :
[Link]
1 <?xml version="1.0" encoding="ISO-8859-1"?>
2 <annuaire>
3 <personne>
4 <nom>Rossi</nom>
5 <prenom>Fabrice</prenom>
6 <bureau>B520</bureau>
7 <poste>4823</poste>
8 <email>[Link]@[Link]</email>
9 </personne>
10 <!-- suite de l'annuaire -->
11 </annuaire>
Inclusion textuelle relation mère-fille dans l’arbre
Balise ouvrante ou fermante nom d’un nœud
Texte => feuille de l’arbre
Ne pas confondre les éléments (information) et les balises (syntaxe).
Exemple : Annuaire (3/4)
7
Solution 2 :
Exemple : Annuaire (4/4)
8
Traduction en XML de l’arbre :
[Link]
1 <?xml version="1.0" encoding="ISO-8859-1"?>
2 <annuaire>
3 <personne nom="Rossi"
4
prenom="Fabrice"
5
6
bureau="B520"
7 poste="4823"
8 email="[Link]@[Link]"/>
9 <!-- suite de l'annuaire -->
10 </annuaire>
Attributs annotations d’un nœud
élément vide => feuille
Organisation
9
On organise les données en décidant de la structure de
l’arbre :
le nom des éléments
l’ordre des éléments
les relations d’inclusion
la position des données (c’est-à-dire du texte)
les contraintes sur les données (texte quelconque, valeur
numérique, etc.)
les attributs
Une organisation particulière forme un vocabulaire XML,
par exemple:
MathML : pour décrire des équations
SVG : dessin vectoriel
etc.
Syntaxe XML
10
Deux niveaux syntaxiques :
bas niveau : document bien formé
haut niveau : document valide (haut niveau => bas niveau)
Du point de vue utilisateur/concepteur :
le bas niveau est obligatoire : mal formé => pas XML
le bas niveau est fixé par la norme
le haut niveau est facultatif : bien formé => XML
le haut niveau est entièrement de la responsabilité du
concepteur : il définit les contraintes syntaxiques (noms de
éléments, organisation, etc.)
le haut niveau peut se mettre en œuvre de différentes
façons (DTD, schémas W3C, Relax NG, etc.)
Documents XML bien formés (1/3)
11
Les éléments :
<truc> : balise ouvrante :
1. doit toujours correspondre à une balise fermante (</truc>)
2. le texte entre <> est le nom de l’élément : constitué de lettres,
chiffres, ’.’, ’-’, ’_’ et ’ :’
</quantite> : balise fermante (depuis une balise ouvrante
jusqu’à une balise fermante : le contenu d’un élément, un nœud de
l’arbre)
<et_hop/> : balise mixte, ouvrante et fermante, pour les
éléments vides
Exemples :
<a><b></a></b> : mal formé
<p>bla, bla, bla<br>bla, bla, bla</p> : mal formé
<[Link]:tres_bien-choisit/> : bien formé
Documents XML bien formés (2/3)
12
Les attributs :
Exemple : <font name="times">
name est un attribut de l’élément font, de valeur times.
ne peut apparaître que dans une balise ouvrante ou mixte
doit toujours avoir une valeur
la valeur est toujours délimitée par des guillemets " ou des
apostrophes ‘
dans la valeur, < est interdit
pour le nom d’un attribut, même contrainte que pour les
éléments
dans une même balise ouvrante ou mixte, chaque attribut ne
peut apparaître qu’une fois
Documents XML bien formés (3/3)
13
Grammaire de base :
un document XML est un arbre d’éléments :
la racine est unique
le contenu d’un élément est :
d’autres éléments
du texte (les character data) : < et & sont interdits
Exemples :
<a></a><b></b> : mal formé
<a>3<2</a> : mal formé
<a>3>2</a> : bien formé (déconseillé)
<a>bla <br/>bla</a> : bien formé
Constructions utiles
14
Commentaires :
<!-- ce qu’on veut sauf deux - à la suite -->
CDATA (texte) :
[Link]
<![CDATA[ <a>contenu<b> non interprete,
non analyse, ne fait pas</a> partie
de l'arbre</b> ]]>
Entités :
gestion de la structure physique des documents XML
mécanisme de “macro” XML :
inclusion d’un document dans un autre
référence externe
remplacement d’un texte par un autre
Entités
15
Entités de bas niveau :
syntaxe : &nom;
“prédéfinies” pour les caractères spéciaux :
accès aux caractères par leur code UNICODE : &#nombre
en base 10; ou &#xnombre en base 16;. Par exemple
' correspond à '.
Entités de haut niveau :
à définir dans la grammaire (DTD, Schema XML)
inclusion
remplacement
Exemple complet
16
<?xml version="1.0" encoding="ISO-8859-1"?>
<carnet>
<fiche>
<nom>Rossi</nom><prenom>Fabrice</prenom>
<adresse>
<service>UFR MD</service>
<rue>Place du Marechal de Lattre de Tassigny</rue>
<code>75016</code><ville>Paris</ville>
</adresse>
<telephone>
<fixe>01 44 05 48 23</fixe>
<fax>01 44 05 40 36</fax>
<portable>06 06 06 06 06</portable>
</telephone>
<email>
<nom>[Link]</nom>
<domaine>[Link]</domaine>
</email>
</fiche>
</carnet>
Entête
17
il est conseillé de commencer un document XML par :
< ?xml version="1.0" ?>
l’attribut encoding permet d’indiquer la représentation
physique des caractères du fichier :
< ?xml version="1.0" encoding="UTF-16" ?>
< ?xml version="1.0" encoding="UTF-8" ?> par défaut
< ?xml version="1.0" encoding="ISO-8859-1" ?> sous
linux
< ?nom ?> : une Processing Instruction indique aux
logiciels comment traiter le document :
encodage
associer une feuille de style à un document
Les espaces de noms (1/6)
18
Un document XML peut contenir des éléments et des
attributs qui correspondent à plusieurs domaines
distincts (i.e., à plusieurs dialectes).
Problème : comment gérer les collisions ?
Solution => Les espaces de noms (namespaces) :
permet d’introduire des collections de noms utilisables
pour les éléments et les attributs d’un document XML
principes :
chaque collection est identifiée par un URI
un préfixe est associé à un URI
Les espaces de noms (2/6)
19
<?xml version="1.0" encoding="ISO-8859-1"?>
<html:html xmlns:html="[Link]
<html:head>
<html:title>Demonstration</html:title>
</html:head>
<html:body>Un contenu</html:body>
</html:html>
L’attribut xmlns:html associe le préfixe html à l’URI
"http ://[Link]/TR/REC-html40"
L’association n’est valable que dans les descendants (au
sens large) de l’élément qui contient xmlns:html
L’association s’applique aux éléments et aux attributs
Les espaces de noms (3/6)
20
Déclaration d’un namespace :
xmlns:préfixe="URI" : association du préfixe à l’URI
xmlns="URI" : définition de l’URI associé à l’espace de noms
par défaut (sans préfixe)
Nom qualifié :
préfixe : nom local
peut être utilisé pour les attributs et les éléments
le préfixe doit être déclaré par un ascendant
Remarques :
c’est l’URI qui assure l’absence d’ambiguïté, pas le préfixe
le dernier qui parle a raison
Les espaces de noms (4/6)
21
Attributs:
les attributs avec un nom qualifié sont traités comme les
éléments
les attributs sans préfixe sont dans un espace de noms local
propre à l’élément dans lequel ils apparaissent (c’est le cas
classique sans namespace)
Dans un élément donné, les attributs doivent être
distincts, c’est-à-dire :
ou bien être des attributs qualifiés qui se distinguent par
leur partie locale ou par leur URI
ou bien être des attributs sans préfixe distincts
Les espaces de noms (5/6)
22
Exemples
<?xml version="1.0" encoding="ISO-8859-1"?>
<html xmlns="[Link]
<head>
<title>Demonstration</title>
</head>
<body>Un contenu</body>
</html>
<x xmlns:n1=[Link]
xmlns="[Link] >
<good a="1" b="2" />
<good a="1" n1:a="2" />
</x>
Les espaces de noms (6/6)
23
Quelques espaces de noms classiques
XML: [Link]
Xinclude: [Link]
Xlink: [Link]
MathML: [Link]
XHTML: [Link]
SVG: [Link]
Schémas: [Link]
XSLT: [Link]
24 Schémas
Validation des documents XML
25
Syntaxe de haut niveau (grammaire)
précisée par une DTD (Document Type Definition):
existe depuis la norme XML
outils stables
limitées : structure simple
syntaxe non XML
précisée par un schéma :
deux grandes technologies (d’autres existent) :
les schémas du W3C (recommandation du 2 Mai 2001)
RELAX NG du consortium OASIS (spécification du 12 Décembre 2001)
syntaxe XML
très puissants
assez complexes
Les DTD et les Schémas
26
Principes communs :
éléments autorisés
modèle du contenu d’un élément (et donc grammaire)
attributs autorisés
modèle de la valeur d’un attribut
Différences :
syntaxe :
DTD : issue de SGML (pas de XML)
Schéma : un document XML
contraintes :
DTD : contraintes très simples
Schéma : très évoluées (contenu entier, date, expressions régulières, etc.)
Note: Les DTD ne sont pas abordés dans ce cours, nous focalisons sur
les schémas, en particulier : Schémas du W3C
Objectifs de XML Schéma
27
Un document XML doit pouvoir être validé
relativement à son schéma.
Structures
Définir la structure et les contenus des documents.
Définir des relations d’héritage.
Typage des données
Fournir un ensemble de types primitifs.
Définir un système de typage suffisamment riche.
Distinguer les aspects reliés à la représentation lexicale des
données de ceux gouvernant les données.
Permettre de créer des types de données usagers dérivés
de types existants en contraignant certaines propriétés
(domaine, précision, longueur, format).
28 Les structures
Principes des schémas
29
Un schéma XML est un document XML.
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsd:schema xmlns:xsd="[Link]
<!-- Déclaration de deux types d ’éléments -->
<xsd:element name="nom" type="xsd:string" />
<xsd:element name= "prenom" type="xsd:string" />
</xsd:schema>
Principes des schémas
30
<?xml version="1.0"?> Document XML
<Addresse_postale_France pays="France"> ([Link])
<nom>Mr Jean Dupont</nom>
<rue>rue Camille Desmoulins</rue>
<ville>Paris</ville>
<departement>Seine</departement>
<code_postal>75600</code_postal>
</Addresse_postale_france >
<xsd:schema xmlns:xsd="[Link] Schéma
<xsd:complexType name="Addresse_postale_france" > ([Link])
<xsd:sequence>
<xsd:element name="nom" type="xsd:string" />
<xsd:element name="rue" type="xsd:string" />
<xsd:element name="ville" type="xsd:string" />
<xsd:element name="departement" type="xsd:string" />
<xsd:element name="code_postal" type="xsd:decimal" />
</xsd:sequence>
<xsd:attribute name= "pays" type="xsd:NMTOKEN" use="fixed" value="FR"/>
</xsd:complexType>
</xsd:schema>
Les composants primaires
31
Un schéma XML est construit par assemblage de différents
composants (13 sortes de composants rassemblés en
différentes catégories).
Composants de définition de types
Définition de types simples (Simple type).
Définition de types complexes (Complex type).
Composants de déclaration
Déclaration d’éléments.
Déclaration d’attributs.
Déclaration des éléments
32
Un élément XML est déclaré par la balise element
de XML schéma qui a de nombreux attributs.
Les deux principaux attributs sont:
name : Le nom de l’élément (de la balise associée).
type : Le type qui peut être simple ou complexe.
Exemple
<xsd:element name="code_postal" type="xsd:decimal"/>
Déclaration des attributs
33
Un attribut est déclaré par la balise attribute
Un attribut est une valeur, nommée et typée,
associée à un élément.
Le type d’un attribut défini en XML schéma est
obligatoirement simple.
<xsd:complexType name="TypeRapport">
<xsd:attribute name= "Date_creation" type="xsd:date"/>
…...
</xsd:complexType>
<xsd:element name="Rapport" type="TypeRapport"/>
Déclaration des attributs
34
L'élément attribute de XML Schema peut avoir deux attributs
optionnels : use et value.
On peut ainsi définir des contraintes de présence et de valeur.
Selon ces deux attributs, la valeur peut:
être obligatoire ou non
être définie ou non par défaut.
Exemple
<xsd:attribute name= "Date_peremption" type="xsd:date"
use="default" value= "2005-12-31"/>
Déclaration des attributs
35
Valeurs possibles pour use
use = required : L’attribut doit apparaître et prendre la valeur fixée si elle
est définie.
use= prohibited : L’attribut ne doit pas apparaître.
use = optional : L’attribut peut apparaître et prendre une valeur quelconque.
use= default : Si l’attribut à une valeur définie il la prend sinon il prend la
valeur par défaut.
use= fixed : La valeur de l’attribut est obligatoirement la valeur définie.
Exemple
<xsd:attribute name= "Date_creation" type="xsd:date" use="required"/>
Les Types
36
Les schémas sont basés sur la notion de type
Chaque élément et chaque attribut possède un type
Approche objet: les types de base et types défini par
dérivation
Deux grandes catégories de types :
1. Types simples (simpleType) :
chaînes de caractères, valeurs numériques, etc.
Un élément d’un type simple ne peut ni contenir d’autres éléments ni
avoir des attributs.
Les attributs ont des types simples.
2. Types complexes (complexType) :
tout le reste, en particulier les éléments contenant d’autres éléments
et/ou des attributs.
Types simples
37
Types simples prédéfinis au sens de la norme XML Schémas
‘datatypes’: string, integer, boolean …
Exemple :
<xsd:element name="code_postal " type="xsd:integer"/>
Types simples définis par dérivation d'un autre type simple, au
moyen de l’élément <xsd:simpleType ...>
Exemple : dérivation par restriction.
<xsd:simpleType name= "DeuxDecimales">
<xsd:restriction base="xsd:decimal">
<xsd:fractionDigits value="2" />
</xsd:restriction>
</xsd:simpleType>
Types complexes
38
Déclarés au moyen de l'élément <xsd:complexType name="...
Ils peuvent contenir d’autres éléments, des attributs.
Exemple
<xsd:complexType name= "TypePrix">
<xsd:simpleContent>
<xsd:extension base="DeuxDecimales">
<xsd:attribute name="Unite" type= "FrancEuro" />
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
Trois façons de composer des éléments dans un type
complexe: sequence, choice, all.
Types complexes: Sequence
39
Un type sequence est défini par une suite de sous-
éléments qui doivent être présents dans l'ordre donné.
Le nombre d'occurences de chaque sous-élément est
défini par les attributs minOccurs et maxOccurs.
<xsd:complexType name= "TypeCommande">
<xsd:sequence>
<xsd:element name= "Ad_livraison" type="Addresse"/>
<xsd:element name= "Ad_facturation" type="Addresse"/>
<xsd:element name= "texte" type="xsd:string" minOccurs="1" />
<xsd:element name="items" type="Items" maxOccurs= "30" />
</xsd:sequence>
</xsd:complexType>
Types complexes: Choice
40
Un seul des éléments listés doit être présent.
Le nombre d'occurrences possible est déterminé par les
attributs minOccurs et maxOccurs de l’élément.
<xsd:complexType name= "type_temps">
<xsd:choice >
<xsd:element name= "Noire" type="Note" minOccurs="1" maxOccurs="1" />
<xsd:element name= "Croche" type="Note" minOccurs="2" maxOccurs="2" />
</xsd:choice>
</xsd:complexType>
Types complexes: All
41
Les éléments listés doivent être tous présents au
plus une fois.
Il peuvent apparaître dans n'importe quel ordre.
<xsd:complexType name= "Commande">
<xsd:all>
<xsd:element name= "Ad_livraison" type="Addresse"/>
<xsd:element name= "Ad_facturation" type="Addresse"/>
<xsd:element name= "texte" type="xsd:string" minOccurs="0" />
<xsd:element name="items" type="Items" maxOccurs= "30" />
</xsd:all>
</xsd:complexType>
42 Les types de données XML schéma
Objectifs de la définition des types
43
Fournir des types primitifs analogues à ceux qui
existent en SQL ou en Java.
Définir un système de typage suffisamment
riche pour importer/exporter des données d’une
base de données.
Distinguer les aspects reliés à la représentation
lexicale des données de ceux gouvernant les
ensembles de données sous-jacents.
Permettre de créer des types de données
usagers dérivés de types existants en
contraignant certaines propriétés (domaine,
précision, longueur, format).
Système de typage des schémas
44
Trois composantes:
a) L’ensemble des valeurs du type (value space)
Ex: type float.
b) L’ensemble des représentations lexicales possibles des
valeurs (lexical space).
Ex: "10" ou "1.0E1"
c) L’ensemble des facettes (l’ensemble des propriétés) qui
définit l’ensemble des valeurs (notion de facette
fondamentale et de facette de contrainte).
Ex: Le type float est défini par la norme IEEE 754-1985
(c’est un flottant simple, précision sur 32-bit).
On peut dériver des types par contraintes.
Définitions relatives aux types
45
Types primitifs (Primitive) : Non défini en référence à d’autres
types..
Types dérivés (Derived) : Définis par dérivation à partir d’autres
types.
Types prédéfinis (Built-in) : Définis dans le cadre de la spécification
XML Schéma datatypes (primitif ou dérivé).
Types usagers (User-derived) : Types construits par les utilisateurs.
Types atomiques (Atomic) : Types indivisibles du point de vue de la
spécification XML schéma.
Types listes (List) : Types dont les valeurs sont des listes de valeurs
de types atomiques.
Types unions (Union) : Types dont les ensembles de valeur sont la
réunion d’ensemble de valeurs d’autres types.
46
Quelques types prédéfinis
47
Type Forme lexicale
String Bonjour
boolean {true, false, 1, 0}
float 2345E3
double 23.456789E3
decimal 808.1
dateTime 1999-05-31T[Link]-05:00.
binary 0100
uriReference [Link]
….
Dérivation de types simples
48
Dérivation par restriction
Dérivation par extension
Dérivation par union
Dérivation par liste
Dérivation par restriction (1/3)
49
La dérivation par restriction restreint l’ensemble
des valeurs d'un type pré-existant.
La restriction est définie par des contraintes de
facettes du type de base: valeur min, valeur
max ...
Exemple :
<xsd:simpleType name= "ChiffresOctaux">
<xsd:restriction base="xsd:integer">
<xsd:minInclusive value="0" />
<xsd:maxInclusive value= 7" />
</xsd:restriction>
</xsd:simpleType>
Dérivation par restriction (2/3)
50
Les contraintes de facettes
lenght : la longueur d’une donnée.
minLenght: la longueur minimum.
maxLenght: la longueur maximum.
pattern: défini par une expression régulière.
enumeration: un ensemble discret de valeurs.
whitespace: contraintes de normalisation des chaînes relativement
aux espaces (preserve, replace, collapse).
maxInclusive: une valeur max comprise.
maxExclusive: une valeur max exclue.
minInclusive: une valeur min comprise.
minExclusive: une valeur min exclue.
totalDigits: le nombre total de chiffres.
fractionDigits: le nombre de chiffres dans la partie fractionnaire.
Dérivation par restriction (3/3)
51
Exemple d’une énumération
<xsd:simpleType name= "Mois">
<xsd:restriction base="xsd:string">
<xsd:enumeration value= "Janvier"/>
<xsd:enumeration value="Février"/>
<xsd:enumeration value="Mars"/>
<!-- ... -->
</xsd:restriction>
</xsd:simpleType>
Dérivation par extension
52
Dériver un nouveau type par extension consiste à ajouter à
un type existant des sous-éléments ou des attributs.
On obtient inévitablement un type complexe.
Exemple
<xsd:complexType name= "mesure">
<xsd:simpleContent>
<xsd:extension base="xsd:Decimal">
<xsd:attribute name="unite" type="xsd:NMTOKEN"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
<xsd:element name= "temperature" type= "mesure"/>
<temperature unite="Kelvin">230</temperature>
Dérivation par union
53
Pour créer un nouveau type on effectue l’union
ensembliste de toutes les valeurs possibles de
différents types existants.
Exemple:
<xsd:simpleType name="TransportFormatCaracteres">
<xsd:union memberTypes="base64Binary hexBinary"/>
</xsd:simpleType>
Dérivation par liste
54
Une liste permet de définir un nouveau type de
sorte qu’une valeur du nouveau type est une liste de
valeurs du type pré-existant (valeurs séparées par
espace).
Exemple
<simpleType name= "DebitsPossibles">
<list itemType=’nonNegativeInteger'/>
</simpleType>
<debitsmodemV90 xsd:type=’DebitsPossibles’> 33600 56000 <debitsmodemV90>