RDF : Resource Description Framework§
author: | Pierre-Antoine Champin |
---|
author: | Pierre-Antoine Champin |
---|
« Vague, but exciting »
Le web est constitué de ressources:
chaque ressource est identifiée par un URI (Uniform Resource Identifier), e.g.:
NB: ressource ≠ fichier !
chaque ressource a un état qui peut varier dans le temps
À chaque état d'une ressource peuvent correspondre une ou plusieurs représentation(s) (négociation de contenu, contexte)
Toute interaction avec une ressource se fait via des représentation :
consultation, modification, création
représentation : | utilisable par : |
---|---|
texte | humains, moteurs de recherche |
médias (image, son...) | surtout humains |
données structurées | machines |
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>
On a dit tout et son contraire l'apport sémantique de XML :
Les deux ont leur part de vérité.
... 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>
... dans la mesure ou :
<firstname>
ou de la balise <ονομα>
,<em>
: elle dénote un
texte à mettre en évidence selon les moyens dont il dispose, par exemple :Le surplus de sémantique promis par XML n'est donc pas « magique » : il suppose
de créer de nouveaux langages basés sur XML (DTD, schémas),
d'écrire les logiciels qui interpréteront ces nouveaux langages,
→ chaque langage reste relativement idiosyncratique.
L'apport est donc essentiellement technique : la base commune de XML permet de factoriser les efforts de développement et d'apprentissage :
Le modèle sous-jacent de la syntaxe XML est un arbre (XML Infoset), ce qui n'est pas adapté à la structure décentralisée du Web.
L'objectif du Resource Description Framework (RDF), recommandé par le W3C en 1999, vise à munir le Web d'un modèle de données plus adapaté, ayant une structure de graphe.
L'objectif est de construire le Semantic Web : un web dans lequel les machines ont (enfin) accès à la sémantique des données.
Recommandation un peu hâtive, présentant quelques défauts importants (notamment l'absence de sémantique formelle).
→ faible adoption de RDF
RDF 2004 définit :
Toute information en RDF est représentée par un triplet :
Le laboratoire LIRIS (sujet)
a pour membre (prédicat)
Pierre-Antoine Champin (objet)
Les choses sont nommées par des URIs :
On peut représenter ceci graphiquement :
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.
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 :
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 :
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).
RDF est muni d'une sémantique en théorie des modèles, ou sémantique dénotationnelle :
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).
Étant donné un graphe, tout sous-graphe en est une conséquence.
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
Tout nœud peut être remplacé par un nœud vierge :
(rappel : les nœuds vierges s'interpètent comme des variables quantifiées existentiellement)
Tout nœud vierge peut être éclaté en plusieurs nœuds vierges :
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) :
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 ;
Syntaxe: | http://www.w3.org/TR/rdf-syntax-grammar/ |
---|---|
Valideur: | http://www.w3.org/RDF/Validator/ |
<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>
Syntaxe: | http://www.w3.org/TR/turtle/ |
---|
@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 .
@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 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/ |
<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>
Syntaxe: | http://www.w3.org/TR/json-ld-syntax/ |
---|---|
Valideur: | http://json-ld.org/playground/ |
{ "@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"
}
]
}
Lorsqu'on stocke des données en RDF, il est parfois nécessaire de distinguer plusieurs graphes.
Un dataset RDF est constitué :
d'un graphe par défaut,
d'un ensemble de couples <URI, Graphe>
⚠ aucune relation sémantique imposée entre l'URI et le graphe
SPARQL est un ensemble de recommandations définissant :
Référence: | http://w3.org/sparql |
---|---|
Tutoriel: | http://jena.sourceforge.net/ARQ/Tutorial/ |
« 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 .
}
« 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
« 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 .
}