Accueil > weblog
- Lire le billet précédent - Lire le billet suivant -
Par Laurent Denis, le 19 septembre 2004.
dfn est l'un de ces éléments HTML frustrant, au potentiel sémantique évident, mais d'emploi très incertain faute d'une définition suffisante dans les spécifications. Ce qui suit est donc largement hypothétique.
dfn étant destiné à indiquer l'instance définissante du terme englobé
, son utilisation la plus évidente est à l'image des exemples donnés par les spécifications :
<p> <dfn id="opera">Opera</dfn> est un navigateur [...] </p>
L'élément détermine l'expression qui fait l'objet d'une définition dans le fil du texte. L'expression et sa définition sont associées implicitement par leur appartenance au même parent (p, l'élément englobant). L'identifiant id="standards" permet de viser cette entrée en particulier dans votre document.
De la sorte, un script ou toute autre machine sémantique saurait aisément identifier et extraire de votre page le couple expression / définition. Un navigateur intelligent pourrait chercher à la demande, dans le document en cours de consultation, le passage où un terme est non seulement employé, mais défini. Encore faut-il pour cela que cette portion de contenu soit précisément délimitée.
Lorsque la définition n'est pas limitée à l'élément parent, mais se poursuit dans les éléments blocs suivants, l'utilisation d'une liste de définition semble donc plus appropriée :
<dl> <dt id="opera">Opera</dt> <dd>Navigateur graphique [...]</dd> <dd>[...]</dd> </dl>
Au-delà de cet emploi simple de dfn, on ne peut guère se livrer qu'à quelques spéculations.
dfn à un contexte plus vaste ?Pour pouvoir appliquer dfn à un texte réparti sur plusieurs éléments blocs, il faudrait en fait un mécanisme similaire à celui associant les label aux contrôles de formulaire, grâce à un attribut for= :
<div id="opera"> <h2><dfn for="opera">Opera</dfn></h2> <p>[...]</p> <p>[...]</p> </div>
L'élément englobant serait alors précisément déterminé.
Lorsqu'on souhaite ajouter à son texte une précision sur un terme, sans pour autant alourdir celui-ci, on peut être tenté d'en faire un tool-tip apparaissant au survol de la souris sur le terme défini, en tirant profit du comportement des navigateurs graphiques sur l'attribut title :
<dfn title="Navigateur [...]">Opera</dfn>
Cependant, rien ne permet de différencier ce cas de figure et les précédents : l'extraction éventuelle de la définition risque donc d'aboutir à un résultat sans pertinence. D'autre part, le title devrait alors être explicitement réservé à cet usage pour cet élément, pour éviter toute ambiguïté avec par exemple :
<dfn title="marque déposée">Opera</dfn> est un navigateur [...]
Il faut noter également que ce tool-tip est peu accessible, puisqu'il ne sera restitué par défaut que dans les navigateurs graphiques, et uniquement pour les utilisateurs de souris ou autre dispositif de pointage.
On peut également être tenté d'étendre l'usage de l'élément dfn pour informer qu'une définition de l'expression ainsi balisée est donnée dans une ressource distante. L'intérêt serait :
<link rel="glossary" title="Glossaire" href="/glossaire" />
Ce qui vient alors immédiatement à l'esprit serait en HTML :
<dfn> <a href="/glossaire#opera">Opera</a> </dfn>
Et dans un éventuel XHTML2.0 :
<dfn href="/glossaire#opera">Opera</dfn>
La spécification HTML4.01, et tout aussi bien l'actuel projet XHTML2.0 sont hélas muettes sur une telle syntaxe, et son interprétation éventuelle. Celle-ci supposerait :
a ou d'un futur attribut href dans l'élément dfn signifie systématiquement un lien vers une définition distante, et non un lien vers une page au contenu autre. Ici, par exemple, l'ambiguïté apparaît avec :
<dfn> <a href="http://www.opera.com">Opera</a> </dfn>
Qui pourrait certes être proscrit au profit de :
<a href="http://www.opera.com"> <dfn>Opera</dfn> </a>
Mais le problème resterait entier pour XHTML2.0:
<dfn href="http://www.opera.com">Opera</dfn> est un navigateur [...]
On pourrait alors imaginer un navigateur susceptible d'extraire d'une page les liens de ce type, pour les afficher par exemple dans une sidebar d'où ils pourraient être consultés. Un favelet peut d'ailleurs déjà facilement parvenir à un résultat similaire en créant une fenêtre popup listant ces liens.
Ce qui nous fait défaut, à nouveau, c'est un attribut de l'élément dfn permettant de différencier les définitions locales et distantes. Ce pourrait être un attribut spécifique, ou alors une utilisation d'un attribut tel que rel :
<dfn href="http://www.opera.com" rel="local"> Opera </dfn> est un navigateur [...] <dfn href="/glossaire#opera" rel="distant"> Opera </dfn>
Dans cette hypothèse, nous pouvons simuler le fonctionnement de ces définitions distantes :
<dfn title="/glossaire#opera"> Opera </dfn>
L'utilisation de title est ici évidemment faute de mieux, et cette solution est discutable du point de vue de l'accessibilité. Elle est cependant intéressante dans la mesure où elle permet de créer un comportement de lien contextuel sur l'élément dfn à l'aide des extensions CSS de Mozilla-FireFox et d'Opera (Faites un clic droit sur ce dernier terme pour en voir l'usage)...
Le code CSS nécessaire est :
dfn[title] {
-o-link: attr(title);
-o-link-source: current;
cursor: pointer;
-moz-binding:url(xbl.xml#dfn);
}
Et pour le binding XBL :
<binding id="dfn">
<implementation>
<constructor><![CDATA[
this.setAttributeNS("http://www.w3.org/1999/xlink", "xlink:type", "simple");
this.setAttributeNS("http://www.w3.org/1999/xlink", "xlink:actuate", "onRequest");
this.setAttributeNS("http://www.w3.org/1999/xlink", "xlink:href", this.getAttribute('title'));
this.title="Clic droit pour activer ce lien vers le glossaire";
]]></constructor>
</implementation>
</binding>
[edit]
Ce qui précède concernant les navigateurs Gecko a été écrit avant la sortie de Firefox1.0. Il s'est avéré depuis que ces styles ne sont pas compatibles avec celui-ci, pour un raison que je n'ai pas eu le temps de creuser (-moz-binding:url(xbl.xml#dfn); est donc désactivé dans la CSS actuelle de Blog & Bues.)
[/edit]
(Voir Attribut cite: comment générer en CSS un pseudo-lien vers la source des citations pour des explications détaillées sur cette technique.)
Mais tout ceci fait furieusement penser à RDF :
Les trackbacks pour ce billet sont temporairement fermés en raison d'une série d'attaques de spam.
Commentaires
Moz, le 19 septembre 2004
La question qui tue : pourquoi pas <a href="/glossaire/#opera">opera</a>, sans le <dfn> ?
Laurent Denis, le 19 septembre 2004
Bien-sûr, c'est actuellement la pratique la plus pertinente, ce qui est évoqué ici n'étant ni accessible, ni utilisable en dehors de deux ou trois navigateurs.
Mais ce n'est qu'un lien vers le glossaire, qui n'apporte aucune information supplémentaire quand à l'idée de terme défini dans le lien entre les deux documents.
Gloom, le 19 septembre 2004
Moz, Parceque l'utilisation de la balise dfn permet de déterminer que le liens en question pointe vers une définition.
):
Par contre, dans les propositions concernant une définition distante, le problème (tout du moins, à partir d'HTML4 jusqu'a ce qu'il y ai une modification de la définition de la balise dfn), est que, l'utilisation de la balise dnf, définit l'élément parent comme la définition, par exemple ( attention, possible troll
<p>Personnellement, je préfère <dfn><href="/glossaire#firefox">FireFox</a></dfn> à <dfn><a href="/glossaire#opera">Opera</a></dfn>.</p>
En théorie (si j'ai bien compris), dans ce cas, "Personnellement, je préfère FireFox à" définit Opera et, "Personnellement, je préfère" et "à Opera" définissent FireFox, ce qui d'une part est très confut et, d'autre part, bien sûr, aucun des deux n'est pas une définition, donc, l'utilisation de la balise dfn est abusive en plus d'être confuse.
Gloom, le 19 septembre 2004
Je me suis embrouiller à la fin, je recommance donc à partir de "d'autre part,":
et, d'autre part, faux bien sûr, en effet, aucun des deux n'est une définition ; l'utilisation de la balise dfn est donc abusive en plus d'être confuse.
Laurent Denis, le 19 septembre 2004
@Gloom > j'ai du mal à suivre. Dans ton exemple, effectivement, la balise <dfn> ne se justifie pas.
En revanche, on pourrait imaginer quelque-chose comme : "Les navigateurs dit alternatifs (<dfn>Opera</dfn>, <dfn>Mozilla</dfn>, <dfn>FireFox</dfn>, <dfn>Safari</dfn>..." (aucune définition distante), ou la même chose avec des définitions distantes.
Eric Daspet, le 20 septembre 2004
La définition de <dfn> n'est pas assez précise pour permettre à une machine d'aller récupérer et associer le terme et sa définition. Qu'importe...
La machine (le navigateur) sera toujours capable de dire "là il y a une définition de ...", de faire une liste des termes définis dans la page, de tenir à jour une liste des termes rencontrés pendant une session de navigation (en tenant à jour des liens vers les parties de page concernées).
Bref, bien que clairement flou, le <dfn> est loin d'être inutile. Il faut simplement savoir accepter qu'il ne fait pas tout tout seul.
Laurent Denis, le 20 septembre 2004
Dans sa définition minimale, <dfn> permet de "récuperer et d'associer" le terme et sa définition : le parent-bloc de <dfn> détermine le contenu à récupérer.
C'est au-delà de cet usage minimal que le problème se pose.
Gloom, le 21 septembre 2004
Je vais reprendre ton exemple (en ajoutant des définition distante, car, c'était l'objet de mon message:
<p>Les navigateurs dit alternatifs (<dfn><a href="/glossaire#opera">Opera</a></dfn>, <dfn><a href="/glossaire#mozilla">Mozilla</a></dfn>, <dfn><a href="/glossaire#firefox">FireFox</a></dfn>, <dfn><a href="/glossaire#safari">Safari</a></dfn> ... </p>
Etant donné que, pour les balises dfn, "L'expression et sa définition sont associées implicitement par leur appartenance au même parent", dans cette exemple, la définition des mots "Opera", "Mozilla", "FireFox" et "Safari" est commune et, c'est la suivante: "Les navigateurs dit alternatifs (Opera, Mozilla, FireFox, Safari ...". Or, ce n'est pas une définition, c'est une phrase (c'est évidant pour un humain parlant français, mais, pour une machine...), les définitions sont liée dans cette phrase, mais, ça, étant donné la définition actuel de la balise dnf, les navigateurs, moteurs de recherche, et cetera ne savent pas le consevoir, il prendront cette phrase qui n'est pas une définition pour une définition. Donc, il est un peu tôt pour utiliser la balise dnf avec une définition distante.
Est-ce plus clair ?
Laurent Denis, le 21 septembre 2004
@Gloom > Il y a écrit à plusieurs reprises dans ce billet le mot "spéculations" : je ne suis pas en train d'expliquer qu'on peut utiliser <dfn> aujourd'hui de cette manière !
Maintenant, à titre spéculatif, en-imaginant-que, etc : dans l'exemple, l'expression "navigateur alternatifs" est au contraire une définition (parmi d'autres possibles) d'Opera, Mozilla et Safari. Chacun a par ailleurs une définition en propre, plus spécifique, ("Mozilla est un navigateur OpenSource...") qui peut justement être sa définition "distante".
Cela dit, c'est une coïcidence : l'idée de définition distante N'est PAS d'avoir aussi une définition locale, mais d'utiliser dfn pour dire "ce terme est défini à cet endroit, accessible par ce lien" (et non pas seulement "ici, dans le contexte")
Les commentaires pour ce billet sont temporairement fermés en raison d'une série d'attaques de spam.