Comment lire une spécification du W3C

Par J. David Eisenberg

Le W3C est l'organisme en charge des spécifications de toutes les technologies relatives au Web. En tant que concepteur Web, vous avez probablement visité leur site Web (http://www.w3.org) afin de trouver une réponse à une question que vous avez eu sur le XHTML ou d'en savoir un peu plus sur une nouvelle technologie comme XSL-FO (le langage de feuilles de style pour la mise en page) ou SVG (le langage graphique vectoriel).

Vous êtes allé lire la spécification et presque immédiatement, vous l'avez abandonnée dans la plus grande confusion. « Ceci, » pensez-vous, « est totalement illisible ». En fait, c'est tout à fait lisible - si vous connaissez un élément clé...

Une spécification n'est pas un manuel de l'utilisateur

La Bible n'a pas été écrite pour être lue, mais interprétée.

Auteur inconnu

Lorsque vous cherchez des réponses à vos questions, vous utilisez un manuel de l'utilisateur ou un guide de référence ; vous désirez utiliser la technologie. Ce n'est pas le but d'une spécification du W3C. Le but d'une « spéc » est d'informer les programmeurs, qui implémentent la technologie, en décrivant les différentes fonctionnalités et la manière dont elles doivent être implémentées.

C'est la différence entre le manuel d'utilisation de votre voiture et le manuel technique automobile de réparation. Le manuel d'utilisation vous dit comment remplacer les essuie-glaces et montre les différentes parties de fixation, ce qui vous permettra de les remplacer sans trop de problèmes.

Si vous travaillez avec la toute dernière technologie, il est fort probable qu'il n'y ait aucun manuel de l'utilisateur ; la seule documentation disponible est la spécification. Dans ce cas, apprendre à lire une spécification n'est pas un luxe, cela devient une nécessité.

La structure des spécifications

De la même façon qu'un manuel de l'utilisateur aura un guide des abréviations et légendes utilisées dans les illustrations, la plupart des spécifications du W3C possèdent une section qui explique le document lui-même. Par exemple, la section 1 des spécifications HTML (HTML en français) et CSS (CSS en français) fournit une information raisonnable sur la façon dont la spécification est organisée et sur la manière de la lire.

Respect !

Je hais les définitions.

Benjamin Disraeli

Un manuel technique est précis, il n'a rien à voir avec un dialogue vague et informel avec le lecteur. De la même manière, une spécification du W3C est écrite avec la même formalité codifiée qu'une pièce de théâtre Kabuki. Abordons quelques mots que vous serez amené à rencontrer lors de la lecture d'une spéc.

normatif (normative)
Les mots « cette section est normative » indiquent que vous lisez une partie à laquelle les développeurs doivent se conformer. Les sections informatives comprennent, en revanche, des exemples et des explications.
agent utilisateur (user agent)
Une façon particulière de désigner le programme que les utilisateurs emploieront pour accéder à la technologie. Pour HTML, ce sera un navigateur. Pour les graphiques vectoriels (SVG), il y a des chances que ce soit un visualiseur comme Batik ou un plugiciel (plug-in) comme le visualiseur SVG d'Adobe..
RFC
Request For Comment (Appel à Commentaires), un document qui définit un standard internet.
syntaxe formelle
Si une spécification dit qu'elle suit la RFC2119, cela signifie qu'elle utilise certains verbes et mots avec une signification précise. must (doit) définit une exigence absolue, must not (ne doit pas) définit une interdiction absolue, should (devrait) implique qu'une fonctionnalité peut être ou pas implémentée, mais il est préférable d'avoir vraiment une bonne raison de ne pas le faire et should not (ne devrait pas) indique qu'il est préférable d'avoir vraiment une bonne raison d'implémenter une fonctionnalité.

Survoler

Chère tante Adèle, merci pour le livre sur les éléphants, il m'en a appris beaucoup plus que ce que je voulais savoir.

Lettre de remerciement d'un enfant

Vous n'avez pas à lire chacun des mots d'une spécification. Si vous êtes au beau milieu d'une section sans aucune balise, mais tout un laïus qui ressemble fort à un discours juridique, informatique ou les deux, un rapide coup d'oeil devrait suffire à vos besoins.

