Ce billet présente un scénario d’utilisation de requête distribuée et montre la construction d’une requête associant un jeu de données qui nous est propre et dbpedia. Je crois qu’il peut être éclairant, même sans pouvoir directement utiliser les exemples.
pour tester les exemples: voir note à la fin de ce billet
I. Enrichissement d’un jeu de donnée à partir de DBPedia
Réflexions autour du cas ‘Postimpressionnisme’
postimpressionnisme est un des tags présents dans un de nos jeux de données (http://givingsense.eu/onto/refCulture/refHistArts.rdf et http://www.data.gouv.fr/fr/dataset/ressources-pedagogiques-pour-l-enseignement-de-l-histoire-des-arts). Nous nous sommes demandés ce que nous pourrions tirer de dbpedia pour ce tag et avons cherché à généraliser la démarche.
La requête SPARQL
select distinct * where { ?s rdfs:label "Postimpressionnisme” . } LIMIT 100
appliquée à fr.dbpedia.org/sparql ne donne rien
La requête
select distinct * where { ?s rdfs:label "Postimpressionnisme”@fr . } LIMIT 100
appliquée à fr.dbpedia.org/sparql donne un résultat:
http://fr.dbpedia.org/resource/Postimpressionnisme
Les liens dbpedia-owl:wikiPageWikiLink qu’on y trouve suggèrent des pistes pour établir des relations avec d’autres ressources.
On trouve par exemple des liens avec
On a aussi les propriétés dcterms:subject
dcterms:subject |
ou des backlinks ‘is dbpedia-owl:wikiPageWikiLink of’
Cela suggère, par exemple, la possibilité de requêtes permettant de trouver des musées en rapport avec un sujet.
Par exemple, la requête
select distinct * where { ?s rdfs:label "Postimpressionnisme"@fr . ?m dbpedia-owl:wikiPageWikiLink ?s . ?m prop-fr:nommusée ?p } LIMIT 100
me donne neuf musées en rapport avec le Postimpressionnisme.
Je chercherais à vérifier systématiquement ce que nous pouvons tirer pour les tags qui sont un courant artistique, mais aussi avec d’autres tags. Je pense donc que sur ce modèle, je peux trouver les musées qui sont en rapport avec chacun des tags de mon jeu de données.
J’ai choisi quelques exemples à partir des programmes scolaires d’histoire pour lesquels nous avons des ontologies et des tags (voir par exemple https://ilot.wp.imt.fr/2014/01/16/publication-de-references-culturelles-dans-un-triple-store/).
Cherchons à le vérifier avec le tag ‘Première Guerre mondiale’. Je trouve 51 musées.
Cherchons à le vérifier avec le tag ‘Carolingiens’. Je trouve 4 musées.
D’autres comme ‘Femme’ ou ‘Taoïsme’ ne donnent rien.
Une recherche systématique va être intéressante.
Elle reposera probablement sur des requêtes dans Fuseki qui interrogeront simultanément notre jeu de données et dbpedia.
II. Une requête SPARQL distribuée
La requête suivante
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX prop-fr: <http://fr.dbpedia.org/property/> PREFIX refc: <http://givingsense.eu/onto/refCulture/refHistArts.rdf#> PREFIX dbpedia-owl: <http://fr.dbpedia.org/ontology/> SELECT distinct ?vtag ?s WHERE { ?fiche refc:tags ?tags . ?tags ?v ?vtag . BIND (STRLANG(?vtag,"fr") AS ?tag) . SERVICE <http://fr.dbpedia.org/sparql> { ?s rdfs:label ?tag . } } LIMIT 100
nous montre que de nombreux tags de notre jeu de données sont associés à une ressource de DBPedia.
Cette requête conduit à trouver un ensemble de fiches de notre jeu de données. Les fiches ont pour propriétés un ensemble de tags; on trouve cette association avec cette partie de la requête
?fiche refc:tags ?tags
On trouve chaque tag d’un ensemble associé à une fiche avec cette partie
?tags ?v ?vtag .
Comme nous savons que nos tags n’ont pas d’attribut de langue -c’est un défaut de l’état actuel de notre jeu de données- nous en ajoutons un avec la ligne
BIND (STRLANG(?vtag,"fr") AS ?tag) .
Ensuite, nous allons utiliser l’élément ?tag ainsi créé pour interroger dbpedia; nous signifions que nous interrogeons dbpedia en englobant le code concerné par
SERVICE <http://fr.dbpedia.org/sparql> { <... ici les éléments de requête envoyés à dbpedia ...> }
La ligne que nous envoyons au dbpedia français
?s rdfs:label ?tag .
nous renvoie toutes les ressources de dbpedia associées aux tags présents dans notre jeu de données (ici, limité aux 100 premiers).
Ainsi, nous allons trouver toutes les associations, via le label, entre un tag de notre jeu de données et une ressource de dbpedia.
J’ai cherché à systématiser par la combinaison de cette requête avec la requête sur les musées présentée à la section précédente. L’idée étant d’arriver à une application qui permette pour chaque tag d’avoir des propositions de musées.
La combinaison donne quelque chose comme
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX prop-fr: <http://fr.dbpedia.org/property/> PREFIX refc: <http://givingsense.eu/onto/refCulture/refHistArts.rdf#> PREFIX dbpedia-owl: <http://dbpedia.org/ontology/> SELECT distinct ?vtag ?m WHERE { ?fiche refc:tags ?tags . ?tags ?v ?vtag . BIND (STRLANG(?vtag,"fr") AS ?tag) . SERVICE <http://fr.dbpedia.org/sparql> { ?s rdfs:label ?tag . ?m prop-fr:nomDuMusée ?p . ?m dbpedia-owl:wikiPageWikiLink ?s } } LIMIT 20
qui marche bien.
On peut aussi remplacer la propriété
prop-fr:nomDuMusée
par prop-fr:nommusee.
(il y 69 ressources dans fr.dbpedia pour la première propriété, tandis qu’il y en a 1966 pour la deuxième)
Ainsi, grâce à notre formalisation des programmes scolaires dans des ontologies et à la mise en oeuvre assez simple des principes des Linked Data, nous pouvons proposer des associations entre tags décrivant certaines parties du programme scolaire et musées, par exemple pour aider des enseignants de différentes matières à aborder des domaines de l’Histoire des Arts, comme ils y sont tenus.
_____
**pour tester les exemples:
Ce billet suppose qu’un outil suivant les spécifications de SPARQL 1.1. est utilisé. Les exemples ont été testés avec Jena-Fuseki; pour tester ces exemples nous avons utilisé une installation locale de Fuseki sur une de nos machines. Notre serveur public (http://shadok.enst.fr:8890/sparql) est une version un peu ancienne de Virtuoso (paquet debian stable, basé sur une version de 2011 de Virtuoso); elle ne supporte pas des fonctionnalités dont nous avons besoin pour les exemples qui précédent; pour l’instant, nos services informatiques, devant faire face à de nombreuses attaques, s’opposent à l’installation d’une version plus à jour.
Le lecteur intéressé par tester les exemples ci-dessous devra installer Fuseki (https://jena.apache.org/documentation/serving_data/index.html), y importer notre jeu de données disponible (http://givingsense.eu/onto/refCulture/refHistArts.rdf et http://www.data.gouv.fr/fr/dataset/ressources-pedagogiques-pour-l-enseignement-de-l-histoire-des-arts)
Ping : Publication de références culturelles dans un triple-store | ILOT - Sémantique et éducation