Comment bien déclarer du XHTML 1.0 et du XHTML1.1?
Astuce par Florent V. (Chef de projet, intégrateur web, Lyon, France)
Les documents HTML en XHTML 1.0 et en XHTML 1.1 ne répondent pas aux mêmes contraintes formelles, et la plupart du temps ils seront déclarés de manière différente.
Dans les deux cas, on utilise un Doctype (XHTML 1.0 ou XHTML 1.1). Les différences se situent au niveau:
- du type MIME envoyé par le serveur dans les en-têtes HTTP, et présent dans le code HTML dans la balise META Content-Type;
- de la présence ou non d’une déclaration XML.
En bref: si vous êtes pressé par le temps ou cherchez une
réponse succincte, la voici: n’utilisez pas XHTML 1.1. Utiliser HTML 4.01, ou
bien du XHTML 1.0 servi en text/html. Vous pouvez lire la
section ci-dessous et zapper la suivante.
Servir un document XHTML 1.0 en text/html
Un document en XHTML 1.0 peut être servi soit avec le type MIME
text/html, soit avec le type MIME
application/xhtml+xml. Le premier cas (text/html)
est de très loin le plus courant, et le plus adapté à des pages web
classiques.
Un document en XHTML 1.0 servi en text/html pourra commencer
ainsi:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Titre de la page</title>
...
En plus de ce code HTML, il faudra configurer le serveur web pour qu’il
envoie l’en-tête HTTP Content-Type avec la valeur
text/html. Notez que a plupart des serveurs web le feront
automatiquement pour une page HTML (extension .html ou .htm).
Il est recommandé de ne pas utiliser de déclaration XML
dans ce cas, pour deux raisons: a) elle serait inutile pour une page déclarée
en text/html, et b) sa présence provoque un bug d’Internet
Explorer 6 (passage en mode Quirks).
Note: certains auteurs considèrent que
servir du XHTML 1.0 en
text/html est «néfaste». Ce n’est pas notre avis et, en
pratique, vous n’avez aucun souci à vous faire si vous souhaitez utiliser
du XHTML 1.0 en text/html en lieu et place de HTML 4.01.
Servir un document XHTML 1.0 ou XHTML 1.1 en
application/xhtml+xml
Nous avons vu qu’un document XHTML 1.0 peut être servi en
text/html. Il peut aussi être servi en
application/xhtml+xml.
À l’inverse, le XHTML 1.1 doit obligatoirement être servi
en application/xhtml+xml.
Voici un exemple de début de page XHTML 1.1. Elle débute par une déclaration
XML, et doit être envoyée par le serveur avec l’en-tête HTTP
Content-Type: application/xhtml+xml. Notez qu’on pourra avoir
le même code avec seulement un Doctype différent pour du XHTML 1.0.
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />
<title>Titre de la page</title>
...
Pour information, certains navigateurs (Internet Explorer 6 et 7
notamment) gèrent mal les contenus envoyés en
application/xhtml+xml. Nous ne détaillerons pas les parades
possibles ici.
De plus, il faut savoir que les navigateurs n’utilisent pas le même
analyseur syntaxique pour du HTML (text/html) et pour du
XML (application/xhtml+xml). Celui pour le XML est beaucoup
plus strict, et à la moindre erreur de syntaxe la page ne s’affichera pas!
Il est donc plus adapté pour des applications très précises que pour des
pages web «classiques», qui auront intérêt à profiter des tolérances de
l’analyseur syntaxique HTML du navigateur.
Si tout cela reste flou pour vous: retenez juste que si vous n’avez pas
besoin d’utiliser XHTML 1.1 ou du XHTML 1.0 en
application/xhtml+xml, vous avez tout intérêt à utiliser du
HTML 4.01 ou du XHTML 1.0 en text/html (sans déclaration XML).








