The Wayback Machine - https://web.archive.org/all/20061104214303/http://blog.dreams4net.com/xhtml-1-1-valide
Dreams4Net >> Articles : Technologie, Web et Opinions

XHTML 1.1 valide ?

Le 21 mai 2003,

Avant propos : Je rajoute ce paragraphe après coup pour clarifier un état d'esprit qui n'était peut-être pas évident. Des articles ou autres blogs me permettent parfois de réagir et je me lance dans des réponses, parfois très (trop) critiques. Il ne s'agit pourtant généralement pas de reproche (ou alors c'est clairement visible), mais simplement pour moi de profiter d'un sujet pour donner des opinions auxquelles je tiens. Cet article est dans cet état d'esprit, absolument pas dans une optique négative à l'encontre d'un auteur que je lis régulièrement.

« Oui mais non », c'est la réponse que je ferai à l'article de Genezys « XHTML 1.1 valid ? » (Note: le billet a depuis été effacé, il datait du 21 mai 2003). Il rappelle que même si une page est valide d'après les spécifications XHTML 1.1 elle peut être interprétée en HTML et non XHTML.

La solution de Genezys

La solution adoptée se base sur le code suivant, il s'agit d'une analyse de la requête HTTP en vue de déterminer si le navigateur comprend les documents envoyés avec le type de média application/xhtml+xml :

if (strstr($_SERVER['HTTP_ACCEPT'],'application/xhtml+xml')){
  header("Content-type: application/xhtml+xml");
  echo "<?xml version='1.0' encoding='iso-8859-15'?>\n";
} else {
  header("Content-type: text/html; charset=iso-8859-15");
}

Mauvaise solution…

Oui mais non, car en aucun cas du XHTML 1.1 ne devrait être envoyé avec un type de média text/html. La note du W3C sur les types de média XHTML clarifie ce point et exprime complètement ce qui doit être fait, entre autre que le XHTML 1.1 ne devrait pas être envoyé en text/html, seul le XHTML 1.0 le peut. Et encore, le peut est un terme fort car il ne s'agit d'un type de média à usage exclusif des anciens navigateurs, à certaines conditions, juste toléré par une appendice non normative. Voilà ce que dit la norme, donc déjà cette procédure sort explicitement de ce que demande le W3C.

Maintenant il y a d'autres raisons de ne pas utiliser du XHTML en text/html, j'en avais résumé certaines dans un article nommé XHTML ? non, HTML !, le 18 avril. Parmis ces raisons on trouve en bonne position le fait de tromper le client sur le contenu car contrairement à l'idée répandue, le XHTML n'est pas compatible avec le HTML : l'affichage correct du XHTML en text/html se base uniquement sur un bug répandu de nos navigateur. Ce qui réduit fortement l'interopérabilité avec un éventuel client respectant totalement la norme mais n'ayant pas le bug.

…changer de solution

Il y a trois solutions possibles pour revenir à une situation acceptable :

Et là je vois venir deux types d'arguments contre mes deux dernières solutions :

Ce à quoi je répond que non, Genezys étant fait à base de XML, il suffit de rajouter une balise dans son fichier XSLT pour que le format de sortie soit du HTML complètement valide et plus du XHTML :

<xsl:output method="html" version="1.0" encoding="ISO-8859-1"
        doctype-public="-//W3C//DTD HTML 4.0//EN"
        doctype-system="http://www.w3.org/TR/REC-html40/strict.dtd"
        media-type="text/html" indent="yes" omit-xml-declaration="no" />

Il suffirait alors de choisir la bonne feuille XSLT en fonction de ce que demande le navigateur. Je sais que c'est possible, c'est ce que je faisais il y a quelques mois. J'ai arrêté car je ne voyais pas l'intérêt de maintenir le XHTML à l'heure actuelle, mais ça c'est un choix personnel, pas une contrainte technique.

Autres détails

Il reste tout de même deux détails que je souhaite aborder sur les six lignes de code PHP de Genezys :

Tout d'abord faire des tris par la requête HTTP est bien la bonne solution. Je trouve même dommage que les navigateurs ne profitent pas même totalement de cette fonctionnalité en envoyant les versions supportés, les sous formats (quelle version de XHTML ?) et tout autre information utile. Et là je ne parle pas de MSIE qui affirme recevoir */* et ne s'embête pas avec la suite.

Je suis étonné que dans le cas du XHTML le jeu de caractère ne soit pas déclaré aussi (en plus du prologue XML) dans la déclaration HTTP du type de média, comme pour le HTML. Pourtant la même note que tout à l'heure indique que spécifier le jeu de caractère dans le protocole de plus haut niveau est très fortement recommandée. Quel intérêt de ne pas le mettre ?

Vous pouvez trouver plus d'informations sur les types de média via mon article du 8 avril 2003.