Lisez-moi S.V.P. 

W3C

Introduction à RDFa

Rapprocher le Web des hommes du Web des données

Note de groupe de travail du W3C du 14 octobre 2008

Cette version :
http://www.w3.org/TR/2008/NOTE-xhtml-rdfa-primer-20081014/
Dernière version :
http://www.w3.org/TR/xhtml-rdfa-primer/
Version précédente :
http://www.w3.org/TR/2008/WD-xhtml-rdfa-primer-20080620/
Rédacteurs :
Ben Adida, Creative Commons <ben@adida.net>
Mark Birbeck, webBackplane <mark.birbeck@webBackplane.com>

Résumé

Le Web actuel est conçu essentiellement pour une consommation humaine. Et même lorsque des données interprétables font leur apparition sur le Web, elles sont typiquement distribuées dans un fichier séparé, avec un format séparé et une correspondance très limitée entre les versions homme et machine. En conséquence, les navigateurs Web ne peuvent fournir qu'une aide minimale aux humains pour l'analyse et le traitement des données web : les navigateurs voient seulement l'information de présentation. Nous introduisons RDFa, qui fournit un ensemble d'attributs XHTML pour prolonger les données visuelles par des indications intelligibles aux machines (machine-readable). Nous montrons comment exprimer des ensembles de données simples et plus complexes avec RDFa, et en particulier comment transformer le texte et les liens intelligibles aux humains (human-readable) en données intelligibles aux machines sans répéter le contenu.

Ce document n'est qu'une introduction à RDFa. La spécification normative de RDFa se trouve dans [RDFA-SYNTAX].

Statut de ce document

Cette section décrit le statut de ce document au moment de sa publication. D'autres documents peuvent venir le remplacer. On trouvera une liste des publications actuelles du W3C et la dernière révision de ce rapport technique à l'index des rapports techniques du W3C à http://www.w3.org/TR/.

Ce document est une note de groupe de travail produite conjointement par le groupe de travail Semantic Web Deployment [SWD-WG] et le groupe de travail XHTML 2 [XHTML2-WG] du W3C. Ce travail fait partie à la fois de l'activité Semantic Web et de l'activité HTML du W3C. La promotion de ce document au titre de note de groupe de travail a lieu simultanément à la promotion de la spécification de la syntaxe RDFa au titre de recommandation du W3C.

Cette version de l'introduction à RDFa contient des changements rédactionnels mineurs par rapport à la version précédente ainsi qu'une brève section supplémentaire (section 4.1) fournissant des pointeurs pour ceux qui souhaitent créer de nouveaux vocabulaires de relations. Les changements sont détaillés dans un document des différences. Les groupes de travail ont reçus des suggestions dans le sens d'étendre ce document et ils le feront peut-être dans le futur mais sans engagement de leur part.

Les remarques à propos de cette note de groupe de travail sont les bienvenues et doivent être envoyées à public-rdf-in-xhtml-tf@w3.org ; veuillez inclure la mention « comment » dans la ligne de sujet. Tous les messages reçus à cette adresse apparaissent dans une archive publique.

La publication en tant que note de groupe de travail n'implique pas une approbation par les membres du W3C. Ce document est une ébauche qui peut être mise à jour, remplacée ou rendue obsolète par d'autres documents à tout instant. Il n'est pas approprié de citer ce document comme étant autre chose qu'un travail en cours.

Ce document a été produit par des groupes agissant sous couvert de la politique de brevet du W3C du 5 février 2004. Le W3C tient une liste publique des divulgations de brevet effectuées en rapport avec les produits livrables du groupe de travail XHTML 2 et une autre liste publique des divulgations de brevet effectuées en rapport avec les produits livrables du groupe de travail Semantic Web Deployment ; ces pages contiennent également des instructions pour divulguer un brevet. Quiconque a connaissance réelle d'un brevet qu'il estime contenir des revendications essentielles doit divulguer cette informations conformément à la section 6 de la politique de brevet du W3C.

Table des matières


1 Introduction

