Vous êtes sur la page 1sur 9

Contenu du cours

I. Introduction
Il peut tre parfois ncessaire de prciser les balises et attributs auxquels on a droit lors de la rdaction d'un document XML, par exemple si l'on veut pouvoir partager le mme type de document avec une communaut d'autres rdacteurs. Deux solutions sont possibles : les Schmas XML et les Document Type Definition . Ces dernires sont les plus simples manipuler et sont apparues en premier, alors que les Schmas n'taient pas encore dfinis. Cest pourquoi nous allons nous limiter elles pour le moment. Il faut nanmoins garder l'esprit qu'il existe une autre solution, plus complexe certes, mais aussi plus puissante. Elle permet notamment d'informer plus efficacement l'utilisateur sur les balises auxquelles il a droit, ou bien de spcifier de manire plus dtaille le format autoris pour le contenu de l'lment ou de l'attribut.

II. Types de DTD


1. Introduction Une DTD peut tre stocke dans deux endroits diffrents. Elle peut tre incorpore au document XML (elle est alors dite interne), ou bien tre un fichier part (on parle alors de DTD externe). Cette dernire possibilit permet de la partager entre plusieurs documents XML. Il est possible de mler DTD interne et externe. ll existe de surcrot deux types de DTD externes : priv ou public. Les DTD prives sont accessibles uniquement en local (sur la machine de dveloppement), tandis que les publiques sont disponibles pour tout le monde, tant accessibles grce un URI (Uniform Resource Identifier). Une dclaration de type de document est de la forme : <!DOCTYPE elt.racine ... "..." "..."> Nous verrons progressivement par quoi remplacer les points de suspension. Cette dclaration se place juste aprs le prologue du document. L'lment racine du document XML rattach cette DTD est alors obligatoirement elt.racine. Par exemple... <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE commande ... "..." "boncommande.dtd"> <commande> <item>(...)</item> <item>(...)</item> <item>(...)</item> </commande>

>Retour la TdM
2. Syntaxe Le contenu ne change pas suivant le type de DTD, mais les dclarations d'une DTD interne sont crites l'intrieur du document XML alors que celles d'une DTD externe sont stockes dans un fichier... externe. Exemple de dclarations pour une

DTD interne :

