format document xml dtd et schemas[1] copy

25
Dernière mise à jour : 20 janvier 2009 Date de publication : 16 mai 2002 (Autres articles sur Developpez.com) G. Chagnon par XML : DTD et Schémas Définir le format d'un document l'ensemble des éléments et attributs autorisés dans un fichier XML. : Les schémas XML permettent de décrire plus finement que les DTD Schémas XML attributs autorisés dans un document XML. : Une DTD permet de décrire les éléments et leurs Définition de Type de Document existe deux grands langages de description pour ce faire. il peut aussi, si on le désire, suivre des règles strictes d'enchâssements des éléments. Il Un fichier XML doit non seulement respecter des règles d'écriture vues précédemment ;

Upload: antschouka

Post on 26-Jun-2015

153 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: Format Document XML Dtd Et Schemas[1] Copy

Dernière mise à jour : 20 janvier 2009

Date de publication : 16 mai 2002

(Autres articles sur Developpez.com)G. Chagnonpar

XML : DTD et SchémasDéfinir le format d'un document

l'ensemble des éléments et attributs autorisés dans un fichier XML. : Les schémas XML permettent de décrire plus finement que les DTDSchémas XML

attributs autorisés dans un document XML. : Une DTD permet de décrire les éléments et leursDéfinition de Type de Document

existe deux grands langages de description pour ce faire.il peut aussi, si on le désire, suivre des règles strictes d'enchâssements des éléments. IlUn fichier XML doit non seulement respecter des règles d'écriture vues précédemment ;

Page 2: Format Document XML Dtd Et Schemas[1] Copy

(Autres articles sur Developpez.com)G. ChagnonDéfinir le format d'un document XML : DTD et Schémas par

http://gilles-chagnon.developpez.com/cours/xml/dtd-et-schemas/Cette création est mise à disposition par Gilles Chagnon sous un contrat Creative Commons.

-2-

I - Définition de Type de Document

autorisé pour le contenu de l'élément ou de l'attribut.efficacement l'utilisateur sur les balises auxquelles il a droit, ou bien de spécifier de manière plus détaillée le formatexiste une autre solution, plus complexe certes, mais aussi plus puissante. Elle permet notamment d'informer plusles raisons pour lesquelles nous allons nous limiter à elles pour le moment. Il faut néanmoins garder à l'esprit qu'ilplus simples à manipuler et sont apparues en premier, alors que les Schémas n'étaient pas encore définis. Ce sont

». Ces dernières sont lesDocument Type Definition » et les « Schémas XMLDeux solutions sont possibles : les « , par exemple si l'on veut pouvoir partager le même type de document avec une communauté d'autres rédacteurs.XML

Il peut être parfois nécessaire de préciser les balises et attributs auxquels on a droit lors de la rédaction d'un document

I-A - Introduction

I-B - Types de DTD

Une déclaration de type de document est de la forme :

).Uniform Resource Identifieraccessibles grâce à un URI (en local (sur la machine de développement), tandis que les publiques sont disponibles pour tout le monde, étant

privées sont accessibles uniquementDTD externes : privé ou public. Les DTDll existe de surcroît deux types de

interne et externe.DTD. Il est possible de mêler XMLpartager entre plusieurs documents ). Cette dernière possibilité permet de laexterne DTDdite interne), ou bien être un fichier à part (on parle alors de

(elle est alorsXML peut être stockée dans deux endroits différents. Elle peut être incorporée au document DTDUne

I-B-1 - Introduction

>"..." "..." ... racine.elt DOCTYPE<!

Par exemple....elt.racine est alors obligatoirement DTD rattaché à cette XMLprologue du document. L'élément racine du document

Nous verrons progressivement par quoi remplacer les points de suspension. Cette déclaration se place juste après le

>commande/<

>item/<(...)>item< >item/<(...)>item< >item/<(...)>item<

>commande< >"boncommande.dtd" "..." ... commande DOCTYPE<!

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

interne :DTDExemple de déclarations pour une

externe sont stockées dans un fichier... externe.DTD alors que celles d'une XMLdu prologue du document interne sont écrites à l'intérieurDTD, mais les déclarations d'une DTDLe contenu ne change pas suivant le type de

I-B-2 - Syntaxe

livre ATTLIST<! >)nb_pages ,auteur ,titre( livre ELEMENT<!

>*)livre( biblio ELEMENT<! [biblio DOCTYPE<!

Page 3: Format Document XML Dtd Et Schemas[1] Copy

(Autres articles sur Developpez.com)G. ChagnonDéfinir le format d'un document XML : DTD et Schémas par

http://gilles-chagnon.developpez.com/cours/xml/dtd-et-schemas/Cette création est mise à disposition par Gilles Chagnon sous un contrat Creative Commons.

-3-

>)#PCDATA( nb_pages ELEMENT<!

>)#PCDATA( auteur ELEMENT<! >)#PCDATA( titre ELEMENT<!

> "fr" CDATA lang

#IMPLIED )théâtre | poemes | nouvelles | roman( type

:SYSTEM externe de type DTDExemple de déclaration de

indique une ressource disponible pour tous sur un serveur distant.PUBLICclé indique que le fichier spécifié se trouve sur l'ordinateur local et qu'il est disponible uniquement à titre privé. Le mot-

SYSTEM de type system. Le mot-clef DTD de type public et les DTD externes sont les DTDLes deux types de

I-B-3 - DTD externe

<!DOCTYPE biblio SYSTEM "bibliographie.dtd">

Le fichier associé est le suivant :

<!ELEMENT nb_pages (#PCDATA)> <!ELEMENT auteur (#PCDATA)> <!ELEMENT titre (#PCDATA)> > lang CDATA "fr" type (roman | nouvelles | poemes | théâtre) #IMPLIED <!ATTLIST livre <!ELEMENT livre (titre, auteur, nb_pages)><!ELEMENT biblio (livre*)>

:PUBLIC externe de type DTDExemple de déclaration de

strict.dtd"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-

W3C), puis son nom, enfin sa langue.la DTD (ici -, qui signifie que la DTD n'a pas de numéro d'enregistrement officiel), au propriétaire de la DTD (ici leDans l'exemple précédent, la chaîne de caractères après le mot PUBLIC fait référence tout d'abord à l'identifiant de

I-C - Déclarations d'éléments

Une déclaration d'élément est de la forme :

I-C-1 - Généralités

>type_element nom ELEMENT<!

Page 4: Format Document XML Dtd Et Schemas[1] Copy

(Autres articles sur Developpez.com)G. ChagnonDéfinir le format d'un document XML : DTD et Schémas par

http://gilles-chagnon.developpez.com/cours/xml/dtd-et-schemas/Cette création est mise à disposition par Gilles Chagnon sous un contrat Creative Commons.

-4-

ces types en revue.vide, séquence ou choix d'élément. Dans ces deux derniers cas, on indique la liste des éléments-enfants. Passons

est le type auquel il est associé. Un élément peut être de type texte,type_element est le nom de l'élément et nom

Cet élément est le plus répandu, puisque c'est celui qui contient... du texte. Il se déclare ainsi :

I-C-2 - Élément texte

>)#PCDATA( elt ELEMENT<!

:EMPTYun autre élément. Le mot-clef utilisé pour la déclaration de ce type d'élément est Un élément vide est, comme son nom l'indique, un élément qui n'a aucun contenu -que ce soit de type texte, ou bien

I-C-3 - Élément vide

>EMPTY elt ELEMENT<!

Exemple d'utilisation :

>/ elt<

Un élément vide peut cependant fort bien posséder un ou plusieurs attributs. Par exemple

>/ "neige de Paysage"=alt "paysage.jpg"=src "30"=height "100"=width img<

de la séquence.ordre, ils doivent apparaître dans l'XMLimporte). Dans le fichier (avant ou après la définition de la liste, peuDTDChaque élément-enfant doit de plus être déclaré par ailleurs dans la

la séquence. Cette liste est composée d'éléments séparés par des virgules et est placée entre parenthèses. autre élément que ceux figurant dansaucunl'élément que l'on est en train de définir. Ce dernier ne pourra contenir

Une séquence d'éléments est une liste ordonnée des éléments qui doivent apparaître en tant qu'éléments-enfants de

I-C-4 - Séquence d'éléments

>)elt3 ,elt2 ,elt1( elt0 ELEMENT<!

Exemple d'utilisation valide :

>elt0/<

>elt3/<(...)>elt3< >elt2/<(...)>elt2< >elt1/<(...)>elt1<

>elt0<

Exemples d'utilisations non valides :

Page 5: Format Document XML Dtd Et Schemas[1] Copy

(Autres articles sur Developpez.com)G. ChagnonDéfinir le format d'un document XML : DTD et Schémas par

http://gilles-chagnon.developpez.com/cours/xml/dtd-et-schemas/Cette création est mise à disposition par Gilles Chagnon sous un contrat Creative Commons.

-5-

>elt0/<

>elt3/<(...)>elt3< >elt1/<(...)>elt1<

>elt0<

est manquant.elt2... car l'élément

>elt0/<

>elt2/<(...)>elt2< >elt3/<(...)>elt3< >elt1/<(...)>elt1<

>elt0<

... car l'ordre des éléments n'est pas respecté.

AZERTY). sur un clavierAltGr+6. Cette liste est composée d'éléments séparés par le caractère | (combinaison de touches DTD