Le Web est un annuaire (repository) riche et réparti d'informations interconnectées, organisé principalement pour une consommation humaine. Dans une page web typique, un auteur XHTML peut indiquer un gros titre (headline), puis un sous-titre plus petit, un bloc de texte en italiques, quelques paragraphes dans un texte de corps moyen et enfin quelques liens d'un seul mot. Les navigateurs suivront fidèlement ces instructions de présentation. Toujours est-il que seul un esprit humain comprend que la manchette est en fait le titre du billet de blogue, que le sous-titre indique l'auteur, que le texte en italiques est la date de publication de l'article et que les liens d'un seul mot sont des étiquettes de catégorisation. Le fossé est grand entre ce que les programmes et les hommes comprennent.

À gauche ce que voient les navigateurs, à droite ce que voient les humains. Pouvons-nous combler le fossé, que les navigateurs voient plus de ce que nous voyons ?
Présentation contre sémantique

Et si le navigateur recevait des informations sur la signification des éléments visuels d'une page web ? L'annonce d'une soirée sur un blogue pourrait être facilement copiée dans le calendrier de l'utilisateur, les coordonnées complètes de l'auteur dans un carnet d'adresses. Les utilisateurs pourraient automatiquement rappeler des articles vus précédemment selon des étiquettes de catégorisation — souvent appelés des catégories (tags). Une photo copiée et collée d'un site web dans un devoir d'école comporterait un lien en retour vers le photographe, lui en attribuant la vrai paternité. Lorsque des données web destinées aux humains sont augmentées d'indications destinées aux programmes informatiques, ces programmes informatiques deviennent beaucoup plus utiles, car ils commencent à comprendre la structure des données.

RDFa permet précisément aux auteurs XHTML de le faire. Avec quelques attributs XHTML simples, les auteurs XHTML peuvent baliser des données intelligibles aux humains avec des indicateurs intelligibles aux machines qui seront interprétés par les navigateurs et d'autres programmes. Une page web peut contenir du balisage pour des éléments aussi simples que le titre d'un article, ou aussi complexes que le réseau social complet d'un utilisateur.

RDFa profite de toute la puissance de RDF [RDF], le standard du W3C pour les données intelligibles aux machines interopérables. Toutefois, les lecteurs de ce document ne sont pas censés comprendre RDF mais censés avoir une connaissance de base de XHTML.

1.1 HTML contre XHTML

À ce jour, puisque XHTML est extensible et non HTML, RDFa n'est spécifié que pour XHTML 1.1. Les éditeurs web peuvent très bien utiliser du balisage RDFa dans HTML4 : la conception de RDFa prévoit ce cas d'utilisation, et la plupart des analyseurs RDFa reconnaîtront les attributs RDFa dans n'importe quelle version de HTML. Les auteurs ne connaissent pas de navigageurs web qui failliraient dans la présentation attendue d'un document HTML suite à l'ajout d'un balisage RDFa. Toutefois, les éditeurs devrait avoir conscience que le RDFa n'est pas valide dans HTML 4 à ce moment. Les attributs RDFa sont valides en XHTML en utilisant la définition DTD XHTML1.1+RDFa.

2 Assaisonner XHTML

Prenons l'exemple d'Alice, une blogueuse qui publie un mélange d'articles professionnels et personnels à http://example.com/alice. Nous construirons des exemples de balisage pour illustrer comment Alice peut utiliser RDFa. Le balisage complet de ces exemples est visible à part.

2.1 Licencier son travail

Dans le pied de page de son blogue, Alice déclare que son contenu est réutilisable librement, tant que la paternité des articles lui est attribuée si on les cite. Le code XHTML inclut un lien vers une licence Creative Commons [CC] :

...
All content on this site is licensed under
<a href="http://creativecommons.org/licenses/by/3.0/">
    a Creative Commons License
</a>.

Une personne comprend clairement cette phrase, en particulier la signification du lien par rapport au document courant : il indique la licence du document, les conditions sous lesquelles le contenu de la page est distribué. Malheureusement, quand Bob visite le blog d'Alice, son navigateur n'y voit qu'un lien ordinaire qui pourrait tout aussi bien pointer vers l'un des amis d'Alice ou vers son curriculum vitae. Pour que le navigateur de Bob comprenne que ce lien pointe en réalité vers les conditions de licence du document, Alice doit ajouter une saveur (flavor), une indication de la sorte de lien dont il s'agit.