<!DOCTYPE biblio[ <!ELEMENT biblio (livre)*> <!ELEMENT livre (titre, auteur, nb_pages)> <!ATTLIST livre type (roman | nouvelles | poemes | thtre) #IMPLIED lang CDATA "fr" > <!ELEMENT titre (#PCDATA)> <!ELEMENT auteur (#PCDATA)> <!ELEMENT nb_pages (#PCDATA)> ]>

>Retour la TdM
3. DTD externe Les deux types de DTD externes sont les DTD de type public et les DTD de type system. Le motclef SYSTEM indique que le fichier spcifi se trouve sur l'ordinateur local et qu'il est disponible uniquement titre priv. Le mot-cl PUBLIC indique une ressource disponible pour tous sur un serveur distant. Exemple de dclaration de

DTD externe de type SYSTEM :

<!DOCTYPE biblio SYSTEM "bibliographie.dtd"> Le fichier associ est le suivant : <!ELEMENT biblio (livre*)> <!ELEMENT livre (titre, auteur, nb_pages)> <!ATTLIST livre type (roman | nouvelles | poemes | thtre) #IMPLIED lang CDATA "fr" > <!ELEMENT titre (#PCDATA)> <!ELEMENT auteur (#PCDATA)> <!ELEMENT nb_pages (#PCDATA)> Exemple de dclaration de

DTD externe de type PUBLIC :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> Dans l'exemple prcdent, la chane de caractres aprs le mot PUBLIC fait rfrence tout d'abord l'identifiant de la DTD (ici -, qui signifie que la DTD n'a pas de numro d'enregistrement officiel), au propritaire de la DTD (ici le W3C), puis son nom, enfin sa langue.

>Retour la TdM

III. Dclarations d'lments


1. Gnralits Une dclaration d'lment est de la forme : <!ELEMENT nom type_element>

nom est le nom de l'lment et type_element est le type auquel il est associ. Un lment peut tre de type texte, vide, squence ou choix d'lment. Dans ces deux derniers cas, on indique la liste des lmentsenfants. Passons ces types en revue.
2. lment texte Cet lment est le plus rpandu, puisque c'est celui qui contient... du texte. Il se dclare ainsi : <!ELEMENT elt (#PCDATA)> 3. lment vide Un lment vide est, comme son nom l'indique, un lment qui n'a aucun contenu -que ce soit de type texte, ou bien un autre lment. Le mot-clef utilis pour la dclaration de ce type d'lment est EMPTY : <!ELEMENT elt EMPTY>

Exemple d'utilisation : <elt /> Un lment vide peut cependant fort bien possder un ou plusieurs attributs. Par exemple <img width="100" height="30" src="paysage.jpg" alt="Paysage de neige" /> 4. Squence d'lments Une squence d'lments est une liste ordonne des lments qui doivent apparatre en tant qu'lmentsenfants de l'lment que l'on est en train de dfinir. Ce dernier ne pourra contenir aucun autre lment que ceux figurant dans la squence. Cette liste est compose d'lments spars par des virgules et est place entre parenthses. Chaque lment-enfant doit de plus tre dclar par ailleurs dans la DTD (avant ou aprs la dfinition de la liste, peu importe). Dans le fichier XML, ils doivent apparatredans l'ordre de la squence. <!ELEMENT elt0 (elt1, elt2, elt3)> Exemple d'utilisation valide : <elt0> <elt1>(...)</elt1> <elt2>(...)</elt2> <elt3>(...)</elt3> </elt0> Exemples d'utilisations non valides :

<elt0> <elt1>(...)</elt1> <elt3>(...)</elt3> </elt0> ... car l'lment

elt2 est manquant.

<elt0> <elt1>(...)</elt1> <elt3>(...)</elt3> <elt2>(...)</elt2> </elt0> ... car l'ordre des lments n'est pas respect. 5. Choix d'lments Un choix d'lment donne le choix dans une liste de plusieurs lments possibles. L'utilisation prcise dpend des indicateurs d'occurence, que nous verrons un peu plus loin. De mme que pour la squence, les lments-enfants doivent tre dclars dans la DTD. Cette liste est compose d'lments spars par le caractre | (combinaison de touches AltGr+6 sur un clavier AZERTY). <!ELEMENT elt0 (elt1 | elt2 | elt3)> Exemple d'utilisation valide : <elt0><elt2>(...)</elt2></elt0> Exemple d'utilisation non valide :

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

>Retour la TdM
6. Indicateurs d'occurence

a. Syntaxe
Lors de la dclaration de squence ou de choix d'lments, chaque lment enfant peut tre attribue une indication d'occurence (?, + ou *). Exemples d'indicateur d'occurences : <!ELEMENT elt0 (elt1, elt2?, elt3+, elt*)>

elt1 ne comprend aucune indication d'occurence. Il doit donc apparatre une seule et unique fois dans l'lment elt0 ; elt2 a pour indication d'occurence ?. Cela signifie que l'lment doit apparatre au maximum une fois (il peut ne pas apparatre du tout) ; elt3 a pour indication d'occurence +. Cela signifie que l'lment doit apparatre au moins une fois ; elt4 a pour indication d'occurence *. Cela signifie que l'lment peut apparatre autant de fois que l'auteur le dsire, voire pas du tout. >Retour la TdM b. Exemples
Les indicateurs d'occurence peuvent tre utiliss en conjonction avec les squences ou les choix d'lments. Ainsi... <!ELEMENT elt0 (elt1+, elt2*, elt3?)> ... permet d'indiquer une squence compose d'au moins un lment d'lments elt2 (ventuellement nul), enfin au plus un lmentelt3.

elt1, puis d'un nombre indtermin

Exemple d'utilisation d'un choix d'lments avec indicateurs d'occurence par lment : <!ELEMENT choix.elt (elt1* | elt2* | elt3*)> Exemple d'utilisation valide : <elt0> <elt2>(...)</elt2> <elt2>(...)</elt2> </elt0> Exemples d'utilisation non valide : <elt0> <elt3>(...)</elt3> <elt2>(...)</elt2> </elt0> <elt0> <elt2>(...)</elt2> <elt3>(...)</elt3> </elt0>

Exemple d'utilisation d'un choix d'lments avec indicateur d'occurence global : <!ELEMENT elt0 (elt1 | elt2 | elt3)*> Exemple d'utilisation valide : <elt0> <elt2>(...)</elt2> <elt3>(...)</elt3> <elt1>(...)</elt1> </elt0> Dans ce dernier cas, il n'y a pas de contrainte visible sur l'ordre d'apparition et le nombre des lments. C'est la dclaration la plus souple possible.

>Retour la TdM
7. lment quelconque L'lment quelconque est l'lment- fourre-tout dans une DTD. Il peut contenir tout autre lment dfini dans la DTD, aussi bien qu'tre vide ou contenir du texte. Les lments-enfants ventuels peuvent apparatre dans n'importe quel ordre, et en quantit non dfinie. Il est prfrable de ne pas utiliser trop souvent ce type de dclaration, car on perd les avantages qu'offre la rdaction d'une DTD, qui sont de fixer des contraintes prcises sur la structure du document XML qui lui est li. Le mot-clef utilis pour la dclaration de ce type d'lment est ANY. <!ELEMENT elt ANY>

>Retour la TdM
8. lment contenu mixte Un lment contenu mixte peut contenir aussi bien du texte que des lments-enfants. Il se prsente comme une liste de choix, avec des indicateurs d'occurence bien choisis. Le texte contenu peut se trouver n'importe quel endroit dans l'lment, et peut tre une section CDATA. Exemple de dclaration : <!ELEMENT citation (#PCDATA | auteur)*> Exemple d'utilisation : <citation> <auteur>Shakespeare</auteur>tre ou ne pas tre </citation> La seule syntaxe possible dans la dclaration commence par #PCDATA. Pour reprendre l'exemple prcdent, crire <!ELEMENT citation (auteur|#PCADATA)*> est incorrect.

>Retour la TdM
Exercice 1. criture d'une DTD avec lments

nonc Correction

IV. Dclarations d'attributs

1. Introduction Comme on peut trouver dans un document XML des lments possdant des attributs, il est normal que la DTD permette de dfinir des contraintes sur ces derniers. On peut dclarer et attacher un lment donn chaque attribut sparment, mais il est souvent prfrable, afin d'amliorer la lisibilit du code, de les runir sous la forme d'une liste. Chaque attribut dfini dans la liste possde un nom et un type. On peut lui donner une valeur par dfaut, ou bien indiquer quil est obligatoire. Le mot-clef de cette dclaration est ATTLIST.

>Retour la TdM
2. Type chane de caractres Il s'agit l du type d'attribut le plus courant. Une chane de caractres peut tre compose de caractres ainsi que d'entits analysables. Le mot-clef utilis pour la dclaration de chane de caractre est CDATA. Exemple de dclaration de clef #IMPLIED) :

CDATA (nous reviendrons dans un instant sur la signification du mot-

<!ELEMENT elt (...)> <!ATTLIST elt attr CDATA #IMPLIED> Exemples d'utilisations :

<elt attr="Chane de caractres">(...)</elt>

<!ENTITY car "caractres"> <elt attr="Chane de &car;">(...)</elt>

>Retour la TdM
3. Valeurs par dfaut Chaque attribut peut tre obligatoire, optionnel ou fixe et avoir une valeur par dfaut. Les exemples suivants montrent la dclaration d'un attribut appel attr attach un lment nomm elt. 1. Dclaration d'un attribut avec une valeur par dfaut :

<!ELEMENT elt (...)> <!ATTLIST elt attr CDATA "valeur"> Un tel attribut n'est pas obligatoire. S'il est omis dans le fichier XML lors de l'utilisation de l'lment elt, il est considr comme valant valeur. Dans cet exemple, si on crit <elt>(...)</elt>, cela est quivalent crire <elt attr="valeur">(...)>/elt>. 2. Dclaration d'un attribut requis :

<!ELEMENT elt (...)> <!ATTLIST elt attr CDATA #REQUIRED> Un tel attribut est obligatoire. Son absence dclenche une erreur du vrificateur syntaxique sur le fichier XML. 3. Dclaration d'un attribut optionnel :

<!ELEMENT elt (...)> <!ATTLIST elt attr CDATA #IMPLIED> 4. Dclaration d'un attribut avec une valeur fixe :

<!ELEMENT elt (...)> <!ATTLIST elt attr CDATA #FIXED "valeur">

L'utilit d'un tel attribut peut sembler bizarre premire vue, puisqu'il ne peut prendre qu'une seule valeur. Cette fonctionnalit est cependant utile lors d'une mise jour d'une DTD, pour anticiper la compatibilit avec des versions ultrieures.

>Retour la TdM
4. Types ID et IDREFS Ce type sert indiquer que l'attribut en question peut servir d'identifiant dans le fichier ne pourront pas possder le mme attribut avec la mme valeur. Exemple de dclaration de type

XML. Deux lments

ID optionnel :

<!ELEMENT elt (...)> <!ATTLIST elt attr ID #IMPLIED> <!ELEMENT elt1 (...)> <!ATTLIST elt1 attr ID #IMPLIED> <!ELEMENT elt2 (...)> <!ATTLIST elt2 attr ID #IMPLIED> La dclaration prcdente interdit par exemple... <elt1 attr="machin"></elt1> <elt2 attr="truc"></elt2> <elt1 attr="machin"></elt1> ... ainsi que <elt1 attr="machin"></elt1> <elt2 attr="machin"></elt2> <elt1 attr="truc"></elt1> Cest par exemple le cas de lattribut

id en (X)HTML.

Ce type est complt par le type IDREFS. Un attribut de type IDREFS contiendra une liste dID. Par exemple, si dans le document XML ont t utiliss des attributs de type IDvalant machin, vacheLait et ChemiseFleurs, alors une valeur valide pour un attribut de type IDREFS sera "machin vacheLait ChemiseFleurs". Lattribut headers des lments tden (X)HTML est de type IDREFS.

>Retour la TdM
5. Type numr On peut parfois dsirer limiter la liste de valeurs possibles pour un attribut. On le dfinit alors comme tant de type numr. Donner une autre valeur dans le fichier XMLprovoque une erreur. Exemple de dclaration d'une liste de choix d'attributs : <!ELEMENT img EMPTY> <!ATTLIST img format (GIF | JPEG | PNG) "PNG"> Cet exemple dclare un attribut format d'un lment img. La valeur de cet attribut peut tre PNG, GIF ou JPEG. Si aucune valeur n'est affecte cet attribut, c'est la valeur par dfaut qui le sera, ici PNG. On notera l'absence de guillemets dans la liste des valeurs possibles. En ajouter est une erreur courante dans la rdaction d'une DTD.

>Retour la TdM
6. Utilisation de liste pour les attributs

On utilise le fait qu'il est possible de factoriser le nom de l'lment. Par exemple... <!ELEMENT elt (...)> <!ATTLIST elt attr1 CDATA #IMPLIED attr2 CDATA #REQUIRED > Les retours la ligne sont optionnels, et la mise en page nest pas contrainte.

>Retour la TdM
Exercice 1. criture d'une DTD avec attributs

nonc Correction

V. Dclarations d'entits
1. Introduction Les dclarations d'entits permettent de disposer de l'quivalent de raccourcis clavier et de caractres a priori non accessibles dans le jeu de caractres slectionn. Les entits dfinies avec le caractre % ne sont utilisables que dans la DTD. En labsence de ce caractre, les entits ne sont utilisables que dans le document XML.

>Retour la TdM
2. Les entits paramtriques Elles servent dfinir des symboles qui seront utiliss ailleurs dans la DTD. Ce sont en quelque sorte des raccourcis d'criture : partout o une entit est mentionne, elle peut tre remplace par la chane de caractres qui lui est associe. Ce mcanisme s'apparente un mcanisme de macro . Les entits paramtriques ne peuvent pas tre utilises en-dehors d'une Exemple tir de la spcification du langage <!ENTITY % heading "H1|H2|H3|H4|H5|H6"> L'exemple prcdent a pour effet d'indiquer au systme que toute occurence de remplace par H1|H2|H3|H4|H5|H6 dans la DTD.

DTD.

HTML :

%heading; doit tre

Ce mcanisme peut galement servir utiliser un nom relativement comprhensible la place d'une squence de caractres peu vocatrice. La dfinition d'une entit peut galement faire rfrence d'autres entits ; la substitution est alors effectue de proche en proche.

>Retour la TdM
3. Les entits de caractres Elle servent donner un nom facilement lisible des caractres qui ne sont pas reprsentables dans l'alphabet utilis, ou qui ne sont pas disponibles au clavier. Exemples tirs de la

DTD du langage HTML 4.01 :

<!ENTITY nbsp "&#160;"> <!ENTITY eacute "&#233;">

Les entits de caractres dfinies dans une DTD peuvent tre utilises dans un document XML rfrenant cette DTD l'aide de la notation &NomEntit; (par exemple &ecaute;pour reprendre une des entits prcdentes).

>Retour la TdM
4. Les entits internes Ce sont des symboles pouvant tre dfinis dans une DTD et utiliss dans un document XML comme raccourcis d'criture. La dfinition complte du symbole est entirement incluse dans la DTD, mais cela n'est possible que pour les DTD internes. Exemple : <!DOCTYPE eltRacine[ <!ENTITY ADN "Acide dsoxyribonuclique"> ]> <eltRacine>L'&ADN; est une molcule complexe. </eltRacine> Dans le fichier XML, l'appel &ADN; sera aumatiquement remplac, lors de l'affichage ou du traitement, par la chane de caractres "Acide dsoxyribonuclique".

>Retour la TdM
5. Les entits externes Il s'agit...

... soit de symboles pouvant tre dfinis dans un autre fichier, mais pouvant tre utiliss dans un document XML ou la DTD elle-mme. Par exemple :
<!ENTITY Inclusion SYSTEM "toto.xml"> <!ENTITY % Inclusion SYSTEM "toto.inc"> Dans le fichier XML, le contenu du fichier toto.xml sera insr l'appel de l'entit &Inclusion;, et dans la DTD, le contenu du fichier toto.inc sera insr l'appel de l'entit &Inclusion;

la

... soit de symboles pouvant tre dfinis dans une autre DTD et utiliss dans DTD courante :

<!ENTITY % HTMLSpecial PUBLIC "-//W3C//ENTITIES Special for XHTML//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent"> Le contenu de cette DTD (qui peut tre de type SPECIAL ou PUBLIC) est import dans DTD courante par l'appel de %HTMLSpecial;.

la