Introduction OO au web sémantique
© 2014 Jean-Marc Vanel deductions-software.com - license Creative Commons License by-nc-nd 3.0
Table
Imaginez que vous puissiez écrire comme en Java/Python/Ruby/etc , des affectations de propriété comme ceci:
France.president = Francois_Hollande // 1 Deduction.type = SARL // 2 Deduction.siege = Paris pl.type = playlist pl.track = Lover_Man
Mais vous voudriez pouvoir échanger ces données :
En somme on veut faire du partage ou transmission de données sans conventions
préalables.
C'est à dire que la sémantique doit être portable.
Comment faire ?
C'est là que le web sémantique apporte une solution.
Justement en exprimant la sémantique à l'aide de la toile.
L'idée de base est très simple: chaque concept (objet, instance, propriété, classe) est associé à un URI ( URL généralement ). Ces URI spéciaux sont appelés "ressources".
Cela a 2 avantages:
Pour définir plus concrètement le système, on a besoin:
Ensuite nous verrons comment exprimer des données quelconques avec le web
sémantique. Enfin nous parcourerons brièvement l'écosystème.
Allons y pour le point 1 . Ce langage s'appelle Turtle. Voici comment l'affectation de propriété 1 ci-dessus se traduit :
<http://dbpedia.org/resource/France> <http://dbpedia.org/ontology/leaderName> <http://dbpedia.org/resource/Fran%C3%A7ois_Hollande> .
Il se présente comme un triplet, terminé par un point . Chaque élément est un URI entre <> . Les trois éléments sont appelés sujet, prédicat (ou propriété, ou verbe), objet.
Au passage on voit où beaucoup de concepts de base sont définis: dans dbpedia.org, projet qui réalise des extractions
à partir des boîtes de propriétés dans Wikipedia. Puisque Wikipedia est une
encyclopédie, il y a beaucoup de choses dedans. Et bien sûr le triplet
ci-dessus sur François Hollande est dans la base dbPedia.
Il y a plusieurs couches de sucre syntaxique dans Turtle, notamment les préfixes. Le fragment ci-dessus s'écrit aussi:
@prefix dbpedia: <http://dbpedia.org/resource/> . @prefix dbpedia-owl: <http://dbpedia.org/ontology/> . dbpedia:France dbpedia-owl:leaderName dbpedia:Fran%C3%A7ois_Hollande .
On peut aussi avoir des objets qui ne sont pas des resources, mais ce qu'on appelle des litéraux, c'est à dire des valeurs typées (ou non) à l'aide des types de donnée XML Schema, ou autre. Les litéraux non typés peuvent aussi avoir un langue spécifiée. Les litéraux typés peuvent avoir un type spécifié.
dbpedia:France dbpprop:gdpNominalPerCapita "40690.0"^^<http://dbpedia.org/datatype/usDollar> ; foaf:name "France"@en ; dbpedia-owl:populationDensity "116.217"^^<http://www.w3.org/2001/XMLSchema#double> .
Au passage on voit un autre sucre syntaxique, le point-virgule, qui permet
de partager un même sujet dbpedia:France
entre 3 triplets.
Le sauts de ligne n'ont pas de signification particulière (contrairement à Python). Mais on peut utiliser trois " pour écrire une chaîne avec des sauts de ligne:
dbpedia:France rdfs:comment """La France, en forme longue la République française, est une république constitutionnelle unitaire ayant un régime parlementaire à tendance présidentielle dont la majeure partie du territoire et de la population sont situés en Europe occidentale, mais qui comprend également plusieurs régions et territoires répartis dans les Amériques, l’océan Indien et l'océan Pacifique. Elle a pour capitale Paris, pour langue officielle le français et pour monnaie l’euro."""@fr .
On peut aussi exprimer des listes ordonnées avec () :
<me> :hasPreferences ( dbpedia:Fruit dbpedia:Ice_cream dbpedia:Chocolate ) .
Ce qu'on appelle un vocabulaire est un ensemble de propriétés et de classes, se rapportant à un domaine: commerce, musique, réseaux sociaux, etc. Pour amorcer le système, il y a deux vocabulaires définis par le W3C: RDF et RDF Schema (RDFS). Il permettent de définir la notion même d'instance, de propriété et de classe. Ainsi grâce à RDF et RDFS on peut définir tous les autres vocabulaires.
Par exemple, dans le domaine des réseaux sociaux, voici comment on définit la classe personne dans le vocabulaire FOAF:
foaf:Person a rdfs:Class , owl:Class ; rdfs:comment "A person." ; rdfs:label "Person" ; rdfs:subClassOf <http://www.w3.org/2003/01/geo/wgs84_pos#SpatialThing> , foaf:Agent ; owl:disjointWith foaf:Project , foaf:Organization ; owl:equivalentClass <http://schema.org/Person> , <http://www.w3.org/2000/10/swap/pim/contact#Person> .
Et voici comment on définit la propriété knows, exprimant qu'une personne connait une autre:
foaf:knows a owl:ObjectProperty , rdf:Property ;
rdfs:comment "A person known by this person (indicating some level of reciprocated interaction between the parties)." ;
rdfs:domain foaf:Person ;
rdfs:label "knows" ;
rdfs:range foaf:Person .
On voit au passage des briques de base très utiles :
rdfs:label
et rdfs:comment
.
Le a
signifie
rdf:type
.
Pour voir un example de données FOAF (appelées parfois profil FOAF), voir celui de Tim Berners Lee , et le mien .
vocabulaires classiques: FOAF, Dublin Core, Good Relations + schema.org, DOAP, SIOC, ... OWL
consensus
réutiliser
créer ses URI
publication directe
graphes navigables
messages
LDP, HTTP REST
SPARQL, triples dans des bases SQL ou no-SQL
JSON-LD
développement et applications sémantiques : EulerGUI, Stample, ACE Wiki, https://github.com/Graphity/, Callimachus, ...