Elle peut ajouter cette saveur en utilisant l'attribut rel (que nous écrirons @rel pour éviter de trop répéter le mot « attribut »), lequel définit la relation entre la page courante et la page liée. La valeur de l'attribut est license, un mot-clé XHTML réservé justement à cet usage :

...
All content on this site is licensed under
<a rel="license" href="http://creativecommons.org/licenses/by/3.0/">
    a Creative Commons License
</a>.

Avec cette petite modification, le navigateur de Bob comprendra désormais que ce lien a une saveur : il indique la licence du blogue.

Une lien avec une saveur : le lien indique la licence de la page web. Nous pouvons représenter les pages web par des nœuds, le lien par une flèche connectant ces nœuds, et la saveur du lien par l'étiquette sur cette flèche.
Deux pages web connectées par un lien étiqueté « licence » et deux notes avec une relation 'license'

2.2 Indiquer le titre et l'auteur

Alice est ravie que le fait d'ajouter une saveur XHTML permette à Bob de trouver si facilement la licence de droits d'auteur de son travail. Mais pour le titre de l'article et le nom de l'auteur ? Ici, au lieu de faire un lien, Alice veut augmenter le texte existant au sein de la page. Le titre est un gros titre et son nom un sous-titre :

<div>
   <h2>The trouble with Bob</h2>
   <h3>Alice</h3>
   ...
</div>

Pour indiquer que h2 représente le titre de la page et h3 l'auteur, Alice utilise @property, un attribut introduit par RDFa dans le but spécifique de marquer le texte existant dans une page XHTML.

<div xmlns:dc="http://purl.org/dc/elements/1.1/">
   <h2 property="dc:title">The trouble with Bob</h2>
   <h3 property="dc:creator">Alice</h3>
   ...
</div>

Pourquoi employer dc:creator et dc:title, plutôt que simplement creator et title ? Il s'avère que XHTML n'a pas de mots-clés réservés pour ces deux concepts. Alice pourrait effrontément choisir d'écrire property="title", mais à le lire comment un programme sait si "title" se rapporte ici à un document, une profession ou un acte de propriété ? Et, si tous les éditeurs web déposaient leurs propres mots-clés courts, le monde des propriétés disponibles deviendrait plutôt embrouillé, un peu comme de sauvegarder tous les fichiers sur le bureau d'un ordinateur sans une structure de répertoires pour les organiser.

Afin de respecter un mode d'organisation, RDFa ne reconnaît pas property="title". À la place, Alice doit indiquer un répertoire quelque part sur le Web, en utilisant simplement une adresse URL, d'où importer les concepts de créateur et de titre spécifiques qu'elle entend exprimer. Par chance, la communauté Dublin Core [DC] a déjà défini un vocabulaire de concepts utiles pour décrire les documents, dont creator et title, où title veut en effet dire le titre d'un document. Donc Alice :

  1. importe le vocabulaire Dublin Core en utilisant xmlns:dc="http://purl.org/dc/elements/1.1/", qui associe le préfixe dc à l'adresse URL http://purl.org/dc/elements/1.1/, et ;
  2. utilise dc:creator et dc:title. Ce sont deux raccourcis pour les adresses URL complètes http://purl.org/dc/elements/1.1/creator et http://purl.org/dc/elements/1.1/title.

En RDFa, tous les noms de propriété sont en fait des adresses URL.

Propriétés littérales : RDFa laisse Alice connecter non seulement une adresse URL à une autre — par exemple, l'adresse URL de l'entrée de son blogue à celle de la licence Creative Commons — mais aussi connecter une adresse URL à une chaîne telle que "The Trouble with Bob". Toutes les flèches sont étiquetées du nom de la propriété correspondante, qui est aussi une adresse URL.
La valeur de relation est du texte

2.3 Plusieurs articles par page

