Document Type Definition

Un article de Wikipédia, l'encyclopédie libre.
(Redirigé depuis DTD)
Aller à : navigation, rechercher
Page d'aide sur l'homonymie Pour les articles homonymes, voir Définition (homonymie).

La Document Type Definition (DTD), ou Définition de Type de Document, est un document permettant de décrire un modèle de document SGML ou XML. Le modèle est décrit comme une grammaire de classe de documents[1] : grammaire parce qu'il décrit la position des termes les uns par rapport aux autres, classe parce qu'il forme une généralisation d'un domaine particulier, et document parce qu'on peut former avec un texte complet.

Une DTD décrit les documents à deux niveaux : la structure logique, que l'on peut assimiler à la syntaxe abstraite, et la structure physique, que l'on peut assimiler à la syntaxe concrète.

Au niveau de la structure logique, une DTD indique les noms des éléments pouvant apparaître et leur contenu, c'est-à-dire les sous-éléments et les attributs. En dehors des attributs, le contenu est spécifié en indiquant le nom, l'ordre et le nombre d'occurrences autorisées des sous-éléments. L'ensemble constitue la définition des hiérarchies valides d'éléments et de texte. En revanche, les DTD ne permettent pas de poser des contraintes sur la valeur du texte comme « le contenu de l'élément X est un entier en décimal », ou encore « dans l'élément Y, toutes les séquences de blancs sont équivalentes à un seul espace ».

Définir ce qui est valide est aussi le rôle des « schémas » comme Schéma XML, Relax NG et Schematron mais ceux-ci sont préférentiellement exprimés en syntaxe XML alors que les DTD ont une syntaxe spécifique. Seule la DTD fait partie intégrante de la recommandation W3C du XML, et elle seule permet de valider un document XML du point de vue de cette recommandation.

La DTD d'un document peut être écrite à l'intérieur et à l'extérieur de ce document. La DTD finale est un regroupement des deux.

Au niveau de la structure physique, une DTD peut aussi définir des entités générales. Celles-ci ont l'un des rôles suivants :

  • une référence à un fragment de document externe, typiquement un autre fichier.
  • une abréviation pour un fragment de texte répétitif. Pour cette utilisation, la définition est plutôt dans le sous-ensemble interne.
  • un synonyme de caractère permettant des références par nom plutôt que par un code numérique.

Différences entre SGML et XML[modifier | modifier le code]

Il y a quelques différences entre les DTD pour SGML et celles pour XML. La plus significative du point de vue de la capacité d'expression est que les DTD pour XML ne permettent pas de restrictions sur l'imbrication des éléments et spécifient les arbres valides. Par exemple, dans la version SGML de HTML, un élément « A » (pour les liens et ancres) ne peut contenir un autre élément « A » à n'importe quel niveau, même si la description générale du contenu mentionne indirectement « A » comme contenu possible de « A ». Cette restriction n'est pas exprimable dans la version XML des DTD.

Une autre restriction sur la capacité d'expression des DTD pour XML par rapport à SGML est la suppression des groupements non ordonnés : en SGML, écrire pour le contenu d'un élément X « A & B & C » signifie que X doit contenir les trois éléments A, B et C sans exigence sur l'ordre. Dans les DTD pour XML, qui n'ont pas le connecteur « & », cela ne peut s'exprimer que par l'énumération explicite de tous les ordres possibles : la définition de contenu pour X s'écrit : « A,B,C ». L'explosion combinatoire que cela implique amène généralement à imposer dans les DTD pour XML un ordre qui n'est pas logiquement nécessaire pour le traitement de l'information du document.


Syntaxe[modifier | modifier le code]

  • PCDATA : parsed character data, représente un seul élément texte (sans quantificateur).
  • | : permet d'ajouter des éléments prédéfinis au PCDATA.
  • " : défini la valeur par défaut du PCDATA.
  • * : quantificateur zéro ou plus.
  • + : quantificateur un ou plus.
  • ? : quantificateur zéro ou un.

Exemple :

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE liste_de_gens [
 <!ELEMENT liste_de_gens (personne)*>
 <!ELEMENT personne (nom, date_de_naissance?, genre?, numero_de_secu?)>
 <!ELEMENT nom (#PCDATA)>
 <!ELEMENT date_de_naissance (#PCDATA)>
 <!ELEMENT genre (#PCDATA | masculin | féminin) "féminin">
 <!ELEMENT numero_de_secu (#PCDATA)>
]>
<liste_de_gens>
  <personne>
    <nom>Fred Bloggs</nom>
    <date_de_naissance>2008-11-27</date_de_naissance>
    <genre>masculin</genre>
  </personne>
</liste_de_gens>

Voir aussi[modifier | modifier le code]

Sur les autres projets Wikimedia :

Références[modifier | modifier le code]

  1. Prologue et déclaration de type de document