La DTD
La DTD (Document Type Definition) est un fichier ou une section qui décrit la structure attendue d’un document écrit en langage de balisage.
Elle sert à :
Définir les balises autorisées dans le document.
Décrire la hiérarchie des éléments.
Valider que le document respecte une structure définie.
La DTD peut être comparée à un cahier des charges qui définit les règles d’écriture d’un document en langage de balisage. Elle aide les éditeurs de code et les outils d’analyse à vérifier que le code respecte bien la structure attendue.
Méthode : Exemple
Nous allons présenter l'écriture en SGML, XML et HTML d'un même contenu.
Nos fichiers doivent contenir des articles avec un titre, un auteur, un paragraphe, et une liste de points à aborder.
Méthode : SGML
DTD SGML
fichier article.dtd
<!ELEMENT article - - (titre, auteur?, paragraphe+, liste)>
<!ELEMENT titre - - (#PCDATA)>
<!ELEMENT auteur - - (#PCDATA)>
<!ELEMENT paragraphe - - (#PCDATA)>
<!ELEMENT liste - - (point+)>
<!ELEMENT point - O (#PCDATA)>
Explications :
Signification des signes - -
Le premier
-
signifie que la balise de début est obligatoire.Le deuxième
-
signifie que la balise de fin est obligatoire.Si on avait
O
(pour "omissible"), cela voudrait dire que la balise peut être omise.Si on ne met rien, cela est équivalent à
- -
<!ELEMENT article - - (titre, auteur?, paragraphe+, liste)>
On définit un élément
<article>
.
Il contient obligatoirement :
un élément
<titre>
éventuellement un élément
<auteur>
(?
)au moins un élément
<paragraphe>
(+
)un élément
<liste>
obligatoire à la fin.
Ordre obligatoire : les balises doivent apparaître dans l’ordre spécifié.
<!ELEMENT titre - - (#PCDATA)>
L'élément
<titre>
contient du texte simple.#PCDATA
= Parsed Character Data, c’est-à-dire du texte interprétable (pas de balises dedans).
<!ELEMENT liste - - (point+)>
L’élément
<liste>
contient un ou plusieurs éléments<point>
.
<!ELEMENT point - O (#PCDATA)>
Chaque
<point>
est une ligne de texte, comme un item de liste.Il contient obligatoirement :
un élément
<titre>
un élément
<titre>
n'est pas obligatoire à la fin.
Document SGML
<article>
<titre>Introduction à SGML, XML et HTML</titre>
<auteur>Jean Dupont</auteur>
<paragraphe>SGML est un langage très puissant mais complexe.</paragraphe>
<paragraphe>XML simplifie les choses, tandis qu'HTML est une spécification pour afficher des documents web.</paragraphe>
<liste>
<point>SGML est ancien et flexible.
<point>XML est moderne et strict.
<point>HTML est pour le web.
</liste>
</article>
Explication :
Flexibilité : SGML permet des balises ouvertes (par exemple,
<article>
et<point>
peuvent commencer sans forcément avoir une fermeture stricte).Complexité : La DTD peut être très complexe et permet des règles très précises (ex.
- -
pour indiquer des éléments optionnels).Tolérance : SGML est plus tolérant aux erreurs syntaxiques (pas d'erreur si une balise est omise, tant que la DTD le permet).
Méthode : XML
DTD XML
En XML, la DTD n’est pas obligatoire.
Si le fichier respecte juste la syntaxe (balises bien fermées, imbriquées correctement), il est dit « bien formé ».
S’il respecte en plus une DTD, il est dit « valide ».
Ici, nous nous plaçons dans la situation où le code doit être valide.
<!ELEMENT article (titre, auteur?, paragraphe+, liste)>
<!ELEMENT titre (#PCDATA)>
<!ELEMENT auteur (#PCDATA)>
<!ELEMENT paragraphe (#PCDATA)>
<!ELEMENT liste (point+)>
<!ELEMENT point (#PCDATA)>
Explication :
En XML, la syntaxe est plus simple mais plus stricte.
On ne peut pas omettre les balises de début ou de fin.
Il n'y a pas de déclaration de minimisation (
- -
,O O
, etc.) comme en SGML.Toute entité ou attribut doit être déclarée clairement et fermée proprement.
Document XML
<article>
<titre>Introduction à SGML, XML et HTML</titre>
<auteur>Jean Dupont</auteur>
<paragraphe>SGML est un langage très puissant mais complexe.</paragraphe>
<paragraphe>XML simplifie les choses, tandis qu'HTML est une spécification pour afficher des documents web.</paragraphe>
<liste>
<point>SGML est ancien et flexible.</point>
<point>XML est moderne et strict.</point>
<point>HTML est pour le web.</point>
</liste>
</article>
Explication :
Rigidité : Toutes les balises doivent être correctement fermées et la casse doit être respectée (
<titre>
≠<TITRE>
).Validation stricte : Chaque élément est contrôlé par une structure bien définie dans la DTD.
Erreurs syntaxiques : Si un attribut manque ou si une balise est mal fermée, le document est invalide.
Méthode : HTML
DTD HTML
Jusqu’à HTML 4.01
HTML est basé sur SGML, donc il avait bien une DTD officielle (ce n'est pas à nous de la créer).
Ces DTD définissaient les éléments autorisés (
<body>
,<p>
,<table>
, etc.), leurs attributs (class
,id
, etc.), leur ordre, etc.On les déclarait en haut du document avec une déclaration
<!DOCTYPE>
En HTML5
HTML5 n’utilise plus de DTD !
Il n’est plus basé sur SGML, donc il n’a pas besoin de DTD formelle.
À la place, HTML5 repose sur un parseur "tolérant" intégré aux navigateurs.
La déclaration
<!DOCTYPE html>
reste obligatoire, mais elle est très simple et symbolique
Document HTML
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Introduction à SGML, XML et HTML</title>
</head>
<body>
<h1>Introduction à SGML, XML et HTML</h1>
<p>SGML est un langage très puissant mais complexe.</p>
<p>XML simplifie les choses, tandis qu'HTML est une spécification pour afficher des documents web.</p>
<ul>
<li>SGML est ancien et flexible.</li>
<li>XML est moderne et strict.</li>
<li>HTML est pour le web.</li>
</ul>
</body>
</html>
Explication :
Simplicité : HTML est principalement axé sur l’affichage visuel des contenus. Les balises comme
<p>
ou<ul>
sont utilisées sans aucune contrainte de validation stricte.Tolérance : Le HTML permet une grande tolérance aux erreurs, comme les balises non fermées, les attributs mal formés, etc.
Absence de structure stricte : Contrairement à XML, il n’y a pas de structure hiérarchique forcée. Par exemple, un
auteur
outitre
ne sont pas nécessaires dans un document HTML (ils sont optionnels).