Le blog d'Alice contient bien sûr plusieurs articles. Parfois, Eve la sœur d'Alice participe aussi. La page d'accueil du blogue liste les dix entrées les plus récentes, chacune avec ses propres titre, auteur et paragraphe d'introduction. Comment donc Alice pourrait-elle marquer individuellement le titre de chacune de ces entrées alors que toutes apparaissent dans la même page web ? RDFa fournit @about, un attribut pour spécifier l'adresse URL exacte à laquelle le balisage RDFa contenu s'applique :

<div xmlns:dc="http://purl.org/dc/elements/1.1/">

   <div about="/alice/posts/trouble_with_bob">
      <h2 property="dc:title">The trouble with Bob</h2>
      <h3 property="dc:creator">Alice</h3>
      ...
   </div>

   <div about="/alice/posts/jos_barbecue">
      <h2 property="dc:title">Jo's Barbecue</h2>
      <h3 property="dc:creator">Eve</h3>
      ...
   </div>

   ...

</div>

Nous pouvons à nouveau le représenter par un diagramme connectant des adresses URL à des propriétés :

Plusieurs articles par page : chaque entrée de blogue est représentée par son propre nœud, avec des propriétés attachées. Ici nous avons utilisé les raccourcis pour étiqueter les flèches, afin d'économiser de la place et d'éclaircir le diagramme. Les étiquettes réelles sont toujours les adresses URL complètes.
Deux nœuds séparés, chacun avec deux propriétés.

Alice peut employer la même technique pour attribuer la véritable paternité des photos à son ami Bob lorsqu'elle en publie une :

   <div about="/alice/posts/trouble_with_bob">
      <h2 property="dc:title">The trouble with Bob</h2>
      
      The trouble with Bob is that he takes much better photos than I do:

      <div about="http://example.com/bob/photos/sunset.jpg">
        <img src="http://example.com/bob/photos/sunset.jpg" />
        <span property="dc:title">Beautiful Sunset</span>
        by <span property="dc:creator">Bob</span>.
      </div>
   </div>

Notez comment la valeur @about la plus intérieure, à savoir http://example.com/bob/photos/sunset.jpg, « surclasse » la valeur extérieure /alice/posts/trouble_with_bob pour tout le balisage dans le div interne. Et, encore une fois, comme un diagramme représentant de manière abstraite les données sous-jacentes dans cette nouvelle portion de balisage :

Décrire une photo
Un seul nœud avec des propriétés creator et title

3 Approfondir

En outre, Alice veut faciliter la récupération des renseignements la concernant (adresse électronique, numéro de téléphone, etc.) par les logiciels de gestion de contacts de ses amis. Cette fois-ci, au lieu de décrire les propriétés d'une page web, elle va décrire les propriétés d'une personne : elle-même. Pour cela, elle ajoute une structure plus profonde, afin de pouvoir connecter plusieurs articles (items) qui ont eux-mêmes des propriétés.

3.1 Coordonnées

Alice a déjà des coordonnées affichées sur son blogue.

<div>
   <p>
     Alice Birpemswick
   </p>

   <p>
     Email: <a href="mailto:alice@example.com">alice@example.com</a>
   </p>
   
   <p>
     Phone: <a href="tel:+1-617-555-7332">+1 617.555.7332</a>
   </p>

</div>

Le vocabulaire Dublin Core ne fournit pas de noms de propriété pour décrire des coordonnées, mais le vocabulaire Friend of a Friend [FOAF] si. En RDFa, il est courant et facile de mêler des vocabulaires différents dans une seule page. Alice importe le vocabulaire FOAF et déclare une personne (foaf:Person). Pour cela, Alice utilise @typeof, un attribut RDFa prévu spécifiquement pour déclarer une nouvelle donnée d'un certain type :

<div typeof="foaf:Person" xmlns:foaf="http://xmlns.com/foaf/0.1/">
...

Alice peut alors indiquer quel contenu dans la page représente son nom entier, son adresse électronique et son numéro de téléphone :

<div typeof="foaf:Person" xmlns:foaf="http://xmlns.com/foaf/0.1/">
   <p property="foaf:name">
     Alice Birpemswick
   </p>

   <p>
     Email: <a rel="foaf:mbox" href="mailto:alice@example.com">alice@example.com</a>
   </p>
   
   <p>
     Phone: <a rel="foaf:phone" href="tel:+1-617-555-7332">+1 617.555.7332</a>
   </p>
