On parle souvent de doctype, de l’impact que ça a sur l’affichage d’une page, des différences d’interprétation entre les navigateurs, des versions du HTML… mais en bout de ligne c’est quoi un doctype ?
C’est un interprète pour le W3C
Un doctype c’est en fin de compte une sorte de grammaire qui indique au navigateur comment interpréter le code HTML de la page. C’est également cette grammaire qui servira au validateurs du W3C pour déterminer si votre document respecte le standard. Voici un exemple de doctype :
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN”
”http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd”>
La seconde ligne de la balise pointe vers la grammaire en question. De façon régulière, ce document est hébergé sur le site du W3C, mais notez que vous pourriez faire pointer cette adresse sur un de vos serveurs sans problème. En fait le navigateur n’utilise pas la DTD pour valider le fichier HTML/XHTML donc il ne télécharge pas la DTD. Donc le doctype suivant est aussi valide bien qu’il ne référence pas l’URL du fichier de DTD.
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN”>
Un parser XHTML ou un validateur, lui, se servira généralement de la DTD pour valider la forme du fichier. (Le W3C éprouve d’ailleurs des problèmes car plusieurs logiciels téléchargent inutilement les DTD causant du trafic inutile : http://www.w3.org/2005/06/blog/systeam/2008/02/08/w3c_s_excessive_dtd_traffic )
C’est un guide pour le navigateur
La ”grammaire” du doctype indique au navigateur tout ce qu’il doit savoir sur le document :
- Les événements supportés :
<!ENTITY % events
”onclick %Script; #IMPLIED
ondblclick %Script; #IMPLIED
onmousedown %Script; #IMPLIED
onmouseup %Script; #IMPLIED
onmouseover %Script; #IMPLIED
onmousemove %Script; #IMPLIED
onmouseout %Script; #IMPLIED
onkeypress %Script; #IMPLIED
onkeydown %Script; #IMPLIED
onkeyup %Script; #IMPLIED”
>
<!ENTITY % lists “ul | ol | dl | menu | dir”>
- La liste des attributs acceptés par une balise et les valeurs par défaut :
<!ELEMENT iframe %Flow;>
<!ATTLIST iframe
%coreattrs;
longdesc %URI; #IMPLIED
name NMTOKEN #IMPLIED
src %URI; #IMPLIED
frameborder (1|0) “1″
marginwidth %Pixels; #IMPLIED
marginheight %Pixels; #IMPLIED
scrolling (yes|no|auto) “auto”
align %ImgAlign; #IMPLIED
height %Length; #IMPLIED
width %Length; #IMPLIED
>
Il existe des tonnes de doctypes (http://www.w3.org/QA/2002/04/valid-dtd-list.html) qui indiqueront à votre navigateur les règles à suivre pour comprendre votre document.