===== RDF ===== .. include:: common.inc .. only:: html .. notslides:: .. contents:: :local: :depth: 1 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 : 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" ]; 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* : .. rst-class:: center 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. .. rst-class:: center 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. .. rst-class:: center (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" ] .. !!!!! END COPY-PASTE from ../../lod/source/rdf.rst 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 » .. todo: use something else (admonition?) for the note below .. rst-class:: small 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. .. todo: use something else (admonition?) for the note below .. rst-class:: small 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 ----------------- .. code-block:: xml Alain Mille Pierre-Antoine Champin 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/ .. _N3: http://www.w3.org/DesignIssues/Notation3.html Turtle: exemple --------------- .. code-block:: turtle @prefix foaf: . @prefix champin: . 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 ----------------- .. code-block:: turtle @prefix foaf: . @prefix champin: . 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'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 ---------------- .. code-block :: javascript { "@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: * 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 IRIs là ou d'autres langages utilisent des termes « locaux ». Vocabulaires ============ Trouver un vocabulaire ++++++++++++++++++++++ * http://swoogle.umbc.edu/ * http://lov.okfn.org/ Quelques vocabulaires utiles ++++++++++++++++++++++++++++ .. contents:: :local: 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