</div>

Notez qu'Alice n'a pas spécifié @about comme elle l'avait fait pour ajouter les métadonnées d'une entrée de blogue. Alors à quoi associe-t-elle ces propriétés ? En fait, l'attribut @typeof du div englobant établit implicitement le sujet des propriétés marquées dans ce div. Le nom, l'adresse électronique et le numéro de téléphone sont associés à un nouveau nœud de type foaf:Person. Ce nœud n'a pas d'adresse URL qui l'identifie, c'est pourquoi on l'appelle un nœud anonyme (blank node).

Un nœud anonyme : les nœuds anonymes ne sont pas identifiés par une adresse URL. À la place, beaucoup ont un attribut @typeof identifiant le type de données qu'ils représentent. Cette approche — ne pas fournir de nom mais ajouter un type — est particulièrement utile pour lister les éléments sur une page, par exemple, les événements d'un calendrier, les auteurs dans un article, les amis d'un réseau social, etc.
Un seul nœud 'anonyme' avec quatre propriétés

3.2 Réseau social

Alice veut ensuite ajouter des informations à propos de ses amis, dont au moins leurs noms et pages d'accueil. Son code XHTML brut est le suivant :

<div>
   <ul>
      <li>
        <a href="http://example.com/bob/">Bob</a>
      </li>
      <li>
        <a href="http://example.com/eve/">Eve</a>
      </li>
      <li>
        <a href="http://example.com/manu/">Manu</a>
      </li>
   </ul>
</div>

D'abord, Alice indique que tous ces amis sont du type foaf:Person :

<div xmlns:foaf="http://xmlns.com/foaf/0.1/">
   <ul>
      <li typeof="foaf:Person">
        <a href="http://example.com/bob/">Bob</a>
      </li>
      <li typeof="foaf:Person">
        <a href="http://example.com/eve/">Eve</a>
      </li>
      <li typeof="foaf:Person">
        <a href="http://example.com/manu/">Manu</a>
      </li>
   </ul>
</div>

Hormis la déclaration du type des données que nous traitons, chaque @typeof crée un nouveau nœud anonyme avec ses propres propriétés distinctes, tout ça sans avoir à fournir d'identificateurs URL. Alice peut donc indiquer aisément la page d'accueil de chaque ami :

<div xmlns:foaf="http://xmlns.com/foaf/0.1/">
   <ul>
      <li typeof="foaf:Person">
        <a rel="foaf:homepage" href="http://example.com/bob/">Bob</a>
      </li>
      <li typeof="foaf:Person">
        <a rel="foaf:homepage" href="http://example.com/eve/">Eve</a>
      </li>
      <li typeof="foaf:Person">
        <a rel="foaf:homepage" href="http://example.com/manu/">Manu</a>
      </li>
   </ul>
</div>

Et bien sûr le nom de chaque ami :

<div xmlns:foaf="http://xmlns.com/foaf/0.1/">
   <ul>
      <li typeof="foaf:Person">
        <a property="foaf:name" rel="foaf:homepage" href="http://example.com/bob/">Bob</a>
      </li>
      <li typeof="foaf:Person">
        <a property="foaf:name" rel="foaf:homepage" href="http://example.com/eve/">Eve</a>
      </li>
      <li typeof="foaf:Person">
        <a property="foaf:name" rel="foaf:homepage" href="http://example.com/manu/">Manu</a>
      </li>
   </ul>
</div>

En utilisant @property, Alice spécifie que les textes liés ("Bob", "Eve" et "Manu") sont en fait les noms de ses amis. Avec @rel, elle indique que les liens cliquables sont les pages d'accueil de ses amis. Alice est ravie, avec si peu de balisage en plus, de pouvoir entièrement exprimer à la fois une page agréable intelligible aux humains et un ensemble de données intelligible aux machines.

Alice est lasse d'avoir à constamment saisir des renseignements à propos de ses amis pour chaque nouveau site de réseautage social. Avec RDFa, elle peut indiquer ses amitiés sur sa propre page web et laisser les applications de réseautage social les lire automatiquement. Jusqu'ici, Alice a listé trois personnes mais n'a pas spécifié la relation qu'elle entretient avec elles ; est-ce que ce sont ses amis ou ses poètes du 17ème siècle favoris. Pour indiquer en fait qu'elle les connaît, elle utilise la propriété FOAF foaf:knows :

