Version complète: sur le forum Webmaster Hub : xhtml1.0 strict : déclaration xml ou pas ?
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > XML et ses dialectes
jaco24
Si on veut être compatible avec le plus de versions de browsers possible doit -on écrire :

CODE
<!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"  lang="fr"  xml:lang="fr">


ou:


CODE
<?xml version="1.0" encoding="iso-8859-1"?>
<!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"  lang="fr"  xml:lang="fr">




ou encore :


CODE
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">



autrement dit risque-t-il d'y avoir plus ou moins de problème selon que l'on ajoute la déclaration xml ou pas ?

Merci pour toute réponse
Clair de Lune
salut

je ne sais pas te répondre, mais voilà ce que je mets, et ça a l'air de marcher partout :

CODE
<!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" lang="fr" xml:lang="fr">


et dans le head

CODE
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />


j'ai vu dans d'autres forums que certains webmasters ont des problèmes si la déclaration
CODE
<?xml version="1.0" encoding="iso-8859-1"?>
est placée avant le DOCTYPE

mais c'est peut-être obligatoire en xhtml 1.1 unsure.gif
Raphael
Le prologue XML n'est pas obligatoire selon les usages que l'on fait du XHTML.
Si on utilise XHTML pour faire du HTML (comme 90% des gens), le prologue n'est pas nécessaire.
Par contre, si XHTML est utilisé comme du XML ou du MathML, le prologue est obligatoire.
De même, il est obligatoire si l'encodage du document est autre que UTF-8 ou UTF-16.

A l'heure actuelle, le prologue XML ne fait que basculer certains navigateurs dans le modèle de boite (erroné) de Microsoft.
Denis
Malgré le fait que j'utilise moi-même ceci :

CODE
<?xml version='1.0' encoding='iso-8859-1'?>
<!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="text/HTML; charset=iso-8859-1"  />
<title>Title de la page en question</title>


Je m'assure de passer le prologue XML seulement aux navigateurs capable de le supporter convenablement comme ceci (code php gracieusement offert par deux copains, tel que mentionné ici) :

http://www.cybercodeur.net/weblog/commenta...p?idmessage=614

CODE
<?php
// Indique un Mime type correct si le client accepte le vrai xhtml
    if( stristr($HTTP_SERVER_VARS["HTTP_ACCEPT"], "application/xhtml+xml") )
    {
 header("Content-type: application/xhtml+xml");
 echo "<?xml version='1.0' encoding='iso-8859-1'?>\n";
    }
    else
    {
 header("Content-type: text/html; charset=iso-8859-1");
    }
?>


Le code sert essentiellement à vérifier si l'agent utilisateur est en mesure de recevoir du application/xhtml+xml. En cas contraire, il ne présente pas le prologue xml et lui file du text/html (ce qui rejoint le propos de Sibelius).

Si tu ne peux pas pour une raison ou une autre utiliser quelque chose comme ça pour départager les adultes des enfants (à savoir, les navigateurs plus performants des navigateurs moins performants comme la série des MSIE, incluant la v6.0), alors je te suggère de t'en tenir à ceci si tu veux faire du xhtml 1.1 (tout bêtement ne pas mettre le prologue) :

CODE
<!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="text/HTML; charset=iso-8859-1"  />
<title>Title de la page en question</title>


Ou de modifier en conséquence si tu souhaites servir du xhtml strcit ou transitionnel, ce qui signifie tout simplement changer ton doctype et ajouter un lang="fr" (seulement au transitionnel).

J'espère que ça peut aider un peu ! biggrin.gif
jd_
Elle est géniale ton astuce PHP. C'est tout bête et tout performant :yoot:
jaco24
Merci pour vos réponses.
Maintenant c'est clair pour moi.
Denis
C'est pas moi qu'il faut remiercier... c'est mes copains Darken et Anubis ! thumbup.gif Heureux que ça te plaise. Tant mieux si ça peut être utile à d'autres.
Yonji
Bonjour,

Très intéressante comme astuce,je suis d'ailleur en train de l'essayer,mais j'ai une question.
Si je fait ceci :

HTML
<?php
// Indique un Mime type correct si le client accepte le vrai xhtml
if( stristr($HTTP_SERVER_VARS["HTTP_ACCEPT"], "application/xhtml+xml") )
{
header("Content-type: application/xhtml+xml");
echo "<?xml version='1.0' encoding='UTF-8'?>\n";
}
else
{
header("Content-type: text/html; charset=UTF-8");
}
?>
<html>
<head>
<title>Titre de ma page</title>
<style type="text/css">
_AT_import url(style.css);
</style>
</head>
<body>
......

Sous IE si je regard la source j'ai bien ça :

HTML
<?xml version="1.0" encoding="UTF-8"?>
<!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">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

Mais sous Firefox rien,la source commence a <html>.
Est ce normale ?
Merci d'avance pour vos réponse.
LaurentDenis
Si tu obtiens ces résultats, ce n'est pas vraiment normal en effet wink.gif

