documents

RDF pour nous autres

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.

Qu'est-ce que RDF ?

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 pour les éditeurs 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 ?

RDF pour les développeurs Web

Il y a deux choses à propos de RDF qui rendent son utilisation vraiment agréable pour les développeurs Web.

Toutes les données RDF ont la même forme

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.

Qu'est-ce qu'un triplet RDF ?

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 ».

RDF utilise des adresses URI

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.

Comment l'utiliser

Publier des données dans votre HTML avec eRDF

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.

Comment lire le eRDF

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 :

Ainsi <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 :

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.

Utiliser RDF : une application hybride RDF simple avec Exhibit

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 :

  1. Copiez-collez (et personnalisez si besoin) ce modèle-ci ;
  2. Éditez les éléments <link rel="exhibit/data" /> afin qu'ils pointent vers les données à utiliser, où qu'elles se trouvent sur le Web ;
  3. Chargez la page dans votre navigateur. Ça y est.

Vous trouverez d'autres instructions sur l'élaboration d'applications Exhibit sur le Wiki de Simile.

Conclusion

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.

Liens utiles

Outils

Données

Plus d'informations

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 ».

© 1999-2008 yoyodesign.org — Certains droits réservés