Il est conseillé d'utiliser l'attribut longdesc pour décrire une image, et rendre la page plus accessible, notamment aux personnes qui ne peuvent pas afficher les images (j'ai personnellement testé ça avec une connexion GPRS au volume de transfert limité à 20 Mo...) ou qui ne peuvent pas les voir.

L'attribut longdesc, c'est la spécification W3C qui le dit (voir lien au début du paragraphe), doit avoir une URI pour valeur... ce qui n'est pas très pratique quand on utilise des outils de blogging comme DotClear (qui contient dans sa syntaxe wiki une fonction pour rajouter un longdesc à une image : ((url|alt|alignement (float: CSS)|longdesc))), mais qui ne permette pas par défaut de créer des pages à la volée pour stocker des longdescs.

La solution trouvée par DotClear n'est pas valide (X)HTML : la description longue est stockée dans la valeur du longdesc. Emmanuelle avait déjà soulevé ce problème, que j'avais reporté à Olivier... qui m'avait envoyé sur les roses, et il n'avait pas tort : c'est impossible à implémenter !

Une bien meilleure solution m'est venue du test Acid2, qui pour torturer les navigateurs (j'aime beaucoup la "sucette" que rend Firefox... il part en sucette ! Bon, d'accord, elle était nulle.), stocke un bout de CSS dans une URL (voir le <link rel="appendix stylesheet" ...). Deux minutes de googlage plus tard, et je tombe sur la RFC 2397, "The 'data:' URL scheme". La révélation.

Concrètement, j'ai une image :

Lampadaire sur le Palais Pitti

Et sa description :

Un lampadaire sur le bord d'une façade du Palais Pitti, à Florence (Italie).

Pour mettre les deux ensemble, j'utilise la syntaxe XHTML suivante :

<img
  src="lampadaire-pitti.jpg"
  alt="Lampadaire sur le Palais Pitti"
  longdesc="data:text/plain;charset=utf-8,Un
     lampadaire sur le bord d'une façade
     du Palais Pitti, à Florence (Italie)." />

Attention à bien encoder l'URL pour qu'elle ne contienne que des caractères ASCII ! Ainsi, à Florence devient %C3%A0 Florence. Je n'ai pas encodé l'URL dans l'exemple précédent pour des questions de lisibilité.

Tout ceci donne (avec le "D" pour faire un lien vers la description !) :

Lampadaire sur le Palais Pitti D

Nous avons donc un longdesc parfaitement valide (puisque data: est un schéma d'URL). Cliquez sur "D" dans votre navigateur : une page contenant le texte descriptif s'affiche ! (testé sous Firefox et Opera, petit problème d'encodage avec Opera... Internet Explorer n'accepte pas, évidemment...).

Dans DotClear, cela se fait comme ça (tout sur une seule ligne) :

((lampadaire-pitti.jpg
|Lampadaire sur le Palais Pitti
|C
|data:text/plain;charset=utf-8,Un lampadaire
     sur le bord d'une fa%C3%A7ade
     du Palais Pitti, %C3%A0 Florence
     (Italie).))

Pour information, voici la syntaxe complète d'une URL "data" :

dataurl    := "data:" [ mediatype ] [ ";base64" ] "," data
mediatype  := [ type "/" subtype ] *( ";" parameter )
data       := *urlchar
parameter  := attribute "=" value

Soit, de manière lisible par un humain :

URL = data:<type MIME>,<caractères encodés>

Pour plus d'informations sur la formulation d'un type MIME : RFC 2045, "Multipurpose Internet Mail Extensions (MIME) Part One" (notamment le chapitre 5.1, "Syntax of the Content-Type header field").

Enfin, on peut noter que, comme dans le test Acid2, les URLs "data" peuvent être utilisées pour stocker des CSS, ou des images (comme dans la RFC) - même si c'est très peu efficace - ; ou bien... n'importe quoi qui ait un type MIME !