David Madore's WebLog: Microdonnées, donc

Index of all entries / Index de toutes les entréesXML (RSS 1.0) • Recent comments / Commentaires récents

Entry #1934 [older|newer] / Entrée #1934 [précédente|suivante]:

(lundi)

Microdonnées, donc

J'avais évoqué le Web sémantique le mois dernier, je reviens un peu sur le sujet puisque je suis maintenant entré dans le monde merveilleux de HTML5.

Qu'est-ce que le Web sémantique ?

L'idée du Web sémantique, expliquée à un enfant de cinq ans (bon, OK, peut-être douze), pourrait être exposée comme ceci. Les ordinateurs ne sont pas très malins, ils ne savent pas comprendre le français (ou l'anglais, ou le chinois…), et en particulier, les moteurs de recherche ne comprennent rien du tout des pages Web qu'ils indicent : ils ne voient qu'un tas de liens qui pointent vers d'autres pages Web, séparées par du texte qui pourrait aussi bien être en cunéiforme. Ça ne les empêche pas de donner de bons résultats avec de la simple recherche dans du texte, mais parfois on aimerait bien qu'ils comprissent ce qu'ils reçoivent : ça permettrait de faire des recherches plus sophistiquées (par exemple : trouve-moi une recette de cuisine de gâteau facile à préparer en moins de 40′ — si on recherche les mots-clés les plus évidents, on peut encore s'en sortir pour les mots recette, gâteau, facile, mais le moins de 40′ à peu de chances d'apparaître comme ça dans la page, et inversement on peut tomber sur une page qui raconte j'ai réparé mon ordinateur en moins de 40′, c'était vraiment facile de changer le disque dur, la bidouille c'est du gâteau et je vais vous donner la recette de comment je m'y suis pris). D'où l'idée d'inventer un langage permettant de communiquer des informations simples d'une manière compréhensible par un moteur de recherche : non pas d'écrire une page Web séparée dans un langage adressé aux ordinateurs, mais d'annoter une page Web destinée aux humains pour permettre aux ordinateurs de s'y retrouver un peu, et de savoir vaguement de quoi ça parle.

Il n'est pas question de traduire tout le texte en langage machine, ni que ça s'applique à des concepts subtils, mais uniquement de faciliter la digestion d'informations factuelles simples qui pourraient figurer dans une base de données. Par exemple, expliquer que ceci est un blog, que le lien en haut à gauche est un permalien, que l'avant-dernière entrée est la critique d'un film (que les mots Habemus papam sont le titre de ce film, et Nanni Moretti le nom du réalisateur, et que la critique dans son ensemble pourrait se résumer par telle note). Un commerçant en ligne pourrait indiquer qu'il s'agit d'un commerçant en ligne, spécialisé dans tel type de choses, et s'il a des locaux dans le monde physique, à quel endroit ils sont, quelles en sont les horaires d'ouverture, etc. De cette manière, quelqu'un qui chercherait sur Google Maps tel type de commerce pourrait voir ce résultat apparaître.

