Comment bien déclarer du XHTML 1.0 et du XHTML1.1?

Astuce par (Lyon, France)
Créé le , mis à jour le (47377 lectures)
Tags : xhtml, validation, doctype, MIME

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, 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 la 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).

Ressources