Introduction au Langage XML et ses Principes
Introduction au Langage XML et ses Principes
Inès MOUAKHER-ABDELMOULA
3ème LFIG
Plan
Introduction
Le langage XML
2
Evolution des technologies
3
Historique
• 1986 : SGML (Standard
Generalized Markup
Language, ISO:8879:1986
Trop complexe et coûteux !
• 1990: HTML 1.0 (HyperText XML (W3C)
Markup Language)
Application pauvre de SGML HTML (W3C)
4
Qu'est-ce que c'est ?
XML, eXtensible Markup Language
XML 1.0 recommandation du World Wide Web Consortium (W3C) (10 février
1998)
Sous-ensemble de SGML
Langage à balises
80% des fonctionnalités de SGML, 20% de sa complexité
Méta-langage
Balises personnalisées
Séparer le contenu, la structure et la présentation
Indépendant de toutes plate-formes et de tous langages
5
Principes
1. XML devra pouvoir être utilisé sans difficulté sur Internet
4. Il devra être facile d'écrire des programmes traitant les documents XML
6
Contenu, Structure et Présentation
Grammaire de document :
DTD : Document Type Definition
ou XML-Schéma
1 2 3 4
8
Le langage XML
Déclaration
Racine
Elément
Attribut
Entité
Règles du développement XML
Données structurées
XML permet de représenter des données structurées
données textuelles
organisées :
on manipule un document constitué d’éléments
un élément peut être constitué simplement 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 noeud de l’arbre
Le standard XML indique comment traduire l’arbre en un
document XML, pas comment organiser les données
10
Exemple : Annuaire
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 !)
11
Exemple : Annuaire
Solution 1
12
Exemple : Annuaire
Solution 2
13
Déclaration
Syntaxe
<?xml version="version" [encoding="encodage"][standalone="yes| no"]?>
14
Déclaration : Encoding
les parseurs xml doivent supporter au minimum utf-8 et utf-16.
L'encodage recommandé pour les documents XML est UTF-8,
garantissant portabilité et multilinguisme.
UTF-16 est un autre format permettant l'encodage de
documents XML.
Il est également possible d'utiliser un encodage spécifique,
exemple ISO 8859-1, pour les langues latines
<?xml version="1.0" encoding="ISO-8859-1"?>.
Voir [Link]
Latin/Arabe : ISO-8859-6,
Latin/Lapon/Nordique/Esquimau : ISO-8859-10;
Japonais : EUC-JP
15
Imbrication des éléments
Tout document XML doit comporter une racine
Chaque élément du document XML peut contenir un ou
plusieurs éléments.
Chaque document XML est hiérarchisé dans une
arborescence.
Les balises d’ouverture et de fermeture des éléments
fils doivent toujours être comprises entre les balises
d’ouverture et de fermeture des parents.
16
Élément
La base d’un document XML
Non de l’élément Attribut
21
Les attributs
Objectif: Associer des informations complémentaires aux
éléments.
<montant monnaie= "DT" > 24 </montant>
Les noms des attributs suivent les mêmes règles que celles des
noms des éléments.
Un élément peut posséder un ou plusieurs attributs dans la
balise d’ouverture.
Le nom de l’attribut est unique pour un élément donné.
La valeur de l’attribut doit obligatoirement être entre " ".
Les guillemets (" ") peuvent être remplacés par des
apostrophes (‘ ‘)
22
Entité
Appel d'une entité dans un document : &nom_entite;
Les caractères réservés de XML sont remplacés par des
entités internes. Ces caractères sont les mêmes qu'en
HTML: & < > " '. Les entités qui permettent de les
représenter sont respectivement & < >
" '
Tous les caractères peuvent être remplacés par une
entité qui donne leur code &#code_car;
Exemple: A pour le A
Déclaration d’une entité: <!ENTITY deg "°">
exemple : il fait 25°C.
23
Commentaire
24
Règles de développement d’un
document XML
Un document XML est bien formé (l'analyseur XML peut construire
son arborescence) si :
il contient une déclaration XML ;
il contient un ou plusieurs éléments ;
il contient un élément racine encapsulant tous les autres
éléments et leurs attributs
les éléments non vides ont une balise de début et de fin ;
les éléments non vides sont correctement imbriqués
les éléments vides ont un / à la fin de la balise avant le > ;
les noms des balises ouvrantes et fermantes correspondent ;
un nom d'attribut apparaît uniquement dans la balise ouvrante
et une seule fois dans cette balise ;
25
Règles de développement d’un
document XML
les valeurs des attributs sont entre guillemets ou apostrophes ;
la valeur des attributs n'appelle pas d'entités externes
directement ou indirectement ;
les caractères réservés sont remplacés par des références
d'entités (par ex. < pour <) ;
toutes les références à des entités doivent commencer par & et
finir par ;
s'il n'y a pas de DTD, les seules entités utilisées sont celles
réservées de XML & < > ' " ;
s'il y a une DTD toutes les entités non réservées utilisées sont
déclarées dans la DTD.
26
Bibliographie
[Link]
[Link]
[Link]
[Link]
[Link]
ne[Link]
27
DTD
(DOCUMENT TYPE
DEFINITION)
28
Plan
Définition de DTD
Déclaration d’une DTD
Déclaration des éléments
Déclaration d’entités
Déclaration des attributs
Exemple de DTD interne
Insuffisance des DTD
29
Bien formé / Valide
Document bien formé
Un seul élément racine
Balises correctement imbriquées : balise ouvrantes ont une balise
fermante associée et il n'y a pas de chevauchement …
Le nom des balises est libre mais contient au moins une lettre en
début
Les attributs des balises ont obligatoirement une valeur qui doit
apparaître entre double ou simple quotes.
Document valide
Associé à une définition de type de document et qu'il la respecte
Noms des éléments
Type
Répétition et ordre d'apparition
Validation des documents XML
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
Structures assez complexes
31
Définition
But : Définir une structure type de document XML.
Une grammaire qui décrit la façon de construire les
documents XML.
Une DTD définit la filiation des éléments :
Quelle est la racine du document ?
Qui doit/peut avoir quels fils ?
Quels sont les éléments (attributs) obligatoires et ceux
optionnels ?
Combien d’enfants possède un élément ?
Quels éléments peuvent contenir du texte ?
Quelles sont les valeurs des attributs ?
32
Exemple de DTD
<!ELEMENT MEMBRE
(LOGIN, NOM?, PRENOM?,MEL, TEL+, FAX*, EQUIPE)>
<!ELEMENT LOGIN EMPTY>
<!ATTLIST LOGIN id ID #REQUIRED>
<!ELEMENT NOM (#PCDATA)>
...
<!ENTITY RDP "Recherche et Développement Produits">
<!ENTITY eacute "é">
<!ENTITY chap1 SYSTEM "[Link]
...
33
Déclaration d’une DTD - Interne
Syntaxe
<!DOCTYPE élément-racine [
déclaration des éléments
]>
Exemple
<?xml version="1.0" standalone="yes"?>
<!DOCTYPE parent [
<!ELEMENT parent (garcon,fille)>
<!ELEMENT garcon (#PCDATA)>
<!ELEMENT fille (#PCDATA)>
]>
<parent>
<garcon>Loic</garcon>
<fille>Marine</fille>
</parent>
34
Déclaration d’une DTD – Externe
Syntaxe
<!DOCTYPE élément-racine SYSTEM "nom_du_fichier.dtd">
Exemple
<?xml version="1.0" standalone="no"?>
<!DOCTYPE parent SYSTEM "[Link]">
<parent>
<garcon>Loic</garcon>
<fille>Marine</fille>
</parent>
36
Déclaration des éléments (2/4)
La règle peut faire référence à séquence d’éléments fils
Séquence ordonnée : (fils1,fils2,fils3)
<!ELEMENT date(mois,annee)>
37
Déclaration des éléments (3/4)
38
Déclaration des éléments (4/4)
39
Occurrence des éléments
Occurrence
* : 0 à n occurrences
+ : au moins 1 occurrences
? : 0 ou 1 occurrence
<!ELEMENT livre (titre,auteur+)>
40
Déclaration d’entités (1/3)
Entité paramétrée
L’entité paramétrée n’apparaît qu’au niveau de la
DTD, elle est remplacée par sa définition dans la DTD.
Exemple : La déclaration qui suit
<!ENTITY %pcdata "(#PCDATA)">
41
Déclaration d’entités (2/3)
Entité externe
Faire une référence à des entités externes à
travers la syntaxe suivante
<!ENTITY exp SYSTEM "[Link] >
42
Déclaration d’entités (3/3)
43
Déclaration des attributs
<!ATTLIST nom_elmt nom-attribut
type_attribut val_defaut >
44
Déclaration des attributs
45
Déclaration des attributs
Types possibles pour les attributs :
Chaîne de caractère littéral
<!ATTLIST soc name CDATA #IMPLIED>
48
Déclaration des attributs
ENTITY, ENTITIES référence à une ou plusieurs entités externe non XML
<!NOTATION gif SYSTEM "C:\Program\[Link]">
<!ENTITY LigneBleu SYSTEM "[Link]" NDATA gif>
<!ELEMENT separateur EMPTY>
<!ATTLIST separateur img ENTITY #REQUIRED>
50
Exercice (Catalogue de films)
On se propose de définir un format XML de stockage
d’un catalogue de films sur DVD.
Le catalogue comprend un ensemble de fiches de films
Chaque fiche comprend:
Un numéro unique
Le titre du film
Un ou plusieurs réalisateurs
Un ou plusieurs éditeurs
Les acteurs principaux
Le genre du film (comédie, horreur, action…) (en option)
Un commentaire optionnel qui présente brièvement l’histoire du film
Un lien éventuel vers le site du film
51
Exercice (Catalogue de films)
<!--premier niveau: cataloque -->
<!ELEMENT cataloguedvd (fiche)*>
<!--deuxième niveau: fiche -->
<!ELEMENT fiche (titre, technique,commentaire?,internet?)>
<!ATTLIST fiche genre (Horreur|Action|comédie|inconnu) #IMPLIED>
<!ATTLIST fiche numero ID #REQUIRED>
<!--troisième niveau: sous éléments de ‘fiche’ -->
<!ELEMENT titre (#PCDATA)>
<!ELEMENT commentaire (#PCDATA)>
<!ELEMENT internet (#PCDATA)>
<!ELEMENT technique (realisateur+,editeur+,acteur*)>
<!--quatrième niveau: sous éléments de ‘technique’ -->
<!ELEMENT realisateur (#PCDATA)>
<!ELEMENT editeur (#PCDATA)>
<!ELEMENT acteur (#PCDATA)>
52
Insuffisance des DTD
54
Afficher des documents XML
55
Cascading Style Sheets
56
Exemple : document XML
57
Exemple : Affiché dans le navigateur
58
Exemple : fichier .css
<style type="text/css"> date {
racine , enfant {} display: block;
nom { font-size: 12pt;
display: block; color: red ;
width: 250px; font-weight: bold;
font-size: 16pt ; padding-left: 10px;
font-family: arial ; }
font-weight: bold; data {
background-color: teal; display: block;
color: white; font-size: 11pt ;
padding-left: 10px; font-style: italic;
} font-family: arial ;
lien { padding-left: 10px;
display: block; }
font-size: 12pt; </style>
padding-left: 10px;
}
59
Exemple : Affiché dans le navigateur
On ajoute un lien vers le fichier css dans le
fichier xml : <?xml-stylesheet href="[Link]" type="text/css"?>
On obtient :
60
eXtensible Stylesheet Language
Décrit la manière dont les documents
XML seront affichés, imprimés ou ...
prononcés
+ XSL Indépendant du média de sortie
XML
61
eXtensible Stylesheet Language
62
Afficher le XML avec XSL
63
XML SCHÉMA
64
Plan
Introduction
En-tête
Référence à un Schéma XML
Déclarations d'éléments
Les attributs
Groupage d’éléments
65
Introduction
Un schéma d'un document définit:
les éléments possibles dans le document
les attributs associés à ces éléments
la structure du document et les types de données
Le schéma est spécifié en XML
pas de nouveau langage
balisage de déclaration
utilise un espace de nom xs: (ou xsd:)
Présente de nombreux avantages
types de données personnalisés
La notion d'héritage. Les éléments peuvent hériter du contenu
et des attributs d'un autre élément..
Le support des espaces de nom.
66
En-tête
Un document Schema XML est défini dans un fichier dont
l’extension est *.xsd ([Link])
Comme tout document XML, un Schema XML commence par un
prologue, et a un élément racine.
La balise <schema> est la balise racine de tous documents
Schema XML
Le corps de la balise <schema> décrit le contenu de la
grammaire
67
En-tête
La configuration du document Schema XML est effectuée
par l’intermédiaire des attributs de la balise <schema>
<schema
id=ID
attributeFormDefault=qualified|unqualified
elementFormDefault=qualified|unqualified
blockDefault=(#all|list of (extension|restriction|substitution))
finalDefault=(#all|list of (extension|restriction|list|union))
targetNamespace=anyURI
version=token
xmlns=anyURI
any attributes>
68
En-tête : Exemple
L'espace de nommage des éléments Précise que les éléments définis
définis par la norme W3C (ex : dans le Schema XML sont issus
schemaLocation) dans un autre espace de nommage
71
Déclarations d'éléments
La base d’un schéma XML: l’élément
Un élément dans un Schema XML se déclare avec la
balise <element>
Un élément est typé, il doit donc respecter une
structure de données
Deux types de données sont à distinguer : types
simples et types complexes
Type Simple si sa valeur a un type prédéfini en
XMLSCHEMA (string, int, decimal, double…) ou une
extension de ces types
Complexe s’il contient des sous éléments ou s’il
72
comporte un attribut
Eléments de type simple
Un élément de type simple est un élément qui ne contient pas
d’attribut ni de sous éléments
Un élément se base sur un type simple prédéfini par la norme
ou sur un type simple dérivé (voir dans Restrictions)
Syntaxe d’un élément de type simple
<xs:element name="…" type="…"/>
Exemples
<xs:element name="firstName" type=“xs:string" />
Du côté XML, la balise firstName contient un corps avec une valeur
de type chaîne de caractères
<firstName> Mickael </firstName>
73
Types simples
string date
Chaine de Caractères 1999-05-31
integer ID
-126789 – >126789 "A212 "
positiveInteger dateTime
1 -> 126789 1999-05-31T[Link].000-
negativeInteger 05:00
-126789 -> -1 Et beaucoup d’autres
Boolean Short, long, floatA….
true, false 1, 0 74
Types simples – Restrictions (1/4)
Les restrictions sur les types simples (Facets) permettent de
dériver de nouveaux types à partir de types existants
La création de nouveaux types simples est réalisée au travers
de la balise <simpleType>
<simpleType name="newType" >
...
</simpleType>
La restriction de type permet de définir des contraintes sur le
nouveau type à créer
La restriction est exprimée à partir de la balise <restriction>
<simpleType name="newType" >
<restriction base="type" >
...
</restriction>
</simpleType> 75
Types simples – Restrictions (2/4)
La définition de l’ensemble des restrictions est disponible à
[Link]/TR/xmlschema-0/#SimpleTypeFacets
maxExclusive : limite supérieure (exclue)
maxInclusive : limite supérieure (incluse)
minExclusive : limite inférieure (exclue)
minInclusive : limite inférieure (incluse)
enumeration : liste de valeurs autorisée
length : nombre de caractères ou d’élément d’une liste autorisé
minLength : nombre minimum de caractères ou d’élément d’une liste
pattern : expression régulière à respecter
fractionDigits : nombre maxi de digits autorisé
totalDigits : nombre exact de digits autorisé
whiteSpace : politique de gestion des espaces blancs (tab, retour
ligne, fin de ligne, …)
76
Types simples – Restrictions (3/4)
Exemple 1 Exemple 2
Restriction sur des valeurs Restriction sur une liste valeur autorisée
<simpleType name="ageType"> <simpleType name="sexeTypeChild" >
<restriction base="integer"> <restriction base="string">
<minInclusive value="1" /> <enumeration value="homme" />
<maxInclusive value="100" /> <enumeration value="femme" />
</restriction> <enumeration value="indéterminé" />
</simpleType> </restriction>
</simpleType>
Exemple 3
Restriction à partir d’une expression régulière
<simpleType name="emailType">
<restriction base="string">
<pattern value=".*@.*" />
</restriction>
</simpleType>
77
Types simples – Restrictions (4/4)
L'utilisation d'un nouveau type impose d'exploiter l'espace de
nommage du Schema XML en cours
La création d’un nouveau type peut être anonyme, de ce fait
aucune valeur n’est précisée dans l’attribut name de la balise
simpleType
Une déclaration d’un type anonyme doit se faire dans le corps
d’un élément ou d’un attribut simple
L'utilisation de types anonymes ne permet pas de réutiliser les
nouveaux types définis, ils ne sont utilisables qu'une seule fois
Exemple: <element name="old" />
<simpleType>
<restriction base="integer">
<minInclusive value="1" />
<maxInclusive value="100" />
</restriction>
</simpleType> 78
</element>
Les attributs
l’attribut est toujours déclaré comme un type simple
Syntaxe d’un attribut de type simple
<attribut name="theName" type="theType" use="required" />
80
Types complexes - généralités
Un élément de type complexe peut contenir d'autres éléments
et / ou des attributs
Un attribut ne peut être de type complexe
Quatre combinaisons d'éléments complexes sont à distinguer
Eléments vides qui ne contiennent que des attributs
Eléments de type simple qui contiennent des attributs
Eléments qui peuvent contenir des sous éléments
Eléments qui peuvent contenir des sous éléments et des attributs
82
Types complexes –
Une simple valeur et des attributs (1/2)
Il s'agit d'un élément de type complexe qui peut contenir une simple
valeur dans son corps et des attributs
Exemple:
<tns:child tns:old="3" tns:sexe="homme" >Tom</tns:child>
<xs:element name="child">
<xs:complexType>
<xs:simpleContent>
<xs:extension base=" xs:string">
<attribute name="old" type="tns:ageTypeChild" />
<attribute name="sexe" type="tns:sexeTypeChild" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
84
Les types complexes - Sous éléments
85
Types complexes –
Sous éléments (Séquences)
Dans une DTD, nous pouvons déclarer un élément comme
pouvant contenir une suite de sous-éléments dans un ordre
déterminé
On utilise l'élément xsd:sequence, qui reproduit l'opérateur , du
langage DTD
<xsd:complexType>
<xsd:sequence>
<xsd:element name="nom" type="xsd:string" />
<xsd:element name="prénom" type="xsd:string" />
<xsd:element name="dateDeNaissance" type="xsd:date" />
<xsd:element name="adresse" type="xsd:string" />
<xsd:element name="adresseElectronique" type="xsd:string" />
<xsd:element name="téléphone" type="numéroDeTéléphone" />
</xsd:sequence>
</xsd:complexType>
86
Types complexes –
Sous éléments (Choix)
88
Types complexes –
Sous éléments (occurrences)
Les indicateurs d'occurrence sont utilisés pour exprimer le
nombre de fois qu'un sous élément peut apparaître
Ils sont exprimés sous la forme d'attributs d'un sous élément
maxOccurs : précise le nombre d'occurrence maximum
minOccurs : précise le nombre d'occurrence minimum
Si les valeurs de maxOccurs ou minOccurs ne sont pas
explicitement précisées, la valeur par défaut est de 1
Pour définir une valeur infinie, fixer la valeur à unbounded
Exemple : Une bibliothèque contient au moins un livre
<xs:element name="biblio">
<xs:complexType>
<xs:sequence>
<xs:element name="livre" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
89
</xs:element>
Types complexes –
Sous éléments (occurrences)
Dans une DTD Valeur de minoccurs Valeur de maxOccurs
* 0 unbounded
+ 1(pas nécessaire, valeur unbounded
par défaut)
? 0 1(pas nécessaire, valeur par
défaut)
90
Types complexes –
sous éléments et des attributs
Un élément de type complexe contenant des sous éléments
peut également contenir des attributs
<element name="person">
<complexType>
<sequence>
<element name="name" type="string" />
<element name="firstName" type="string" />
<element name="old" type="tns:ageType" />
<element name="email" type="tns:ageType" />
</sequence>
<attribute name="userId" type="string" />
</complexType>
</element>
91
Types complexes :
complexContent
Possibilité de définir un nouveau type complexe sur la base d'un
type complexe existant de manière à étendre ou à restreindre
les éléments
Utilisation de la balise complexContent
Exemple
<complexType name="Address"> <complexType name="USAddress">
<sequence> <complexContent>
<element name="name" type="string" /> <extension base="tns:Address">
<element name="street" type="string" /> <sequence>
<element name="city" type="string" /> <element name="state" type="string" />
</sequence> <element name="zip" type="string" />
</complexType </sequence>
</extension>
</complexContent>
</complexType>
Le type Address définit
trois sous éléments en Le type USAddress propose une extension
92
séquence avec deux nouveaux sous éléments en séquence
Exercice
On se propose de définir un format XML qui est utilisé
pour décrire une personne
Soit les contraintes suivantes qui devront être respectées
Une personne doit définir un nom puis un prénom puis un âge et peut
définir un email puis des renseignements sur ces enfants
L’ âge est un entier compris entre 1 et 100
L’email est une chaîne de caractères qui doit contenir le caractère @
Les renseignements concernant les enfants portent sur l’ âge
(obligatoire), le sexe (obligatoire) et une remarque (facultative)
L’ âge de l’enfant est une restriction de l’ âge de la personne dont la
valeur maxi est modifiée à 50
Le sexe est un énuméré (homme, femme et indéterminé)
Il ne peut y avoir plus de 3 enfants
93
jsjm
94
95
ANNEXE
96
XML-Namespace
97
The schema element defines the root
element of a schema
Attribute Description
id Optional. Specifies a unique ID for the element
attributeFormDefault Optional. The form for attributes declared in the target namespace of this schema. The value must
be "qualified" or "unqualified". Default is "unqualified". "unqualified" indicates that attributes from
the target namespace are not required to be qualified with the namespace prefix. "qualified"
indicates that attributes from the target namespace must be qualified with the namespace prefix
elementFormDefault Optional. The form for elements declared in the target namespace of this schema. The value must
be "qualified" or "unqualified". Default is "unqualified". "unqualified" indicates that elements from
the target namespace are not required to be qualified with the namespace prefix. "qualified"
indicates that elements from the target namespace must be qualified with the namespace prefix
blockDefault •Optional. Specifies the default value of the block attribute on element and complexType elements
in the target namespace. The block attribute prevents a complex type (or element) that has a
specified type of derivation from being used in place of this complex type. This value can contain
#all or a list that is a subset of extension, restriction, or substitution: extension - prevents complex
types derived by extension
•restriction - prevents complex types derived by restriction
•substitution - prevents substitution of elements
•#all - prevents all derived complex types
finalDefault •Optional. Specifies the default value of the final attribute on element, simpleType, and
complexType elements in the target namespace. The final attribute prevents a specified type of
derivation of an element, simpleType, or complexType element. For element and complexType
elements, this value can contain #all or a list that is a subset of extension or restriction. For
simpleType elements, this value can additionally contain list and union: extension - prevents
derivation by extension
•restriction - prevents derivation by restriction
•list - prevents derivation by list
•union - prevents derivation by union
•#all - prevents all derivation
targetNamespace Optional. A URI reference of the namespace of this schema
version Optional. Specifies the version of the schema
xmlns A URI reference that specifies one or more namespaces for use in this schema. If no prefix is
assigned, the schema components of the namespace can be used with unqualified references
any attributes Optional. Specifies any other attributes with non-schema namespace 98