des indicateurs d'occurence. De même que pour la séquence, les éléments-enfants doivent être déclarés dans laUn choix d'élément donne... le choix dans une liste de plusieurs éléments possibles. L'utilisation précise dépend

I-C-5 - Choix d'éléments

>)elt3 | elt2 | elt1( elt0 ELEMENT<!

Exemple d'utilisation valide :

>elt0/<>elt2/<(...)>elt2<>elt0<

Exemple d'utilisation non valide :

>elt0/<

>elt3/<(...)>elt3< >elt2/<(...)>elt2<

>elt0<

I-C-6 - Indicateurs d'occurence

Exemples d'indicateur d'occurences :

).* ou +, ?d'occurence (Lors de la déclaration de séquence ou de choix d'éléments, à chaque élément enfant peut être attribuée une indication

I-C-6-a - Syntaxe

>)*elt ,+elt3 ,?elt2 ,elt1( elt0 ELEMENT<!

;elt0l'élément dansseule et unique fois ne comprend aucune indication d'occurence. Il doit donc apparaître une elt1•

Page 6: Format Document XML Dtd Et Schemas[1] Copy

(Autres articles sur Developpez.com)G. ChagnonDéfinir le format d'un document XML : DTD et Schémas par

http://gilles-chagnon.developpez.com/cours/xml/dtd-et-schemas/Cette création est mise à disposition par Gilles Chagnon sous un contrat Creative Commons.

-6-

désire, voire pas du tout.. Cela signifie que l'élément peut apparaître autant de fois que l'auteur le* a pour indication d'occurence elt4•

une fois ;au moins. Cela signifie que l'élément doit apparaître + a pour indication d'occurence elt3•ne pas apparaître du tout) ;

une fois (il peutau maximum. Cela signifie que l'élément doit apparaître ? a pour indication d'occurence elt2•

Les indicateurs d'occurence peuvent être utilisés en conjonction avec les séquences ou les choix d'éléments. Ainsi...

I-C-6-b - Exemples

>)?elt3 ,*elt2 ,+elt1( elt0 ELEMENT<!

Exemple d'utilisation d'un choix d'éléments avec indicateurs d'occurence par élément :

.elt3 (éventuellement nul), enfin au plus un élément elt2, puis d'un nombre indéterminé d'élémentselt1... permet d'indiquer une séquence composée d'au moins un élément

>)*elt3 | *elt2 | *elt1( elt.choix ELEMENT<!

Exemple d'utilisation valide :

>elt0/<

>elt2/<(...)>elt2< >elt2/<(...)>elt2<

>elt0<

Exemples d'utilisation non valide :

>elt0/<

>elt2/<(...)>elt2< >elt3/<(...)>elt3<

>elt0<

>elt0/<

>elt3/<(...)>elt3< >elt2/<(...)>elt2<

>elt0<

Exemple d'utilisation d'un choix d'éléments avec indicateur d'occurence global :

>*)elt3 | elt2 | elt1( elt0 ELEMENT<!

Exemple d'utilisation valide :

>elt3/<(...)>elt3< >elt2/<(...)>elt2<

>elt0<

Page 7: Format Document XML Dtd Et Schemas[1] Copy

(Autres articles sur Developpez.com)G. ChagnonDéfinir le format d'un document XML : DTD et Schémas par

http://gilles-chagnon.developpez.com/cours/xml/dtd-et-schemas/Cette création est mise à disposition par Gilles Chagnon sous un contrat Creative Commons.

-7-

>elt0/<

>elt1/<(...)>elt1<

plus souple possible.Dans ce dernier cas, il n'y a pas de contrainte visible sur l'ordre d'apparition des éléments. C'est la déclaration la

.ANY qui lui est lié. Le mot-clef utilisé pour la déclaration de ce type d'élément est XMLdocument , qui sont de fixer des contraintes précises sur la structure duDTDon perd les avantages qu'offre la rédaction d'une

quel ordre, et en quantité non définie. Il est préférable de ne pas utiliser trop souvent ce type de déclaration, car, aussi bien qu'être vide ou contenir du texte. Les éléments-enfants éventuels peuvent apparaître dans n'importeDTD

. Il peut contenir tout autre élément défini dans laDTDL'élément quelconque est l'élément-« fourre-tout » dans une

I-C-7 - Élément quelconque

>ANY elt ELEMENT<!

Exemple de déclaration :

.CDATAdans l'élément, et peut être une section liste de choix, avec des indicateurs d'occurence bien choisis. Le texte contenu peut se trouver à n'importe quel endroitUn élément à contenu mixte peut contenir aussi bien du texte que des éléments-enfants. Il se présente comme une

I-C-8 - Élément à contenu mixte

>*)auteur | #PCDATA( citation ELEMENT<!

Exemple d'utilisation :

>citation/<

Être ou ne pas être>auteur/<Shakespeare>auteur< >citation<

les noms des auteurs ;•son titre ;•

les informations nécessaires pour un article sont :•lieu d'impression, son numéro ISBN ;des informations générales sur son édition comme par exemple le nom de l'éditeur, le lieu d'édition, le•ses tomes et pour chaque tome, leur nombre de pages ;•les noms des auteurs ;•son titre général ;•

les informations nécessaires pour un livre sont :•contient des livres et des articles ;•

Rédiger une DTD pour une bibliographie. Cette bibliographie :

I-C-9 - Exercice : Écriture d'une DTD avec éléments

Page 8: Format Document XML Dtd Et Schemas[1] Copy

(Autres articles sur Developpez.com)G. ChagnonDéfinir le format d'un document XML : DTD et Schémas par

http://gilles-chagnon.developpez.com/cours/xml/dtd-et-schemas/Cette création est mise à disposition par Gilles Chagnon sous un contrat Creative Commons.

-8-

Correction