<div xmlns:foaf="http://xmlns.com/foaf/0.1/" about="#me" rel="foaf:knows">
   <ul>
      <li typeof="foaf:Person">
        <a property="foaf:name" rel="foaf:homepage" href="http://example.com/bob">Bob</a>
      </li>
      <li typeof="foaf:Person">
        <a property="foaf:name" rel="foaf:homepage" href="http://example.com/eve">Eve</a>
      </li>
      <li typeof="foaf:Person">
        <a property="foaf:name" rel="foaf:homepage" href="http://example.com/manu">Manu</a>
      </li>
   </ul>
</div>

Il suffit d'employer rel="foaf:knows" une seule fois pour connecter Bob, Eve et Manu à Alice. On y parvient grâce au concept RDFa de chaînage (chaining) : comme l'attribut @rel au niveau supérieur n'a pas d'attribut @href correspondant, il se connecte à tout nœud contenu, ici les trois nœuds définis par @typeof. (Le @about="#me" est une convention FOAF/RDF : l'adresse URL qui représente la personne Alice est http://example.com/alice#me. On ne devrait pas la confondre avec la page d'accueil d'Alice http://example.com/alice. Vous êtes ce que vous mangez mais vous êtes bien plus que juste votre page web).

Le réseau social d'Alice
Réseau de huit nœuds avec douze relations

4 Vous avez dit RDF ?

RDF (Resource Description Framework) est exactement la représentation des données abstraites que nous avons dessinées par des graphes dans les exemples précédents. Chaque flèche dans le graphe est représentée comme un triplet sujet-prédicat-objet : le sujet est le nœud au départ de la flèche, le prédicat est la flèche même et l'objet est le nœud ou le littéral à l'arrivée de la flèche. Un ensemble de données RDF (RDF dataset) est souvent appelé un graphe RDF (RDF graph), qui est typiquement stocké dans ce qu'on appelle souvent un « dépôt de triplets » (triple store).

Prenons le premier graphe d'exemple :

Un seul nœude avec deux propriétés.

Les deux triplets RDF de ce graphe s'écrivent, en utilisant la syntaxe Notation3 [N3], comme suit :

<http://www.example.com/alice/posts/trouble_with_bob>
    <http://purl.org/dc/elements/1.1/title> "The Trouble with Bob";
    <http://purl.org/dc/elements/1.1/creator> "Alice" .      

Également, les flèches de type que nous traçons ne sont pas différentes d'autres flèches, seule leur étiquette est en fait une propriété RDF de base, rdf:type, où l'espace de noms rdf est <http://www.w3.org/1999/02/22-rdf-syntax-ns#>. Le diagramme de l'exemple des coordonnées ci-dessus devrait donc être le suivant :

Un nœud anonyme avec rdf:type foaf:Person

Le point de RDF est de fournir un langage universel pour exprimer les données. Une unité de données peut avoir plusieurs champs et les noms des champs sont des adresses URL réutilisables par n'importe quel éditeur, un peu comme un éditeur web peut lier à une page web, mêmes celles qu'il n'a pas créé lui-même. Avec les données, sous forme de triplets RDF, recueillies à des adresses diverses et en utilisant le langage d'interrogation RDF SPARQL [SPARQL], on peut rechercher les « amis d'Alice qui ont créé des articles dont le titre contient le mot "Bob" », que ces articles soient des billets de blogue, des vidéos, des événements de calendrier ou d'autres types de données dont nous n'avons pas encore idée.

RDF est une représentation abstraite de données, intelligible aux machines, conçue pour maximiser la réutilisation des vocabulaires. RDFa est une façon d'exprimer des données RDF au sein de XHTML, qui réutilise les données intelligibles aux humains existantes.

4.1 Vocabulaires personnalisés

En balisant sa page avec RDFa, Alice découvrira peut-être qu'elle a besoin d'exprimer des données, par exemple ses photos favorites, qui ne sont pas couvertes par des vocabulaires existants comme le Dublin Core ou FOAF. Puisque RDFa est simplement une représentation de RDF, le mécanisme de schéma RDF qui permet l'extensibilité de RDF est le même permettant l'extensibilité de RDFa. Une fois créé le vocabulaire RDF, on peut l'utiliser dans un balisage RDFa de la même façon que les vocabulaires existants.

Les instructions pour créer un schéma RDF sont disponibles à la section 5 de l'introduction à RDF [RDF-SCHEMA-PRIMER]. À un niveau supérieur, la création d'un schéma RDF pour RDFa implique :

  1. La sélection d'une adresse URL où se tiendra le vocabulaire, par exemple http://example.com/photos/vocab# ;
  2. La distribution d'un document RDF, à cette adresse URL, qui définit les classes et les propriétés constituant le vocabulaire. Par exemple, Alice voudra peut-être définir les classes Photo et Camera ainsi que la propriété takenWith reliant une photo à l'appareil avec lequel elle a été prise ;
  3. L'utilisation du vocabulaire dans XHTML+RDFa avec le mécanisme habituel de déclaration de préfixe, par exemple xmlns:photo="http://example.com/photos/vocab#" et typeof="photo:Camera".

Il est intéressant de noter que toute personne pouvant publier un document sur le Web peut publier un vocabulaire RDF, et donc définir les nouveaux champs de données qu'elle veut exprimer. RDF et RDFa permettent une extensibilité des vocabulaires entièrement répartie.

5 Aller plus loin

On trouvera des exemples, des liens vers des outils et des renseignements pour participer sur le wiki RDFa.

6 Remerciements

Ce document est le produit du groupe d'étude RDF-in-HTML, comprenant (en ordre alphabétique) Ben Adida, Mark Birbeck, Jeremy Carroll, Michael Hausenblas, Shane McCarron, Steven Pemberton, Manu Sporny, Ralph Swick et Elias Torres. Ce travail n'aurait pas été possible sans l'aide du groupe de travail Semantic Deployment et son incarnation précédente le groupe de travail Semantic Web Deployment and Best Practices, notamment les présidents Tom Baker et Guus Schreiber (et l'ancien président David Wood), le groupe de travail XHTML 2, Eric Miller, l'ancien chef de l'activité Semantic Web, et Ivan Herman, le chef actuel de l'activité Semantic Web. Les versions précédentes de ce document ont été officiellement corrigées par Gary Ng et David Booth, et les versions plus récentes par Diego Berrueta et Ed Summers, les commentaires de chacun ayant contribué à l'amélioration significative du travail. Bob DuCharme a également revu le travail et fait des remarques utiles.