Par exemple, la section suivante de la spécification XSL:FO est à éviter. (En fait, dans cette spécification, la matière dont vous avez besoin ne commence pas avant le chapitre six.)

4.2.5 Stacking Constraints
This section defines the notion of block-stacking constraints and inline-stacking constraints involving areas. These are defined as ordered relations, i.e., if A and B have a stacking constraint it does not necessarily mean that...

Hmmm... plutôt ennuyeux, non ? Avançons !

En revanche, il y a des moments où vous devez lire de façon attentive. Si vous apercevez une illustration, regardez les légendes et les descriptions textuelles. Elles vous donneront une information importante. Lorsque vous voyez une section avec un ou des exemples, ralentissez et lisez attentivement.

Espaces de noms

Dans l'univers XML, un namespace (un espace de noms) est un mécanisme qui vous permet de mélanger différents ensembles de balises dans un même document. Par exemple, si je veux insérer le langage mathématique MathML dans un document XHTML, je dois insérer quelques déclarations supplémentaires dans l'élément racine de mon document et je dois étiqueter les éléments mathématiques en les préfixant avec ml:.

<p>La célèbre équation d'Einstein :
    <ml:math>
    <ml:mrow>

        <ml:mi>e</ml:mi>
            <ml:mo>=</ml:mo>

        <ml:mi>m</ml:mi>
        <ml:mi>c</ml:mi>

        <ml:msup>2</ml:msup>
    </ml:mrow>

    </ml:math>
avec laquelle nous sommes <i>tous</i> familiers.</p>

Ce que vous avez de mieux à faire est de bien suivre tous les préfixes d'espaces de noms dans les documents exemples. Dans la plupart des cas, si vous êtes au coeur d'une longue dissertation sur la manière d'intégrer les espaces de noms dans une technologie XML particulière, vous pouvez sans risque la laisser tomber.

Apprendre à lire le BNF

Le BNF est l'acronyme de Backus Naur Form ou encore Backus Normal Form. C'est une syntaxe compacte qui permet d'exprimer la grammaire de langages informatiques. Elle existe depuis des lustres. Les spécifications utilisent des variétés différentes de BNF, mais elles permettent toutes de minimiser de longues descriptions en français en une forme symbolique. Prenons cet exemple qui définit un sandwich :

Un sandwich consiste d'une tranche inférieure de pain, moutarde ou mayonnaise ; laitue, optionnelle, ou une tranche de tomate, elle aussi optionnelle ; de 2 à 4 tranches de saucisson sec, rillettes ou jambon (ou combinées au choix) ; une tranche ou plus de fromage et une tranche supérieure de pain.

Ceci se traduit par

sandwich ::=
    tranche_inferieure 
    [ moutarde | mayonnaise ]
    laitue? tomate?
    [ saucisson_sec | rillettes | jambon ] {2,4}
    fromage+
    tranche_superieure

Les parties constitutives d'une définition sont listées dans l'ordre, séparées par des blancs. Les éléments sont regroupés avec des crochets et les choix à l'intérieur d'un groupe séparés par des barres verticales.

Si un élément est suivi par un point d'interrogation, cela signifie « un ou aucun ; », par un signe plus, cela signifie « un ou plus ; », par un astérisque, cela signifie « zéro ou plus ; » et si suivi par des nombres à l'intérieur d'accolades, cela donne les limites inférieures et supérieures du nombre d'éléments.

Les parenthèses ou les crochets sont utilisés pour grouper les éléments dans des définitions plus complexes. Parfois un élément générique comme une « couleur » est entouré par < et > où des éléments immuables seront entourés par des guillemets.

Apprendre à lire une définition de type de document (Document Type Definition)

L'encyclopédie Grolier® est la référence pour toutes les questions et réponses posées lors de Jeopardy®.

Extrait d'un jeu télévisé

Vous connaissez ces déclarations <!DOCTYPE ...> que vous placez en haut de vos documents pour dire au navigateur quelle version de HTML ou XHTML vous utilisez ? Ces déclarations font référence à une définition de type de document (Document Type Definition) ou DTD qui définit les combinaisons autorisées d'éléments dans un document.