Tester cette DTD avec un fichier XML que l'on écrira ex-nihilo et validera.

on réservera aussi un champ optionnel pour un avis personnel.•journalses références de publication : nom du journal, numéro des pages, année de publication et numéro du•

I-D - Déclarations d'attributs

.ATTLISTspécifier obligatoire. Le mot-clef de cette déclaration est Chaque attribut défini dans la liste possède un nom et un type. On peut lui donner une valeur par défaut, ou bien leséparément, mais il est souvent préférable, afin d'améliorer la lisibilité du code, de les réunir sous la forme d'une liste.permette de définir des contraintes sur ces derniers. On peut déclarer et attacher à un élément donné chaque attribut

DTD des éléments possédant des attributs, il est normal que la XMLComme on peut trouver dans un document

I-D-1 - Introduction

) :#IMPLIED (nous reviendrons dans un instant sur la signification du mot-clef CDATAExemple de déclaration de

.CDATA. Le mot-clef utilisé pour la déclaration de chaîne de caractère est entités analysablesd'Il s'agit là du type d'attribut le plus courant. Une chaîne de caractères peut être composée de caractères ainsi que

I-D-2 - Type chaîne de caractères

>#IMPLIED CDATA attr elt ATTLIST<!

>)...( elt ELEMENT<!

Exemples d'utilisations :

>elt/<(...)>"caractères de Chaîne"=attr elt<

>elt/<(...)>"&car; de Chaîne"=attr elt<

>"caractères" car <!ENTITY

1. Déclaration d'un attribut avec une valeur par défaut :

.elt attaché à un élément nommé attrdéclaration d'un attribut appelé Chaque attribut peut être requis, optionnel ou fixe et avoir une valeur par défaut. Les exemples suivants montrent la

I-D-3 - Valeurs par défaut

>"valeur" CDATA attr elt ATTLIST<!

>)...( elt ELEMENT<!

.attr="valeur">(...)>/elt><elt, cela est équivalent à écrire <elt>(...)</elt>considéré comme valant valeur. Dans cet exemple, si on écrit

, il estelt lors de l'utilisation de l'élément XMLUn tel attribut n'est pas obligatoire. S'il est omis dans le fichier

Page 9: Format Document XML Dtd Et Schemas[1] Copy

(Autres articles sur Developpez.com)G. ChagnonDéfinir le format d'un document XML : DTD et Schémas par

http://gilles-chagnon.developpez.com/cours/xml/dtd-et-schemas/Cette création est mise à disposition par Gilles Chagnon sous un contrat Creative Commons.

-9-

2. Déclaration d'un attribut requis :

>#REQUIRED CDATA attr elt ATTLIST<!

>)...( elt ELEMENT<!

3. Déclaration d'un attribut optionnel :

.XMLUn tel attribut est obligatoire. Son absence déclenche une erreur du vérificateur syntaxique sur le fichier

>#IMPLIED CDATA attr elt ATTLIST<!

>)...( elt ELEMENT<!

4. Déclaration d'un attribut avec une valeur fixe :

>"valeur" #FIXED CDATA attr elt ATTLIST<!

>)...( elt ELEMENT<!

ultérieures., pour anticiper la compatibilité avec des versionsDTDfonctionnalité est cependant utile lors d'une mise à jour d'une

L'utilité d'un tel attribut peut sembler bizarre à première vue, puisqu'il ne peut prendre qu'une seule valeur. Cette

optionnel :IDExemple de déclaration de type

pourront pas posséder le même atribut possédant la même valeur.. Deux éléments neXML dans le fichier identifiantCe type sert à indiquer que l'attribut en question peut servir d'

I-D-4 - Type ID

>#IMPLIED ID attr elt2 ATTLIST<!

>)...( elt2 ELEMENT<! >#IMPLIED ID attr elt1 ATTLIST<!

>)...( elt1 ELEMENT<! >#IMPLIED ID attr elt ATTLIST<!

>)...( elt ELEMENT<!

La déclaration précédente interdit par exemple...

>elt1/<>"machin"=attr elt1<

>elt2/<>"truc"=attr elt2< >elt1/<>"machin"=attr elt1<

... ainsi que

>elt1/<>"truc"=attr elt1<

>elt2/<>"machin"=attr elt2< >elt1/<>"machin"=attr elt1<

provoque une erreur.XMLénuméré. Donner une autre valeur dans le fichier On peut parfois désirer limiter la liste de valeurs possibles pour un attribut. On le définit alors comme étant de type

I-D-5 - Type énuméré

Page 10: Format Document XML Dtd Et Schemas[1] Copy

(Autres articles sur Developpez.com)G. ChagnonDéfinir le format d'un document XML : DTD et Schémas par

http://gilles-chagnon.developpez.com/cours/xml/dtd-et-schemas/Cette création est mise à disposition par Gilles Chagnon sous un contrat Creative Commons.

-10-

Exemple de déclaration d'une liste de choix d'attributs :

>"PNG" )PNG | JPEG | GIF( format img ATTLIST<!

>EMPTY img ELEMENT<!

.DTDguillemets dans la liste des valeurs possibles. En ajouter est une erreur courante dans la rédaction d'une . On notera l'absence dePNGSi aucune valeur n'est affectée à cet attribut, c'est la valeur par défaut qui le sera, ici

.JPEG ou GIF, PNG. La valeur de cet attribut peut être img d'un élément formatCet exemple déclare un attribut

On utilise le fait qu'il est possible de « factoriser » le nom de l'élément. Par exemple...

I-D-6 - Utilisation de liste pour les attributs

>

#REQUIRED CDATA attr2 #IMPLIED CDATA attr1

elt ATTLIST<! >)...( elt ELEMENT<!

Correction

Utiliser cette DTD pour créer un fichier XML valide.

2002, "avant_2000" et "inconnue" et proposant comme valeur par défaut inconnue.... en faisant de l'élément annee un attribut de type énuméré, prenant comme valeurs possibles 2000, 2001,•défaut Feuille de Chou ;... en faisant de l'élément nom_journal un attribut de l'élément journal et en lui donnant comme valeur par•optionnel soustitre ;... en faisant de l'élément tome un élément vide et en lui ajoutant un attribut requis nb_pages et un attribut•... en ajoutant un attribut optionnel soustitre à l'élément titre ;•

Modifier la DTD précédente...

I-D-7 - Exercice : Écriture d'une DTD avec attributs

I-E - Déclarations d'entités

accessibles dans le jeu de caractères sélectionné. nonprioriLes déclarations d'entités permettent de disposer de l'équivalent de raccourcis clavier et de caractères a

I-E-1 - Introduction

.DTDLes entités paramétriques ne peuvent pas être utilisées en-dehors d'une

associée. Ce mécanisme s'apparente à un mécanisme de « macro ».d'écriture : partout où une entité est mentionnée, elle peut être remplacée par la chaîne de caractères qui lui est

. Ce sont en quelque sorte des raccourcisDTDElles servent à définir des symboles qui seront utilisés ailleurs dans la

I-E-2 - Les entités paramétriques

Page 11: Format Document XML Dtd Et Schemas[1] Copy

(Autres articles sur Developpez.com)G. ChagnonDéfinir le format d'un document XML : DTD et Schémas par

http://gilles-chagnon.developpez.com/cours/xml/dtd-et-schemas/Cette création est mise à disposition par Gilles Chagnon sous un contrat Creative Commons.

-11-

:spécification du langage HTMLExemple tiré de la

>"H1|H2|H3|H4|H5|H6" heading % <!ENTITY

est alors effectuée de proche en proche.caractères peu évocatrice. La définition d'une entité peut également faire référence à d'autres entités ; la substitutionCe mécanisme peut également servir à utiliser un nom relativement compréhensible à la place d'une séquence de

.DTD dans la H1|H2|H3|H4|H5|H6 doit être remplacée par%heading;L'exemple précédent a pour effet d'indiquer au système que toute occurence de

:HTML 4.01 du langage DTDExemples tirés de la

utilisé, ou qui ne sont pas disponibles au clavier.Elle servent à donner un nom facilement lisible à des caractères qui ne sont pas représentables dans l'alphabet

I-E-3 - Les entités de caractères

>"&#233;" eacute <!ENTITY

>"&#160;" nbsp <!ENTITY

pour reprendre une des entités précédentes).&ecaute; (par exemple &NomEntité; à l'aide de la notation DTD référençant cetteXML peuvent être utilisées dans un document DTDLes entités de caractères définies dans une

. Exemple :DTDd'écriture. La définition complète du symbole est entièrement incluse dans la comme raccourcisXML et utilisés dans un document DTDCe sont des symboles pouvant être définis dans une

I-E-4 - Les entités internes

>"désoxyribonucléique Acide" ADN <!ENTITY

".Acide désoxyribonucléiquede caractères " sera aumatiquement remplacé, lors de l'affichage ou du traitement, par la chaîne&ADN;, l'appel à XMLDans le fichier

la DTD elle-même. Par exemple :... soit de symboles pouvant être définis dans un autre fichier, mais pouvant être utilisés dans un document XML ou

Il s'agit...

I-E-5 - Les entités externes

>"toto.inc" SYSTEM Inclusion % <!ENTITY

>"toto.xml" SYSTEM Inclusion <!ENTITY

&Inclusion; sera inséré à l'appel de l'entité toto.inccontenu du fichier , leDTD, et dans la &Inclusion; sera inséré à l'appel de l'entité toto.xml, le contenu du fichier XMLDans le fichier

Page 12: Format Document XML Dtd Et Schemas[1] Copy

(Autres articles sur Developpez.com)G. ChagnonDéfinir le format d'un document XML : DTD et Schémas par

http://gilles-chagnon.developpez.com/cours/xml/dtd-et-schemas/Cette création est mise à disposition par Gilles Chagnon sous un contrat Creative Commons.

-12-

courante :DTD et utilisés dans la DTD... soit de symboles pouvant être définis dans une autre

>"DTD/xhtml-special.ent

http://www.w3.org/TR/xhtml1/" "XHTML//EN for Special -//W3C//ENTITIES" PUBLIC HTMLSpecial % <!ENTITY

.%HTMLSpecial;de courante par l'appelDTD) est importé dans la PUBLIC ou SPECIAL (qui peut être de type DTDLe contenu de cette

DTD - Fichier XMLCorrection :

corps de texte.Déclarer l'entité de caractère Eacute comme étant le caractère É (qui correspond à É). L'appeler dans un•texte d'elt.racine.Déclarer une entité entite2 permettant d'insérer "<elt.enfant>entité</elt.enfant>" et l'appeler dans un corps de•"#PCDATA|elt.enfant". Utiliser cette entité dans la déclaration de l'élément elt.racine.Déclarer une entité paramétrique entite1 permettant d'insérer dans la DTD la chaîne de caractères•

elt.enfant peut contenir du texte.•elt.racine peut contenir autant de fois que l'on veut du texte ou elt.enfant ;•

Rédiger un document XML de quelques mots, comportant une DTD externe déclarant deux éléments :•

On visualisera les documents XML avec Internet Explorer ou Mozilla.

I-E-6 - Exercice : Déclarations d'entités

Page 13: Format Document XML Dtd Et Schemas[1] Copy

(Autres articles sur Developpez.com)G. ChagnonDéfinir le format d'un document XML : DTD et Schémas par

http://gilles-chagnon.developpez.com/cours/xml/dtd-et-schemas/Cette création est mise à disposition par Gilles Chagnon sous un contrat Creative Commons.

-13-

II - Initiation aux Schémas XML

II-A - Introduction

ne doit être qu'un nombre entier) est extrêmement limité.Troisièmement, le « typage » des données (c'est-à-dire la possibilité de spécifier par exemple qu'un attribut3

.DTD défini par une XMLun fichier pratique, cela implique qu'il n'est pas possible d'importer des définitions de balises définies par ailleurs dans

ne supportent pas les « espaces de nom » (nous reviendrons sur cette notion). EnDTDDeuxièmement, les 2.XMLpour manipuler un tel fichier, différent de celui utilisé pour l'édition du fichier

. Cela signifie qu'il est nécessaire d'utiliser un outil spécialXML ne sont pas au format DTDPremièrement, les 1

déficiences., souffre de nombreusesSGML. Mais ce format de description, hérité de DTDde description, devait dépendre d'une

, si on voulait le standardiser en utilisant un vrai langage généralXMLdroits. Dans les premiers temps, un fichier un langage simple d'utilisation, portable sans difficulté d'une machine -et d'une application- à une autre, et libre de

a été perçu comme une réelle chance pour les développeurs d'avoir à dispositionXMLLors de son lancement,

II-A-1 - Limitations des DTD

Les schémas sont très facilement concevables par modules.•est limité à 0, 1 ou un nombre infini d'occurences pour un élément).

, onDTDLes indicateurs d'occurrences des éléments peuvent être tout nombre non négatif (rappel : dans une •Le support des espaces de nom.•La notion d'héritage. Les éléments peuvent hériter du contenu et des attributs d'un autre élément..•Il est même possible de créer de nouveaux types à partir de types existants.Le typage des données est introduit, ce qui permet la gestion de booléens, d'entiers, d'intervalles de temps...•

:DTDfonctionnalités fournies par les propose des nouveautés en plus desXML Schema, DTDConçu pour pallier les déficiences pré-citées des

II-A-2 - Apports des schémas

II-B - Les premiers pas

manière bizarrement récursive et « auto-référente », défini dans un Schéma. Mais il existe également une DTD. est composé d'environ 30 éléments et attributs. Ce vocabulaire est, a priori deXML SchemaLe vocabulaire de

.correspondantedocumentation, de produire la exemple de schémaModules d'extension>Schema Documentation, à partir d'un

sur les commentaires et explications qui s'y trouvent. C'est d'ailleurs chose facile avec l'éditeur oXygen, via le menuPar exemple, il est notamment possible d'automatiser la création d'une documentation à partir d'un schéma, fondée

.XSL, et en particulier par une feuille de style XMLd'être manipulé de la même manière que n'importe quel autre fichier . Cela permet à un tel documentXML est un document Schema XMLUn premier point intéressant est qu'un fichier

. Mais il permet aussi d'aller au-delà.DTDet l'ordre d'apparition des éléments et de leurs attributs, tout comme une . Il permet de décrire les autorisations d'imbricationXMLLe but d'un schéma est de définir une classe de documents

II-B-1 - Introduction

Page 14: Format Document XML Dtd Et Schemas[1] Copy

(Autres articles sur Developpez.com)G. ChagnonDéfinir le format d'un document XML : DTD et Schémas par

http://gilles-chagnon.developpez.com/cours/xml/dtd-et-schemas/Cette création est mise à disposition par Gilles Chagnon sous un contrat Creative Commons.

-14-

commence par un prologue, et a un élément racine.Schema XML, un XMLComme tout document

II-B-2 - Structure de base

>schema:xsd/<

--> ici types de et d'attributs d'éléments, déclarations <!-- >"http://www.w3.org/2000/10/XMLSchema"=xsd:xmlns schema:xsd<

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

Nous allons voir, par la suite, comment déclarer éléments et attributs à l'aide d'un schéma.

.xsdle préfixe utilisé pour l'écriture du fichier. Il faut simplement retenir que tout élément d'un schéma doit commencer parnoms

espace deque celui que nous avons déjà rencontré lors du cours sur les feuilles de style), et qui fait référence à l' (dont le rôle est le mêmexmlns:xsd. Pour le moment, oubliez l'attribut xsd:schemaL'élément racine est l'élément

