Accueil > Les documents XML


Les DTD et les schémas

Dernière modification : 2002/09/10 16:12:52     Contact : Martin Sévigny

Les DTD, ou Document Type Definition, contiennent les règles que doivent respecter les éléments et attributs d'un document XML pour que celui-ci soit valide. De la même façon qu'on ne conçoit pas une base de données sans avoir déterminé sa structure, on ne devrait pas concevoir un système d'information basé sur XML sans avoir conçu la ou les DTD.

Comme son nom l'indique, on utilisera une DTD par type de documents que l'on gère. Il s'agit d'une notion très floue mais qui peut servir de règle générale.

Il existe un grand nombre de DTD disponibles publiquement, soit pour des applications spécifiques, soit pour de grandes catégories de documents. Quelques sites essaient d'en faire le recensement, dont le XML.ORG Registry.

Nous passerons sous silence les multiples projets de spécifications XML dans le domaine du commerce électronique et de l'échange de données qui aboutissent à autant de DTD publiques.

Nous allons simplement mentionner les DTD TEI et Docbook pour des documents comme des livres, BiblioML pour les références bibliographiques, et quelques-une des DTD du ministère de la culture comme la DTD pour l'inventaire, les dossiers d'artistes, les bilans scientifique régionaux en archéologie, etc.

Composantes d'une DTD

Une DTD a pour objectif de spécifier quatre types d'information:

  1. Quels sont les éléments permis dans les documents

  2. Quel contenu peuvent posséder les éléments

  3. Quels attributs peuvent être associés à quels éléments

  4. Quelles sont les valeurs permises pour les attributs

Les deux premiers types d'information s'effectuent à l'aide des déclarations d'éléments, alors que les deux autres s'effectuent à l'aide des déclarations d'attributs.

Les déclarations d'éléments

Les éléments sont déclarés de cette façon dans une DTD:

<!ELEMENT chapitre (titre?, (para|liste)*, section+)>

Plusieurs informations sont fournies sur une telle ligne. D'abord, on déclare le nom de l'élément, soit chapitre dans notre exemple. Ensuite, on détermine quel est son modèle de contenu, entre parenthèses.

Ces modèles de contenu peuvent être des éléments (déclarés par ailleurs) ou encore des éléments et du texte (on les appellera des modèles de contenu mixtes). Pour comprendre l'exemple précédent, il faut connaître la signifiation de ces symboles:

,

Indique une séquence, c'est-à-dire que l'élément à gauche de la virgule doit précéder l'élément à droite.

|

Indique un choix, c'est-à-dire que l'on choisit soit l'élément à gauche de la barre verticale, soit l'élément à droite.

?

Indique un élément optionnel et qui ne peut pas être répété. Autrement dit, il a une cardinalité de 0 ou 1.

*

Indique un élément qui est optionnel mais qui peut être répété. Autrement dit, il a une cardinalité de 0 ou plusieurs, sans limite.

+

Indique un élément obligatoire et qui peut être répété. Il a donc une cardinalité de 1 ou plusieurs, sans limite.

Un élément peut également contenir du texte. Dans un tel cas, son modèle de contenu doit nécessairement être de la sorte:

<!ELEMENT para (#PCDATA|ville|etat|personne)*>

Ainsi, le mot "#PCDATA" doit être au début, les différents éléments doivent être séparés par des "ou", et l'ensemble doit être optionnel et répétable. La signification d'un tel modèle de contenu est la suivante:

L'élément para peut contenir du texte ou des éléments ville, etat ou personne dans n'importe quel ordre, autant d'occurrences que nécessaires, mais sans obligation de les utiliser.

Ces possibilités de structuration peuvent paraître limitées, et elles le sont. Entre autres, il n'est pas possible de contrôler le contenu textuel des champs, par exemple pour limiter à une liste de termes ou pour un format de date. Pour y arriver, il faut agir au niveau des applications XML ou utiliser des schémas, pas encore normalisés.

Il est toutefois important de souligner que ces possibilités sont suffisantes pour les documents textuels ou hypermédias.

Les déclarations d'attributs

Les DTD permettent de décler des attributs et leurs valeurs, et de les associer aux éléments. Voici un exemple de déclaration d'attributs:

<!ATTLIST chapitre
     id          ID        #REQUIRED
     niveau      NMTOKEN   #IMPLIED
     etiquette   CDATA     #FIXED "chapitre"
     acces       (public|restreint) "public"    >

Cette déclaration peut paraître complexe, mais il faut la regarder composante par composante. Tout d'abord, on indique que l'on déclare les attributs associés à l'élément chapitre. Ensuite, on retrouve quatre attributs déclarés, un par ligne dans notre exemple.

Le premier attribut se nomme id, son type de données est ID, c'est-à-dire qu'il doit répondre à certains critères (essentiellement composé de lettres et de chiffres, doit débuter par une lettre) et surtout que sa valeur doit être unique parmi tous les attributs de type ID dans le document, et enfin cet attribut est obligatoire, c'est-à-dire qu'il doit se retrouver dans toutes les balises d'ouverture des éléments chapitre.

Ensuite, l'attribut niveau est un nom, semblable à un ID mais pas nécessairement unique, il n'est pas obligatoire et il n'y a pas d'autres restrictions sur son contenu.

L'attribut etiquette est de type CDATA, c'est-à-dire qu'il peut contenir du texte quelconque, il a toujours la même valeur fixe, soit chapitre.

Enfin, l'attribut acces peut posséder deux valeurs, soit public ou restreint, et par défaut il a la valeur public.

Les schémas XML

Pour pallier aux limites des DTD, en particulier dans le domaine de l'échange de données, le W3C a entrepris un effort pour normaliser les schémas XML, soit une nouvelle forme de grammaires et des types de données que l'on peut utiliser pour valider les documents XML. Les schémas XML jouent donc exactement le même rôle que les DTD dans une application XML, mais avec des possibilités plus grandes de structuration.

Ces possibilités sont réelles et peuvent s'avérer très utiles dans certains contextes, y compris des applications documentaires. Toutefois, pour une première journée de formation à XML, il n'est pas nécessaire d'entrer dans ces détails.

Outils disponibles

Les DTD sont stockées dans des fichiers texte, alors n'importe quel éditeur de texte peut permettre de les créer. Toutefois, certains outils peuvent faciliter la création ou la visualisation des DTD.

XML Spy

XML Spy est un éditeur XML mais qui comporte un mode spécial pour l'édition de DTD, avec des fonctions spécialisées et efficaces. Son mode d'affichage est de type tableau.

TurboXML

Ce logiciel est le plus complet en ce qui concerne l'édition de DTD ou de schémas. D'ailleurs, on peut passer de l'un à l'autre. Il offre un mode graphique pour la visualisation des DTD.

DTDParse

Il s'agit d'un programme Perl qui analyse une DTD et construit une version HTML facile à naviguer et à comprendre.