From madore@clipper.ens.fr Sun Sep 24 20:06:23 2000
Article: 401 of ens.forum.informatique.html
Path: eleves!not-for-mail
From: madore@clipper.ens.fr (GroTeXdieck)
Newsgroups: ens.forum.informatique.html
Subject: XHTML (was: Re: Validateur de chez webmaster)
Date: Sun, 24 Sep 2000 18:06:23 +0000 (UTC)
Organization: Forum.
Lines: 121
Sender: madore@clipper.ens.fr
Message-ID: <8qlfqv$j42$1@clipper.ens.fr>
References: <86043l$l63$1@clipper.ens.fr> <860gvc$a80$1@clipper.ens.fr> <861nh6$cff$1@clipper.ens.fr> <8ql1gt$q45$1@clipper.ens.fr> <8ql4un$1ot$1@clipper.ens.fr> <8ql8je$7hq$1@clipper.ens.fr>
NNTP-Posting-Host: clipper.ens.fr
X-Trace: clipper.ens.fr 969818783 19586 129.199.129.1 (24 Sep 2000 18:06:23 GMT)
X-Complaints-To: forum@clipper.ens.fr
NNTP-Posting-Date: Sun, 24 Sep 2000 18:06:23 +0000 (UTC)
X-Newsreader: Flrn (0.4.0 - 07/99)
X-Start-Date: 24 Sep 2000 16:56:26 GMT
X-Mark: BOG
Xref: eleves ens.forum.informatique.html:401

Dans XHTML il y a deux choses.  D'abord XML, ensuite HTML.

La norme de XML elle se trouve sur
http://www.w3.org/TR/1998/REC-xml-19980210

Mais je pense qu'elle n'est vraiment pas facile à lire comme ça
(contrairement à la norme du HTML4 qui est tous publics).

La norme de XHTML elle se trouve sur http://www.w3.org/TR/xhtml1/

Mais elle ne dit pas grand-chose au-delà de « ceci est une version de
HTML modifiée pour fonctionner avec XML, voyez la norme de XML pour
plus de précisions ».

Le truc où il faut faire absolument attention avec XHTML, c'est que
XML ne pardonne pas les erreurs.  Il y a deux niveaux de conformance :
« well-formed » et « valid ».  Quand on n'est pas well-formed, on
n'est rien du tout.  Normalement, les agents doivent cesser le
traitement dès qu'ils rencontrent une erreur de well-formedness.
D'ailleurs, IE le fait effectivement correctement.  Pour tester la
well-formedness d'un document XML, gourous a installé un outil appelé
xmlwf ; il est très simple à utiliser, il suffit de faire « xmlwf
machin.xml » (l'extension n'a pas à être xml, bien sûr, ça peut être
xhtml ou html comme on veut - en fait pour du XHTML je recommande
.html de façon à ne pas troubler les vieux browsers plus que
nécessaire).  Une fois qu'on est well-formed, on a au moins passé
l'étape zéro.  Mais attention, « <FOO>Ceci est une connerie !</FOO> »
est un document XML well-formed, ça ne veut pas dire que c'est du
XHTML en quelque façon.

Pour être well-formed, *le* gros truc auquel il faut faire attention,
c'est que tout tag ouvert doit être fermé.  Donc les tags comme <p>
dont on omet généralement la balise fermante en HTML4, doivent la
récupérer ; et les tags comme <br> qui n'ont pas de balise fermante en
HTML4 (celle-ci est même interdite) s'écrivent comme <br /> (élément
vide XML).  Évidemment, les tags doivent s'imbriquer correctement ;
ceci est déjà le cas en HTML4, mais beaucoup de browsers tolèrent des
choses comme <b><i>foo</b></i> (mode « soupe de tags » des parseurs).

Ensuite, il faut savoir que les tags sont à écrire en minuscule (ce
n'est pas une contrainte de well-formedness, car n'importe quel tag
peut être utilisé en XML, mais il se trouve qu'il est case-sensitive
et que XHTML utilise des tags en minuscules).  Pour ma part, j'écris
de toute façon toujours les tags HTML en minuscules, mais il peut
falloir faire attention.  Pareil pour les attributs.  Il y a d'autres
contraintes, comme l'interdiction de minimiser les attributs, mais je
pense que c'est rarement utilisé en HTML4 de toute façon, donc xmlwf
signalera bien l'erreur et ce n'est pas la peine que j'insiste.

Il est conseillé (même si ce n'est pas obligatoire) de commencer un
document XML (donc, a fortiori, XHTML) par une « déclaration XML ».
Ça ressemble à ceci :

<?xml version="1.0" encoding="iso-8859-1"?>

où « iso-8859-1 » est à remplacer par l'encoding utilisé (les
principaux utiles sont « us-ascii », « iso-8859-1 » et « utf-8 »).  Il
y a des variations possibles, mais je conseille de ne pas trop jouer
au con - par exemple, c'est une erreur de well-formedness de mettre la
version après l'encoding (pourtant tous les autres tags peuvent se
mettre dans n'importe quel ordre).  On n'a pas non plus le droit de
mettre quoi que ce soit, même du whitespace, avant la déclaration, si
déclaration il y a.

Ensuite (ce coup-ci on a droit à du whitespace), on met la déclaration
de DOCTYPE.  Noter que « xml » s'écrit en minuscules dans ce qui
précède et que c'est un point d'interrogation qui vient avant, alors
que « DOCTYPE » s'écrit en majuscules, et c'est un point d'exclamation
avant.

Comme pour le HTML4, on a trois niveaux de XHTML : strict,
transitional ou frameset.  Les DOCTYPE s'écrivent :

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

et

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

(je ne donne pas le frameset, parce que je suis contre de toute
façon).  Noter que le mot « html » est en minuscules : c'est
l'élément-racine.

Enfin, on peut commencer le document avec

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

Le xmlns indique le namespace : il faut le recopier verbatim.  Le
xml:lang et lang indiquent la langue : xml:lang se rajoute à lang (qui
existe déjà en HTML4), et les deux doivent toujours aller ensemble -
ici, il s'agit donc d'un document en anglais.

Je pense qu'à partir de là il n'y a pas de problème, quand on connaît
bien le HTML4, pour écrire du XHTML1 correctement.

Je recommande quand même, bien que ça n'ait pas vraiment de rapport
avec XHTML, de faire de la redondance et d'indiquer le charset et la
langue dans des tags meta : dans le head mettre des choses comme

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

(à remplacer par ce qui va bien, évidemment).  Naturellement, pour du
HTML4, on écrira ça sans le « / » à la fin.

Si vous voulez apprendre par imitation, j'ai quelques documents écrits
en XHTML :

http://www.eleves.ens.fr:8080/home/madore/lit/short.html.en
http://www.eleves.ens.fr:8080/home/madore/lit/short.html.fr
http://www.eleves.ens.fr:8080/home/madore/lit/short.html.ru
http://www.eleves.ens.fr:8080/home/madore/lit/short.UTF8.html.en
http://www.eleves.ens.fr:8080/home/madore/lit/short.UTF8.html.fr
http://www.eleves.ens.fr:8080/home/madore/lit/short.UTF8.html.ru

http://www.eleves.ens.fr:8080/home/madore/computers/unicode/
http://www.eleves.ens.fr:8080/home/madore/computers/unicode/htmlent.html
http://www.eleves.ens.fr:8080/home/madore/computers/unicode/revlat.html
http://www.eleves.ens.fr:8080/home/madore/computers/unicode/cstab.html

http://www.eleves.ens.fr:8080/home/madore/misc/unitest/