II-C - Déclarations d'éléments et d'attributs

. Par exemple,<xsd:element>Un élément, dans un schéma, se déclare avec la balise

II-C-1 - Déclarations d'éléments

>schema:xsd/<

--> ici types de déclarations <!-- >/ "xsd:string"=type "remarque"=name element:xsd< >/ "typeContacts"=type "contacts"=name element:xsd<

>"http://www.w3.org/2000/10/XMLSchema"=xsd:xmlns schema:xsd< >encoding="ISO-8859-1"? version="1.0" xml<?

.type de données. Nous reviendrons plus loin sur cette notion de simplesont dits de type , tandis que les éléments n'en contenant pascomplexeélément-enfants ou posséder des attributs sont dits de type

. Les éléments pouvant contenir destypeChaque élément déclaré est associé à un type de données via l'attribut

.XML Schema prédéfini de type simplequi est un xsd:string défini par l'utilisateur. L'élément remarque quant à lui est du type type complexe, qui est un typeContacts

est ainsi du typecontactsest « typé » -c'est-à-dire qu'il doit respecter un certain format de données. L'élément . Chaque élémentremarque et un élément contactsLe schéma précédent déclare deux éléments : un élément

II-C-2 - Déclarations d'attributs

de dernière mise à jour de la liste des contacts. (un autre type simple) qui indique la datexsd:date de type majL'exemple suivant montre la déclaration d'un attribut

