Introduction à RDF
Michel Gagnon
Plan
● Présentation de RDF
● Sérialisations N-Triples, RDF/XML et Turtle
● Sémantique et inférence
RDF
●
Modèle de données pour décrire des
ressources du web
●
Graphe:
●
les noeuds représentent des ressources
●
les arcs représentent des relations entre ces
ressources
●
Les ressources sont représentées par leur
URI
Copyright 2006 – Michel Gagnon
RDF
● Le graphe est représenté par un ensemble
d'énoncés (statements)
● Un énoncé est un triplet <S, P, O>, où
● S est le sujet
● P est le prédicat (une propriété)
● O est l'objet (la valeur de la propriété pour le sujet
en question)
URI
URIref
● Plus précisément, les ressources sont identifiées
par des URIrefs, c’est-à-dire URI + identificateur
de fragment:
● [Link] (URI)
● #MichelGagnon (Fragment)
● http//[Link]/Profs#MichelGagnon
● En HTML, ceci permet de désigner une section
dans un document, alors que pour RDF il ne s’agit
que d’un nom donné à une ressource
RDF – Exemple
Michel Gagnon
local:name
local:worksAt
[Link] [Link]
local:hasHomePage
[Link]
local: [Link]
RDF – Exemple
Relation Noeud litéral
Michel Gagnon
local:name
local:worksAt
[Link] [Link]
local:hasHomePage
[Link]
Noeud URI
RDF – Exemple
Michel Gagnon
local:name
local:worksAt
[Link]
local:hasHomePage
[Link]
Un nœud peut être vide
Syntaxe abstraite
● Collection de triplets
● Une telle collection forme un graphe RDF
● Puisque les propriétés sont désignées par des URI, on peut donc
les décrire comme n’importe quelle ressource
● Un noeud peut être :
● Une URI
● Un littéral
● Un nœud vide (il désigne en quelque sorte une ressource dont
on ne connait pas le nom)
● Deux types de littéraux :
● Simple: “Michel Gagnon”^^xsd:String
● Typé: “10”^^xsd:integer
Sérialisation RDF/XML
● Utilise les espaces de nommage
● Balise rdf:Description pour regrouper les
descriptions d’une ressource
● Pour un nœud vide, on retire l'attribut about
● Pour étiqueter un noeud vide, on utilise la balise
rdf:nodeID
● Pour représenter un littéral typé, on utilise l’attribut
rdf:datatype dans le prédicat qui relie la ressource à
ce littéral
● Il y a souvent plusieurs manières de représenter le même
graphe RDF
Sérialisation RDF/XML
Michel Gagnon
local:name
local:worksAt
[Link] [Link]
local:hasHomePage
[Link]
<rdf:RDF xmlns:rdf="[Link]
xmlns:local="[Link]
<rdf:Description rdf:about="[Link]
<local:hasHomePage
resource="[Link]
<local:worksAt resource="[Link]
<local:name> Michel Gagnon </local:name>
</rdf:Description>
</rdf:RDF>
Sérialisation RDF/XML
Michel Gagnon
local:name
local:worksAt
[Link]
local:hasHomePage
[Link]
<rdf:RDF xmlns:rdf="[Link]
xmlns:local="[Link]
<rdf:Description>
<local:hasHomePage
resource="[Link]
<local:worksAt resource="[Link]
<local:name> Michel Gagnon </local:name>
</rdf:Description>
</rdf:RDF>
Sérialisation RDF/XML
Michel Gagnon 49^^xsd:integer
local:name local:age
local:worksAt
[Link] [Link]
local:hasHomePage
[Link]
<rdf:RDF xmlns:rdf="[Link]
xmlns:local="[Link]
<rdf:Description rdf:about="[Link]
<local:hasHomePage
resource="[Link]
<local:worksAt resource="[Link]
<local:age rdf:datatype="[Link]
<local:name> Michel Gagnon </local:name>
</rdf:Description>
</rdf:RDF>
Sérialisation Turtle
● Permet de spécifier des préfixes
● Permet de combiner des descriptions d’une même ressource :
● On utilise ; pour grouper des triplets concernant un même sujet
● On utilise , pour grouper plusieurs instances d'une propriété
concernant un même sujet
● Noeud vide représenté par les crochets [ ]
● Toutes les descriptions relatives à un noeud vide peuvent être
placées à l'intérieur des crochets
Sérialisation Turtle
Michel Gagnon
local:name
local:worksAt
[Link] [Link]
local:hasHomePage
[Link]
@prefix local: <[Link] .
@prefix prof: <[Link] .
prof:MichelGagnon
local:hasHomePage <[Link] .
prof:MichelGagnon local:worksAt <[Link] .
prof:MichelGagnon local:name "Michel Gagnon" .
Sérialisation Turtle
Michel Gagnon
local:name
local:worksAt
[Link] [Link]
local:hasHomePage
[Link]
@prefix local: <[Link] .
@prefix prof: <[Link] .
prof:MichelGagnon
local:hasHomePage <[Link] ;
local:worksAt <[Link] ;
local:name "Michel Gagnon" .
Sérialisation Turtle
Michel Gagnon
local:name
local:worksAt
[Link] [Link]
local:hasHomePage
[Link] local:worksAt
[Link]
@prefix local: <[Link] .
@prefix prof: <[Link] .
prof:MichelGagnon
local:hasHomePage <[Link] ;
local:worksAt <[Link] ;
local:worksAt <[Link] ;
local:name "Michel Gagnon" .
Sérialisation Turtle
Michel Gagnon
local:name
local:worksAt
[Link] [Link]
local:hasHomePage
[Link] local:worksAt
[Link]
@prefix local: <[Link] .
@prefix prof: <[Link] .
prof:MichelGagnon
local:hasHomePage <[Link] ;
local:worksAt <[Link] ,
<[Link] ;
local:name "Michel Gagnon" .
Sérialisation Turtle
Michel Gagnon
local:name
local:worksAt
[Link]
local:hasHomePage
[Link]
@prefix local: <[Link] .
@prefix prof: <[Link] .
[]
local:hasHomePage <[Link] ;
local:worksAt <[Link] ;
local:name "Michel Gagnon" .
Sérialisation Turtle
Michel Gagnon
local:name
local:worksAt
[Link]
local:hasHomePage
[Link]
@prefix local: <[Link] .
@prefix prof: <[Link] .
[
local:hasHomePage <[Link] ;
local:worksAt <[Link] ;
local:name "Michel Gagnon" .
].
Sérialisation Turtle
Michel Gagnon
local:JeanPaul2
local:name
local:knows
local:worksAt
[Link]
local:hasHomePage
[Link]
@prefix local: <[Link] .
@prefix prof: <[Link] .
_:n1
local:hasHomePage <[Link] ;
local:worksAt <[Link] ;
local:name "Michel Gagnon" .
local:JeanPaul2 local:knows _:n1 .
Sérialisation Turtle
Michel Gagnon
local:JeanPaul2
local:name
local:knows
local:worksAt
[Link]
local:hasHomePage
[Link]
@prefix local: <[Link] .
@prefix prof: <[Link] .
local:JeanPaul2 local:knows
[ local:hasHomePage <[Link] ;
local:worksAt <[Link] ;
local:name "Michel Gagnon" ] .
RDF – Déclaration de type de
ressource
● Pour identifier le type d’une ressource:
● Utiliser le prédicat rdf:type pré-défini par RDF
● Remplacer la balise rdf:Description par le type de
la ressource
● À noter qu’une ressource peut avoir plusieurs
types
● En Turtle, on peut utiliser le prédicat a
Type – Exemple
Michel Gagnon
[Link]
local:name
rdf:type
[Link] local:worksAt
[Link]
local:hasHomePage
[Link]
Type – Exemple - Turtle
Michel Gagnon
[Link]
local:name
rdf:type
[Link] local:worksAt
[Link]
local:hasHomePage
[Link]
@prefix local: <[Link] .
@prefix prof: <[Link] .
prof:MichelGagnon
rdf:type local:Professor ;
local:hasHomePage <[Link] ;
local:worksAt resource <[Link] ;
local:name “Michel Gagnon” .
Type – Exemple - Turtle
Michel Gagnon
[Link]
local:name
rdf:type
[Link] local:worksAt
[Link]
local:hasHomePage
[Link]
@prefix local: <[Link] .
@prefix prof: <[Link] .
prof:MichelGagnon
a local:Professor ;
local:hasHomePage <[Link] ;
local:worksAt resource <[Link] ;
local:name “Michel Gagnon” .
RDF Schema - Classes
● Une ressource peut appartenir à plus d’une
classe
● Un type appartient à la classe rdfs:Class
● RDFS permet de définir une hiérarchie de
classes, grâce au prédicat rdfs:subClassOf
RDF Schema - Classes
Michel Gagnon
local:Professor
local:name
rdf:type
[Link]
RDF Schema - Classes
rdfs:Class
rdf:type
Michel Gagnon
local:Professor
local:name
rdf:type
[Link]
RDF Schema - Classes
local:Person
rdfs:subClassOf
rdfs:Class
local:UniversityMember
rdf:type rdfs:subClassOf
Michel Gagnon
rdfs:subClassOf
local:Professor local:Student
local:name
rdf:type
[Link]
RDF Schema – Propriétés
● Toutes les propriétés ont pour type la classe
rdf:Property
● On peut établir des hiérarchies de propriétés, grâce
au prédicat rdfs:subPropertyOf
● On peut définir le domaine et l’image d’une propriété,
en utilisant les prédicats rdfs:domain et
rdfs:range, respectivement
● Les propriétés sont globales (on peut donc y ajouter
des informations n’importe où)
RDF Schema – Propriétés
local:worksAt
local:dgi Prof:MichelGagnon
local:worksAt
rdfs:domain rdfs:range
local:Person local:Organization
RDF Schema – Propriétés
local:worksAt
local:dgi Prof:MichelGagnon
local:worksAt
rdfs:domain rdfs:range
local:Person local:Organization
rdf:type rdf:type
rdfs:Class
RDF Schema – Propriétés
local:worksAt
local:dgi Prof:MichelGagnon
local:hasActivity
rdfs:subPropertyOf
local:worksAt
rdfs:domain rdfs:range
local:Person local:Organization
rdf:type rdf:type
rdfs:Class
RDF Schema – Propriétés
● En RDF tout est une ressource, même les
propriétés
● Ceci signifie qu’on peut ajouter des descriptions
aux propriétés:
[Link] local:worksAt
[Link]
local:inverseOf
local:worksAt local:isEmployerOf
Exercice – Dessinez le graphe :
@prefix xsd: <[Link] .
@prefix rdf: <[Link] .
@prefix poly: <http:/[Link]/vocab#> .
poly:x1 poly:p <[Link] ;
a poly:A.
Exercice – Dessinez le graphe :
@prefix poly: <[Link]
@prefix xsd: <[Link]
@prefix rdf: <[Link]
poly:x1 poly:p [];
a poly:A .
[] poly:q <[Link] .
Exercice – Dessinez le graphe :
@prefix poly: <[Link]
@prefix xsd: <[Link]
@prefix rdf: <[Link]
poly:x1 poly:p [ poly:w poly:x2 ];
a poly:A .
poly:x2 poly:q <[Link] .
Exercice – Représenter en RDF :
Le président des États-Unis a rencontré le
premier ministre du Canada à Toronto le 22 mai
2011.
Exercice – Représenter en RDF :
Le président des États-Unis a rencontré le
premier ministre du Canada à Toronto le 22 mai
2011.
"2011-05-22"¨¨xsd:date
ex:date
ex:participant ex:participant
ex:rencontre
ex:présidentDe ex:lieu ex:premierMinistreDe
dbpedia:United_States dbpedia:Toronto dbpedia:Canada
Inférence
Si on a
aaa p bbb .
On peut inférer
_:n1 p bbb .
Si aaa a déjà été remplacé par _:n1 auparavant.
Sinon, il faut créer un nouveau nœud vide.
Inférence
Si on a
aaa p bbb .
On peut inférer
aaa p _:n1 .
Si bbb a déjà été remplacé par _:n1 auparavant.
Sinon, il faut créer un nouveau nœud vide.
Inférence - Exemple
Soit
local:MichelGagnon local:worksAt local:dgi .
local:JeanStJean local:worksAt local:dgi .
On peut inférer
local:MichelGagnon local:worksAt _:n1 .
Inférence - Exemple
Soit
local:MichelGagnon local:worksAt local:dgi .
local:JeanStJean local:worksAt local:dgi .
On peut inférer
local:MichelGagnon local:worksAt _:n1 .
local:JeanStJean local:worksAt _:n1 .
Inférence - Exemple
Soit
local:MichelGagnon local:worksAt local:dgi .
local:JeanStJean local:worksAt local:dgi .
On peut inférer
local:MichelGagnon local:worksAt _:n1 .
local:JeanStJean local:worksAt _:n1 .
_:n2 local:worksAt _:n1 .
Inférence - Exemple
Soit
local:MichelGagnon local:worksAt local:dgi .
local:JeanStJean local:worksAt local:dgi .
On peut inférer
local:MichelGagnon local:worksAt _:n1 .
local:JeanStJean local:worksAt _:n1 .
_:n2 local:worksAt _:n1 .
_:n3 local:worksAt _:n1 .
Inférence - Exemple
Ce graphe
_:n2 local:worksAt _:n1 .
_:n3 local:worksAt _:n1 .
est équivalent à celui-ci
[] local:worksAt _:n1 .
[ ] local:worksAt _:n1 .
local:worksAt
local:worksAt
Inférence - Exemple
local:MichelGagnon local:worksAt
local :dgi
local:JeanStJean local:worksAt
local:MichelGagnon local:worksAt
local:JeanStJean local:worksAt
local:MichelGagnon local:worksAt local:MichelGagnon local:worksAt
local:JeanStJean local:worksAt local:JeanStJean local:worksAt
Inférence
Si on a
aaa p bbb .
On peut inférer
p rdf:type rdf:Property .
Inférence
Si on a
aaa p bbb .
On peut inférer
aaa rdf:type rdfs:Resource .
et
bbb rdf:type rdfs:Resource .
Inférence
Si on a
p rdfs:domain d .
aaa p bbb .
On peut inférer
aaa rdf:type d .
Inférence
Si on a
p rdfs:range d .
aaa p bbb .
On peut inférer
bbb rdf:type d .
Inférence - Exemple
Soit
local:marieAvec rdfs:domain local:Homme .
local:marieAvec rdfs:domain local:Femme .
local:Paul local:marieAvec local:Marie .
On peut inférer
local:Paul rdf:type local:Homme .
local:Paul rdf:type local:Femme .
Donc Paul est à la fois un homme et une femme
Inférence
Si on a
c1 rdfs:subClassOf c2 .
aaa rdf:type c1 .
On peut inférer
aaa rdf:type c2 .
Inférence - Exemple
Soit
local:Professeur rdfs:subClassOf local:Person .
local:Michel rdf:type local:Professeur .
On peut inférer
local:Michel rdf:type local:Person .
Inférence
Si on a
c1 rdfs:subClassOf c2 .
c2 rdfs:subclassOf c3 .
On peut inférer
c1 rdf:subClassOf c3 .
Inférence
Si on a
p1 rdfs:subPropertyOf p2 .
aaa p1 bbb .
On peut inférer
aaa p2 bbb .
Inférence - Exemple
Soit
local:aime rdfs:subPropertyOf
local:eprouveSentimentEnvers .
local:Paul rdf:aime local:Marie .
On peut inférer
local:Paul rdf:eprouveSentimentEnvers
local:Marie .
Inférence
Si on a
p1 rdfs:subPropertyOf p2 .
p2 rdfs:subPropertyOf p3 .
On peut inférer
p1 rdf:subPropertyOf p3 .
Exercice – Graphe RDF valide?
prof:MichelGagnon
Exercice – Graphe RDF valide?
prof:MichelGagnon
NON!
Exercice – Graphes équivalents?
ex:a local:prop
local:prop
ex:a
local:prop
Exercice – Graphes équivalents?
ex:a local:prop
local:prop
ex:a
local:prop
OUI!
Exercice – Graphes équivalents?
local:prop
local:prop local:prop
ex:a ex:a
Exercice – Graphes équivalents?
local:prop
local:prop local:prop
ex:a ex:a
NON!
Exercice – Graphes équivalents?
local:p1
ex:a ex:a
local:p1
local:p2
ex:b local:p2 ex:b
Exercice – Graphes équivalents?
local:p1
ex:a ex:a
local:p1
local:p2
ex:b local:p2 ex:b
NON!
Montrer qu'un animal a un sentiment
envers un autre animal
ex:detester rdfs:subPropertyOf ex:avoirSentimentEnvers .
ex:Chat rdfs:subClassOf ex:Animal .
ex:Tom rdf:type ex:Chat .
ex:Jerry rdf:type ex:Animal .
ex:Tom ex:detester ex:Jerry .
Monter qu'un animal a un sentiment
envers un autre animal
(1) ex:detester rdfs:subPropertyOf ex:avoirSentimentEnvers .
(2) ex:Chat rdfs:subClassOf ex:Animal .
(3) ex:Tom rdf:type ex:Chat .
(4) ex:Jerry rdf:type ex:Animal .
(5) ex:Tom ex:detester ex:Jerry .
(6) ex:Tom ex:avoirSentimentEnvers ex:Jerry . (1,5)
(7) ex:Tom rdf:type ex:Animal . (2,3)
(8) _:n1 ex:avoirSentimentEnvers ex:Jerry . (6)
(9) _:n1 ex:avoirSentimentEnvers _:n2 . (8)
(10) _:n1 rdf:type ex:Animal . (7)
(11) _:n2 rdf:type ex:Animal . (4)
Monter qu'un animal a un sentiment
envers un autre animal
(1) ex:detester rdfs:subPropertyOf ex:avoirSentimentEnvers .
(2) ex:Chat rdfs:subClassOf ex:Animal .
(3) ex:Tom rdf:type ex:Chat .
(4) ex:Jerry rdf:type ex:Animal .
(5) ex:Tom ex:detester ex:Jerry .
(6) ex:Tom ex:avoirSentimentEnvers ex:Jerry . (1,5)
(7) ex:Tom rdf:type ex:Animal . (2,3)
(8) _:n1 ex:avoirSentimentEnvers ex:Jerry . (6)
(9) _:n1 ex:avoirSentimentEnvers _:n2 . (8)
(10) _:n1 rdf:type ex:Animal . (7)
(11) _:n2 rdf:type ex:Animal . (4)
[ a ex:Animal ;
ex:avoirSentimentEnvers [ a ex:Animal ] ] .
Peut-on avoir une même
interprétation pour ces graphes?
local:p1 ex:a local:p1 ex:a
ex:toto
local:p2 ex:b local:p2 ex:c
ex:b
Peut-on avoir une même
interprétation pour ces graphes?
local:p1 ex:a local:p1 ex:a
ex:toto
local:p2 ex:b local:p2 ex:c
ex:b
OUI!
Il suffit que ex:b et ex:c désignent la même entité
Peut-on avoir une même
interprétation pour ces graphes?
local:p1 ex:a local:p2 ex:a
ex:toto ex:toto
local:p2 ex:b local:p1 ex:b
Peut-on avoir une même
interprétation pour ces graphes?
local:p1 ex:a local:p2 ex:a
ex:toto ex:toto
local:p2 ex:b local:p1 ex:b
OUI!
Soient T, A et B les entités désignées par ex:toto, ex:a et ex:b, respectivement.
Il suffit que les propriétés associées à local:p1 et local:p2 contiennent toutes les
deux les paires (T,A) et (T,B).