Vous avez un site Web rempli d'informations et vous voulez qu'on puisse facilement les réutiliser, mais dans quel format les publier ?
Vous avez examiné plusieurs schémas XML et microformats, mais aucun ne parvient réellement à décrire toutes les informations que vous souhaitez publier. Faut-il inventer un nouveau format ? C'est tentant, d'un autre côté si vous pouviez utiliser un standard existant, vos données seraient immédiatement interopérables avec d'autres données publiées selon les mêmes règles. Les utilisateurs pourraient réemployer les outils, analyseurs et feuilles de style créés autour de ce standard. Malheureusement, rien ne correspond vraiment à vos besoins. C'est ici que RDF entre en jeu.
Les initiales RDF correspondent à « Resource Description Framework », ou cadre de description de ressources en français. Une ressource est simplement une chose. Une personne, un livre, un clavier, un article de blog, un aquarium, une idée, toute chose qui peut être décrite. RDF est un cadre d'applications utilisant l'architecture du Web pour décrire une ressource. Tel HTML qui permet de relier des documents à d'autres documents sur le Web, RDF permet de relier une ressource à d'autres ressources sur le Web.
RDF est différent. Ce n'est pas un format, c'est un cadre d'applications pour décrire des données. RDF recule d'un pas : au lieu d'un ensemble de termes fixe pour étiqueter les données (tels les éléments HTML ou les noms de classes d'un microformat), RDF fournit un cadre dans lequel on peut mêler et associer les termes de vocabulaires existants, ou inventer le sien, dans la combinaison, quelle qu'elle soit, qui convient au mieux à son contenu particulier. Si vous trouvez un vocabulaire qui peut servir à décrire une certaine partie de vos données, tant mieux, ces données peuvent être interopérables. Vous avez encore le loisir de décrire le reste des données en utilisant les termes d'autres vocabulaires, autant que nécessaires. Si vous ne trouvez pas le terme qu'il faut pour une description, alors écrivez-le vous-même. RDF offre à la fois une grande flexibilité et une grande interopérabilité pour publier ses données. Cette interopérabilité ne signifie pas juste que vos données fonctionneront avec les outils existants, ou de pair avec d'autres données dans le même format, mais qu'elles peuvent réellement se connecter à d'autres données à travers le Web. C'est ce qu'on appelle le Web sémantique, ou le Web des données : tout comme HTML pour connecter ses pages à d'autres pages sur le Web, RDF permet de lier ses données à d'autres données sur le Web. Fantastique. Mais la publication de données ne vaut que si quelqu'un s'en sert. Pourquoi donc voudrait-on ces données en RDF ?
Il y a deux choses à propos de RDF qui rendent son utilisation vraiment agréable pour les développeurs Web.
Lorsqu'on dit que toutes les données RDF ont la même forme, cela ne veut pas dire qu'elles sont toutes pareilles. RDF est un modèle de données, plutôt qu'un format, qui de ce fait peut être publié dans une grande variété de formats différents, en XML, JavaScript Object Notation (JSON), HTML et en texte ordinaire. Ce qui est important c'est qu'ils traduisent tous la même structure de base : le triplet. RDF consiste en déclarations simples appelées triplets. Un triplet se compose d'un sujet, d'un prédicat et d'un objet.
Chaque triplet énonce : cette ressource a telle propriété, laquelle est soit une valeur littérale, soit une autre ressource (représentée par l'adresse URI).
Qu'y a-t-il de si extraordinaire ? C'est un peu comme le mantra de Ruby on Rails, la « convention prime sur la configuration ». Lorsqu'il n'existe qu'une seule structure, on n'a plus à y penser : vous n'avez pas besoin de changer votre code et votre schéma de base de données pour recevoir un type de données différent. Vous importez n'importe quel type de RDF et ça « marche ».
Toutefois, si les données utilisent la même structure de base, ça ne suffit pas à les rendre interopérables. Les documents XML utilisent couramment des attributs id et les bases de données relationnelles des clés primaires comme identificateurs uniques. Mais hors de leurs systèmes respectifs, ces identificateurs n'ont aucune signification. Vous et moi pourrions avoir un blog WordPress, mais la clé primaire 23 de votre table des articles identifiera un article différent du mien dans votre base de données. En comparaison, RDF utilise des adresses URI, qui sont les clés primaires d'un système beaucoup plus vaste, le Web.
Ainsi nous avons un moyen démocratique et décentralisé pour identifier une chose de façon unique. Quiconque dispose d'un espace Web peut créer une adresse URI afin de représenter quelque chose (une ressource RDF, cf. précédemment) qui soit directement compréhensible à travers le Web.
Il n'y aura pas forcément une page Web à votre adresse URI, et il est conseillé d'avoir une description lisible par un humain et/ou une machine de ce que l'adresse représente à l'autre bout. N'importe qui peut dire tout et n'importe quoi sur tout, c'est la nature du Web, et aucun contrôle n'est donc possible sur ce que d'autres diront de votre adresse URI. Mais avec une description à cette adresse URI, vous aurez au moins le dernier mot sur ce que vous vouliez qu'elle signifie.
En donnant la même forme à toutes les données et en rendant les choses qu'elles décrivent identifiables de façon unique à travers le Web, RDF accroît la portabilité, l'interopérabilité et l'utilité de votre code et de vos données.
Je disais précédemment qu'on pouvait écrire du RDF de nombreuses façons différentes, et l'une d'elles est eRDF.
C'est un moyen simple d'incorporer des déclarations RDF dans du HTML qui utilise des attributs tels que
id
, class
, rel
et href
de façon spéciale.
Pour écrire du HTML enrichi au eRDF, nous ajoutons en premier un attribut profile
à la balise ouvrante head
:
<head profile="http://purl.org/NET/erdf/profile">
L'attribut profile
est un des attributs HTML les moins connus. Vous pouvez y indiquer une adresse URI
(ou une liste d'adresses URI séparées par des espaces).
Les agents utilisateurs peuvent utiliser ces adresses URI pour déterminer comment extraire les données du document. Dans notre cas, nous l'utilisons pour indiquer que ce document peut être interprété comme eRDF.
Nous déclarons ensuite tous les vocabulaires susceptibles d'être utilisés, en utilisant des éléments link
dans
l'en-tête du document. Nous utiliserons les vocabulaires FOAF
et Dublin Core. FOAF est un vocabulaire courant pour
décrire les personnes et les organisations, Dublin Core est un vocabulaire de métadonnées, fournissant des termes
tels que le titre et la date :
<link rel="schema.dc" href="http://purl.org/dc/elements/1.1/" /> <link rel="schema.foaf" href="http://xmlns.com/foaf/0.1/" />
L'attribut rel
indique à l'interpréteur eRDF que nous utiliserons le préfixe foaf pour nous référer
au vocabulaire FOAF, et le préfixe dc pour le vocabulaire Dublin Core. Nous pourrons alors nous servir de noms de classes
et des attributs rel
et rev
pour décrire les données dans le document en utilisant les termes
de ces vocabulaires. Ces attributs de « style eRDF » prennent la forme @prefix-term@ (si vous êtes programmeur, voyez
le préfixe comme une constante qui représente l'adresse URI du vocabulaire). On peut donner n'importe quel préfixe au
vocabulaire FOAF, mais il semble logique de lui donner le préfixe foaf. (Remarquez que l'attribut href
d'un lien de vocabulaire utilisé doit se terminer soit par un caractère barre oblique « / », soit par un caractère dièse « # »).
Nous pouvons maintenant décrire les informations sur la page à l'aide des termes de ces vocabulaires. Pour exemple, nous allons étiqueter le gabarit des profils de contributeurs de Digital Web :
<div class="vcard -foaf-Person" id="person"> <!-- Nous ajouterons des détails ici ensuite --> </div>
Première chose à noter, nous avons donné un attribut id
à l'élément div
. C'est important. Rappelez-vous,
je disais que RDF utilisait des adresses URI pour élaborer à propos de choses. Et bien, en donnant
à ce div
un identificateur de fragment,
nous lui créons une adresse URI. Si l'adresse URL de la page est
http://www.digital-web.com/about/staff/nick_finck, l'adresse URI de notre profil est alors
http://www.digital-web.com/about/staff/nick_finck#person.
Dans la syntaxe eRDF, le fait que le nom de classe, ici -foaf-Person, commence par un trait d'union indique que ce
nom de classe décrit le type de chose qu'est #person. Cela signifie que la chose représentée par ce div
(#person)
est une personne (tel que définie dans le vocabulaire FOAF).
Vous avez aussi noté le nom de class vcard. Digital Web balise déjà ses profils en utilisant le microformat hCard, mais eRDF peut coexister en paix avec des microformats. Le nom de class vcard n'a aucun effet sur le code eRDF, et vice versa. Ici nous utilisons hCard afin de rendre possible la transformation des données dans le format vCard, et eRDF pour pouvoir extraire l'information brute. Bon, remplissons avec le détail :
<div class="vcard -foaf-Person" id="person"> <h1 class="foaf-name fn n">Nick Finck</h1> <img src="/images/profiles/nick_finck.jpg" alt="Nick Finck" class="foaf-img photo" /> <!-- plus de détails ensuite --> </div>
Le nom de class foaf-name
signifie que le contenu de cet élément (ici l'élément h1
) est le nom
(tel que défini par le vocabulaire FOAF) de ce div#person
,
puisque c'est l'ancêtre le plus proche avec un attribut id
.
En eRDF, où l'élément a un nom de classe de style eRDF (préfixe-terme), l'ancêtre le plus proche
avec un attribut id
est le sujet, le nom de classe est le prédicat et l'objet est :
src
, s'il existe, ou bienid
, ou bientitle
, s'il existe, ou bienAinsi <img src="/images/profiles/nick_finck.jpg" class="foaf-img" /> signifie : « div#person est représenté par l'image trouvée à /images/profiles/nick_finck.jpg ». Bien, ajoutons du balisage :
<div class="vcard -foaf-Person" id="person"> <h1 class="foaf-name fn n">Nick Finck</h1> <img src="/images/profiles/nick_finck.jpg" alt="Nick Finck" class="foaf-img photo" /> <dl> <dt>Birthplace:</dt> <dd class="cv-birthPlace"> Portland, Oregon, United States </dd> <dt>Personal web site/Portfolio:</dt> <dd> <a href="http://www.nickfinck.com/" class="url" rel="foaf-homepage" rev="foaf-maker"> NickFinck.com </a> </dd> </dl> <!-- nous ajouterons les détails de publication ensuite --> </div>
Examinez la définition Personal web site/Portfolio. Nous n'utilisons pas de nom de classe eRDF spécial,
mais nous avons des attributs rel
et rev
de style eRDF. La spécification HTML
indique que l'attribut rel
définit la relation qu'a le document avec l'adresse URL à laquelle
l'attribut est associé, tandis que rev
définit l'inverse, la relation qu'a l'adresse URL associée
à ce document.
Dans la terminologie des triplets RDF, où nous avons un attribut rel
de style eRDF :
id
;rel
(dans ce cas, foaf-homepage
) ;href
.Donc nous disons que notre personne (représentée par div#person
) a une page Web, laquelle est
http://www.nickfinck.com/, et que cette page
a un été fabriquée (maker) par notre #person
.
Voyons maintenant la définition du lieu de naissance (birthplace). FOAF ne possède pas de terme
pour les lieux de naissance, et il nous faut un autre vocabulaire. J'ai cherché le mot-clé « birthplace » sur
SchemaWeb et trouvé le vocabulaire
CV pour décrire les renseignements
d'un curriculum vitae. La définition vérifiée, elle correspond à ce que je veux en faire, et donc si j'ajoute
<link rel="schema.cv" href="http://captsolo.net/semweb/resume/cv.rdfs#"/> dans l'en-tête (<head>
)
du document, je peux utiliser les termes du vocabulaire CV.
Passons à la section des publications. Toujours dans notre div#person
, ça ressemble à ceci :
<h2>Digital Web Articles</h2> <ol> <li class="foaf-made -bib-Article" id="dw-articles-1"> <h2 class="dc-title"> <a href="/articles/industry_transformation/"> The Transformation of an Industry </a> </h2> <p class="date"> Published on <span class="dc-date">May 13, 2004</span> </p> </li> <!-- un tas d'autres articles avec le même balisage --> </ol>
Encore une fois, si nous voulons décrire quelque chose, comme un article, il nous faut lui donner une adresse URI,
c'est-à-dire lui donner un attribut id
dans le HTML. Et nous avons besoin d'un autre vocabulaire qui
fournisse des termes pour décrire cet article. Après avoir à nouveau jeté un oeil sur SchemaWeb, j'ai opté pour le
vocabulaire Bibtex et ajouté
<link rel="schema.bib" href="http://purl.org/net/nknouf/ns/bibtex#"/> à l'élément <head>
du document.
Regardez le li
. Ici nous indiquons que #person
a fabriqué #dw-articles-1
, lequel est un article.
Nous avons également utilisé le vocabulaire Dublin Core (dc
) pour la date de publication et le titre de l'article.
Remarquez que dc-title
et dc-date
sont des propriétés de #dw-articles-1
, et non de #person
,
car #dw-articles-1
est maintenant le plus proche ancêtre avec un id
. Vous savez dès lors comment baliser
un profil et une bibliographie simple. Mais plus encore, vous pouvez utiliser les mêmes techniques pour un balisage descriptif de
ce que vous voulez (des personnes, des lieux, des produits, des concepts abstraits, des structures chimiques, des ,
des événements historiques, de nouveaux articles, de n'importe quoi). Il vous suffit juste de trouver, ou de créer, les termes de
vocabulaires nécessaires. Pour approfondir les choses, vous voudrez peut-être consulter la
spécification eRDF,
qui explique comment écrire du eRDF plus en détails. Félicitations, votre HTML sémantique, quel que soit
son contenu, peut maintenant facilement être interprété en RDF.
Exhibit est un cadre d'applications JavaScript configurable pour fabriquer des présentations de données en petites ou moyennes quantités. Il peut importer du RDF/XML (la syntaxe XML normalisée de RDF) au travers du service Web de Simile qui le traduit dans le format JSON d'Exhibit, lui-même une version de RDF. Fabriquer une application hybride (N.d.T. mashup) est simple :
Vous trouverez d'autres instructions sur l'élaboration d'applications Exhibit sur le Wiki de Simile.
RDF est le langage de base du Web sémantique. Cela veut dire que, par la publication de vos données en RDF sur le Web, par l'utilisation des termes de vocabulaires existants là où c'est possible et par la liaison à d'autres données, vous pouvez augmenter l'utilité des données reliées comme celle des vôtres. Il y a de plus en plus de données RDF disponible sur le Web. Le wiki Linking Open Data en liste quelques sources.
Mais même sans le Web sémantique qui est plus vaste, la flexibilité et la structure uniforme de RDF en font une forme très utile pour tenir vos données. Vous n'avez pas non plus besoin d'attendre que tout le monde le fasse, vous pouvez l'utilisez aujourd'hui.
Keith Alexander est un « accro » du balisage de données qui aime les technologies du Web sémantique, rêver le jour et courir après l'insaisissable « Big Foot ».