, l'ordre des déclarations n'a pas d'importance.DTD(voir plus loin). Pour mémoire, rappelons que dans une xsd:all et xsd:sequence, xsd:choice les définitions des types complexes, autrement dit, après les éléments après

placées, ne peuvent contenir d'autres éléments ou attributs. De plus, les déclarations d'attributs doivent être DTDles À la différence des éléments, un attribut ne peut être que de type simple. Cela signifie que les attributs, comme avec

II-C-2-a - Déclaration simple

Page 15: Format Document XML Dtd Et Schemas[1] Copy

(Autres articles sur Developpez.com)G. ChagnonDéfinir le format d'un document XML : DTD et Schémas par

http://gilles-chagnon.developpez.com/cours/xml/dtd-et-schemas/Cette création est mise à disposition par Gilles Chagnon sous un contrat Creative Commons.

-15-

>schema:xsd/< >element:xsd/<

>complexType:xsd/< >/ "xsd:date"=type "maj"=name attribute:xsd<

--> ici contenu de modèle du déclarations <!-- >complexType:xsd<

--> ici types de déclarations <!-- >"xsd:string"=type "remarque"=name element:xsd< >/ "typeContacts"=type "contacts"=name element:xsd<

>"http://www.w3.org/2000/10/XMLSchema"=xsd:xmlns schema:xsd< >encoding="ISO-8859-1"? version="1.0" xml<?

cette date s'écrit donc à l'anglo-saxonne année-mois-jour ; cela permet en outre de plus facilement classer les dates). optionnel, avec une valeur par défaut au 11 octobre 2003 s'il n'apparaît pas (le format de date est standardisé :maj

obligatoire, optionnel, possédant une valeur par défaut...). Par exemple, la ligne suivante permet de rendre l'attribut final (attributXMLde ces trois attributs permettent de paramétrer ce qui est acceptable ou non dans le fichier

. Des combinaisonsfixed et use, default peut avoir trois attributs optionnels : Schema XML d'un attributeL'élément

, un attribut peut avoir un indicateur d'occurences.DTDTout comme dans une

II-C-2-b - Contraintes d'occurences

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

.XML Schema et le DTDLe tableau suivant présente une comparaison entre le format

du schéma.Cet attribut permet de "réserver" des noms d'attributs pour une utilisation future, dans le cadre d'une mise à jour

.fixed est renseigné, la seule valeur que peut prendre l'attribut déclaré est celle de l'attribut fixedQuand l'attribut

DTD use Attribut default Attribut Commentaire #REQUIRED required -

#REQUIRED "blabla" required blabla

#IMPLIED optional - "blabla" #IMPLIED optional blabla - prohibited -

pas apparaître Cet attribut ne doit

doit être conforme au type déclaré. Par exemple...defaultIl est à noter que la valeur de l'attribut

.default et useTable 1. Contraintes d'occurences fixables par les attributs

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

; nous y reviendrons.restriction de typeUn autre type de déclaration d'attributs dans les DTD, la liste de choix, est possible grâce à une

... produirait une erreur à la validation du schéma.

Page 16: Format Document XML Dtd Et Schemas[1] Copy

(Autres articles sur Developpez.com)G. ChagnonDéfinir le format d'un document XML : DTD et Schémas par

http://gilles-chagnon.developpez.com/cours/xml/dtd-et-schemas/Cette création est mise à disposition par Gilles Chagnon sous un contrat Creative Commons.

-16-

informations de déclarations.auxquels il est possible de faire appel lors d'une déclaration d'éléments). Cela permet d'éviter de répéter des

propose une fonctionnalité supplémentaire, permettant de déclarer des groupes d'attributs (groupesXML Schema

II-C-2-c - Regroupements d'attributs

. Par exemple,mixed="true"forcer ; il faut dans ce casmixed="false". Par défaut, xsd;complexType de l'élément mixeddu texte, on utilise l'attribut

Un tel élément est de type complexe, car il contient au moins un attribut. Afin de spécifier qu'il peut contenir également

II-C-2-d - Déclaration d'élément ne contenant que du texte avec un (ou plusieurs) attribut(s)

>element:xsd/<

>complexType:xsd/< >/ "optional"=use "xsd:string"=type "attr"=name attribute:xsd<

>"true"=mixed complexType:xsd< >"elt"=name element:xsd<

défini. Par exemple...On peut en effet faire référence, dans une déclaration de type complexe, à un élément de type simple prélablementIl est recommandé de commencer par déclarer les éléments et attributs de type simple, puis ceux de type complexe.

(on ne fera pas attention, pour le moment, aux « définitions de type »).exemplepeut le voir sur cet déclarations. Pour des raisons de clarté, il est beaucoup plus avantageux d'ordonner ces déclarations, ainsi qu'onLa procédure précédente de déclaration d'éléments peut amener à une structure de type « poupée russe » des

II-C-3 - Déclaration et référencement

>element:xsd/<

>complexType:xsd/< >sequence:xsd/<

>/ "xsd:positiveInteger"=type "pages"=name element:xsd< >/ "xsd:string"=type "auteur"=name element:xsd<

>sequence:xsd< >complexType:xsd<

>"livre"=name element:xsd<

... est plus difficile à maintenir que...

>element:xsd/<

>complexType:xsd/< >sequence:xsd/<

>/ "pages"=ref element:xsd< >/ "auteur"=ref element:xsd<

>sequence:xsd< >complexType:xsd<

>"livre"=name element:xsd< >/ "xsd:string"=type "auteur"=name element:xsd<

>/ "xsd:positiveInteger"=type "pages"=name element:xsd<

Page 17: Format Document XML Dtd Et Schemas[1] Copy

(Autres articles sur Developpez.com)G. ChagnonDéfinir le format d'un document XML : DTD et Schémas par

