Rédaction d'une DTD - Phrase
Nous allons maintenant étudier ce qu'est la DTD (Document Type Definition) d'un fichier XML.
La DTD d'un document permet de :
déclarer les catégories d'information contenues dans le document à l'aide de balises ;
donner les règles qui définissent les rapports entre ces catégories d'information.
C'est en quelque sorte la « grammaire » du document
Reprenons le fichier XML que nous venons de constituer. Dans ce fichier, nous utilisons la balise <NP1>....</NP1> pour conserver des divisions binaires. Traditionnellement en grammaire, on utilise plutôt NP' pour désigner le groupe "adjectif+nom" (sans prendre en compte le déterminant), mais le langage XML refuse cette notation parce-que l'apostrophe ou guillemet est un caractère réservé en XML (nous verrons plus loin la valeur de ce caractère réservé) |
Dans une DTD, nous déclarons les balises. Nous allons donc déclarer les balises <S>, <NP>, <DET>, <NP1>, <ADJ>, <N>, <VP>, <V>.
Remarquons que :
1. nous suivons l'ordre d'apparition dans le fichier ;
2. chaque balise de cette énumération représente un couple (balise ouvrante, balise fermante) ;
3. chaque balise n'apparaît qu'une fois.
La syntaxe pour déclarer une DTD est <!DOCTYPE suivi du nom de balise racine du fichier XML. Dans ce cas précis, la syntaxe sera : <!DOCTYPE S
Puis nous donnons les règles qui définissent les rapports entre les balises. Ainsi, la balise <S> a pour successeurs immédiats les balises <NP> et <VP> ; puis la balise <VP> a pour successeurs immédiats les balises, <V> et <NP>.
Méthode : Déclaration de règles de réécriture ("déclaration-règle")
La balise <S> a pour successeurs immédiats les balises <NP> et <VP>. Nous dirons que :
la balise <S> se réécrit <NP> + <VP>
et nous écrirons comme suit dans la DTD du fichier XML
<!ELEMENT S (NP,VP)>
La balise <VP>a pour sucesseurs immédiats les balises <V> et <NP>. Nous dirons que :
la balise <VP> se réécrit <V> + <NP>
et nous écrirons
<!ELEMENT VP (V, NP)>
Syntaxe de la déclaration de la balise :
1. ouvrir un chevron : <
2. écrire un point d'exclamation : <!
3. écrire le mot clé "élément" : <!ELEMENT
4. écrire le nom de la balise déclarée : <!ELEMENT VP
5. écrire les noms des balises "successeurs immédiats" entre parenthèses et séparées par une virgule : <!ELEMENT VP (V,NP)
6. écrire le chevron fermant : <!ELEMENT VP (V,NP)>
Il s'agit effectivement d'une déclaration (on déclare des balises) mais c'est aussi une règle (on indique les relations entres les balises ou on montre des balises dérivent d'une balise initiale).
Mettons en évidence, sur deux exemples, les rapports entre fichier XML et DTD : |
Syntaxe : Généralisation à l'ensemble de déclaration-règle du fichier
Nous obtenons :
<!ELEMENT VP (V, NP)>
<!ELEMENT NP (DET, NP1)>
<!ELEMENT NP1 (ADJ, N)>
<!ELEMENT VP (V, NP)>
<!ELEMENT NP (DET, N)>
Nous remarquons que nous avons deux déclarations de réécriture de <NP>, nous pouvons les rassembler en une seule déclaration-règle comme suit :
<!ELEMENT NP ((DET, NP1) | (DET, N))>
Nous avons simplement parenthésé les deux règles
Enchâssement des éléments |
Méthode : Déclaration de type de données ("déclaration")
Les balises <DET>, <ADJ>, <N> et <V> sont des balises terminales : elles n'ont pas de successeurs.
La balise <DET>, par exemple, étant terminale, comporte un contenu textuel. Elle est donc du type "texte".
On déclarera ce type de façon suivante :
<!ELEMENT DET (#PCDATA)>
1. ouvrir un chevron : <
2. écrire un point d'exclamation : <!
3. écrire le mot clé "élément" : <!ELEMENT
4. écrire le nom de la balise déclarée : <!ELEMENT DET
5. écrire le mot-clé PCDATA précédé d'un # entre parenthèses : <!ELEMENT DET (#PCDATA)
6. écrire le chevron fermant : <!ELEMENT DET (#PCDATA)>
PCDATA signifie parsed character data, c'est-à-dire données caractères analysables (en anglais, parsing signifie analyser grammaticalement, mais ici parsed signifiera simplement analysé, c'est-à-dire décomposé).
Syntaxe : Généralisation à l'ensemble de déclaration-type de données
Nous obtenons :
<!ELEMENT DET (#PCDATA)>
<!ELEMENT ADJ (#PCDATA)>
<!ELEMENT N (#PCDATA)>
<!ELEMENT V (#PCDATA)>
La déclaration
<!DOCTYPE S
ne se termine pas, au bout de la ligne, par un chevron fermant tout simplement parce que ce chevron fermant se trouvera à la fin de la DTD.
Nous aurons ainsi :
<!DOCTYPE S
[
ensemble des déclarations-règles de la DTD
et ensemble des déclarations de type de données
]
>
Remarque : "S" est le nom de la balise racine du fichier XML
Syntaxe :
Syntaxe complète de la DTD + Fichier XML |
Dans le cours prochain, nous aborderons la notion de propriété d'une catégorie d'information, notion qui nous conduira à la notion d'attribut.