Utiliser la touche d'accès n pour naviguer au sein de la page. Sauter au début du contenu.

Ce document est une traduction. En cas de divergences ou d'erreurs, la dernière version originale en anglais fait autorité. Comme indiqué ci-dessous, les droits d'auteur reviennent au W3C.

Traducteur: Sébastien Guillon

s_gotoW3cHome Internationalisation
 

Servir du XHTML 1.0

Public visé : XHTML/HTML coders (using editors or scripting), CSS developers, script developers (PHP, JSP, etc.), Web project managers, and anyone who needs a gentle introduction to quirks vs standards modes, and how the DOCTYPE and XML declarations play into that. It is also very useful pre-reading for those wanting to know how to declare the character encoding of their documents.

Note: Des changements ont été apportés au document original en anglais depuis sa traduction. Consulter le fichier des changements.

Cet article décrit très sommairement certains aspects de la façon, souvent étonnante, dont les serveurs envoient le XHTML à l’agent utilisateur (un navigateur par exemple), et comment les agents utilisateurs courants traitent le balisage reçu. Il décrit des problèmes liés à l’implémentation, plus que les standards du w3C.

Ces informations proviennent du tutoriel sur les jeux de caractères et le codage dans un document HTML ou XHTML. Ces sujets jouent un rôle important dans la prise de décision. Cette information est aussi utile pour expliquer pourquoi certains aspects des styles CSS ne s’affichent pas comme prévu, ou diffèrent selon les agents utilisateurs.

Le XHTML et les types MIME

Lorsqu’un seveur envoie un document à un agent utilisateur (un navigateur par exemple) il envoie également des informations dans le champ Content-Type de l’en-tête qui accompagne la requête HTTP à propos du type de format de données. Cette information est donnée par l’étiquetage du type MIME. Voici un exemple d’en-tête HTTP pour un fichier HTML utilisant le type MIME 'text/html'. Notez que l’entrée Content-Type peut aussi définir le codage de caractères du document.

HTTP/1.1 200 OK
Date: Wed, 05 Nov 2003 10:46:04 GMT
Server: Apache/1.3.28 (Unix) PHP/4.2.3
Content-Location: CSS2-REC.en.html
Vary: negotiate,accept-language,accept-charset
TCN: choice
P3P: policyref=http://www.w3.org/2001/05/P3P/p3p.xml
Cache-Control: max-age=21600
Expires: Wed, 05 Nov 2003 16:46:04 GMT
Last-Modified: Tue, 12 May 1998 22:18:49 GMT
ETag: "3558cac9;36f99e2b"
Accept-Ranges: bytes
Content-Length: 10734
Connection: close
Content-Type: text/html; charset=utf-8
Content-Language: en

Normalement le serveur envoie les fichiers HTML 4.01 avec le type MIME text/html. HTML est une application SGML.

Les choses ne sont pas aussi évidentes lorsqu’il s’agit de XHTML 1.0, qui est basé sur XML.

De nombreuses personnes préfèrent utiliser du XHTML pour les avantages qu’apporte XML en matière d’édition et de traitement des documents. Toutefois, les navigateurs grand public manquant encore de support XML, de nombreux fichiers sont en fait servis avec le type MIME text/html. Dans ce cas l’agent utilisateur traitera le fichier comme du HTML.

Pour s’assurer que les petites différences entre XML et HTML ne posent pas de problèmes aux navigateurs les plus anciens, vous devriez toujours suivre les règles de compatibilité HTML de l’Annexe C de la spécification XHTML lorsque vous servez du XHTML en tant que HTML. Ces règles de compatibilité recommandent, entre autres choses, de laisser un espace avant le « /> » terminant une balise vide (comme img, hr ou br), de toujours utiliser à la fois l’attribut id et l’attribut name comme identifiants, etc.

Le XHTML 1.0 peut également être servi en tant que XML, et le XHTML 1.1 est toujours servi en tant que XML. Pour servir du XHTML en tant que XML on utilise un des types MIME application/xhtml+xml, application/xml ou text/xml. Le W3C recommande d’utiliser uniquement le premier de ces types MIME, soit application/xhtml+xml, pour servir le XHTML en tant que XML.

Le fait que le XHTML puisse être servi en tant que HTML ou XML entraîne une différence dans la façon dont l’information de codage doit être déclarée.

Mode « standards » contre mode « Quirks »

Les navigateurs grand public actuels peuvent afficher un fichier HTML soit en mode « standards » soit en mode « quirks ». Cela signifie que des règles d’affichage différentes seront appliquées au fichier, la première se conformant à une interprétation du comportement attendu conforme aux standards du w3C, la seconde se conformant à d’autres attentes basées sur le comportement non standard des anciens navigateurs.

Les captures d’écran ci-dessous illustrent certaines de ces différences.

Un document affiché en mode standard. Le même document affiché en mode quirks.
Image d’un document affiché en mode standard. Image du même document affiché en mode quirks.

Parmi les différences illustrées ci-dessus :