C'est une bien jolie idée, il n'est pas sûr que ça puisse marcher. Par exemple parce que dès lors que les moteurs de recherche et les humains ne lisent pas exactement la même chose, quelqu'un peut avoir intérêt à chercher à tricher, à présenter une information dans le texte en français et une autre, contradictoire, dans le Web sémantique, parce que c'est la première qui l'engage et la seconde qui aide à le trouver, donc il pourrait afficher des prix faux pour ses articles. Ou quelque chose comme ça. D'un autre côté, il est déjà possible de faire à des fins douteuses des sites Web qui apparaissent différemment à Google et à un humain (mais si Google l'apprend ils vous punissent, et il y a des mécanismes pour signaler ce genre de tromperies). Il n'est pas non plus clair que ce soit si rentable (si quelqu'un est venu vous voir en cherchant le produit X et que vous ne l'avez pas, vous pouvez y gagner en vendant le produit Y à la place, mais vous pouvez aussi l'énerver beaucoup). Enfin, si les navigateurs évoluent eux aussi pour comprendre le Web sémantique et le présenter aux utilisateurs, ça permettra de démasquer ce genre de tromperie. Bref, pour l'instant, tout ceci est assez théorique — mais la question se pose en tout cas de savoir qui doit faire confiance à qui pour dire quoi sur quoi.

RDF(a), microformats et microdonnées

Il y a essentiellement trois mécanismes concurrents (c'est-à-dire, deux de trop) qui prétendent arriver à rendre réel le Web sémantique : le RDF(a), les microformats et les microdonnées.

RDF(a) et ses triplets

Le RDF est le mécanisme le plus ancien, inventé au W3C, et le plus ambitieux ; il s'agit d'un cadre extrêmement général, et RDFa est le mécanisme permettant d'inclure du RDF dans du HTML. Les « données » du monde RDF sont des triplets de la forme (sujet, verbe, objet) : le sujet est la chose sur laquelle on donne une information, le verbe (ou prédicat) est la propriété qu'on exprime, et l'objet est la valeur de cette propriété. Le sujet et le verbe doivent recevoir des identifiants uniques, qui sont des URI : ça peut surprendre pour le sujet, et encore plus pour le verbe, vu que les URI sont a priori un mécanisme pour identifier les ressources Web (ou d'autres ressources informatiques) et on veut pouvoir parler de tout et de n'importe quoi, mais rien ne dit que ces URI soient vraiment des ressources Web, ou soient accessibles d'une manière quelconque (par exemple, l'URI urn:isbn:978-3-499-22392-1 identifie un livre dont je parlais récemment, et ce n'est pas en tapant cette URI dans votre navigateur que ce livre va magiquement apparaître devant vous) ; néanmoins, on aura souvent tendance à utiliser une page Web ou en tout cas un document informatique accessible en HTTP comme une sorte de faire-valoir pour une ressource quelconque (ce qui pose, au demeurant, la question de savoir comment on peut parler de cette page Web dans le langage RDF), et notamment même les verbes ont des ressources de ce genre, par exemple http://purl.org/dc/elements/1.1/title « est » le verbe avoir pour titre dans le vocabulaire dit du Dublin Core (cette URI conduit à une redirection HTTP vers une autre adresse, mais le bon identifiant est celui que j'ai écrit). Quant aux objets, ils peuvent être identifiés par des URI, mais certains verbes appellent une propriété qui est une simple chaîne de caractères. Pour en savoir plus sur le modèle, une lecture pas trop mauvaise est cette introduction à RDF publiée par le W3C et qui explique assez bien comment tout cela fonctionne.

Le format RDF spécifie un certain nombre de verbes de base, qui correspondent à des relations assez abstraites ; il y a un standard adjacent, RDF-S, qui en ajoute d'autres, et tout ceci est compliqué par un système de typage, mais de façon générale, le format RDF reste totalement général et abstrait, on pourrait dire qu'il s'agit simplement d'une grammaire : toutes les notions un peu concrètes relèvent d'autres standards, qu'on appelle des ontologies ou de façon moins pédante des vocabulaires. Si on a un document RDF et qu'on comprend le RDF mais pas le vocabulaire utilisé, on est dans la situation de quelqu'un qui comprendrait parfaitement la grammaire d'une langue mais n'en comprendrait pas un seul mot (ou juste des choses aussi basiques que être et avoir). Les outils pour traiter le RDF, bien sûr, ne prétendent pas comprendre les verbes : ils offrent juste un mécanisme général pour analyser les données, et c'est ensuite au programme les utilisant de décider quels verbes il veut gérer et comment.

En particulier, une des caractéristiques du RDF est d'être totalement décentralisé : n'importe qui peut ajouter de nouveaux verbes au langage, puisque n'importe quelle URI peut servir de Web, et n'importe qui peut publier des ontologies. Bien sûr, on n'a aucune chance d'être compris si on invente des verbes dans son coin, mais l'idée est que les mêmes données RDF peuvent préciser sur les mêmes objets des propriétés venant de plusieurs sources différentes, et éventuellement se recoupant : ce n'est pas grave, chaque lecteur des données gardera ce qu'il comprendra et jettera les verbes qui sont du chinois pour lui.

L'inconvénient de tant de généralité, bien sûr, c'est que le RDF est compliqué à traiter. Ou du moins, ça dépend de ce qu'on veut en faire : s'il s'agit juste d'extraire et de chercher des ensembles de triplets, ce n'est pas très difficile, mais si on ajoute la machinerie des types, des conteneurs et autres collections (rdf:Bag, rdf:Seq, rdf:Alt, rdf:List), de la réification (les propriétés sur les propriétés), et qu'on veut traiter tout ça de façon intelligente, ce n'est pas du tout facile.

Les microformats

Les microformats sont l'extrême opposé du RDF : alors que RDF est un mécanisme extrêmement général et abstrait, une grammaire sans vocabulaire, les microformats ne distinguent pas du tout grammaire et vocabulaire, et ne cherchent pas du tout à faire général. Il s'agit simplement d'une façon d'utiliser le HTML tel qu'il existe déjà, quitte à procéder de manière peu élégante et certainement pas extensible, pour permettre d'y exprimer certaines données dans un cadre bien limité correspondant à des usages pratiques réels.

Le mécanisme de base est d'utiliser l'attribut class du HTML : celui-ci sert à affecter les éléments à une ou plusieurs « classes » dont le principal usage est dans le cadre du CSS, parce que CSS permet d'appliquer des règles de style (couleur, taille des caractères, largeur, etc.) selon les classes auquel l'élément appartient. Par exemple, dans une page des commentaires de ce blog, chaque commentaire est dans une balise div qui est affectée à la classe comment-ruxor ou bien comment selon qu'elle a été postée par moi ou par quelqu'un d'autre, et ensuite la feuille de style CSS affecte la couleur du fond du cadre différemment pour une classe ou l'autre. (Ceci n'a rien à voir avec les microformats.)

Les microformats utilisent les classes pour un autre usage, en décidant que certains noms seront magiques : par exemple, si une page Web contient un élément affecté à la classe vcard et que celui-ci contient un autre élément de la classe fn, alors les microformats (et spécifiquement, hCard) commandent d'interpréter ça comme le nom d'une personne dont d'autres propriétés peuvent être décrites dans l'élément de classe vcard. Pour d'autres types de données, les microformats utilisent aussi l'attribut rel sur les liens (indiqués par les balises link ou a).

L'avantage, c'est que c'est très simple. L'inconvénient, c'est que ça ne permet d'exprimer que très peu de choses, et aussi (ce, conceptuellement, qui me dérange beaucoup plus) que si par hasard une page Web a utilisé par hasard des noms de classes qui sont définis par les microformats, elle aura peut-être, si j'ose dire, « un sens malgré elle ».

Les microdonnées

Les microdonnées sont le dernier-né de la famille, et adoptent une position vaguement intermédiaire entre la généralité du RDF et l'approche pragmatique très limitée des microformats. Comme le RDFa (et contrairement aux microformats qui réutilisent des attributs déjà existants), les microdonnées étendent la syntaxe du HTML, mais à la différence du RDFa (qui est plutôt lié au monde défunt du XHTML2), les microdonnées ont l'oreille des éditeurs du HTML5, et les attributs qu'elles introduisent, itemid, itemscope, itemtype, itemprop et itemref, font partie de la spécification officielle (au moins dans sa version WHATWG). La principale différence avec RDF est surtout que le modèle de données est plus simple et hiérarchique (les gens écrivent que RDF a un modèle en graphe alors que les microdonnées ont un modèle en arbre, mais je ne suis pas sûr que ça ait vraiment un sens ni que ce soit vrai puisque itemid permet en principe d'identifier deux nœuds quelconques).

Disons que les microdonnées s'inspirent des mécanismes des langages orientés objets : un objet appartient à une classe (définie par une ontologie, mais sans que le langage permette la réflexion du RDF où les ontologies contiennent elles-mêmes des propriétés RDF sur les verbes qu'elles définissent), cette classe définit un certain nombre de propriétés, qui peuvent elles-mêmes être des objets pour les microdonnées. Un objet se décrit avec l'attribut itemscope, son type avec itemtype, une propriété avec itemprop, la valeur de la propriété est indiquée par le contenu de l'élément (le cible d'un lien a ou link s'il s'agit d'une URL, la valeur contenue dans un time s'il s'agit d'une date, l'attribut content d'une balise meta, ou simplement le contenu texte d'un élément, ou encore l'objet défini si l'élément porte un itemscope). Les choses sont par exemple expliquées ici par Mark Pilgrim (moins les éléments itemid et itemref, qui ont été ajoutés plus récemment, et pour lesquels le mieux est de lire la spec).

Comme le RDF, les microdonnées ont besoin d'une ontologie (un vocabulaire) pour être utiles. Il y a un bout de vocabulaire défini dans la norme même du HTML5 (et qui reprend les concepts les plus populaires des microformats : hCard et hEvent), mais le gros morceau est surtout venu de Schema.org, un consortium réunissant Google, Microsoft (enfin, Bing) et Yahoo!, ce qui fait assurément du poids derrière. Ce qui est malheureux, c'est que les microformats permettent beaucoup moins facilement que le RDF de mélanger des vocabulaires, donc il est essentiellement impossible de publier les mêmes informations sous le format hCard-par-microdonnées et Schema.org.

La guéguerre entre tout ça

Les partisans de chacun de ces systèmes vont vous expliquer que le leur est le mieux (et les sceptiques du Web sémantique en général diront que de toute façon on devrait mettre nos bits ailleurs). Les partisans des microformats diront que c'est un truc qui marche maintenat. Les partisans du RDF diront que les microdonnées ne permettent pas d'exprimer tout ce que le RDF permet (et accessoirement que les microdonnées ont fait de l'entrisme dans le HTML5 alors que le RDFa en a été plus ou moins viré). Et les partisans des microdonnées diront que c'est plus simple, que c'est tout ce dont on a besoin, et que de toute façon puisque Google et compagnie misent là-dessus c'est ce qui marchera. Parmi les articles que j'ai trouvés, les plus convaincants et intéressants semblent être : cette comparaison générale (par un vague partisan du RDF, mais il reste assez neutre), cette explication (aussi par un vague partisan du RDF, dont le blog contient d'ailleurs plein d'autres articles intéressants sur le sujet) sur le problème lié à l'impossibilité de donner plusieurs types à un objet en microdonnées (et il me semble effectivement que c'est le problème le plus sérieux des microdonnées), et surtout cette longue explication par un des promoteurs du HTML5 qui répond assez en détail aux objections que les autres font aux microdonnées (et souligne donc les problèmes qu'il voit aux microformats et au RDFa ou au moins à la façon dont on parle de se servir du RDFa). Dans le genre humoristique, voir aussi cette réaction de quelqu'un qui aime le RDFa et qui n'apprécie pas du tout qu'on le pousse à faire des microdonnées.

Et moi dans l'histoire ?

J'ai un avis très faible sur la qualité relative des différents mécanismes du Web sémantique. J'ai l'impression qu'effectivement, RDF est sans doute mieux pensé, mais peut-être trop difficile à mettre en œuvre. Les microformats me gênent par leur mécanisme trop ad hoc et par l'absence de mesures tendant à éviter un conflit de noms (ils auraient au moins pu exiger la présence d'une classe nommée microformat-scope sur le plus haut élément d'un microformat !). Les microdonnées semblent un compromis raisonnable, même si le problème du typage multiple (qui rend quasiment impossible l'utilisation simultanée de plusieurs vocabulaires) me semble effectivement sérieux, et j'espère qu'une solution sera trouvée.

Mais de toute façon mon but à moi, si je dois mettre des informations sémantiques sur mes pages Web, est seulement de faire joujou (bon, c'est vrai que j'aimerais bien aider les moteurs de recherche à comprendre que ceci est un blog et que ça n'a aucun sens d'indicer les pages mensuelles comme des pages Web uniques, par contre indicer les entrées séparément et utiliser les permaliens serait bien — mais j'ai peu d'espoir de ce côté-là). J'ai donc saupoudré de microdonnées (dans le vocabulaire Schema.org) la page tout sur David Madore, on verra si ça a la moindre incidence sur quoi que ce soit (j'en doute). Je remarque au moins en passant par l'outil de test de Google que (1) il comprend effectivement quelque chose, mais que (2) il buggue quand même complètement dans l'interprétation de l'attribut itemref relativement à ce que dit le standard HTML5 (je n'arrive pas du tout à comprendre ce qu'il a fumé avec le itemref, mais en tout cas c'est n'importe quoi).

↑Entry #1934 [older|newer] / ↑Entrée #1934 [précédente|suivante]

Recent entries / Entrées récentesIndex of all entries / Index de toutes les entrées