RDF§

author:Pierre-Antoine Champin

Contrat Creative Commons

Introduction§

Vue d’ensemble§

RDF 2004 définit :

  • une syntaxe abstraite (modèle de donnée),
  • une sémantique pour interpréter la syntaxe abstraite,
  • plusieurs syntaxes concrètes pour représenter/échanger la syntaxe abstraite.

Syntaxe abstraite et sémantique§

Triplet§

Toute information en RDF est représentée par un triplet,

signifiant qu’une chose est en relation avec une autre.

Exemple :

Le laboratoire LIRIS (sujet)

a pour membre (prédicat)

Pierre-Antoine Champin (objet)

Nommage§

Les choses sont nommées par des IRIs :

On peut représenter ceci graphiquement :

digraph t_uri {
margin=0;
bgcolor="#FFFFFF00";
node [ style=filled,color=black,fillcolor=white ];

liris [ label="http://liris.cnrs.fr/#lab" ];
pa [ label="http://champin.net/#pa" ];
liris -> pa [ label="http://xmlns.com/foaf/0.1/member" ];
}

Préfixes§

Pour simplifier les notations, on définit des préfixes courts correspondant à des préfixes d’IRI :

liris: → http://liris.cnrs.fr/#

foaf: → http://xmlns.com/foaf/0.1/

champin: → http://champin.net/#

On utilise ensuite des noms préfixés :

liris:lab   foaf:member   champin:pa

et également sous forme graphique :

digraph t_prefixed {
margin=0; rankdir=LR;
bgcolor="#FFFFFF00";
node [ style=filled,color=black,fillcolor=white ];

liris [ label="liris:lab" ]
pa [ label="champin:pa" ]
liris -> pa [ label="foaf:member" ]
}

Littéraux§

On peut également lier une ressource à une donnée typée (chaîne de caractère, entier, réel...), nommée un littéral.

champin:pa   foaf:name   “Pierre-Antoine Champin”

Traditionnellement, on représente les littéraux par des nœuds rectangulaires :

digraph t_literal {
margin=0; rankdir=LR;
bgcolor="#FFFFFF00";
node [ style=filled,color=black,fillcolor=white ];

pa [ label="champin:pa" ]
name [ label="Pierre-Antoine Champin", shape=box ]
pa -> name [ label="foaf:name" ]
}

Nœuds muets§

Enfin, RDF permet de parler d’une ressource sans connaître son IRI. Cela revient en logique à utiliser une variable quantifiée existentiellement.

(quelque chose)   foaf:name   “Alain Mille”

On parle alors de nœud muet (par analogie aux variables muettes).

Graphiquement, on représente cette ressource par un nœud vierge (blank node).

digraph t_bnode {
margin=0; rankdir=LR;
bgcolor="#FFFFFF00";
node [ style=filled,color=black,fillcolor=white ];

am [ label="" ]
name [ label="Alain Mille", shape=box ]
am -> name [ label="foaf:name" ]
}

Exemple de graphe§

digraph graphe1 {
margin=0;

foaf_person [ label="foaf:Person" ]
foaf_group [ label="foaf:Group" ]
liris [ label="liris:lab" ]
pa [ label="champin:pa" ]
am [ label="" ]
pa_name [ label="Pierre-Antoine Champin", shape=box ]
am_name [ label="Alain Mille", shape=box ]

liris -> foaf_group [ label="rdf:type" ]
pa -> foaf_person [ label="rdf:type" ]
am -> foaf_person [ label="rdf:type" ]
liris -> pa [ label="foaf:member" ]
liris -> am [ label="foaf:member" ]
pa -> pa_name [ label="foaf:name" ]
am -> am_name [ label="foaf:name" ]
am -> pa [ label="foaf:knows" ]
}

Sémantique et inférences§

La structure du graphe permet de faire un minimum d’inférence, sans même avoir besoin de connaître le vocabulaire.

Exemple : « Toto est le tata de titi et tutu »

Par analogie, étant donné un arbre XML, on peut inférer en un arbre dans lequel seul l’ordre des attributs a changé.

Bien sûr, des inférences supplémentaires peuvent être faites en prêtant une sémantique particulière aux IRIs utilisés dans le graphe.

Exemple : « tata est une relation symétrique et transitive »

Vocabulaire et sémantique additionelle§

On verra plus tard des langages (RDF-Schema, OWL) permettant de définit la sémantique de certains IRIs.

Mais ces langages ne peuvent pas remettre en cause la sémantique du graphe lui-même.

Analogie : lorsqu’on définit un format XML, on prête une sémantique particulière aux éléments et attributs de ce format, mais on ne peut pas prêter de sémantique à l’ordre des attributs ;

  • sémantiquement, ce ne serait plus du XML,
  • pragmatiquement, les outils standards (analyseur syntaxique, sérialiseurs) ne permettraient pas de contrôler cet aspect de la syntaxe.

Syntaxes concrètes§

RDF/XML§

  • syntaxe recommandée par le W3C (1999)
  • basée sur XML
  • relativement complexe et verbeuse
Syntaxe:http://www.w3.org/TR/rdf-syntax-grammar/
Valideur:http://www.w3.org/RDF/Validator/