http://gilles-chagnon.developpez.com/cours/xml/dtd-et-schemas/Cette création est mise à disposition par Gilles Chagnon sous un contrat Creative Commons.

-17-

II-D - Les types de données

.types complexes et types simples. Il distingue notamment DTDfinement que le langage permet de spécifier des types de données bien plusXML SchemaAinsi que nous l'avons déjà brièvement signalé,

II-D-1 - Introduction

II-D-2 - Types simples

" de types.listesfonctionnalité). Enfin, il est possible de déclarer des " sur cetteplus loinprédéfinis, mais il est également possible d'en "dériver" de nouveaux (nous reviendrons

Les types de données simples ne peuvent comporter ni attributs, ni éléments enfants. Il en existe de nombreux,

II-D-2-a - Généralités

figure sur le site du W3C.liste détailléedonne la hiérarchie, et leur . la figure suivante enXML SchemaNombreux sont les types prédéfinis dans la bibliothèque de types intégrés de

II-D-2-b - Bibliothèque de types intégrés

:quantitela déclaration d'un attribut d'autres ont fait leur apparition. On pourra envisager, par exemple, dans un schéma décrivant un bon de commande,Les types de données les plus simples (les chaînes de caractères) que permettaient les DTDs sont conservés, mais

>/ "1"=value "default"=use "xsd:positiveInteger"=type "quantite"=name attribute:xsd<

Page 18: Format Document XML Dtd Et Schemas[1] Copy

(Autres articles sur Developpez.com)G. ChagnonDéfinir le format d'un document XML : DTD et Schémas par

http://gilles-chagnon.developpez.com/cours/xml/dtd-et-schemas/Cette création est mise à disposition par Gilles Chagnon sous un contrat Creative Commons.

-18-

sur ce point.un tel schéma peut dès lors être enregistré directement dans une base de données, sans contrôle supplémentaire

sera alors automatiquement refusé par le système. Un document respectantquantite="-3"commande spécifiant suivant ce schéma, ayant uneXML... qui force la valeur de l'attribut à un être un entier positif. Un bon de commande

de types existants. Par exemple,. Il est également possible de créer une liste personnalisée, par « dérivation »IDREFS et NMTOKENS, ENTITIES

possède trois types de listes intégrés :XML Schema). atomiquesLes types listes sont des suites de types simples (ou

II-D-2-c - Listes

>simpleType:xsd/<

>/ "xsd:unsignedByte"=itemType list:xsd< >"numéroDeTéléphone"=name simpleType:xsd<

.facettesNous reviendrons sur les des « facettes ». Elles permettent par exemple de limiter la longueur de notre numéro de téléphone à 10 nombres.Il est également possible d'indiquer des contraintes plus fortes sur les types simples ; ces contraintes s'appellent

.<téléphone>01 44 27 60 11</téléphone>Un élément conforme à cette déclaration serait

préalablement défini (voir précédemment), on peut déclarer... ait éténuméroDeTéléphonefaire à l'aide d'une déclaration d'union. Par exemple, sous réserve que le type simple

par exemple, qu'un type autorise soit un nombre, soit une chaîne de caractères particuliers. Il est possible de leLes listes et les types simples intégrés ne permettent pas de choisir le type de contenu d'un élément. On peut désirer,

II-D-2-d - Unions

>simpleType:xsd/<

>/ "numéroDeTéléphone xsd:string"=memberTypes union:xsd< >"numéroDeTéléphoneMnémoTechnique"=name simpleType:xsd<

Les éléments suivants sont alors des "instances" valides de cette déclaration :

>téléphone/<Pompiers>téléphone<

>téléphone/<18>téléphone<

II-D-3 - Les types complexes

contraintes d'occurences ou des choix d'éléments, des types de séquencescomplexe. On peut alors déclarer des Un élément de type simple ne peut contenir pas de sous-élément. Il est nécessaire pour cela de le déclarer de type

II-D-3-a - Introduction

de sous-éléments dans un ordre déterminé. Il est bien sûr possible de faire de même avec un schéma., nous pouvons déclarer un élément comme pouvant contenir une suiteDTDNous savons déjà comment, dans une

II-D-3-b - Séquences d'éléments

Page 19: Format Document XML Dtd Et Schemas[1] Copy

(Autres articles sur Developpez.com)G. ChagnonDéfinir le format d'un document XML : DTD et Schémas par

http://gilles-chagnon.developpez.com/cours/xml/dtd-et-schemas/Cette création est mise à disposition par Gilles Chagnon sous un contrat Creative Commons.

-19-

. Ainsi...DTD, qui reproduit l'opérateur , du langage xsd:sequenceOn utilise pour ce faire l'élément

>complexType:xsd/<

>sequence:xsd/< >/ "numéroDeTéléphone"=type "téléphone"=name element:xsd<

>/ "xsd:string"=type "adresseElectronique"=name element:xsd< >/ "xsd:string"=type "adresse"=name element:xsd<

>/ "xsd:date"=type "dateDeNaissance"=name element:xsd< >/ "xsd:string"=type "prénom"=name element:xsd<

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

).adresse, adresseElectronique, téléphonenom, prénom, dateDeNaissance,, où apparaîtrait (DTD... est équivalent à une déclaration d'élément, dans une

:xsd:choicepersonne, soit son adresse électronique. Pour cela, il suffit d'utiliser un élément On peut vouloir modifier la déclaration de type précédente en stipulant qu'on doive indiquer soit l'adresse d'une

II-D-3-c - Choix d'élément

>complexType:xsd/<

>/ "numéroDeTéléphone"=type "téléphone"=name element:xsd< >sequence/<

>choice:xsd/< >/ "xsd:string"=type "adresseElectronique"=name element:xsd<

>/ "xsd:string"=type "adresse"=name element:xsd< >choice:xsd<

>/ "xsd:date"=type "dateDeNaissance"=name element:xsd< >/ "xsd:string"=type "prénom"=name element:xsd<

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

>"typePersonne"=name complexType:xsd<

.DTD dans une |Ce connecteur a donc les mêmes effets que l'opérateur

. Par exemple...xsd:complexType doit être un enfant direct de l'élémentxsd:allfois (ou pas du tout), mais dans n'importe quel ordre. Cet élément

. Il indique que les éléments enfants doivent apparaître uneDTDCet élément est une nouveauté par rapport aux

II-D-3-d - L'élément all

>complexType:xsd/<

>all:xsd/< >/ "numéroDeTéléphone"=type "téléphone"=name element:xsd<

>/ "xsd:string"=type "adresseElectronique"=name element:xsd< >/ "xsd:string"=type "adresse"=name element:xsd<

>/ "xsd:date"=type "dateDeNaissance"=name element:xsd< >/ "xsd:string"=type "prénom"=name element:xsd<

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

>complexType:xsd<

).DTD), et que l'ordre des éléments n'a pas d'importance (cela n'a pas d'équivalent dans une DTD dans une?... indique que chacun de ces éléments peut apparaître une fois ou pas du tout (équivalent de l'opérateur

Page 20: Format Document XML Dtd Et Schemas[1] Copy

(Autres articles sur Developpez.com)G. ChagnonDéfinir le format d'un document XML : DTD et Schémas par

http://gilles-chagnon.developpez.com/cours/xml/dtd-et-schemas/Cette création est mise à disposition par Gilles Chagnon sous un contrat Creative Commons.

-20-

apparaître. Le tableau suivant récapitule les possibilités :, qui indiquent respectivement les nombres minimal et maximal de fois où un élément peutmaxOccurs et minOccurs

