.
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
--------------
.. code-block :: html
Alain Mille
est membre du
LIRIS.
Il connaît
Pierre-Antoine Champin,
un autre membre de
ce laboratoire.
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'interpreter 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
----------------
.. code-block :: javascript
{ "@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"
}
]
}
Autres syntaxes
+++++++++++++++
* Comme l'illustrent RDFa et JSON-LD, tout langage peut être interprété comme du RDF:
* dialectes en XML (GRDDL)
* microformats (http://http://microformats.org/)
* microdata (http://www.data-vocabulary.org/)
* ← Prépondérance de la syntaxe abstraite.
* Difficulté : faire correspondre des URIs là ou d'autres langages utilisent des termes « locaux ».
Dataset et requêtes
===================
Dataset
+++++++
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
⚠ aucune relation sémantique imposée entre l'URI et le graphe
SPARQL
++++++
SPARQL est un ensemble de recommandations définissant :
* un langage d'interrogation d'un *dataset* (SPARQL)
* un langage de mise à jour d'un *dataset* (SPARQL-update ou SPARUL)
* un protocole REST-like pour envoyer des requêtes SPARQL à un *dataset*
:Référence: http://w3.org/sparql
:Tutoriel: http://jena.sourceforge.net/ARQ/Tutorial/
SPARQL : exemple 1
------------------
« Trouver les membres du LIRIS (URI et nom) que je connaît ».
.. code-block:: sparql
PREFIX foaf: #...
SELECT ?p ?n
WHERE {
champin:pa foaf:knows ?p .
liris:lab foaf:member ?p .
?p foaf:name ?n .
}
SPARQL : exemple 2
------------------
« Construire l'union des graphes créés par Pierre-Antoine Champin ».
.. code-block:: sparql
PREFIX dct:
CONSTRUCT { ?s ?p ?o }
WHERE {
?g dct:creator .
GRAPH ?g { ?s ?p ?o }
}
⚠ pré-supposition sur la sémantique des URIs des graphes
SPARUL : exemple
----------------
« Remplacer ``foaf:firstName`` par ``foaf:givenName`` pour tous les membres du LIRIS ».
.. code-block:: sparql
PREFIX foaf:
DELETE {
?m foaf:firstName ?n .
}
INSERT {
?m foaf:givenName ?n .
}
WHERE {
foaf:member ?m .
?m foaf:givenName ?n .
}