En utilisant tel quel le code que tu cites, j'obtiens au contraire:
- un prologue xml et le type mime application/xhtml+xml dans Firefox et Opera
- pas de prologue et le type mime text/html dans IE

Heureusement, d'ailleurs, puisque ces résultats correspondent aux capacités respectives de ces navigateurs wink.gif

Au passage, le code ci-dessus devrait être complété pour ajouter en particulier :
- la DTD XHTML1.0 dans tous les cas
- l'élément <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr"> en application/xhtml+xml et un simple <html lang="fr"> en text/html
- la CSS par défaut avec <?xml-stylesheet type="text/css" href="..." ?> en application/xhtml+xml et un simple <link rel="..."> en text/html
Yonji
Bon c'est bon maintenant j'obtient le prologue XML sous Firefox & Opéra (plus sous IE).

+1 avec la dernière remarque de Laurent si vous pouviez rajouter les changement pour le css ... (je ne maitraisie pas php d'ou cette demande smile.gif )

Merci d'avance.
Denis
Pour ma part, je dois avouer que pour ce qui est de passer ma CSS en xml-stylesheet, Laurent m'avait mis au défi de le faire et je n'y suis jamais parvenu... wacko.gif
LaurentDenis
ça n'était pas un défi, Denis, juste une suggestion wink.gif

Cela dit, tout en vous prévenant que j'écris comme un cochon en PHP et que ce script est à améliorer, voici ce que j'utilise :

CODE
<?php  
$accept_xml =
     !empty($_SERVER['HTTP_ACCEPT']) &&
     strpos($_SERVER['HTTP_ACCEPT'],'application/xhtml+xml') !== false;
 
if ($accept_xml) {
 header('Content-Type: application/xhtml+xml; charset=ISO-8859-1');
    echo '<?xml version="1.0" encoding="ISO-8859-1"?>'."\n";
    echo '<?xml-stylesheet type="text/css" href="style.css" ?>'."\n";    
}
else {
    header('Content-Type: text/html; charset=ISO-8859-1');
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<?php if ($accept_xml) { ?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
    <head>
 <link rel="schema.DC" href="http://purl.org/DC/elements/1.0/" />
     <meta name="DC.Format" content="application/xhtml+xml; charset=ISO-8859-1" />
<?php }
else { ?>
    <html lang="fr">
    <head>
 <link rel="schema.DC" href="http://purl.org/DC/elements/1.0/" />
 <meta name="DC.Format" content="text/html; charset=ISO-8859-1" />
 <style type="text/css" media="screen" title="defaut">@import url(style.css);</style>
<?php } ?>
 <title>...</title>
 </head>
etc...


La fonction récupérant le type-mime souhaité par le navigateur est un peu différente (empruntée à DotClear), mais le principe est identique. Le schéma Dublin Core est plus une coquetterie qu'autre-chose et devrait être remplacé/complété par une <meta http-equiv="Content-Type" content="..." /> plus classique.
Monique
Bonjour,

A lire, un article intéressant (même s'il date de prés d'un an) de Karl Dubost :
Comment servir XHTML avec le bon type mime
sans oublier de suivre le renvoi vers un billet... où Denis donne un argument choc pour bien choisir son navigateur 1eye.gif
Denis
Incroyable ce que je peux écrire comme conneries ! ^_^
Xavier
Un problème soulevé par cette (ces en fait, php ou configuration du serveur) techniques est que les navigateurs de type KHTML (Konqueror ou Safari pour ne pas les nommer) n'indiquent pas accepter le type MIME application/xhtml+xml dans leur HTTP_ACCEPT whistling.gif
Du coup on leur sert du text/html alors que bien entendu ils supportent très bien le xhtml wacko.gif
Ce n'est pas très grave mais ça mérite tout de même d'être mentionné wink.gif
LaurentDenis
Dans la mesure où de toute façon, ces navigateurs reçoivent une version HTML complète du contenu, partaitement exploitable bien qu'en deça de leurs capacités, ça n'a en effet aucune importance. L'erreur serait en fait de recourir à un script basé sur l'identification du navigateur plutôt que sur ses capacités déclarées...

Heu... En fait, adresser du XHTML1.0 en application/xhtml+xml ou en text/html n'a actuellement aucune importance pour le visiteur quelque-soit le navigateur. C'est juste une satisfaction pour l'auteur wink.gif
Denis
Bien dit Laurent. C'est vrai qu'encore une fois, on perd de vue l'objectif de cette grande chasse aux sorcières : faire tout propre,propre, propre... ^_^
Yonji
Super ton code Laurent !!! biggrin.gif
Marche niquel j'ai filer le tuyeau a des potes qui sont eux aussi ravi. tongue.gif
Topic qui ma était tres instrutif pour ma part merci les gars et Monique pour le liens
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.