XML:Types de DTD
Un article de WikiTuto.
Sommaire |
Introduction
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 XML, par exemple si l'on veut pouvoir partager le même type de document avec une communauté d'autres rédacteurs. Deux solutions sont possibles : les "Schémas XML" et les "Document Type Definition". Ces dernières sont les plus simples à manipuler et sont apparues en premier, alors que les Schémas n'étaient pas encore définis. Ce sont les raisons pour lesquelles nous allons nous limiter à elles pour le moment. Il ne faut pas oublier néanmoins 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 spécifier de manière plus détaillée le formatage autorisé pour le contenu de la balise ou de l'attribut.
Toute déclaration de type de document peut être composée de déclarations d'éléments, de déclarations d'attributs, de déclarations d'entités, de déclarations de notations et de commentaires.
Types de DTD
Introduction
Une DTD peut être stockée dans deux endroits différents. Elle peut être incorporée au document XML (elle est alors dite interne), ou bien être un fichier à part (on parle alors de DTD externe). Cette dernière possibilité permet de la partager entre plusieurs documents XML. Il est possible de mêler DTD interne et externe.
ll existe de surcroît deux types de DTD externes : privé ou public. Les DTD privées sont accessibles uniquement en local (sur la machine de développement), tandis que les publiques sont disponibles pour tout le monde, étant accessibles grâce à un URI (Uniform Resource Identifier).
Une déclaration de type de document est de la forme :
<!DOCTYPE elt.racine ... "..." "...">
Cette déclaration se place juste après le prologue du document. L'élément 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>
La syntaxe DTD ne diffère pas entre une DTD interne et une externe.
Syntaxe
Le contenu ne change pas suivant le type de DTD, mais les déclarations d'une DTD interne sont écrites à l'intérieur du prologue du document XML alors que celles d'une DTD externe sont stockées dans un fichier... externe.
Exemple de déclarations pour une DTD interne :
<!DOCTYPE biblio[
<!ELEMENT biblio (livre)*>
<!ELEMENT livre (titre, auteur, nb_pages)>
<!ATTLIST livre
type (roman | nouvelles | poemes | théâtre) #IMPLIED
lang CDATA "fr"
>
<!ELEMENT titre (#PCDATA)>
<!ELEMENT auteur (#PCDATA)>
<!ELEMENT nb_pages (#PCDATA)>
]>
DTD externe
Les deux types de DTD externes sont les DTD de type public et les DTD de type system. Le mot-clef SYSTEM indique que le fichier spécifié se trouve sur l'ordinateur local et qu'il est disponible uniquement à titre privé. Par contre, le mot-clé PUBLIC indique une ressource disponible pour tous sur un serveur web distant.
Exemple de déclaration de DTD externe de type SYSTEM :
<!DOCTYPE biblio SYSTEM "bibliographie.dtd">
Le fichier associé est le suivant :
<?xml version="1.0" encoding="ISO-8859-1"?>
<!ELEMENT biblio (livre*)>
<!ELEMENT livre (titre, auteur, nb_pages)>
<!ATTLIST livre
type (roman | nouvelles | poemes | théâtre) #IMPLIED
lang CDATA "fr"
>
<!ELEMENT titre (#PCDATA)>
<!ELEMENT auteur (#PCDATA)>
<!ELEMENT nb_pages (#PCDATA)>
Exemple de déclaration 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 précédent, la chaîne de caractères après le mot PUBLIC fait référence tout d'abord à l'identifiant de la DTD (ici -, qui signifie que la DTD n'a pas de numéro d'enregistrement officiel), au propriétaire de la DTT (ici le W3C), puis son nom, enfin sa langue.



