Skip to content

Une URI, deux URI, tralalalalère

13/11/2016

Cherchez pas à comprendre le titre, je l’ai pris comme une évidence sous le coup de l’inspiration

Interpellé de bon matin par Gautier Poupeau sur Twitter, un week-end de pont (faut-y être sadique ! ou obsessionnel !) sur nos URI et nos alignements dans data.bnf.fr, je trouve que l’occasion est excellent pour faire un petit récapitulatif de la situation.

Bien sûr, pour ceux qui ont déjà été confrontés à de la modélisation RDF, je n’apprendrai rien. Mais je suppose qu’il en reste quelques-uns qui ne sont pas encore passés par là : donc voici le problème.

Au commencement était le Verbe

Cas d’école : vous voulez exposer en RDF un lot de notices de personnes (que ce soient les auteurs dans votre catalogue, ou les chercheurs dans votre annuaire universitaire). Vous allez attribuer à chacun d’entre eux une URI (généralement construite à partir de l’identifiant interne dans votre base de données) et affecter un certain nombre de propriétés à cette ressource.

Par exemple si votre base de données contient l’info :

vian_boris

Vous allez pouvoir exposer les triplets suivants, adossés aux ontologies FOAF + BIO qui vous fournissent les propriétés nécessaires :

<http://mon.univ.fr/123456> rdf:type foaf:Person
<http://mon.univ.fr/123456> foaf:familyName"Vian"
<http://mon.univ.fr/123456> foaf:givenName "Boris"
<http://mon.univ.fr/123456> bio:birth "1920-03-10"

La première ligne est essentielle : pour toute ressource exposée, on prend la peine de préciser de quoi on parle (ce qui est logique dans une base de données interne, n’a rien d’évident une fois exposé sur le web, récupéré, décontextualisé, etc.)

Maintenant, vous avez aussi une table des pseudonymes, et vous voulez exposer la liste des pseudonymes de Boris Vian.

sullivan

Pour lister des « formes alternatives » (ou « autres dénominations ») l’ontologie SKOS est très pratique : elle vous permet de définir des skos:altLabel en plus du (non répétable) skos:prefLabel.

Le plus simple et tentant serait donc d’écrire :

<http://mon.univ.fr/123456> skos:altLabel "Sullivan, Vernon"

Ben oui mais non : la propriété skos:altLabel ne peut avoir pour sujet qu’un skos:Concept. Or la ressource identifiée par l’URI <http://mon.univ.fr/123456&gt; n’est pas de type skos:Concept mais de type foaf:Person.

Une personne a une date de naissance. Un concept a, au mieux, une date de création (c’est-à-dire généralement la date de création de la notice). Ce sont donc deux choses bien distinctes.

Bref, si vous voulez utiliser à la fois les propriétés de FOAF et celles de SKOS, il va vous falloir deux ressources distinctes (le concept et la personne), donc deux URI distinctes, chacune avec ses propriétés, et un lien entre les deux.

Ce lien s’exprimera sous la forme : http://uri_du_concept foaf:focus http://uri_de_la_personne1

Dans data.bnf.fr, c’est propre…

Il y a plein de choses à revoir dans le modèle de data.bnf.fr, très certainement. Mais pour cette question-là, la distinction est bien faite : Boris Vian a

Et on a bien les triplets

<http://data.bnf.fr/ark:/12148/cb13091689x> rdf:type skos:Concept
<http://data.bnf.fr/ark:/12148/cb13091689x#foaf:Person> rdf:type foaf:Person

Chacune de ses URI a les propriétés adaptées qui lui sont associées : la date de naissance est attribuée à la personne, les formes alternatives (pseudonymes) sont attribuées au concept.

… ou presque

Les 5 étoiles du linked data

Les 5 étoiles du linked data

Mais on a un effet de bord, dû à la philosophie même de ce qu’est le web de données liées.

On s’efforce de lier autant que possible des ressources BnF à d’autres référentiels, de construire les équivalences.

Cela permet au réutilisateur des données de les enrichir facilement, en allant récupérer par exemple ailleurs la photo de Boris Vian si data.bnf.fr.

Par exemple, DBpedia (qui reste au centre du graphique Linked open data cloud dans sa version la plus récente — août 2014, avant la montée en puissance de Wikidata) fournit une propriété foaf:depiction avec photo.

Les données de data.bnf.fr sont donc alignées avec DBpedia. En soi, c’est une bonne idée. C’est même un minimum.

Malheureusement DBpedia n’a pas fait le même effort de modélisation. Et au lieu de distinguer 2 URI pour chaque ressource (faut reconnaître que ça peut compliquer la modélisation pour les modélisateurs, et la réutilisation pour les réutilisateurs), chaque ressource est tout simplement déclarée comme étant à la fois le concept et la personne.

personne_et_concept

Donc dans data.bnf.fr, devons-nous lier à DBpedia notre URI concept ou notre URI personne ?

Devons-nous exposer le triplet

<http://data.bnf.fr/ark:/12148/cb13091689x#foaf:Person&gt; owl:sameAs <http://fr.dbpedia.org/resource/Boris_Vian&gt;

ou le triplet