RDF/XML : exemple§

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:foaf="http://xmlns.com/foaf/0.1/"                          >
 <foaf:Group rdf:about="http://liris.cnrs.fr/#lab">
  <foaf:member>
   <foaf:Person>
    <foaf:name>Alain Mille</foaf:name>
    <foaf:knows
     rdf:resource="http://champin.net/#pa"/>
   </foaf:Person>
  </foaf:member>
  <foaf:member>
   <foaf:Person rdf:about="http://champin.net/#pa">
    <foaf:name>Pierre-Antoine Champin</foaf:name>
   </foaf:Person>
  </foaf:member>
  </foaf:Group>
</rdf:RDF>

Turtle : Terse RDF Triple Language§

  • dérivée du langage N3
  • en passe d’être recommandé par le W3C (en 2012)
  • vise la simplicité et la compacité
Syntaxe:http://www.w3.org/TR/turtle/
Valideur:http://www.rdfabout.com/demo/validator/

Turtle: exemple§

@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix champin: <http://champin.net/#> .

liris:lab
    a foaf:Group ;
    foaf:member champin:pa, _:am .
champin:pa
    a foaf:Person ;
    foaf:name "Pierre-Antoine Champin" .
_:am
    a foaf:Person ;
    foaf:name "Alain Mille" ;
    foaf:knows champin:pa .

Turtle: exemple 2§

@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix champin: <http://champin.net/#> .

liris:lab
    a foaf:Group ;
    foaf:member champin:pa, [
      a foaf:Person ;
      foaf:name "Alain Mille" ;
      foaf:knows champin:pa .
    ] .
champin:pa
    a foaf:Person ;
    foaf:name "Pierre-Antoine Champin" .

RDFa : RDF in attributes§

RDFa est une utilisation d’attributs (existants ou supplémentaires) de (X)HTML pour y inclure du RDF (à la manière des micro-formats) :

  • facilite la migration de contenus HTML vers RDF
  • facilite la maintenance en cohérence de la version HTML et des données RDF (DRY : Don’t Repeat Yourself)
Syntaxe:http://www.w3.org/TR/rdfa-primer/
Valideur:http://check.rdfa.info/
Distiller:http://www.w3.org/2012/pyRdfa/

RDFa : exemple§

<p prefix="foaf http://xmlns.com/foaf/0.1/"
   about="_:am">
  <span property="foaf:name"
    >Alain Mille</span>
  est membre du
  <a rev="foaf:member" href="http://liris.cnrs.fr/#lab"
    >LIRIS</a>.
  Il connaît
  <span rel="foaf:knows" href="http://champin.net/#pa">
    <span property="foaf:name"
      >Pierre-Antoine Champin</span>,
    un autre membre de
    <span rev="foaf:member" href="http://liris.cnrs.fr/#lab">
      ce laboratoire.</span>
  </span> </p>

JSON-LD§

  • Rappel : JSON est un langage d’échange de données, basé sur Javascript, et très utilisé en développement web.
  • JSON-LD (JSON Linked Data) permet d’interpréter une structure JSON comme du RDF,
  • grâce à un contexte (implicite ou explicite).
  • Objectif : faciliter l’adoption de RDF (syntaxe abstraite) auprès des développeurs d’applications web.
Syntaxe:http://www.w3.org/TR/json-ld-syntax/
Valideur:http://json-ld.org/playground/

JSON-LD: exemple§

{ "@context" : { /* ... */                                   },
 "@id": "http://liris.cnrs.fr/#lab",
 "@type": "Group",
 "member": [
   {
     "@type": "Person",
     "name": "Alain Mille",
     "knows": {
       "@id": "http://champin.net/#pa",
       "@type": "Person",
       "name": "Pierre-Antoine Champin"
     }
   },
   "http://champin.net/#pa"
 ]
}

Autres syntaxes§

  • Comme l’illustrent RDFa et JSON-LD, tout langage peut être interprété comme du RDF:
  • ← Prépondérance de la syntaxe abstraite.
  • Difficulté : faire correspondre des IRIs là ou d’autres langages utilisent des termes « locaux ».

Vocabulaires§

Quelques vocabulaires utiles§

Dublin Core§

Méta-données à propos des documents :

  • titre, résumé...
  • créateur, contributeur...
  • date de création, de dernière modification, versions...
description:http://lov.okfn.org/dataset/lov/details/vocabulary_dc.html
homepage:http://purl.org/dc/terms/

FOAF: Friend of a friend§

Description de personnes et de leur réseau social

  • Personne (nom, prénom, page weg, adresse e-mail, connaissance...)
  • Groupe (membres...)
  • Document (a pour sujet...), Image (représente...)
description:http://lov.okfn.org/dataset/lov/details/vocabulary_foaf.html
homepage:http://www.foaf-project.org/

SIOC: Semantically-Interlinked Online Communities§

Description de communautés en ligne

  • Forum, Blog, Wiki...
  • Article, Commentaire...
description:http://lov.okfn.org/dataset/lov/details/vocabulary_sioc.html
homepage:http://rdfs.org/sioc/spec/

WGS84: Word Geodetic System§

Coordonnées géographiques

  • SpatialThing, Point
  • lattitue, longitude, altitude
description:http://lov.okfn.org/dataset/lov/details/vocabulary_geo.html
homepage:(rdf) http://www.w3.org/2003/01/geo/wgs84_pos

GoodRelations§

e-commerce

  • Produit et Service, Offre...
  • quantité, prix, garantie...
description:http://lov.okfn.org/dataset/lov/details/vocabulary_gr.html
homepage:http://purl.org/goodrelations/v1