<!ELEMENT % xxx (yyy)>
Cette balise permet de déclarer un élément nommé "xxx",
dont le contenu sera de type "yyy".
Notre exemple ci-dessus sera à interprété
de la manière suivante : "l'élément bouton ne peut pas
se trouver à l'intérieur des éléments A,
INPUT, SELECT...".
Le tiret placé devant la parenthèse permet d'interdire la présence
dans ces éléments. S'il y avait eu à la place un +, la présence
aurait été autorisée (au moins une fois), tandis que s'il
n'y avait rien eu, la présence
aurait été obligatoire au plus une fois).
Il existe une dizaine d'autres "règles" applicables ici : *
pour "zéro, un ou plus", ? pour
"zéro ou une fois"...
%flow est elle-même
une entité, qui contient encore d'autres entités... Il faut donc
avoir les idées claires pour dénouer certains "fils" de
la DTD...
Les deux tirets entre BUTTON
et (%flow;) indiquent que l'élément
doit obligatoirement avoir une balise d'ouverture ET une balise de fermeture.
S'il y avait à la place un tiret et un O ("
- O "), la balise de fermeture pouvait être oubliée,
et s'il y avait eu deux O à la place des deux tirets ("
O O "), les deux balises pouvaient être omises. Par exemple:
<!ELEMENT BODY O O (%block;|SCRIPT)+
+(INS|DEL) >
Il peut ne pas y avoir de BODY.
<!ATTLIST aaa bbb ccc ddd >
On définit ici les attributs possibles dans les balises. Un attribut
se trouve au coeur de la balise : <a
href="#">.
aaa : le nom auquel s'applique la règle
que l'on déclare ici. Exemple : A.
bbb : le nom de l'attribut déclaré
ici (il peut y en avoir plusieurs à la fois, notamment en faisant appel
aux entités). Exemple: HREF.
ccc : le type de l'attribut, ou une liste
explicite des types possibles. Exemple : (top|middle|bottom|baseline).
ddd : #IMPLIED
si l'attribut a une valeur implicite (ou par défaut), #REQUIRED
s'il est requis, ou #FIXED quand il doit avoir
une valeur donnée.
Ecrire une DTD
Maintenant que nous connaissons les grandes lignes du fonctionnement d'une DTD,
nous pouvons prendre directement un fichier XML (par exemple), et construire sa
DTD.
<?xml version="1.0"?>
<!DOCTYPE mmedia SYSTEM "http://www.site.com/mmedia.dtd">
<media>
<cd>
<artiste>Graham Coxon</artiste>
<titre>The Kiss Of Morning</titre>
<pistes nbr="13">
<piste num="01">Bitter Tears</piste>
<piste num="02">Escape Song</piste>
[etc...]
</pistes>
</cd>
</media>
Une DTD valide ce fichier XML pourrait être
de la forme :
<!ELEMENT media ( cd*, mp3*, k7*,
dat*, md* ) >
<!ELEMENT cd ( artiste, titre, pistes ) >
<!ELEMENT k7 ( artiste, titre, pistes ) >
<!ELEMENT mp3 ( artiste, titre, pistes ) >
<!ELEMENT dat ( artiste, titre, pistes ) >
<!ELEMENT md ( artiste, titre, pistes ) >
<!ELEMENT artiste ( #PCDATA ) >
<!ELEMENT titre ( #PCDATA ) >
<!ELEMENT pistes ( piste+ ) >
<!ATTLIST pistes nbr #CDATA >
<!ELEMENT piste ( #PCDATA ) >
<!ATTLIST piste num #CDATA >
C'est suffisamment complet pour le moment, nous
verrons dans de prochains articles comment nous pouvons préciser le champ
des possibles de notre fichier XML...
Page 1 | 2
|