Les petites cases

Les réalités dans une page Web

Dans mon précédent billet, j´ai montré en quoi il existait dans un document XML plusieurs natures d´informations, que j´appelle réalité. La mise en lumière de ces réalités est d´autant plus difficile, lorsqu´on utilise les mêmes balises pour les structurer. C´est particulièrement vrai dans le cas d´une page Web.

Au moins trois réalités peuvent être identifiées dans le corps d´une page HTML (balise <body>) :

  1. Les métadonnées de la page que bien souvent on répète dans l´en-tête et dans le corps ;

  2. Les données ;

  3. Les informations de navigation.

Or, ces informations de nature différente sont encodées avec les mêmes balises. Par exemple, le menu permettant la navigation dans le site est encodé avec une liste à puce (<ul><li></li></ul>). C´est tout à fait logique, puisqu´il s´agit bien d´une liste d´items correspondant aux différentes parties du site. Or, une liste pourrait tout aussi bien être utilisée dans le contenu principal de la page Web. En théorie littéraire, ce type d´informations est appelé la « tabularité » du texte. La grande difficulté d´une page Web, par rapport au support papier, est de mettre dans le même fichier HTML ces différents types d´informations sur le même plan.

Séparer ces deux types d´informations permettrait, par exemple, d´améliorer grandement l´indexation des pages par les moteurs de recherche qui pourrait identifier les données intéressantes à indexer par rapport aux informations de navigation.

Il s´avère que ce problème a été pris en compte dans la réflexion qui a accompagné le très contesté XHTML 2. Vous avez déjà certainement tous vu dans vos agrégateurs l´annonce par Tim Berners-Lee de la mise en place d´un nouveau groupe de travail sur HTML parallèlement à la poursuite de XHTML 2 pour faire évoluer de façon incrémentale HTML. Cette annonce fait suite aux nombreuses voix qui se sont élevées dans la blogosphère, la communauté des standards, les concepteurs de navigateurs et d´éditeurs HTML. Je conçois et comprend une bonne partie des problèmes évoqués par toutes ces personnes (je suis en particulier d´accord avec les reproches sur la difficulté de XHTML 2). Pour autant, si on se place du point de vue strict de la représentation de l´information (c´est mon job), entre autre du problème des réalités abordé dans ce billet, XHTML 2 représente une avancée majeure. En guise d´exemple, suivent deux propositions de XHTML 2 qui apportent un début de réponse à ce problème d´encodage des réalités1.

La première proposition est une réponse directe à l´exemple ci-dessus. XHTML 2 introduit un nouvel élément <nl> pour structurer spécifiquement les listes de navigation. Cet élément permet de différencier une liste à puces utilisée dans les données et une liste à puces pour les menus.

La seconde proposition est l´introduction d´un nouvel attribut role. Comme l´indique la draft de XHTML 2, cet attribut permet de décrire le rôle joué par l´élément dans le contexte du document. La définition de cet attribut est complété par une liste de valeurs qui permettent justement de mettre en lumière les différentes réalités d´une page Web, par exemple : main (le contenu principal), navigation (la barre de navigation), banner (la barre contenant les informations sur la page et le site souvent en haut de la page Web)... Bref, tout est à notre disposition pour séparer clairement les différentes réalités.

En guise de conclusion provisoire aux deux billets

Pour les deux exemples que j´ai choisi, il existe finalement des solutions pour encoder les différentes réalités. Pour autant, celles-ci me paraissent limitées. Dans le cas de l´utilisation de milestone, on induit une hiérarchie entre les deux réalités, les informations encodées avec les milestone sont dans une certaine mesure reléguées au second plan. Il faudrait au moins trouver une solution pour éviter que ce soit toujours la même réalité qui soit au second plan, ou encore mieux qu´on puisse coder sur le même plan les deux réalités, ce qui, dans de nombreux cas, reviendrait à avoir deux arbres XML dans une seul fichier. Dans le cas de la page Web, le problème réside dans l´utilisation des mêmes éléments pour encoder des réalités différentes. La proposition du nouvel élément <nl> de XHTML 2 apporte une réponse, mais cela signifie que pour chaque schéma XML il faut connaître quel élément se rattache à telle ou telle réalité.

Finalement, le plus intéressant reste la proposition de l´attribut role qui peut être indiqué dans toutes les balises et dont les valeurs sont normalisées, mais peuvent être étendues selon les besoins. Si cet attribut pouvait directement faire partie de la spécification de XML à l´image de xml:id, xml:lang et xml:space, on y aurait alors accès dans toutes les schémas XML et on pourrait mettre au point des outils qui pourrait traiter les données en fonction de ces rôles ou réalités quelque soit le schéma utilisé et les éléments utilisés. Enfin, repérer ces différents niveaux d´informations, ces réalités, permet de mieux réfléchir aux balises à utiliser et ainsi éviter des erreurs qui pourraient être dommageables. Il faut parfois en XML aller au bout de la réflexion et ne pas rester en surface.

Quelques notes en passant

1 XHTML 2 comprend d´autres avancées qui me semblent essentiels en terme de représentation de l´information à commencer par l´abandon des <hx> au profit d´une vraie structuration hiérarchique des données, mais qui ne sont pas en lien direct avec le sujet de ce billet, je ne les aborde donc pas.

Structuration Causeries XHTML —