Bien qu'apprendre à lire une DTD est difficile, la tâche n'est pas insurmontable. Le jeu en vaut la chandelle, car la DTD est l'ultime référence pour ce qui est ou n'est pas syntactiquement correct pour un langage de balisage particulier.

Le but de cet article n'est pas du tout de vous faire un exposé détaillé expliquant comment lire une DTD. Ceci dit, vous trouverez de bonnes explications dans les livres d'Elizabeth Castro, XML for the World Wide Web Visual Quickstart Guide ou dans le livre d'Erik Ray, Learning XML. Voici un bref exemple de ce que vous pourriez lire dans une DTD :

<!ENTITY %fontstyle "(tt | i | b)">
<!ENTITY %inline "(#PCDATA | %fontstyle;)">
<!ELEMENT div (p | %inline;)+>
<!ATTLIST div align (left | right | center) #IMPLIED>

Et voici sa traduction en français :

Les éléments stylistiques pour la police de caractère sont <tt>, <i> et <b>. Les éléments internes sont consitués de texte ou d'éléments stylistique pour la police de caractère. Un <div> peut contenir un ou plusieurs <p> ou tout autre élément interne. Un <div> peut avoir un attribut optionnel align avec les valeurs suivantes : left, right ou center.

IDL c'est idéal

Certaines technologies, telles que SVG et SMIL, permettent à un utilisateur d'écrire des programmes pour contrôler dynamiquement le document, de la même manière que le permet Javascript dans un document HTML. Ces spécifications ont des sections qui décrivent comment les scripts doivent interprêter le DOM (Document Object Model). Les sections suivantes montrent les interfaces en IDL, langage de définition de l'interface (Interface Definition Language.)

IDL est une notation générique pour décrire les morceaux d'information qu'un agent utilisateur devrait rendre accessible à l'environnement de programmation. IDL n'est pas du tout un langage de programmation. C'est un système de notation pour décrire ces interfaces d'une manière compacte. Bien que très informatives, les définitions d'interface IDL sont la plupart du temps éloignées de l'information dont vous avez besoin.

Ce qui vous intéressera probablement, en fonction du langage de programmation que vous aurez choisi, est la réalisation (bindings) Java ou ECMAScript.

La réalisation est un terme définissant la liste des objets, propriétés et méthodes qui sont disponibles pour vos scripts. ECMAScript est la version standard de JavaScript du « European Computer Manufacturer's Association »

Si vous utilisez un autre langage comme Perl ou Python, vous devrez chercher une librairie particulière telle que the Comprehensive Perl Archive Network pour perl ou Python XML Special Interest Group pour Python.

Résumé

  1. Réaliser que les spécifications du W3C sont écrites pour des implémenteurs et non pas des utilisateurs.
  2. Beaucoup de spécifications contiennent une section qui vous explique comment elles sont organisées et comment vous devriez les lire.
  3. Connaître le vocabulaire que les spécifications utilisent.
  4. Se rappeler que vous n'avez pas besoin de lire tous les mots. Survoler les parties inintéressantes.
  5. Eviter les discussions sur les espaces de noms.
  6. Apprendre à lire le BNF - c'est utilisé à de nombreux endroits.
  7. Apprendre à lire une DTD pour répondre à vos questions de syntaxe.
  8. Si une technologie est programmable (scriptable), l'information est dans la réalisation (bindings).

Soyez patient, cent fois sur le métier remettez votre ouvrage, et vous serez étonné par la quantité d'informations que vous serez capable d'extraire d'une spécification du W3C.


http://www.alistapart.com/articles/readspec/

Fiche technique

À propos de l'auteur

J. David Eisenberg est programmeur, enseignant et auteur. Il vit à San Jose en Californie, avec son chat Tabitha.

Articles du même auteur

Articles similaires

Voici la liste des dix articles les plus récents en rapport avec cet article :

Confirmé

© 2001-2024 Pompage Magazine et les auteurs originaux - Hébergé chez Nursit.com ! - RSS / ATOM - About this site