Les deux images montrent la même page avec exactement le même balisage et les mêmes styles CSS. La seule différence dans la source des deux fichiers est que l’image de gauche contient une déclaration de DOCTYPE en début de fichier, et pas celle de droite. Un fichier ayant une déclaration de DOCTYPE appropriée devrait normalement être affiché en mode standard par les versions récentes de la plupart des navigateurs. Sans DOCTYPE, vous retombez en mode quirks.

On dit des navigateurs qui passent ainsi d’un mode à l’autre qu’ils font du « doctype switching ».

Le paragraphe suivant présente le code source avec la déclaration de DOCTYPE en début de fichier (en rouge et italique).

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xml:lang="fr" lang="fr" xml‎ns="http://www.w3.org/1999/xhtml"> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 
    <title>Document XHTML</title>
    <style type="text/css">
    body { background: white; color: black; font-family: arial, sans-serif; font-size: 25px; }
    p { font-size: 50%; }
    h1 { font-size: 16px; }
    div { margin: 20px; width: 170px; padding: 50px; border: 6px solid teal; }
    </style>
</head>
<body>
    <h1>Fichier de test pour le mode « standards »</h1>
    <div>
        <p>Ce texte est contenu dans un p contenu dans une div.</p>
    </div>
    <table border="1">
        <tr>
            <td><p>Texte dans une balise p.</p></td>
            <td><p>Texte dans une balise p.</p></td>
        </tr>
        <tr>
            <td>Aucune balise p.</td>
            <td>Aucune balise p.</td>
        </tr>
    </table>
</body>
</html>

Il est généralement judicieux de toujours servir vos pages en mode standard, c’est-à-dire de toujours inclure une déclaration de DOCTYPE.

La déclaration XML

Parce que le XHTML 1.0 est basé sur XML, il est courant d’ajouter une déclaration XML au début du balisage, même s’il est servi en tant que HTML. Voici à quoi le haut du fichier ci-dessus ressemblerait (la déclaration XML est en rouge et en italique) :

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xml:lang="fr" lang="fr" xml‎ns="http://www.w3.org/1999/xhtml">
<head>
...

Dans des navigateurs tels que Mozilla, Netscape, Opera et d’autres, avec ou sans déclaration XML, une page servie avec une déclaration de DOCTYPE sera affichée en mode standards.

Avec Internet Explorer cependant, si quoi que soit apparaît avant la déclaration de DOCTYPE, la page est affichée en mode quirks. Parce que les utilisateurs d’Internet Explorer représentent une très forte proportion des utilisateurs de navigateurs, le problème est de taille. Pour vous assurer que vos pages seront affichées de la même façon dans tous les navigateurs respectant les standards, vous devrez bien réfléchir à la façon de gérer ce problème.

Différentes possibilités s’offrent à vous. Il est évident que si votre document ne contient aucun des constructions affectées par les différences entre les modes standards et quirks, la question ne se pose pas. Si en revanche vous êtes confronté au problème, vous devrez incorporer des techniques de contournement dans vos CSS pour pallier les différences, ou bien omettre la déclaration XML.

La spécification XHTML nous avertit également que les instructions de traitement sont affichées littéralement par certains agents utilisateurs. De même, certains agents utilisateurs considèrent que la déclaration XML signifie que le document est du XML non reconnu plutôt que du HTML et risque donc de ne pas s’afficher comme prévu. Vous devriez effectuer des tests avec différents agents utilisateurs afin de décider si ce problème risque de vous concerner.

Notez que si vous décidez d’omettre la déclaration XML vous devriez opter soit pour UTF-8 soit pour UTF-16 pour le codage de caractères pour la page. (Consultez les jeux de caractères et les codages pour le XHTML, le HTML et CSS pour plus d’informations concernant l’impact des déclarations de codage).

Résumé

Le XHTML 1.0 peut être servi en tant que HTML ou en tant que XML. Si vous le servez en tant que XML, utilisez le type MIME application/xhtml+xml.

Utiliser une déclaration de DOCTYPE en début de fichier HTML ou XHTML est généralement judicieux pour que le document s'affiche en mode standards sur un plus grand nombre d’agents utilisateurs récents.

La présence d’une déclaration XML dans un fichier XHTML 1.0 servi en tant que HTML aura pour conséquence d'afficher le fichier en mode quirks sous Internet Explorer (et donc pour une part potentiellement importante de votre public).

Pour de plus amples détails sur ces sujets, suivez les liens utiles, et consultez les pages vers lequelles ils vous emmènent.

Donnez-nous votre avis (en anglais).

Abonnez-vous au flux RSS.

Nouvelles publications

Les nouvelles de la page d'accueil

Twitter (Les nouvelles de la page d'accueil)

‎@webi18n

Pour approfondir

Par : Richard Ishida, W3C. Traducteur : Sébastien Guillon.

XHTML 1.0 valide !
CSS valide !
Codé en UTF-8 !

Traduit d’un contenu en anglais daté du 2005-07-04. Dernière modification de cette traduction le 2010-08-20 7:54 GMT.

Pour un résumé des changements importants, recherchez article-serving-xhtml dans le blog i18n.