For faster navigation, this Iframe is preloading the Wikiwand page for Document type definition.

Document type definition

La document type definition (DTD), ou définition de type de document, est, soit un fichier, soit une partie d'un document SGML ou XML, qui décrit ce document ou une classe de documents.

Une DTD décrit la grammaire du document — liste des éléments (ou balises), des attributs, leur contenu et leur agencement — ainsi que le vocabulaire supplémentaire sous la forme d'une liste d'Entité de caractère.

XML Schema est une alternative plus sophistiquée à l'usage de DTD.

Description

[modifier | modifier le code]

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 » (Schéma XML, Relax NG, Schematron par exemple) 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.

La DTD est délimitée, à l'intérieur d'un document, par la balise !DOCTYPE[1].

Syntaxe pour la déclaration du contenu des éléments

[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éfinit la valeur par défaut du PCDATA.
  • * : quantificateur zéro ou plus.
  • + : quantificateur un ou plus.
  • ? : quantificateur zéro ou un.
<?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>

Sur les autres projets Wikimedia :

Notes et références

[modifier | modifier le code]
{{bottomLinkPreText}} {{bottomLinkText}}
Document type definition
Listen to this article

This browser is not supported by Wikiwand :(
Wikiwand requires a browser with modern capabilities in order to provide you with the best reading experience.
Please download and use one of the following browsers:

This article was just edited, click to reload
This article has been deleted on Wikipedia (Why?)

Back to homepage

Please click Add in the dialog above
Please click Allow in the top-left corner,
then click Install Now in the dialog
Please click Open in the download dialog,
then click Install
Please click the "Downloads" icon in the Safari toolbar, open the first download in the list,
then click Install
{{::$root.activation.text}}

Install Wikiwand

Install on Chrome Install on Firefox
Don't forget to rate us

Tell your friends about Wikiwand!

Gmail Facebook Twitter Link

Enjoying Wikiwand?

Tell your friends and spread the love:
Share on Gmail Share on Facebook Share on Twitter Share on Buffer

Our magic isn't perfect

You can help our automatic cover photo selection by reporting an unsuitable photo.

This photo is visually disturbing This photo is not a good choice

Thank you for helping!


Your input will affect cover photo selection, along with input from other users.

X

Get ready for Wikiwand 2.0 🎉! the new version arrives on September 1st! Don't want to wait?