7 Bibliographie

RDFA-SYNTAX
RDFa dans XHTML — Syntaxe et traitement (cf. http://www.w3.org/TR/rdfa-syntax)
CC
Creative Commons (cf. http://creativecommons.org)
DC
Dublin Core Metadata Initiative (cf. http://dublincore.org)
FOAF
Le projet Friend of a Friend (FOAF) (cf. http://www.foaf-project.org/)
N3
Notation 3 (cf. http://www.w3.org/TeamSubmission/n3/)
RDF
Resource Description Framework (cf. http://www.w3.org/RDF/)
RDFHTML
Groupe d'étude RDF-in-HTML (cf. http://www.w3.org/2001/sw/BestPractices/HTML/)
RDF-SCHEMA-PRIMER
Introduction à RDF, section 5 à propos du schéma RDF (cf. http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#rdfschema)
SWD-WG
Groupe de travail Semantic Web Deployment (cf. http://www.w3.org/2006/07/SWD/)
SWBPD-WG
Groupe de travail Semantic Web Best Practices and Deployment (cf. http://www.w3.org/2001/sw/BestPractices/)
SPARQL
Langage d'interrogation SPARQL pour RDF (cf. http://www.w3.org/TR/rdf-sparql-query/)
XHTML2-WG
Groupe de travail XHTML 2 (cf. http://www.w3.org/MarkUp/)

Changements

La version précédente de ce document a fait l'objet d'une récriture importante pour la clarté et la simplicité. Cette version inclut seulement quelques mises à jours :