RDFAoût, votre feuilleton de l'été : pendant un mois, 2 billets par semaine sur le RDFa, à l'attention des lecteurs connaissant déjà le HTML.

Notions abordées dans ce billet : classes, rdf:type, SIOC, CURIE...

En tant que rencontre entre un langage XML et le RDF, le RDFa ne pouvait être que verbeux. Nous allons voir aujourd'hui trois particularités syntaxiques permettant d'alléger le code.

Du RDF avec classe(s)

Nous savons identifier les ressources avec des URI et leur attribuer des propriétés avec le RDF. La propriété RDF la plus puissante (et probablement la plus utilisée) est celle permettant de typer une ressource avec une classe : http://www.w3.org/1999/02/22-rdf-syntax-ns#type.

Par exemple, nous pouvons utiliser cette propriété conjointement avec un URI, proposé par le projet SIOC, qui identifie les billets de microblog en tant que classe de ressources :

<p about="https://twitter.com/carlomorelli19/status/12185847600" rel="http://www.w3.org/1999/02/22-rdf-syntax-ns#type" resource="http://rdfs.org/sioc/types#MicroblogPost">Carlo annonce son départ pour l'Italie.</p>

Nous en profitons pour découvrir l'attribut @resource qui a le même usage que @href sans être limité aux éléments <a> et <link/>.

Sans surprise, nous obtenons le triplet suivant :

Sujet Prédicat Objet
valeur de @about valeur de @rel valeur de @resource
https://twitter.com/carlomorelli19/status/12185847600 http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://rdfs.org/sioc/types#MicroblogPost

Vous ne trouvez pas que l'URI du prédicat est bien trop longue et compliquée, surtout pour une propriété si importante et fréquente ?

Elle l'est. C'est pourquoi la plupart des langages basés sur RDF (RDF/XML, sparql, turtle, notation3...) possèdent un raccourci syntaxique pour l'exprimer plus facilement. De même, RDFa propose l'attribut @typeof qui permet d'écrire ce même triplet de cette manière :

<p about="https://twitter.com/carlomorelli19/status/12185847600" typeof="http://rdfs.org/sioc/types#MicroblogPost">Carlo annonce son départ pour l'Italie.</p>

Seuls deux attributs suffisent pour obtenir le triplet :

Sujet Prédicat Objet
valeur de @about prédicat implicite valeur de @typeof
https://twitter.com/carlomorelli19/status/12185847600 http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://rdfs.org/sioc/types#MicroblogPost

Des URI compacts

Le dernier exemple est délibérément incorrect, comme les 3 qui l'ont précédé, car, selon la spécification actuelle, les attributs @rel, @property et @typeof n'acceptent pas d'URI comme valeurs mais des CURIE (mais ça va changer prochainement).

Les CURIE sont des URI écrits sous une forme plus compacte et lisible. Comme les QNames en XML (qui permettent de mélanger plusieurs vocabulaires au sein d'un même document), ils utilisent un mécanisme basé sur des espaces de noms et des préfixes. Un exemple :

<html xmlns="http://www.w3.org/1999/xhtml">
        xmlns:sioct="http://rdfs.org/sioc/types#">
        ⁝
        <body>
                <p about="https://twitter.com/carlomorelli19/status/12185847600" typeof="sioct:MicroblogPost">
                        Carlo annonce son départ pour l'Italie.
                </p>
        </body>
</html>

L'écriture est plus compacte et plus claire. Cependant, une étape supplémentaire est nécessaire pour obtenir le triplet : la concaténation de l'espace de nom et du terme préfixé.

Sujet Prédicat Objet
valeur de @about prédicat implicite valeur de @typeof
https://twitter.com/carlomorelli19/status/12185847600 http://www.w3.org/1999/02/22-rdf-syntax-ns#type sioct:MicroblogPost
http://rdfs.org/sioc/types#MicroblogPost

Désormais, tous nos exemples utiliseront les CURIE quand ça sera nécessaire et seront ainsi conformes à la spécification actuelle (mais les déclarations d'espaces de noms pourront être omises pour plus de lisibilité).

Un sujet implicite

L'attribut @about est facultatif. Quand il est absent, le sujet du triplet prend comme valeur l'URI de la ressource dont la page HTML est la représentation. Par exemple, dans notre cas, l'attribut @about n'aurait pas été nécessaire si le RDFa avait été directement placé sur la page correspondante. On aurait eu ceci :

<div class="status" typeof="sioct:MicroblogPost">
        ⁝
        <span class="entry-content">Quiksilver Italy, here i come. Heading to Milano...
        ⁝
</div>
Sujet Prédicat Objet
sujet implicite prédicat implicite valeur de @typeof
https://twitter.com/carlomorelli19/status/12185847600 http://www.w3.org/1999/02/22-rdf-syntax-ns#type sioct:MicroblogPost
http://rdfs.org/sioc/types#MicroblogPost

Cependant, il est très préférable de toujours spécifier le sujet avec @about, pour éviter que le triplet ne soit perdu si le document HTML est séparé de la ressource qu'il représente, à l'occasion d'une copie locale en tant que fichier, par exemple.

Maintenant que nous savons @about facultatif, nous pouvons réinterprété un code HTML qui nous est familier depuis des années :

<link href="https://pierre.dureau.me/theme/style/screen" rel="stylesheet" />

Un sujet implicite, un prédicat avec @rel, un objet avec @href. Sommes-nous en présence d'un triplet, donc de RDFa ? Réponse dans le prochain épisode !