XHTML 1.1 est le langage standard actuel permettant de décrire des pages web. Les mots standard et actuel devraient être redondants, mais bien que l'histoire d'Internet soit relativement courte, celle des langages qui lui sont dédiés est assez tumultueuse. En effet, si le W3C (World Wide Web Consortium) est chargé de définir et de faire évoluer les standards, les grands acteurs d'Internet se livrent une guerre des langages afin d'imposer leur navigateur au travers des options qu'il propose. Une conséquence malheureuse de cette compétition excessive est qu'il est très difficile de décrire une page web visible de la même manière et dans son intégralité par tous les internautes. Le seul moyen d'y parvenir est donc de respecter scrupuleusement les standards XHTML et CSS et de ne pas utiliser les ajouts spécifiques aux navigateurs.
SGML, acronyme de Structured Generalized Markup Language, est un langage qui permet de décrire des documents structurés. Il s'agit d'un langage interprété, c'est-à-dire qu'aucune étape de compilation n'est nécessaire. Il est en outre totalement indépendant du système d'exploitation puisqu'un fichier SGML est un simple fichier texte au format ASCII. La structure d'un tel fichier est caractérisée à l'aide de balises (markup) dont l'imbrication respecte certaines règles définies au sein de ce que l'on nomme une DTD (Document Type Definition).
La description de documents par un langage de balises est très intéressante mais le langage SGML est malheureusement trop complexe pour être utilisé par des non spécialistes. Il existe donc de nombreux langages ...ML, dont HTML et XHTML que nous allons étudier dans ce cours, mais aussi le meta-langage XML (eXtended Markup Language) qui offre la particularité de définir ses propres DTD. Pour tous ces langages ...ML, ce sont des marqueurs qui organisent les informations des documents et donc qui permettent aux navigateurs de les interpréter.
Les marqueurs définissent des zones sémantiques délimitées
par une balise ouvrante <nom> et
une balise fermante </nom>.
Certains marqueurs n'ont pas à proprement parler de début et
de fin et ne sont donc définis que par une seule balise construite
ainsi : <nom />.
On parle dans ce cas d'éléments vides dont la balise hr
(qui trace un trait horizontal) et la balise img (qui affiche
une image) sont des exemples pour le langage XHTML.
HTML, acronyme de HyperText Markup Language,
constitue une version allégée du langage SGML.
Il est destiné à la création de pages pour Internet et
repose sur le protocole HTTP.
Un fichier HTML est caractérisé par l'extension (de son nom)
'.html' ou '.htm' et peut être visualisé
par les navigateurs (browsers) dont les plus courants sont Internet
Explorer (85%) et Firefox (10%) issu de la suite
Mozilla (feu Netscape), mais il en existe de nombreux
autres : Opera, Konqueror, Safari, ...
Un document HTML de base se présente comme suit :
|
Les balises Les balises |
HTML 4.01 est l'ultime spécification du langage HTML rédigée par le W3C. Au delà, on passe au langage XHTML. Pour déclarer qu'un document respecte les spécifications HTML 4.01, il suffit de déclarer le document comme respectant les définitions de type de document (DTD) définies par le W3C. Pour cela, il y a trois possibilités :
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd"><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
"http://www.w3.org/TR/html4/frameset.dtd">frame.
Une de ces trois balises doit être placée au tout
début du document avant même la balise html en
respectant la casse (majuscules/minuscules) ! Une DTD définie
le vocabulaire et la syntaxe autorisés dans un document. Il appartient
à l'auteur d'un page HTML de vérifier la validité de cette
page avant sa publication. Cette étape est importante car elle seule
vous assure qu'un visiteur ayant une autre configuration logicielle que la votre
visualisera une page avec un résultat analogue à celui que vous
observez. Pour cela, le W3C met à disposition un
validateur HTML.
Avant de tester vos documents, il reste une ligne de code à
ajouter à chaque page, et plus exactement à l'en-tête de
chaque document (donc entre les balises <head> et
</head>).
En effet, il faut indiquer au navigateur le codage utilisé pour
définir votre document afin de gérer les problèmes
d'internationalisation.
Cela est fait grâce à la balise meta suivante :
<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-1">.
De manière générale, les balises meta
permettent de déclarer des informations sur la construction du document.
On peut par exemple déclarer l'auteur du document : <meta name="Author"
content="moi">.
Une fois encore, attention à la casse ! Finalement, un document valide HTML 4.01 (de transition) ressemble donc à cela :
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <title>titre de la fenêtre</title> </head> <body> <!--contenu--> </body> </html>
Si vous avez encore des documents HTML qui ne respectent pas la norme HTML 4.01, il devient indispensable de les faire évoluer afin de permettre à tous les internautes de les consulter. En effet, les nouvelles normes n'assurent plus de compatibilité avec les versions trop anciennes.
La norme HTML 4.01 est
elle-même obsolète, il faut donc ensuite faire migrer
vos documents HTML 4.01 vers le standard actuel qu'est
XHTML 1.1.
Le langage HTML a été abandonné car il est trop permissif. Il autorise par exemple une définition de paragraphes de ce type :
<p>bla bla<p>bla bla</p>
Ainsi, il n'est pas nécessaire de fournir aux navigateurs des documents bien formés puisqu'ils se débouillent pour afficher un document correct. Tout le problème se situe là : les navigateurs n'ont pas les mêmes approches pour corriger les erreurs de description de pages. La solution est donc simple, il faut évoluer vers un langage qui reste simple mais qui soit plus strict. Ce langage, c'est le XHTML qui après une première version 1.0 est aujourd'hui utilisé dans sa version 1.1.
Parallèlement à l'évolution des langages, les navigateurs changent également et se rapprochent de plus en plus des standards. En conséquence, si vous gérez des pages web qui ne respectent pas les standards, corrigez-les sans quoi vous prenez le risque qu'elles ne soient plus accessibles au plus grand nombre. Pour cela il vous faudra désormais respecter les règles suivantes :
<a><p>bla bla</a></p>)
DOCTYPE)
<br> devient <br />, <img>
devient <img />, et ainsi de suite pour meta,
link, ...
name n'est utilisé que
pour les balises de formulaire, seul id subsiste pour les autres
balises)
width n'existe plus pour la balise td,
ni align pour la balise p, ...
En fait ceci est logique puisque ces informations relèvent du style
de la mise en forme.
Ils doivent donc être gérés par une feuille de style ou par
l'attribut style de la balise considérée.
<td style="width:50%">
plutôt que <td width="50%"> et <p
style="text-align:justify"> au lieu de <p
align="justify">
<script
type="text/javascript" src="monscript.js"></script>)
Lorsqu'une page a été
rédigée, il faut ensuite
valider sa structure XHTML et
valider
sa(ses) feuille(s) de style CSS.
Cette double étape de validation est primordiale, même si
le document a été crée à l'aide d'un éditeur
de pages web récent.
Nous reviendrons sur ces deux validations après avoir étudier
ces langages.
Pour les utilisateurs de Firefox, notez qu'il existe l'extension
HTMLvalidator
qui permet une première passe de validation locale (mais qui ne
remplace pas la validation finale par les outils du W3C !).
Pour gérer des pages web, il faut trois types d'outils : un éditeur pour la création des pages, un client FTP pour télécharger les pages chez un hébergeur et enfin un navigateur pour visualiser le résultat.
La structure de base d'un document XHTML 1.1 est la suivante :
<?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" dir="ltr"> <head> <meta http-equiv="Content-Type" content="text/xml; charset=iso-8859-1" /> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <meta name="resource-type" content="document" /> <meta name="Author" content="moi" /> <title>titre de la fenêtre</title> <meta http-equiv="content-style-type" content="text/css" /> <link rel="stylesheet" type="text/css" href="monstyle.css" /> </head> <body> <!--contenu--> </body> </html>
On retrouve comme en HTML les deux parties head et
body d'un document mais également de nombreuses
informations supplémentaires :
html permettent
de définir la langue utilisée et le sens de lecture du
document (ici french et left-to-right).
meta permettent de spécifier des
informations sur le document comme son encodage et son auteur.
La structure étant définie, il ne reste plus qu'à écrire le contenu du document. Pour cela, il faut utiliser les balises présentées ci-dessous.
Selon la recommandation
du W3C du 26/01/2000, XHTML est une reformulation de HTML 4 en XML
1.0.
La dernière version de ces spécifications date du 31/05/2001 et
constitue XHTML
1.1.
Si XHTML 1.0 offrait encore trois choix de DTD comme HTML 4.01 (strict,
transitional et frameset), à partir de la version
1.1 il ne subsiste plus qu'une seule DTD (strict).
Ceci impose une grande rigueur et certains changements des (mauvaises) habitudes
prises avec HTML (cf. ci-dessus).
Il est important que les noms des balises
ainsi que ceux de leurs attributs soient écrits en minuscules !
Vous pourrez trouver sur Internet
des balises qui ne sont pas présentées dans ce cours.
Sauf omission de ma part (merci de me la(les)
signaler),
elles ne sont pas décrites car elles sont obsolètes ou
spécifiques à tel ou tel navigateur.
Il est donc préférable de ne pas y avoir recours.
| Nom | Attributs | Fonction |
|---|---|---|
<p> </p> |
align, dir, lang, title |
définit un paragraphe |
<small> </small> |
dir, lang, title |
police plus petite |
<big> </big> |
dir, lang, title |
police plus grande |
<strong> </strong> |
dir, lang, title |
écrit en gras |
<em> </em> |
dir, lang, title |
écrit en italique |
<u> </u> |
dir, lang, title |
écrit souligné |
<tt> </tt> |
dir, lang, title |
écrit en proportionnel |
<strike> </strike> |
dir, lang, title |
écrit barré |
<sup> </sup> |
dir, lang, title |
écrit en exposant |
<sub> </sub> |
dir, lang, title |
écrit en indice |
<br /> |
clear, title |
passe à la ligne suivante |
| Nom | Attributs | Fonction |
|---|---|---|
<table> </table> |
align, background, bgcolor, border, bordercolor, bordercolordark, bordercolorlight,
cellpadding, cellspacing, cols, datapagesize, dir, frame, height, lang, rules, summary,
title, width
|
définit un tableau |
<tr> </tr> |
align, bgcolor, bordercolor, bordercolordark, bordercolorlight, dir, lang
nowrap, title, valign
|
définit une ligne |
<th> </th> |
abbr, align, axis, background, bgcolor, bordercolor, bordercolordark,
bordercolorlight, colspan, dir, headers, height, lang, nowrap, rowspan, scope,
title, valign, width
|
définit une cellule titre |
<td> </td> |
abbr, align, axis, background, bgcolor, bordercolor, bordercolordark,
bordercolorlight, colspan, dir, headers, height, lang, nowrap, rowspan,
scope, title, valign, width |
définit une cellule |
<caption> </caption> |
align, dir, lang, title, valign |
définit une légende |
| Nom | Attributs | Fonction |
|---|---|---|
<ul> </ul> |
compact, dir, lang, title, type |
définit une liste à puces |
<ol> </ol> |
compact, dir, lang, start, title, type |
définit une liste numérotée |
<li> </li> |
dir, lang, title, type, value |
définit un item de liste |
| Nom | Attributs | Fonction |
|---|---|---|
<select> </select> |
accesskey, dir, lang, size, style, tabindex, title |
définit une sélection |
<option> </option> |
accept, accesskey, align, alt, border, dir, height,
hspace, lang, maxlength, readonly, size, src, style, tabindex, title,
type, usemap, value, vsapce, width |
définit un choix de sélection |
<optgroup> </optgroup> |
... |
définit un sous-ensemble d'options |
| Nom | Attributs | Fonction |
|---|---|---|
<form> </form> |
action, dir, enctype, lang, metod, runat, style, target, title |
définit un formulaire |
<input> </input> |
accept, accesskey, align, alt, border, dir, height,
hspace, lang, maxlength, readonly, size, src, style, tabindex, title,
type, usemap, value, vsapce, width |
définit un champ de formulaire |
<label> </label> |
... |
définit l'étiquette d'un champ |
<textarea> </textarea> |
accept, accesskey, align, alt, border, cols, dir, height,
hspace, lang, maxlength, readonly, rows, size, src, style, tabindex, title,
type, usemap, value, vsapce, width, wrap="virtual" |
définit une zone de texte |
<button> </button> |
accept, accesskey, align, alt, border, dir, height,
hspace, lang, maxlength, readonly, size, src, style, tabindex, title,
type, usemap, value, vsapce, width |
définit un bouton |
<fieldset> </fieldset> |
... |
définit un sous-ensemble de champs |
<legend> </legend> |
... |
définit l'étiquette d'un sous-ensemble de champs |
| Exemples | Code |
|---|---|
|
Chaque case à cocher possède un nom
alors que les boutons radios partagent un même nom. De manière
générale, on double la dénomination en utilisant les
attributs |
|
Voir plus de détails sur les formulaires (Attention, il s'agit de HTML et pas de XHTML !).
| Nom | Attributs | Fonction |
|---|---|---|
<h1> </h1> à <h6> </h6> |
align, dir, lang, title |
définit un titre |
<img /> |
align, alt, border, controls, dir, dynsrc, height, hspace, ismap, lang,
longdesc, loop, lowsrc, name, src, start, title, usemap, vspace, width
|
affiche une image |
<a> </a> |
accesskey, dir, href, hreflang, lang, name, tabindex, target, title |
définit un lien |
<map> </map> |
dir, lang, name, title |
définit une image composite |
<area> </area> |
accesskey, alt, coords, dir, disabled, href, lang, name, tabindex, target, title
type, value
|
définit un lien |
<hr /> |
align, color, noshade, size, title, width |
affiche un trait horizontal |
<!-- --> |
aucun | commentaires |
<embed> </embed> |
dépend de l'objet | objet imbriqué, nécessite un plug-in |
La philosophie de la description de pages web est de séparer le contenu qui est décrit en XHTML de l'apparence du document qui varie selon le medium d'affichage et qui est définie en CSS. Les balises suivantes servent de support à la définition des styles :
| Nom | Attributs | Fonction |
|---|---|---|
<style> </style> |
|
cf. chapitre sur les CSS |
<span> </span> |
id, ... |
cf. chapitre sur le DOM et DHTML |
<div> </div> |
id, ... |
cf. chapitre sur le DOM et DHTML |
En plus des balises, il existe des caractères spéciaux, notamment pour les accents qui ne sont pas gérés par défaut par tous les encodages utilisés par les navigateurs.
Les accents s'appliquent à d'autres lettres, par
exemple |
|
|
Il est important que les valeurs des
attributs soient écrites entre guillemets.
Rappelons également que les noms des balises et des attributs
doivent être écrits en minuscules.
Pour chacun des attributs présentés ci-dessous par ordre alphabétique, le tableau suivant présente leur rôle et leurs valeurs possibles :
En travaux ...
| Nom | Valeur | Role |
|---|---|---|
accesskey |
a |
a |