. Les attributs utiles sontunboundedqu'un élément peut être présent un nombre illimité de fois, on utilise la valeur de déclarer directement une telle occurence, car tout nombre entier non négatif peut être utilisé. Pour déclarer

permetXML Schema) 378 fois. sselt, sselt..., sselt, sselt à être présent 378 fois, mais il faut pour cela écrire (sselt, un indicateur d'occurence ne peut prendre que les valeurs 0, 1 ou l'infini. On peut forcer un élémentDTDDans une

II-D-3-e - Indicateurs d'occurences

Dans une DTD Valeur de minOccurs Valeur de maxOccurs* 0 unbounded +

défaut) 1 (pas nécessaire, valeur par unbounded

? 0défaut) 1 (pas nécessaire, valeur par

riendéfaut) 1 (pas nécessaire, valeur par

défaut) 1 (pas nécessaire, valeur par

impossible nombre entier n quelconquesupérieur ou égal à n nombre entier m quelconque

Table 2. Liste des indicateurs d'occurence.

:positiveInteger un type complexe à partir du type simple dériverattribut. Il faut , par exemple. Un tel élément ne peut pas être déclaré de type simple, car il contient ununite="kg">67</poids>

<poidsOn peut avoir besoin de définir un élément contenant une valeur simple, et possédant un attribut, comme

Il est possible également de créer un type complexe à partir d'un type simple.

II-D-3-f - Création de type complexe à partir de types simples

>complexType:xsd/<

>simpleContent:xsd/< >extension:xsd/<

>/ "xsd:string"=type "unite"=name attribute:xsd< >"xsd:positiveInteger"=base extension:xsd<

>simpleContent:xsd< >"typePoids"=name complexType:xsd<

indique que le nouvel élément ne contient pas de sous-élément.xsd:simpleContentL'élément

les noms des auteurs (éléments auteur) ;•son titre général (élément titre) ;•

les informations nécessaires pour un livre (élément livre) sont :•contient des livres et des articles ;•

Rédiger un Schema XML pour une bibliographie. Cette bibliographie :

le moment, que des types de chaînes de caractères., mais cette fois-ci avec un schéma. On ne déclarera, pourexercice sur les DTDNous allons reprendre le texte d'un

Exercice 1. Déclaration d'éléments

II-D-3-g - Exercices

Page 21: Format Document XML Dtd Et Schemas[1] Copy

(Autres articles sur Developpez.com)G. ChagnonDéfinir le format d'un document XML : DTD et Schémas par

http://gilles-chagnon.developpez.com/cours/xml/dtd-et-schemas/Cette création est mise à disposition par Gilles Chagnon sous un contrat Creative Commons.

-21-

Correction

On vérifiera le fonctionnement à l'aide d'un fichier XML.

à ", puis un autre nombre.typePages, basé sur une restriction du type xsd:string, se limitant à un nombre, puis la chaîne de caractères "En s'inspirant de l'exemple donné en cours du formatage d'une adresse électronique, déclarer un type2de caractères composée de 10 chiffres. L'utiliser dans la déclaration de l'élément ISBN.Définir un type simple nommé typeISBN, basé sur une restriction du ype xsd:string, se limitant à une chaîne1

Nous allons maintenant définir nos propres types de données, en les dérivant par rapport aux types intégrés.

B. Déclarations de types

L'élément anneePublication doit être déclaré comme... une année.2L'élément pages doit être un entier positif, ainsi que l'élément numéroJournal.1

A. Utilisation des types intégrés

ayx types de données.Nous allons modifier le Schema précédent pour tirer parti des fonctionnalités additionnelles de ce format, relatives

Exercice 3. Déclaration de types

Correction

Utiliser ce Schéma pour créer un fichier XML valide.

par défaut Feuille de Chou ;... en faisant de l'élément nomJournal un attribut de l'élément infosPublication et en lui donnant comme valeur•optionnel sousTitre ;... en faisant de l'élément tome un élément vide et en lui ajoutant un attribut requis nbPages et un attribut•... en ajoutant un attribut optionnel soustitre à l'élément titre ;•

Modifier le Schéma précédent... On ne déclarera, pour le moment, que des types de chaînes de caractères.

Exercice 2. Déclaration d'attributs

Correction

Tester ce Schema XML avec un fichier XML que l'on écrira ex-nihilo et validera.

personnel.on réservera aussi un champ optionnel, pour chaque livre et chaque article, pour un avis (élément avis)•

(élément numéroJournal)des pages (élément pages), année de publication (élément anneePublication) et numéro du journalses références de publication (élément infosPublication) : nom du journal (élément nomJournal), numéro•les noms des auteurs (éléments auteur) ;•son titre (élément titre) ;•

les informations nécessaires pour un article (élément article) sont :•son numéro ISBN (élément ISBN) ;(élément editeur), le lieu d'édition (élément lieuEdition), le lieu d'impression (élément lieuImpression),des informations générales sur son édition (élément infosEdition)comme par exemple le nom de l'éditeur•pages) ;ses tomes (élément tomes) et pour chaque tome (éléments tome), leur nombre de pages (élément•

Page 22: Format Document XML Dtd Et Schemas[1] Copy

(Autres articles sur Developpez.com)G. ChagnonDéfinir le format d'un document XML : DTD et Schémas par

http://gilles-chagnon.developpez.com/cours/xml/dtd-et-schemas/Cette création est mise à disposition par Gilles Chagnon sous un contrat Creative Commons.

-22-

II-E - Espaces de nom

que l'on peut consulter.Cela signifie que l'espace de nom auquel ces balises font référence, là où elles sont définies , est un schéma particulier

.xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"><xsd:schema, après avoir écrit xsddans un schéma, où nous utilisions des éléments préfixés par •

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">, après avoir écritxsl, où nous utilisions des éléments préfixés par XSLdans les feuilles de style •

dans un schéma donné... quelconque. Nous avons déjà utilisé cette notion : quelconque d'utiliser les balises définiesXMLLa notion d'espace de nom est complexe ; elle permet à un document

II-E-1 - Introduction

.xsi:noNamespaceSchemaLocation="biblio10.xsd"><biblio xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

. Par exemple,xsi:noNamespaceSchemaLocation="lien_relatif_vers_le_schema"><biblio xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"par

,noNamespaceSchemaLocation en utilisant l'attribut XMLau schéma dans le document , on fait référenceSYSTEM de type DTDDans le cas d'une référence locale, correspondant à une •

.collection_schemas/biblio"><xsd:biblio xmlns="http://www.monsite.org/collection_schemas/biblio, on peut l'appeler par

sont référencés à cette URL. Donc si on a déposé un schéma à l'adresse http://www.monsite.org/xsdpar ". Cela signifie que dans le document, tous les éléments commençantwww.w3.org/2001/XMLSchema

xmlns:xsd="http://, et on trouve dans son élément racine l'attribut XMLest en effet un document , où le schéma est... public. Un schémaPUBLIC de type DTDNous avons déjà vu le cas, équivalent à une •

.xmlns. On utilise pour ce faire le préfixe Schema XML d'après un XMLdocument Nous n'allons pas ici entrer dans les détails de la notion d'espace de nom, mais simplement apprendre à valider un

II-E-2 - Comment lier un fichier XML à un schéma ?

II-F - Les dérivations

des types simples.existant, en vue de préciser un peu plus leur forme. Nous allons nous limiter dans ce cours d'initiation à la restrictionest possible de raffiner leur déclaration de telle manière qu'ils soient une "restriction" ou une extension d'un type déjà

. IlDTDLes types simples et complexes permettent déjà de faire plus de choses que les déclarations dans le langage

II-F-1 - Introduction

II-F-2 - Restriction de type

, qui sont des contraintes supplémentaires appliquées à un type simple particulier.facettesutilise pour ce faire des . OnXML Schemapermet de créer de nouveaux types simples à partir des types simples prédéfinis par le format

On peut appliquer une dérivation aussi bien à un type simple, qu'à un type complexe. La dérivation par restriction

II-F-2-a - Généralités

Page 23: Format Document XML Dtd Et Schemas[1] Copy

(Autres articles sur Developpez.com)G. ChagnonDéfinir le format d'un document XML : DTD et Schémas par

http://gilles-chagnon.developpez.com/cours/xml/dtd-et-schemas/Cette création est mise à disposition par Gilles Chagnon sous un contrat Creative Commons.

-23-

.maxExclusive, en utilisant la facette nonNegativeIntegerOn dérive ce type à partir du type simple prédéfini , limité aux valeurs comprises entre 0 et 99 inclus.MonEntierexemple, on peut souhaiter créer un type simple, appelé

Une facette permet de placer une contrainte sur l'ensemble des valeurs que peut prendre un type de base. Par

>simpleType:xsd/<

>restriction:xsd/< >/ "100"=value maxExclusive:xsd<

>"nonNegativeInteger"=base restriction:xsd< >"monEntier"=name simpleType:xsd<

fixer la précision du type...•fixer la valeur minimale ou maximale d'un type (voir l'exemple ci-dessus)•prendre en compte des expressions régulières•énumérer toutes les valeurs possibles d'un type•fixer, restreindre ou augmenter la longueur minimale ou maximale d'un type simple•

