La définition de type de document décrit la grammaire qui régit un document SGML ou XML, et elle sert de repère pour l’analyse syntaxique. Elle fixe la structure des données attendue, les éléments autorisés et les attributs associés, afin d’assurer la conformité des documents.
Comprendre comment une Document Type Definition réalise la validation syntaxique aide à concevoir des flux éditoriaux ou des interfaces de données robustes. La description qui suit éclaire les règles de syntaxe et prépare la synthèse pratique menant à « A retenir : ».
A retenir :
- Validation syntaxique des balises pour conformité structurelle
- Déclarations d’éléments et listes d’attributs clairement spécifiées
- Gestion des entités et notations pour ressources externes
- Limites de sécurité et alternatives modernes de schéma
Rôle fondamental de la DTD pour la validation syntaxique SGML
Après les points essentiels, il convient d’éclairer le rôle central d’une DTD dans la vérification syntaxique des documents SGML ou XML. La DTD énonce des déclarations de balisage qui permettent aux analyseurs validants d’identifier les éléments attendus et leur ordre.
Définition et association d’une Document Type Definition
Ce passage précise comment une DTD est liée à un document via la déclaration DOCTYPE placée en tête de fichier. Selon W3C, la déclaration DOCTYPE permet d’identifier le type de document et de référencer un sous-ensemble externe quand nécessaire.
- Exemple DOCTYPE classique pour XHTML
- Sous-ensemble externe référencé par URI
- Sous-ensemble interne inclus dans la déclaration
Critère
DTD
XSD
RELAX NG
Support des espaces de noms
Limité
Fort
Fort
Déclarations d’entités
Oui
Non
Non
Typage strict
Faible
Élevé
Moyen
Simplicité de lecture
Élevée
Complexe
Claire
La DTD reste pertinente pour des usages de publication où les entités et les notations sont nécessaires, par opposition aux schémas orientés données. Selon Wikipédia, les DTD ont conservé une large place dans l’édition technique et documentaire.
« J’ai structuré nos exports XML avec une DTD interne pour garantir la cohérence des chapitres. »
Anne N.
Structure des données définie par la DTD et déclarations d’éléments
Cette précision sur la fonction conduite à détailler comment la DTD décrit la structure des données via des déclarations d’éléments et de listes d’attributs. Les déclarations d’éléments précisent le contenu possible et l’agencement attendu des enfants dans chaque balise.
Déclarations d’éléments et quantificateurs en pratique
Une déclaration de type d’élément peut indiquer EMPTY, ANY ou un modèle de contenu détaillé, incluant des séquences et des choix. Selon le W3C, ces formes autorisent des contraintes d’occurrence avec les quantificateurs *, + et ?.
- EMPTY pour éléments sans contenu
- ANY pour contenu libre
- Modèles entre parenthèses pour ordre précis
- Quantificateurs pour occurrences optionnelles
Mot-clé
Signification
Usage typique
EMPTY
Pas de contenu
Balises auto-fermantes
ANY
Contenu libre
Sections flexibles
(a,b)
Séquence ordonnée
En-têtes suivis de corps
(a|b)
Choix exclusif
Variantes de présentation
Les listes d’attributs complètent la structure en définissant les types d’attributs et leurs valeurs par défaut, ce qui facilite la validation automatisée. Selon des ressources techniques, ces listes permettent de contraindre les valeurs au niveau syntaxique.
« J’ai appris à formaliser les attributs image et meta grâce à une DTD externe bien documentée. »
Marc N.
Cette description de la structure montre comment la DTD agit comme une grammaire de balisage, garantissant que seuls les éléments définis apparaissent. Le passage suivant aborde les entités externes et les implications pour l’analyse.
Entités externes, sécurité et limites de la validation DTD
Cette liaison sur les entités invite à examiner les risques liés aux entités externes et aux attaques ciblant l’analyseur XML ou SGML. Les entités externes peuvent rendre un document non autonome et introduire des dépendances réseau sensibles.
Entités internes, externes et notations
Les entités internes sont des macros textuelles substituées à l’analyse, tandis que les entités externes référencent des ressources via URI. Les notations donnent un nom aux ressources non analysées et laissent leur interprétation à l’application.
- Entités internes pour réutilisation de contenu
- Entités externes pour ressources distantes
- Notations pour objets non analysables
- Risques d’inaccessibilité en mode autonome
« Le bogue de résolution d’entités nous a forcés à désactiver la lecture automatique de DTD externes. »
Julie N.
Attaques, bonnes pratiques et évolutions vers d’autres schémas
Les attaques par expansion d’entités ou le blocage de récupération d’entités externes peuvent compromettre un service qui parse des DTD. Selon MSDN et retours industriels, bloquer l’analyse DTD ou utiliser des parseurs limitant l’accès réseau prévient ces risques.
- Interdire l’analyse DTD pour sources non fiables
- Utiliser bibliothèques sécurisées sans résolution réseau
- Préférer XSD/RELAX NG pour typage et espaces de noms
« L’absence d’espaces de noms dans certaines DTD nous a poussés à migrer vers XSD pour les APIs. »
Éric N.
La compréhension de ces limites guide le choix entre maintenir une DTD pour la publication ou migrer vers des schémas modernes pour les échanges de données. Ce point prépare la référence finale et les sources utilisées.
Source : « Extensible Markup Language (XML) 1.1 », W3C ; « Document type definition », Wikipédia ; ISO, « ISO/IEC 19757-2:2008 ».