<http://data.bnf.fr/ark:/12148/cb13091689x&gt; skos:Concept <http://fr.dbpedia.org/resource/Boris_Vian&gt;

En fait, les deux alignements ont été déclarés dans data.bnf.fr. Cela nous conduit à une erreur dans notre propres données, puisque par déduction (on dit inférence) ça signifie que nos deux ressources, le concept et la personne, sont une seule et même chose.

Comment faire ?

On aurait pu imaginer de ne conserver qu’un de ces deux triplets. Par exemple, retenir que l’URI de DBpedia désigne la personne Boris Vian (avec date de naissance, etc.) et ne garder que l’équivalence :

<http://data.bnf.fr/ark:/12148/cb13091689x#foaf:Person&gt; owl:sameAs <http://fr.dbpedia.org/resource/Boris_Vian&gt;

Mais le résultat n’est pas tellement plus heureux : en effet l’URI DBpedia a comme propriété (entre autres)  rdf:type skos:Concept

Par inférence, cela revient à dire que notre foaf:Person est donc de type skos:Concept

Le problème est identique si l’on décide de lier notre URI concept à l’URI DBpedia : par inférence, notre concept serait donc aussi une personne.

Enfin bref, dès lors qu’on se lie à une ressource DBpedia de ce type-là (il y a beaucoup de types de ressources dans DBpedia, bien plus que dans data.bnf.fr, donc j’ignore si le problème se pose systématiquement), on créer une incohérence sur notre propres données.

En voulant enrichir nos données, sans même importer d’information de DBpedia, on en vient à les polluer. La seule conclusion logique serait donc de s’interdire de se lier à DBpedia.

En tout cas c’est la seule que j’envisage. Et je ne la trouve pas plus satisfaisante.

——————————————–
1. Je trouve d’ailleurs curieux que ce soit l’ontologie FOAF, et non l’ontologie SKOS, qui fournisse une propriété permettant de relier la chose (ici la personne) à son concept. En effet dans plein de cas on aura autre chose que des personnes (des objets, des événements, des documents), toutes sortes de choses du monde réel (même si skos:Concept est lui aussi une sous-classe de owl:Thing, puisque tout est chose et que les concepts, comme Internet, font partie du « vrai » monde) pour lesquelles on aura besoin de les associé à leur fiche SKOS — sans pouvoir utiliser foaf:focus, dont le sous-domaine (l’objet) est nécessairement un foaf:Agent (personne ou organisation).

2 commentaires leave one →
  1. 13/11/2016 23:39

    Premièrement, je ne suis ni sadique, ni obsessionnel, je préparais une formation et oui, je bosse le week-end😉

    Deuxièmement, une petite remarque : le domaine de la propriété altLabel n’est pas précisé dans l’ontologie, donc cette propriété peut avoir pour sujet des ressources de n’importe quel type, il en va de même pour skos:prefLabel et également pour skos-xl. Donc ton exemple est mal choisi, Bernard Vatant (grand manitou des référentiels en RDF chez Mondeca, maintenant à la retraite) m’avait donné cet exemple que j’ai fait mien et que je répète systématiquement à mes étudiants : pour décrire un concept dans un référentiel, tu as besoin d’exprimer la création de ce concept, sa mise à jour, son créateur… Or, s’il est juste de dire que ta/ton bibliothécaire (indique ici le prénom que tu souhaites) crée le concept « Barack Obama » en 2004, en revanche on ne peut pas dire que la même bibliothécaire a créé la personne « Barack Obama » en 2004… Je trouve que cet exemple est très parlant…

    Troisièmement, pourquoi focus a été ajouté dans FOAF et non SKOS : pour des raisons de simplicité de mise à jour et de personnes. Cette discussion/besoin est assez ancienne et est réapparue lors des activités du groupe Library Linked Data. L’ajouter dans SKOS, déjà recommandation du W3C, était trop compliqué, car cela imposait de refaire une version de recommandation et comme Dan Brickley a directement la main sur FOAF, il a juste proposé de l’ajouter dans FOAF (ce qui n’est pas totalement illogique car cette question concernait en premier lieu des problèmes concernant les personnes). Si tu veux toute l’histoire, je te conseille la lecture de ce thread : https://lists.w3.org/Archives/Public/public-esw-thes/2010Aug/0002.html

    Enfin, pour revenir au sujet : le choix qu’une ressource soit à la fois un concept et une personne est propre à Dbpedia FR, si tu regardes la Dbpedia originale, elle ne pose pas ce problème, maintenant il est vrai qu’avec l’inférence owl:sameAs , ça revient au même d’un point de vue logique, il en va de même pour l’URI de Wikidata qui ne pose pas ce problème, mais qui le pose par inférence. Bref, le problème vient du choix de Dbpedia FR. Maintenant, soyons pragmatique, cela paraît plus logique étant donné les informations mises à disposition que les URI de Dbpedia, Dbpedia FR et wikidata soient liés à la personne et que l’URI de VIAF soit relié à la ressource du concept. C’est tellement plus logique quand tu exploites les données (mets les ressources de data et de dbpedia dans un triple store et fais quelques requêtes SPARQL, tu trouveras rapidement les réponses à tes questions…)

Trackbacks

  1. Une URI, deux URI, tralalalalère | Vers ...

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :