Vous êtes sur la page 1sur 24

‫المدرسة الوطنية العليا لإلعالم اآللي‬

Ecole nationale Supérieure d’Informatique

Ecole Doctorale  Si un document XML respecte les règles de la grammaire XML on dit qu'il est bien
formé.
Promotion 2012-2013
 Les règles d'un document bien formé

 Toute balise ouverte doit être fermée, Ex: <livre> </livre>

 L'ensemble des balises est correctement imbriqué. Ex : Entrelacement mal


formé <p> <b> ….</p> </b>

 Les valeurs d'attributs sont entre guillemets"

 Les balises uniques correspondent à des documents vides et sont notées: Ex : <IMG
source="image.gif"/>

 Les caractères < & sont notés &lt; &amp;


Présenté par : Dr. Kamel Boukhalfa
 Un document commence par une déclaration XML
boukhalk@gmail.com, kboukhalfa@usthb.dz
 <?xml version="1.0" encoding ="iso-8859-1" standalone="yes"?>
Source :
Serge Abiteboul, George Gardarin
1 2

1
 Déclaration de type de document : DTD 'Document Type Definition ’ une notion  <!ELEMENT nom_élément (contenu_élément) >
héritée de SGML permettant la définition formelle d’un type de document.
 Le nom de l'élément : le nom de la balise dans un
 Une information de niveau méta pour qu'un analyseur puisse vérifier la document.
conformité d’un document à une spécification de type (notion de document
valide).  Contenu: un type de base (chaîne de caractères avec
des variantes) ou un type construit (en fait une séquence
 intitulé des balises et de leurs attributs,
d'éléments).
 imbrication des balises (structure d’arbre du document),
 EMPTY : Chaîne vide
 caractère obligatoire/facultatif de certaines infos.
 <! ELEMENT elem (EMPTY)>
 Pour un document XML une DTD est optionnelle:  Eléments vides: support d'attributs

 En son absence: on constate une structure.  #PCDATA : ('Parsed Character DATA') : Chaîne de caractères devant être
parsée.
 En sa présence: on contraint la conformité d'un document XML.
 ANY : Une chaîne quelconque.

3 4

2
 Élément avec fils : Types d'éléments construits à partir d'autres types d'éléments (types  <!ELEMENT personne (nom, prenom+, tel?, adresse) >
article).  <!ELEMENT nom (#PCDATA) >

 On peut préciser la structure (séquence) des fils au moyen de constructeurs.  <!ELEMENT prenom (#PCDATA) >

 <!ELEMENT tel(#PCDATA) >


 Nom_élément une seule occurrence
 <!ELEMENT email (#PCDATA) >
 Nom_élément* 0, 1 ou n occurrences
 <!ELEMENT adresse (ANY) >
 Nom élément+ 1 ou n occurences
 <personne>
 Nom_élément? 0 ou 1 occurrence (valeur optionnelle)
<nom>Karim</nom>
 Nom1|Nom2 alternative
<prenom>Salim</prenom>
 , () séquence et parenthèses
<prenom>Amine</prenom>

 Types éléments 'mixtes‘ : des éléments et des chaînes <tel>025234567</tel>

 <!ELEMENT mémoire (titre, résumé, remerciements?, introduction, chapitre+, conclusion, <adresse><rue></rue><ville>Blida</ville></adresse>


bibliographie,#PCDATA) >
</personne>
5 6

3
 Les listes d'attributs 'ATTLIST' définissent pour un élément la  Trois catégories de types: chaînes, listes de
liste des attributs de cet élément avec leurs propriétés.
chaînes, valeurs énumérées.
 Nom de l'attribut, Type de l'attribut, Valeur par défaut.
 CDATA : Les valeurs possibles sont des chaînes de
 <!ATTLIST nom_element nom_attribut1 type1 défaut1 …
nom_attributn typen défautn> caractères non analysées par le parseur.
 Le paramètre défaut  Ex: <!ATTLIST fichier cheminaccès CDATA #REQUIRED>

 #REQUIRED: attribut obligatoire à fournir.  ID: Les valeurs sont des identifiants uniques.
 #IMPLIED : attribut optionnel.
 Ex: <!ATTLIST dossier ident ID #REQUIRED nom CDATA #IMPLIED>
 #FIXED 'value': attribut de valeur invariable égale à 'value'.
 IDREF : référence à une clé
 'value': une valeur pour l'attribut quand elle n'est pas donnée.

7 8

4
<! ATTLIST personne
 Valeurs énumérées : Soit des notations de
num ID,
valeurs déjà définies soit des valeurs. age CDATA,

Séparation par des barres (val1|val2|…) genre (Masculin | Feminin ) >

 ENTITY, ENTITIES : la valeur est un nom d'entité <!ELEMENT auteur (#PCDATA) >

déclaré et existant (resp une liste de noms). <!ELEMENT editeur (#PCDATA) >

<!ATTLIST auteur
 NOTATION: La valeur est le nom d'une genre (Masculin | Feminin ) #REQUIRED
ville CDATA #IMPLIED>
notation. <!ATTLIST editeur
ville CDATA #FIXED "Alger">

9 10

5

 Permet la définition d'un groupe d'éléments sous un <!ENTITY UB « Université de Blida">

 <!ENTITY UBDesc SYSTEM "http://www.USDB.dz/description.xml">


nom (macro)
 <!ENTITY dr « Pr. Saad">
 <!ENTITY nom_de_l_entite "Contenu de l'entite">  <!ENTITY copyright "&#xA9;">

 Réutilisable dans une DTD par simple appel : &nom;  <!ENTITY explication SYSTEM « annexe1.xml">

<Université>

 Exemple : <Nom>&UB</nom><Directeur>&dr</Directeur><desc>&explication</desc>

</Université>
 <!ENTITY genres "(homme | femme)">
<!ATTLIST auteur genre &genres; #REQUIRED> <Université>

<Nom> Université de Blida</nom><Directeur> Pr. Saad </Directeur><desc>Tout


 Peuvent être externes :
le contenu du fichier annexe1.xml …</desc>
 <!ENTITY mpeg PUBLIC "http://www.myweb.fr/fic.dtd"> </Ecole>
11 12

6
1. On ne déclare pas de DTD (dans ce cas le fichier est juste "bien formé")  Lieu de la déclaration

2. On déclare la DTD et on y ajoute les définitions dans le même fichier (DTD  La DTD est déclarée entre la déclaration de XML et le document lui-
interne) même.
 On parle dans ce cas d'un XML "standalone" (le fichier XML se suffit à lui-même)
 La déclaration de XML et celle de la DTD font parti du prologue
3. On déclare la DTD en tant que DTD "privée", la DTD se trouve quelque part
<?xml version="1.0" encoding="ISO-8859-1" ?>
dans votre système ou sur Internet
<!DOCTYPE Racine SYSTEM "Fichier-DTD">
 répandu pour les DTDs "faites maison"

4. On déclare une DTD "public", c.a.d. on utilise un nom officiel pour la DTD.
 Exemple DTD Externe
 cela présuppose que votre éditeur et votre client connaissent cette DTD

 répandu pour les DTDs connues comme XHTML, SVG, MathML, etc. <?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE Livres SYSTEM "Book.DTD">


13 14

7
 Syntaxe pour définir une DTD interne (seulement !) <!ENTITY xml "Extensible Markup Language">

<!ENTITY sgml "Standard Generalized Markup Language">


 La DTD sera insérée entre [ ... ]

<!ENTITY pxa "Professional XML Authoring">


<!DOCTYPE Livres[
<!ENTITY % TEXT "(#PCDATA|CODE|KEYWORD|QUOTATION)*">
<!ELEMENT Livres(Livre+)>
<!ENTITY % BLOCK "(PARA|LIST)+">

<!ELEMENT Livre(Titre, Auteur+, Chapitres+> <!ENTITY % BODY "(%BLOCK;|EXAMPLE|NOTE)+">

…… <!NOTATION GIF SYSTEM "">

<!NOTATION JPG SYSTEM "">


]>
<!NOTATION BMP SYSTEM "">
15 16

8
<!ELEMENT REPORT (TITLE,(SECTION|SHORTSECT)+)>
 Proposer une DTD pour la modélisation des publications
<!ELEMENT SECTION (TITLE,%BODY;,SUBSECTION*)> scientifiques (Articles de conférences, Articles de Revue, etc.)
<!ELEMENT SUBSECTION (TITLE,%BODY;,SUBSECTION*)>
 Proposer un fichier XML supportant cette DTD
<!ELEMENT SHORTSECT (TITLE,%BODY;)>

<!ELEMENT TITLE %TEXT;>

<!ELEMENT PARA %TEXT;>

<!ELEMENT LIST (ITEM)+>

<!ELEMENT ITEM (%BLOCK;)>

<!ELEMENT CODE (#PCDATA)>

<!ELEMENT KEYWORD (#PCDATA)>

<!ELEMENT EXAMPLE (TITLE?,%BLOCK;)>

<!ELEMENT GRAPHIC EMPTY>

<!ATTLIST REPORT security (high | medium | low ) "low">

<!ATTLIST CODE type CDATA #IMPLIED>

<!ATTLIST GRAPHIC file ENTITY #REQUIRED>

17 18

9
 Les DTD ne sont pas écrites en XML, ce qui signifie que les

technologies existantes pour manipuler des documents XML telles

que DOM ou SAX ne peuvent être utilisées pour « parser » des

schémas de documents.

 Les DTD ne supportent pas les espaces de nom ce qui rend

impossible l’import de schémas externes afin de réutiliser du code

existant.

 Les DTD n'offrent qu'un typage très limité des données.


19 20

10
 XML est un outil d’avenir pour l’échange, le stockage et  Décision complexe au sein du consortium WEB (W3C) pour arbitrer entre les
différentes propositions.
l’affichage des données sur Internet.
 Unification autour d’un projet de recommandation, adopté définitivement en
 Un problème majeur de XML 1.0 (dans sa définition de mai 2001 : XML Schéma

base) concerne son approche du typage => DTD  XML schéma est l’analogue:

‘Document Type Definition’.  D’un langage de définition de données DDL (‘Data Definition Language’) des bases
de données et un document est l’analogue d’un article d ’une base de données.
 L’objectif n’est pas atteint pour des applications
 D’un langage évolué dans sa partie définition de données comme C++ ou Java. Un
informatiques: la définition des types par les DTD est trop schéma définit l’analogue d ’une classe et un document est une instance de cette
classe.
orientée documents textuels.
 Un document XML doit pouvoir être validé relativement à son schéma.
 Conséquence : nombreuses propositions pour améliorer le
typage en XML.
21 22

11
 Un grand nombre de types de données intégrées comme les booléens, les entiers, les  Fournir des types primitifs analogues à ceux qui existent en
intervalles de temps, etc. De plus, il est possible de créer de nouveaux types par ajout de SQL ou en Java.
contraintes sur un type existant.
 Définir un système de typage suffisamment riche pour
 Des types de données utilisateurs qui nous permettent de créer notre propre type de importer/exporter des données d’une base de données.
données nommé.
 Distinguer les aspects reliés à la représentation lexicale des
 La notion d'héritage : Les éléments peuvent hériter du contenu et des attributs d'un autre données de ceux gouvernant les ensembles de données
élément. C'est sans aucun doute l'innovation la plus intéressante de XML Schema. sous-jacents.

 Le support des espaces de nom.  Permettre de créer des types de données usagers dérivés
de types existants en contraignant certaines propriétés
 Les indicateurs d'occurrences des éléments peuvent être tout nombre non négatif.
(domaine, précision, longueur, format).
 Une grande facilité de conception modulaire de schémas.
23 24

12
 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.

25 26

13
 lenght : la longueur d’une donnée.
Type Forme lexicale
 minLenght : la longueur minimum.
 String Bonjour
 maxLenght : la longueur maximum.
 boolean {true, false, 1, 0}
 pattern : défini par une expression régulière.
 float 2345E3
 enumeration : un ensemble discret de valeurs.

 double 23.456789E3  whitespace : contraintes de normalisation des chaînes relativement aux espaces (preserve,
replace, collapse).
 decimal 808.1
 maxInclusive : une valeur max comprise.
 dateTime 1999-05-31T13:20:00-05:00.
 maxExclusive : une valeur max exclue.
 binary 0100
 minInclusive : une valeur min comprise.
 uriReference http://www.cnam.fr  maxInclusive : une valeur min exclue.

 totalDigits : le nombre total de chiffres.

 ….  fractionDigits : le nombre de chiffres dans la partie fractionnaire.

27 28

14
 Un schéma XML est un document XML.

<?xml version="1.0" encoding="ISO-8859-1"?>

<xsd:schema mlns:xsd="http://www.w3.org/2000/10/XMLSchema">

<xs:element name=“personne">

<xs:complexType>

<xs:sequence>

<xsd:element name="nom" type="xsd:string" />

<xsd:element name= "prenom" type="xsd:string" />

<xsd:element name= "DateN" type="xsd:date" />

</xs:sequence>

<xs:attribute name= " nss" type="xs:decimal"/>

</xs:complexType>

</xs:element>

</xsd:schema>

29 30

15
<!DOCTYPE une_DTD_adresse
<?xml version="1.0"?>
[ <!ELEMENT Addresse_postale_dz
<Addresse_postale_dz pays="Algérie">
(nom, rue, ville, wilaya, code_postal)>
<nom>Mr Karim Omar</nom> <!ELEMENT nom (#PCDATA)>
<rue>rue 1er Novembre</rue> <!ELEMENT rue (#PCDATA)>

<ville>Bab Ezzouare</ville> <!ELEMENT ville (#PCDATA)>

<!ELEMENT wilaya (#PCDATA)>


<wilaya>Alger</wilaya>
<!ELEMENT code_postal (#PCDATA)>
<code_postal>16000</code_postal>
<!ATTLIST Addresse_postale_dz
</Addresse_postale_dz> pays NMTOKEN #FIXED ‘Algérie’ > ]>
31 32

16
<xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema">
 Un schéma XML est construit par assemblage de différents
<xsd:complexType name="Addresse_postale_dz" >

<xsd:sequence> composants.
<xsd:element name="nom" type="xsd:string" />

<xsd:element name="rue" type="xsd:string" />


 Composants de définition de types
<xsd:element name="ville" type="xsd:string" />
 Définition de types simples (Simple type).
<xsd:element name=« wilaya" type="xsd:string" />

<xsd:element name="code_postal" type="xsd:decimal" />  Définition de types complexes (Complex type).


</xsd:sequence>
 Composants de déclaration
<xsd:attribute name= "pays" type="xsd:NMTOKEN"

use="fixed" value=« Algérie"/>  Déclaration d’éléments.


</xsd:complexType>

</xsd:schema>
 Déclaration d’attributs.

33 34

17
 Un élément XML est déclaré par la balise ‘element’  Un attribut est une valeur nommée et typée associée à un
élément.
de XML schéma qui a de nombreux attributs.
 Le type d’un attribut défini en XML schéma est
 Les deux principaux attributs sont:
obligatoirement simple.
- name : Le nom de l’élément (de la balise associée).
<xsd:complexType name="TypeRapport">
- type : Le type qui peut être simple ou complexe. <xsd:attribute name= "Date_creation" type="xsd:date"/>

…...

Exemple de base </xsd:complexType>

<xsd:element name="code_postal" type="xsd:decimal"/> <xsd:element name="Rapport" type="TypeRapport"/>

35 36

18
 L'élément attribute de XML Schema peut avoir deux  Use = required : L’attribut doit apparaître et prendre la valeur
fixée si elle est définie.
attributs optionnels : use et value.
 Use= prohibited : L’attribut ne doit pas apparaître.
 On peut ainsi définir des contraintes de présence et
 Use = optional : L’attribut peut apparaître et prendre une
de valeur.
valeur quelconque.
 Selon ces deux attributs, la valeur peut:  Use= default : Si l’attribut à une valeur définie il la prend sinon il
prend la valeur par défaut.
être obligatoire ou non
 Use= fixed : La valeur de l’attribut est obligatoirement la valeur
être définie ou non par défaut. définie.
 Exemple: <xsd:attribute name= "Date_peremption"  Exemple : <xsd:attribute name= "Date_creation"
type="xsd:date" use="default" value= "2012-12-31"/> type="xsd:date" use="required"/>

37 38

19
39

 ‘SimpleType’ permet de définir des éléments ou


des attributs non structurés : dérivés d’une
DTD Attribut use Attribut default
chaîne, d’un entier etc
#REQUIRED required -
"Valeur" #REQUIRED required Valeur  Types simples prédéfinis au sens de la norme XML
#IMPLIED optional - Schémas ‘ datatypes’: string, integer, boolean ...
"Valeur" #IMPLIED optional Valeur
- prohibited - <xsd:element name="code_postal " type="xsd:integer"/>

La valeur de l'attribut default doit être conforme au type déclaré  Types simples définis par dérivation d'un autre type
simple, au moyen de l’élément <xsd:simpleType ...>
Exemple

<xsd:attribute name="maj" type="xsd:date" use="optional" default="-43" />


39 40

20
 Décimal avec deux chiffres après la virgule
<xsd:simpleType name= "Mois">
<xsd:simpleType name= "DeuxDecimales">
<xsd:restriction base="xsd:string"> <xsd:restriction base="xsd:decimal">

<xsd:fractionDigits value="2" />


<xsd:enumeration value= "Janvier"/>
</xsd:restriction>

<xsd:enumeration value="Février"/> </xsd:simpleType>


 Chaine de caractère d’au maximum 30 caractères
<xsd:enumeration value="Mars"/> <xsd:simpleType name="nameType">

<!-- ... --> <xsd:restriction base="xsd:string">

<xsd:maxLength value="32"/>
</xsd:restriction> </xsd:restriction>

</xsd:simpleType>
</xsd:simpleType>
41 42

21
 Permet de donner une expression régulière qui  Déclarés au moyen de l'élément <xsd:complexType name="...
devra être vérifiée pour que la valeur soit
 Ils peuvent contenir d’autres éléments, des attributs.
acceptée.
 Exemple
 Exemple
 ISBN est une chaîne de dix caractères numériques <xsd:complexType name= "TypePrix">
<xsd:simpleType name="isbnType">
<xsd:simpleContent>
<xsd:restriction base="xsd:string">
<xsd:extension base="DeuxDecimales">
<xsd:pattern value="[0-9]{10}"/>
<xsd:attribute name="Unite" type= "FrancEuro" />
</xsd:restriction>

</xsd:simpleType> </xsd:extension>

</xsd:simpleContent>

43 </xsd:complexType> 44

 Trois façons de composer des éléments dans un type complexe:


sequence, choice, all.

22
46

 Un type sequence est défini par une suite de sous-éléments qui Dans une DTD Valeur de minOccurs Valeur de maxOccurs
doivent être présents dans l'ordre donné.
* 0 unbounded
 Le nombre d'occurences de chaque sous-élément est défini par les
attributs minOccurs et maxOccurs. 1 (pas nécessaire, valeur par
+ unbounded
défaut)
<xsd:complexType name= "Commande">
1 (pas nécessaire,
<xsd:sequence> ? 0
valeur par défaut)
<xsd:element name= "Ad_livraison" type="Addresse"/>
1 (pas nécessaire, valeur par 1 (pas nécessaire,
<xsd:element name= "Ad_facturation" type="Addresse"/> rien
défaut) valeur par défaut)
<xsd:element name= "texte" type="xsd:string" minOccurs="1" />
nombre entier m
<xsd:element name="items" type="Items" maxOccurs= "30" />
impossible nombre entier n quelconque quelconque supérieur
</xsd:sequence> ou égal à n

</xsd:complexType>

45 46

23
 Un seul des éléments listés doit être présent.
 C’est une composition de type ensembliste. Dans un document
 Le nombre d'occurences possible est déterminé par les attributs minOccurs et maxOccurs de
conforme, les éléments listés doivent être tous présents au plus une
l’élément.
fois. Il peuvent apparaître dans n'importe quel ordre.
 Exemple : Une personne est identifiée soit par un nom (Name) ou de trois noms : fisrtName, middleName
(optionnel) et lastName.
<xsd:complexType name= "Commande">
<xsd:complexType name= "type_Noms">
<xsd:all>
<xsd:choice>

<xsd:element name="name" type="xsd:string"/> <xsd:element name= "Ad_livraison" type="Addresse"/>

<xsd:sequence> <xsd:element name= "Ad_facturation" type="Addresse"/>


<xsd:element name="firstName" type="xsd:string"/> <xsd:element name= "texte" type="xsd:string" minOccurs="0" />
<xsd:element name="middleName" type="xsd:string" minOccurs="0"/>
<xsd:element name="items" type="Items" maxOccurs= "30" />
<xsd:element name="lastName" type="xsd:string"/>

</xsd:sequence> </xsd:all>

</xsd:choice> </xsd:complexType>
</xsd:complexType>

47 48

24