I. Introduction▲
La nouvelle version de RDFa (RDF in attributes) s'oriente plus vers d'autres formats que le XHTML (seule utilisation prévue dans RDFa 1.0) : une spécification est disponible pour XHTML 1.1, mais aussi une autre pour HTML5. Depuis l'utilisation de RDFa dans OpenDocument, ses concepteurs ont pris conscience que RDFa pouvait être utilisé bien ailleurs que ce pour quoi il était prévu.
Cette nouvelle version est prévue pour être aussi compatible que possible avec la 1.0, mais cela n'est pas toujours le cas.
II. Séparation du Core▲
Un des plus gros changements est que la spécification est divisée en deux parties : le Core et les adaptations aux différents langages (XHTML 1.1 et HTML5). Il n'y a plus une seule spécification, mais bien un ensemble.
Quel avantage ? On peut maintenant adapter RDFa à d'autres langages de manière propre : RDFa ne se limite plus au XHTML, il s'ouvre dès ses premiers pas dans la version 1.1 à une multitude d'usages divers et variés.
III. Vocabulaires par défaut▲
Il ne sera plus nécessaire de spécifier l'espace de noms de chaque élément : la propriété vocab en définit un par défaut.
En RDFa 1.0, on devait spécifier cet espace de noms :
<div xmlns
:
foaf
=
"http://xmlns.com/foaf/0.1/"
about
=
"#me"
rel
=
"foaf:knows"
>
<ul>
<li typeof
=
"foaf:Person"
><a rel
=
"foaf:homepage"
property
=
"foaf:name"
href
=
"http://aurore.name/"
>
Aurore</a></li>
<li typeof
=
"foaf:Person"
><a rel
=
"foaf:homepage"
property
=
"foaf:name"
href
=
"http://johan-is-my-name.com/"
>
Johan</a></li>
<li typeof
=
"foaf:Person"
><a rel
=
"foaf:homepage"
property
=
"foaf:name"
href
=
"http://isp.net/websites/mywebsitehasnoname/"
>
Aurélie</a></li>
</ul>
</div>
Avec la 1.1, la propriété vocab remplace ces disgracieuses répétitions :
<div vocab
=
"http://xmlns.com/foaf/0.1/"
about
=
"#me"
rel
=
" knows"
>
<ul>
<li typeof
=
"Person"
><a rel
=
"homepage"
property
=
"name"
href
=
"http://aurore.name/"
>
Aurore</a></li>
<li typeof
=
"Person"
><a rel
=
"homepage"
property
=
"name"
href
=
"http://johan-is-my-name.com/"
>
Johan</a></li>
<li typeof
=
"Person"
><a rel
=
"homepage"
property
=
"name"
href
=
"http://isp.net/websites/mywebsitehasnoname/"
>
Aurélie</a></li>
</ul>
</div>
Évidemment, l'effet de cette propriété se limite à ce div, à moins d'être surchargée dans une autre balise.
Ce n'est pas parce qu'on utilise un vocabulaire par défaut qu'on doit se restreindre à ce vocabulaire ! On peut évidemment utiliser d'autres espaces de noms, celui par défaut ne sera utilisé que pour les termes non définis dans ces espaces.
Pour garder une certaine compatibilité avec RDFa 1.0, cette fonctionnalité est cependant à éviter.
IV. Documents de profil▲
Avec ce raccourci, il devient difficile d'utiliser facilement plusieurs vocabulaires. À moins qu'un autre outil ne vienne à la rescousse : les documents de profil. Il s'agit de simples documents RDF qui décrivent les correspondances entre les termes et les URI.
Avant, on aurait écrit ceci :
<div xmlns
:
foaf
=
"http://xmlns.com/foaf/0.1/"
xmlns
:
dc
=
"http://purl.org/dc/elements/1.1/"
about
=
"#me"
rel
=
"foaf:knows"
>
<ul>
<li typeof
=
"foaf:Person"
><a rel
=
"foaf:homepage"
property
=
"foaf:name"
href
=
"http://aurore.name/"
>
Aurore</a></li>
<li typeof
=
"foaf:Person"
><a rel
=
"foaf:homepage"
property
=
"foaf:name"
href
=
"http://johan-is-my-name.com/"
>
Johan</a></li>
<li typeof
=
"foaf:Person"
><a rel
=
"foaf:homepage"
property
=
"foaf:name"
href
=
"http://isp.net/websites/mywebsitehasnoname/"
>
Aurélie</a></li>
</ul>
<p>
Data published by <span property
=
"dc:creator"
>
me</span>
</p>
</div>
En utilisant un document de profil comme celui-ci, on bénéficiera de raccourcis de syntaxe (ici, il est écrit en Turtle, mais tout autre format de sérialisation convient) :
@prefix
rdfa
:
<http://www.w3.org/ns/rdfa#>
[]
rdfa
:
uri "http://xmlns.com/foaf/0.1/Person"
;
rdfa
:
term "Person"
.
[]
rdfa
:
uri "http://xmlns.com/foaf/0.1/homepage"
;
rdfa
:
term "homepage"
.
[]
rdfa
:
uri "http://xmlns.com/foaf/0.1/name"
;
rdfa
:
term "name"
.
[]
rdfa
:
uri "http://purl.org/dc/elements/1.1/creator"
;
rdfa
:
term "creator"
.
On peut donc réécrire l'exemple comme ceci :
<div profile
=
"http://example.com/profile.ttl"
about
=
"#me"
rel
=
"foaf:knows"
>
<ul>
<li typeof
=
"Person"
><a rel
=
"homepage"
property
=
"name"
href
=
"http://aurore.name/"
>
Aurore</a></li>
<li typeof
=
"Person"
><a rel
=
"homepage"
property
=
"name"
href
=
"http://johan-is-my-name.com/"
>
Johan</a></li>
<li typeof
=
"Person"
><a rel
=
"homepage"
property
=
"name"
href
=
"http://isp.net/websites/mywebsitehasnoname/"
>
Aurélie</a></li>
</ul>
<p>
Data published by <span property
=
"creator"
>
me</span>
</p>
</div>
On peut spécifier plusieurs profils à chaque fois, chaque document de profil peut utiliser toutes les possibilités du format de sérialisation sous-jacent ; à nouveau, si un nouvel ensemble de profils est défini pour une balise enfant, cet ensemble remplacera pour les balises enfant l'ensemble précédemment défini. On ne peut indiquer que des URI à cet endroit.
Pour garder une certaine compatibilité avec RDFa 1.0, cette fonctionnalité est à éviter.
IV-A. Comparaison avec les microdonnées (microdata)▲
Le grand avantage ? RDFa devient plus simple à utiliser, plus court à écrire, surtout si la grande majorité des prédicats utilisés appartient à un seul et même vocabulaire (on peut définir un tel profil directement dans body dans ce cas). Il n'y a plus grande différence avec la version en microdonnées (mais ces microdonnées sont spécifiques à HTML5) - on peut même utiliser plusieurs vocabulaires sans se tracasser. Cette nouvelle version de RDFa veut simplifier les cas les plus simples - aussi les plus fréquents.
<div itemscope itemtype
=
"http://www.data-vocabulary.org/Person/"
>
<ul>
<li><a rel
=
"friend"
href
=
"http://aurore.name/"
>
Aurore</a></li>
<li><a rel
=
"homepage"
href
=
"http://johan-is-my-name.com/"
>
Johan</a></li>
<li><a rel
=
"friend"
href
=
"http://isp.net/websites/mywebsitehasnoname/"
>
Aurélie</a></li>
</ul>
</div>
On remarque cependant que RDFa est toujours beaucoup plus proche de RDF que les microdonnées.
IV-B. Profil par défaut▲
RDFa 1.1 devrait définir un profil par défaut, soit un petit ensemble de vocabulaires communs, prédéfinis pour chaque document par la spécification. En d'autres termes, il n'y aura pas besoin de définir de préfixe pour ces vocabulaires. Ils ne sont cependant pas encore définis dans la norme. On attend évidemment que ces vocabulaires ne changent pas énormément et qu'ils ne soient pas retirés d'un jour à l'autre de la norme.
V. CURIE▲
Une autre manière d'indiquer les préfixes est maintenant préférée aux espaces de noms XML : @prefix. En effet, si RDFa est utilisé dans d'autres contextes que ceux pour lesquels il était à l'origine prévu, il est possible qu'il y ait des conflits.
On peut ainsi réécrire le premier exemple :
<div prefix
=
"foaf: http://xmlns.com/foaf/0.1/"
about
=
"#me"
rel
=
"foaf:knows"
>
<ul>
<li typeof
=
"foaf:Person"
><a rel
=
"foaf:homepage"
property
=
"foaf:name"
href
=
"http://aurore.name/"
>
Aurore</a></li>
<li typeof
=
"foaf:Person"
><a rel
=
"foaf:homepage"
property
=
"foaf:name"
href
=
"http://johan-is-my-name.com/"
>
Johan</a></li>
<li typeof
=
"foaf:Person"
><a rel
=
"foaf:homepage"
property
=
"foaf:name"
href
=
"http://isp.net/websites/mywebsitehasnoname/"
>
Aurélie</a></li>
</ul>
</div>
Pour garder une compatibilité avec RDFa 1.0, il est conseillé d'utiliser en parallèle les deux mécanismes : définir des préfixes et des espaces de noms XML.
Toujours au sujet des CURIE, elles ne sont plus requises partout, elles peuvent maintenant toujours être remplacées au profit d'URI. Cependant, pour garder la compatibilité avec RDFa 1.0, il vaut mieux l'éviter.
VI. Références▲
- RDFa Core 1.1: Syntax and processing rules for embedding RDF through attributes.
- RDFa 1.1 Drafts.
- RDFa 1.1 with a rich snippet example.
Les exemples sont repris en grande partie de Web sémantique : introduction au RDFa.
VI-A. Remerciements▲
Merci à Demazy Mbella pour sa relecture orthographique, ainsi qu'à Claude Leloup, Jacques Thery et Maxime Gault pour leurs compléments !