C'est un document générique qui décrit le contenu d'un autre document (ici HTML ou XHTML). En d'autres termes, il définit les éléments et attributs qui constituent le balisage à interpréter par le navigateur pour l'affichage et la mise en pages du document, et les relations entre ces éléments.
Qu'est-ce que la validation ? La validation consiste à vérifier la conformité du document avec sa description (DTD). Les raisons de valider un document sont les suivantes :
Certaines organisations fournissent des outils de validation des documents HTML, XHTML, des feuilles de style (CSS) ou autres. Deux sortent du lot en raison de l'importance et/ou de la qualité de leurs prestations en matière de validation.
Le premier est le World Wide Web Consortium (W3C)[1], dépositaire en titre des normes (recommandations) utilisées sur le Web. Tous les services de validation s'y réfèrent. Le W3C propose plusieurs outils de validation en ligne relatifs aux diverses normes publiées. L'outil qui nous intéresse est le suivant :
Le deuxième est le Web Design Group (WDG)[2] dont le validateur permet, en plus de prestations similaires à celles du W3C, de valider un document avec une définition DTD personnalisée. L'outil en question :
Quelques navigateurs utilisent encore des balises et attributs non standards et on est parfois obligé de les utiliser pour compatibilité avec eux. Voici deux exemples :
embed
à inclure dans un élément object
pour jouer du QuickTime™ ou du Flash™ ;framespacing
, frameborder
et border
de l'élément frameset
parfois nécessaires pour supprimer l'espacement entre les cadres d'un jeu d'encadrement.Trop de pages ne passent pas la validation essentiellement parce que les validateurs les comparent seulement aux définitions DTD standards. Ils achoppent systématiquement sur les pages HTML contenant des éléments ou attributs étrangers à ces définitions. Les résultats de validation peuvent aussi intimider voire décourager les auteurs. Pour faciliter la correction du code et amener à de meilleures pratiques de codage, il faut parfois faire preuve de pragmatisme.
En modifiant les définitions DTD standards du W3C. Pour la
recommandation HTML 4.01[5],
en partant des documents loose.dtd
et/ou frameset.dtd
, et pour la recommandation
XHTML 1.0[6],
depuis les documents xhtml1-transitional.dtd
ou xhtml1-frameset.dtd
.
Par exemple, dans HTML 4.01, voici comment modifier :
loose.dtd
, pour y inclure
l'élément embed
;frameset.dtd
, pour y inclure des attributs pour l'élément frameset
.Et de même, dans XHTML 1.0 :
xhtml1-transitional.dtd
, pour y inclure
l'élément embed
;xhtml1-frameset.dtd
, pour y inclure des
attributs pour l'élément frameset
.La définition DTD est associée au document au moyen de la déclaration de type de document DOCTYPE
placée en tête du document HTML ou XHTML.
Par exemple, le document HTML suivant avec une définition DTD standard :
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
À supposer que le document soit hébergé sur le site example.net, la définition DTD personnalisée sera associée ainsi :
<!DOCTYPE HTML SYSTEM "http://example.net/loose_custom.dtd">
On remplace donc l'identificateur PUBLIC
de la définition standard par l'identificateur SYSTEM
puis on indique l'emplacement (adresse URL)
de la définition DTD modifiée que l'on aura placée sur le site.
(Le principe est le même pour un document XHTML à la différence qu'il faudra écrire html
tout en minuscules
car XHTML est sensible à la casse.)
Puis deux cas se présentent :
DOCTYPE
suffira.Rareté dans le monde des validateurs, le validateur du WDG est capable de traiter un document HTML ou XHTML avec une définition DTD personnalisée.
Voici deux exemples de validation avec des définitions DTD personnalisées :
l'un avec des documents HTML et l'autre avec des documents XHTML.
Utilisant des définitions DTD personnalisées différentes, ces deux versions sont fondées sur un même gabarit :
un jeu d'encadrement (frameset
) définit un cadre (frame
) supérieur pour la navigation
et un cadre inférieur pour l'affichage principal.
<frameset rows="40%,*" border="0" frameborder="0" framespacing="0"> <frame name="navigation" src="navigation.php" title="Cadre de la navigation" marginheight="0" marginwidth="0" frameborder="0"> <frame name="principal" src="principal.php" title="Cadre de l'affichage principal" marginheight="0" marginwidth="0" frameborder="0"> </frameset>
Le gabarit des exemples (frameset.php)
La page de définition du jeu d'encadrement est associée à une définition DTD personnalisée (les attributs non standards apparaissent en gras dans le code ci-dessus) ; le cadre navigation appelle la page navigation.php associée à une définition DTD standard du W3C ; le cadre principal appelle la page principal.php qui contient une animation QuickTime et qui est associée à une définition DTD personnalisée.
Les définitions DTD personnalisées données en exemples sont disponibles dans les formats comprimés suivants. Après décompression, ouvrez les fichiers avec un éditeur de texte et suivez les indications incluses pour adapter ces définitions DTD à vos besoins :
Flash Sataypublié sur alistapart.com indiquant comment inclure un film Flash uniquement avec l'élément normalisé
object
. Cf. également un
article plus complet
sur ce sujet publié sur Netscape Devedge.
Par ailleurs, suite à l'affaire du brevet Eolas en 2003, d'après le nom de la société détentrice, les éditeurs soucieux de ne pas contrevenir au brevet recommandent tous des solutions dynamiques à base de scripts. Par exemple, cf. les instructions fournies par les sociétés Apple®, Adobe® et Real Networks® pour incorporer, respectivement, les films QuickTime™, Flash™ et RealVideo™ ↑
Quirks mode and strict modepublié sur quirksmode.org ↑
loose.dtd
et frameset.dtd
↑xhtml1-transitional.dtd
et xhtml1-frameset.dtd
↑embed
(Netscape®)