RDF : Resource Description Framework§

author:Pierre-Antoine Champin

Contrat Creative Commons

1

Motivation et historique§

2

Le Web vu par Tim Berners-Lee (1989)§

« Vague, but exciting »

3

Web de ressources§

Le web est constitué de ressources:

4

Ressources et représentations§

représentation : utilisable par :
texte humains, moteurs de recherche
médias (image, son...) surtout humains
données structurées machines
5

De HTML à XML§

XML (eXtensible Markup Language) a été recommandé par le W3C en 1998. L'objectif était de pallier la sémantique « faible » de HTML.

<!-- HTML -->
<a href="http://champin.net/">
  Pierre-Antoine <strong>Champin</strong>
  (<em>Maître de conférences</em>)</a>
<!-- XML -->
<Person homepage="http://champin.net/">
  <givenName>Pierre-Antoine</givenName>
  <surname>Champin</surname>
  <job>Maître de conférences</job></Person>
6

XML et la sémantique§

On a dit tout et son contraire l'apport sémantique de XML :

Les deux ont leur part de vérité.

7

XML a plus de sémantique que HTML...§

... dans le sens ou il est extensible : on eut donc exprimer des choses que HTML ne permet pas d'exprimer (e.g.``<firstname>``).

<Person xmlns="http://xmlns.com/foaf/0.1/"
        xmlns:pro="http://example.com/"
     homepage="http://champin.net/">
  <givenName>Pierre-Antoine</givenName>
  <surname>Champin</surname>
  <pro:job>Maître de conférence</pro:job></Person>
8

XML a moins de sémantique que HTML...§

... dans la mesure ou :

9

XML : apports et limitations§

Le surplus de sémantique promis par XML n'est donc pas « magique » : il suppose

10

XML : apports et limitations (suite)§

L'apport est donc essentiellement technique : la base commune de XML permet de factoriser les efforts de développement et d'apprentissage :

11

De XML à RDF§

12

De RDF à RDF§

13

Syntaxe(s) et sémantique§

RDF 2004 définit :

14

Syntaxe abstraite§

15

Triplet§

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

Le laboratoire LIRIS (sujet)

a pour membre (prédicat)

Pierre-Antoine Champin (objet)

16

Nommage§

Les choses sont nommées par des URIs :

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

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

http://champin.net/#pa

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" ];
}

17
Remarque§

Dans RDF, les URIs ne sont utilisés que comme des identifiants opaques.

Les représentations qui sont éventuellement accessibles via ces URIs (par déréférencement) n'ont aucune influence sur leur sémantique.

Notons cependant que le mouvement Linked data préconise une utilisation particulière des URIs dans laquelle les réprésentations doivent être cohérentes avec la sémantique.

18

Préfixes§

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

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" ]
}

19

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" ]
}

20

Nœuds vierges§

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

(quelque chose)   foaf:name   "Alain Mille"

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" ]
}

21

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" ]
}

22

Sémantique§

23

Principe général§

RDF est muni d'une sémantique en théorie des modèles, ou sémantique dénotationnelle :

24

Inférences§

De cette sémantique découlent les inférences que l'ont peut faire sur un graphe RDF (indépendamment de la sémantique des URIs utilisés dans ce graphe).

25

Monotonie§

Étant donné un graphe, tout sous-graphe en est une conséquence.

digraph inference_monotonie {
margin=0;

foaf_person [ label="foaf:Person" ]
liris [ label="liris:lab" ]
pa [ label="champin:pa" ]
pa_name [ label="Pierre-Antoine Champin", shape=box ]

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

26

Monotonie (suite)§

Aucune conclusion que l'on peut tirer d'un graphe RDF ne peut pas être contredite par des informations présentes ailleurs sur le Web.

→ On est donc toujours en droit de fusionner des graphes RDF, même provenant de sources indépendantes

27

Anonymisation§

Tout nœud peut être remplacé par un nœud vierge :

digraph inference_anonymisation {
margin=0;

foaf_person [ label="foaf:Person" ]
liris [ label="liris:lab" ]
pa [ label="" ]
pa_name [ label="Pierre-Antoine Champin", shape=box ]

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

(rappel : les nœuds vierges s'interpètent comme des variables quantifiées existentiellement)

28

Éclatement§

Tout nœud vierge peut être éclaté en plusieurs nœuds vierges :

digraph inference_eclatement {
margin=0;

foaf_person [ label="foaf:Person" ]
liris [ label="liris:lab" ]
pa1 [ label="" ]
pa2 [ label="" ]
pa_name [ label="Pierre-Antoine Champin", shape=box ]
invis [ color="transparent", label="" ]

liris -> pa1 [ label="foaf:member" ]
pa1 -> foaf_person [ label="rdf:type" ]
invis -> pa2 [ color="transparent" ]
pa2 -> pa_name [ label="foaf:name" ]
}

29

Sémantique additionelle§

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

Cependant, cette sémantique devra respecter la sémantique dénotationnelle de RDF ; notamment, les inférences supplémentaires ne devront pas contredire les inférences précédente (monotonie) :

30

Sémantique additionelle (suite)§

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

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 ;

31

Syntaxes concrètes§

32

RDF/XML§

Syntaxe:http://www.w3.org/TR/rdf-syntax-grammar/
Valideur:http://www.w3.org/RDF/Validator/
33

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>
34

Turtle : Terse RDF Triple Language§

Syntaxe:http://www.w3.org/TR/turtle/
35

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

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" .
37

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

Syntaxe:http://www.w3.org/TR/rdfa-primer/
Valideur:http://check.rdfa.info/
Distiller:http://www.w3.org/2012/pyRdfa/
38

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>
39

JSON-LD§

Syntaxe:http://www.w3.org/TR/json-ld-syntax/
Valideur:http://json-ld.org/playground/
40

JSON-LD: exemple§

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

Autres syntaxes§

42

Dataset et requêtes§

43

Dataset§

Lorsqu'on stocke des données en RDF, il est parfois nécessaire de distinguer plusieurs graphes.

Un dataset RDF est constitué :

44

SPARQL§

SPARQL est un ensemble de recommandations définissant :

Référence:http://w3.org/sparql
Tutoriel:http://jena.sourceforge.net/ARQ/Tutorial/
45

SPARQL : exemple 1§

« Trouver les membres du LIRIS (URI et nom) que je connaît ».

PREFIX foaf: <http://xmlns.com/foaf/0.1.> #...

SELECT ?p ?n
WHERE {
  champin:pa foaf:knows ?p .
  liris:lab foaf:member ?p .
  ?p foaf:name ?n .
}
46

SPARQL : exemple 2§

« Construire l'union des graphes créés par Pierre-Antoine Champin ».

PREFIX dct: <http://purl.org/dc/terms/>

CONSTRUCT { ?s ?p ?o }
WHERE {
  ?g dct:creator <http://champin.net/#pa> .
  GRAPH ?g { ?s ?p ?o }
}

⚠ pré-supposition sur la sémantique des URIs des graphes

47

SPARUL : exemple§

« Remplacer foaf:firstName par foaf:givenName pour tous les membres du LIRIS ».

PREFIX foaf: <http://xmlns.com/foaf/0.1.>

DELETE {
  ?m foaf:firstName ?n .
}
INSERT {
  ?m foaf:givenName ?n .
}
WHERE {
  <http://liris.cnrs.fr/#lab> foaf:member ?m .
  ?m foaf:givenName ?n .
}
48