Introduction OO au web sémantique

© 2014 Jean-Marc Vanel deductions-software.com - license Creative Commons License by-nc-nd 3.0

Table

Données portables sans conventions préalables

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:

  1. les URI sont par définition des identifiants globalement uniques dans le web, qui est lui-même le principal réseau informatique;
  2. en ouvrant avec un navigateur web une de ces URI "spéciales" , celui qui gère le concept peut fournir une définition du concept lisible par l'homme.




Pour définir plus concrètement le système, on a besoin:

  1. d'un langage pour exprimer les relations entre resources;
  2. de quelques concepts de base pour amorcer (bootstrap) tout ça.

Ensuite nous verrons comment exprimer des données quelconques avec le web sémantique. Enfin nous parcourerons brièvement l'écosystème.


Le langage Turtle

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 ) .

Concepts de base pour amorcer

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 .

Exprimer vos données quelconques avec le web sémantique

vocabulaires classiques: FOAF, Dublin Core, Good Relations + schema.org, DOAP, SIOC, ... OWL

consensus

réutiliser

créer ses URI

Qu'est qu'on fait avec tout ça ?

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, ...