TUTORIEL XML 
La modularisation de XHTML
Si l'avenir du Web passe par les terminaux portables, celui de XHTML passe par une décomposition en modules logiques. Explications. (31/08/2004)

Le but premier du W3C est l'accès universel aux informations accessibles sur le réseau : permettre à n'importe qui, n'importe où, d'accéder à Internet n'importe quand, et ce quelle que soit ses caractéristiques personnelles (langue, capacité physique, etc.).

Le W3C tient également à coeur la possibilité d'accéder à Internet à partir de tout terminal, quel qu'il soit, et notamment les téléphones portables, agendas électronique et autres. Mais comment faire pour que tous ces appareils, si différents soient-ils, comprennent le même langage ?

La recommandation Modularisation de XHTML est la réponse du W3C à l'épineux problème d'un langage de balises trop simplifié ou à multiples versions. Le consortium a choisi de décomposer la spécification XHTML, afin de créer une DTD-socle et vingt-huit modules pouvant s'ajouter à celle-ci, pour constituer la collection de balises nécessaires à un support (voir les apports de XHTML).

XHTML devient ainsi modularisé, mais aussi extensible : tout comme on peut ajouter un module W3C officiel, on peut ajouter un module tiers qui reprendrait précisément les balises nécessaires. XHTML devient une sorte de Lego, où l'on peut construire sa DTD selon ses besoins.
XHTML Modularization est donc une architecture permettant de grouper des balises de même logique en modules, et de grouper ces modules afin de créer un langage spécifique.

Les principaux modules
Voici une description de quelques-uns des modules disponibles, rangés dans leur catégorie, parmi les plus importants :

Modules de base
STRUCTURE : tout ce qui concerne le squelette du document (body, head, html, title)
TEXT : balises permettant de définir le type de texte, hors listes (p, acronym, em, strong...)
HYPERTEXT : le lien, tout simplement (a)
LIST : les définitions de liste (ul, li, dt, dd...)
PRESENTATION : balises de mise en page du texte (b, i, hr, sub...)
BASIC FORMS: le minimum nécessaire aux formulaires (form, input, label, textarea...)
BASIC TABLES : le strict nécessaire aux tableaux (table, td, tr, th, caption)
IMAGE : la balise image seule (img)
OBJET : les balises de gestion d'objets (object, param)
SCRIPTING : ce qui concerne un contenu exécutable (script, noscript)
STYLE SHEET : permet de styler le document (style)
LEGACY : les éléments ne devant plus être utilisés... mais quand même disponibles au cas où (font, center, strike, u...)

Sur les 28 modules disponibles, quatre sont nécessaires pour que le document soit conforme : les modules de base Structure, Text, HyperText et List.
Tous groupés, ces 28 modules nous donnent XHTML 1.1 ("module-based XHTML"), qui fonctionne comme XHTML 1.0. XHTML ne perd donc pas en fonctionnalités, et gagne énormément en flexibilité, comme la possibilité de créer des profils ou des sous-langages...

XHTML-Basic peut être considéré comme un profil tiré de XHTML 1.1 : il n'utilise que 11 modules sur les 28 (Structure, Text, HyperText, List, Basic Forms, Basic Tables, Image, Objet, Metainformation, Link et Base). Beaucoup plus léger, il est amené à remplacer à terme les langages WML (du système Wap) et C-HTML (du système i-Mode). Son autre grand avantage est de pouvoir afficher une page différente sur ordinateur ou sur terminal léger sans devoir faire appel à un second document.

Voici un court document utilisant XHTML-Basic :

<?xml version="1.0"?>
  <!DOCTYPE html PUBLIC
    "-//W3C//DTD XHTML Basic 1.0//EN"
    "http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd">

  <html xmlns = "http://www.w3.org/1999/xhtml">
    <head>
      <title>Poupoule?</title>
    </head>
    <body>
      <p>Une poule sur un mur qui picotte du pain dur.</p>
    </body>
  </html>

Application
Les modules s'ajoutent au document XHTML au travers de la DTD du document : à partir de la DTD XHTML de base, chacun est libre de créer une DTD adaptée à ses besoins, et même de créer des balises de toutes pièces afin de servir au mieux le support visé. Ainsi, pour un support ne pouvant afficher que du texte, des liens et des images, il est inutile de lui fournir des documents répondant à la DTD complète de XHTML 1.1. Il sera alors préférable que les documents se conforment à une DTD plus simple, ne prenant en compte que les balises utilisables.

L'idée ici est donc de créer sa propre DTD (voir Lire et écrire une DTD), qui reprendrait la DTD XHTML de base (Structure, Text, HyperText, List) et y ajouterait le seul autre module dont nous avons besoin, Image. On le nommera XHTML-Image-only 1.0, et un document qui y fera référence aura le doctype suivant (l'URL est fictive):

<!DOCTYPE html PUBLIC
  "-//Journal du Net//DTD XHTML-Image-Only 1.0//EN"
  "http://www.journaldunet.com/dtd/xhtml-image-only10.dtd">


Le fichier xhtml-image-only10.dtd aura pour sa part le contenu suivant :

<?xml version="1.0" encoding="iso-8859-1"?>
<!ENTITY % XHTML.ns "http://www.w3.org/1999/xhtml" >
<ENTITY % xhtml-framework.mod
  PUBLIC "-//W3C//ENTITIES XHTML 1.1 Modular Framework 1.0//EN"   "xhtml11-framework-1.mod" >
  %xhtml-framework.mod;

<!ENTITY % xhtml-struct.mod
  PUBLIC "-//W3C//ELEMENTS XHTML 1.1 Structure 1.0//EN"
  "xhtml11-struct-1.mod" >
  %xhtml-struct.mod;

<!ENTITY % xhtml-text.mod
  PUBLIC "-//W3C//ELEMENTS XHTML 1.1 Text 1.0//EN"
  "xhtml11-text-1.mod" >
  %xhtml-text.mod;

<!ENTITY % xhtml-hypertext.mod
  PUBLIC "-//W3C//ELEMENTS XHTML 1.1 Hypertext 1.0//EN"
  "xhtml11-hypertext-1.mod" >
  %xhtml-hypertext.mod

<!ENTITY % xhtml-list.mod
  PUBLIC "-//W3C//ELEMENTS XHTML 1.1 Lists 1.0//EN"
  "xhtml11-list-1.mod" >
  %xhtml-list.mod;

<!ENTITY % xhtml-image.mod
  PUBLIC "-//W3C//ELEMENTS XHTML 1.1 Images 1.0//EN"
  "xhtml11-image-1.mod" >
  %xhtml-image.mod;


  Forum

Réagissez dans les forums de JDN Développeurs

Pour résumer, nous avons construit ici, au fur et à mesure, le jeu de balises que nous voulions utiliser, en commençant par définir notre DTD comme répondant aux spécifications de XHTML Modularization, puis en ajoutant les blocs de balises de base (Structure, Text, HyperText, Lists), et enfin, notre bloc Image - le tout correspondant à des modules.

 
Xavier Borderie, JDN Développeurs
 
Accueil | Haut de page
 
 





Quand achetez-vous le plus en ligne ?
Du lundi au vendredi
Le samedi
Le dimanche

Tous les sondages