Il existe un nombre important de facettes qui permettent de :

attributs. Ainsi..., permettait de limiter les valeurs de certainsDTDOn peut utiliser cette fonctionnalité pour reproduire ce qui, dans les

II-F-2-b - Exemples

>simpleType:xsd/<

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

>/ "samedi"=value enumeration:xsd< >/ "vendredi"=value enumeration:xsd<

>/ "jeudi"=value enumeration:xsd< >/ "mercredi"=value enumeration:xsd<

>/ "mardi"=value enumeration:xsd< >/ "lundi"=value enumeration:xsd< >"xsd:string"=base restriction:xsd< >"typeJourSemaine"=name simpleType:xsd<

>/ "required"=use "typeJourSemaine"=type "jour"=name attribute:xsd<

Pour limiter la longueur d'une chaîne :

>simpleType:xsd/<

>restriction:xsd/< >/ "21"=value length:xsd<

>"xsd:string"=base restriction:xsd< >"typeMotLangueFrancaise"=name simpleType:xsd<

. Par exemple...xsd:patternautorisés, à l'aide de l'élément , qui permettent de spécifier quels sont les caractèresexpressions régulièresPlus complexe, on peut utiliser des

>simpleType:xsd/<

>restriction:xsd/< >/ "(.)+@(.)+"=value pattern:xsd< >"xsd:string"=base restriction:xsd<

>"typeAdresseElectronique"=name simpleType:xsd<

.@chaînes doit impérativement apparaître le caractère signifie que l'on peut mettre n'importe quel caractère au moins une fois, et qu'entre les deux(.)+Dans cet exemple,

Page 24: Format Document XML Dtd Et Schemas[1] Copy

(Autres articles sur Developpez.com)G. ChagnonDéfinir le format d'un document XML : DTD et Schémas par

http://gilles-chagnon.developpez.com/cours/xml/dtd-et-schemas/Cette création est mise à disposition par Gilles Chagnon sous un contrat Creative Commons.

-24-

le déclarer ainsi :Un numéro ISBN est un référent international pour une publication. Il s'agit d'un numéro à 10 ou 13 chiffres. On peut

>simpleType:xsd/<

>restriction:xsd/< >/ "[0-9]{10}"=value pattern:xsd< >"xsd:string"=base restriction:xsd<

>"typeISBN"=name simpleType:xsd<

.http://www.w3.org/TR/xmlschema-0/#SimpleTypeFacetsest accessible sur le site du W3C à l'adresse Bien sûr, toutes les facettes ne sont pas acceptées par tous les types. Il serait fastidieux ici d'en donner la liste ; elle

II-G - Diverses autres fonctionnalités

Web de e-formation. Nous pouvons inclure le schéma précédemment écrit à l'aide de la commande...d'une bibliographie pour une autre aplication -par exemple, dresser la liste d'un ensemble de ressources pour un site

est stocké à l'URL http://www.monsite.org/schemas/biblio.xsd. Nous avons besoinSchema XMLd'un mémoire. Ce Supposons par exemple que nous ayons défini le schéma d'une bibliographie dans le cadre plus général de l'écriture

reprendre à zéro à chaque fois que l'on fait une mise à jour.existants. Nul besoin de réinventer la roue, ou de procéder à de massifs « copier/coller », en ayant besoin de toutde modulariser un schéma, et donc de pouvoir sans difficulté importer certaines parties à partir de schémas déjà

. Cela offre de plus l'énorme avantagexsd:include plusieurs schémas dans un seul, à l'aide de l'élément inclured'morceaux, chacun chargé de définir précisément tel ou tel sous-domaine du schéma. Il est en effet possiblelong pour que sa complexité apparente rebute l'�il humain. Il est alors plus raisonnable de le scinder en plusieurs

a rapidement tendance à devenir verbeux. Autrement dit, il devient rapidement suffisammentSchema XMLUn

II-G-1 - Inclusion de schémas

>/ "http://www.monsite.org/schemas/biblio.xsd"=schemaLocation include:xsd<

importateur.Schema XML inclus et dans le Schema XML soit le même dans le targetNameSpaceseule condition est que le

Il s'agit d'une sorte de « copier-coller » du contenu de la bibliographie dans le schéma en cours d'écriture. La

déjà donné.biblio10.xsdschéma peuvent être ajoutés au début de la plupart des constructions. Voir par exemple lexsd:annotationLes éléments

l'information., qui est une référence à une URI pouvant être utilisée pour identifier l'objectif du commentaire ou desourceet

xml:lang. Ils disposent d'attributs optionnels : xsd:annotationdeux éléments doivent être placés dans un élément . Cesxsd:appinfotandis que les informations à l'intention de programmes doivent être incluses dans des éléments

,xsd:documentationLa documentation à l'intention des lecteurs humains peut être définie dans des éléments

aux éléments., l'adjonction de documentationXML permet, outre l'utilisation des commentaires comme tout format XML Schema

II-G-2 - Documentation

Page 25: Format Document XML Dtd Et Schemas[1] Copy

(Autres articles sur Developpez.com)G. ChagnonDéfinir le format d'un document XML : DTD et Schémas par

http://gilles-chagnon.developpez.com/cours/xml/dtd-et-schemas/Cette création est mise à disposition par Gilles Chagnon sous un contrat Creative Commons.

-25-

:XML Schemade à l'aide de l'attribut nullable du vocabulairenull comme pouvant être courrielNous déclarons maintenant l'élément

mécanisme similaire permettant d'indiquer qu'un élément peut être non renseigné. intègre unXML Schemacet élément. La valeur null des bases de données relationnelles est utilisée dans ce but.

Il est toujours préférable de pouvoir indiquer explicitement qu'un élément est non renseigné plutôt que d'omettre

II-G-3 - Attribut null

>personne/<

>courriel/<>null:xsi courriel< >nom/<Jean Dupont>nom<

>personne<

mais pas de sous-élément.. Quant à l'élément portant cet attribut, il peut contenir d'autres attributs,xsiCet attribut doit toujours être préfixé par