Exemple d’exploitation de requête SPARQL distribuée (federated query)

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)

 

 

A propos Moissinac

Maitre de conférence à Télécom Paris, Département Image, Données, Signal - Groupe Multimédia Jean-Claude Moissinac a mené des recherches sur les techniques avancées pour la production, le transport, la représentation et l’utilisation des documents multimédia. Ces travaux d'abord ont évolué vers la représentation sémantique de données liées au multimédia (process de traitement de médias, description d'adaptations de média, description formelle d'interactions utilisateurs). Aujourd'hui, les travaux portent sur la constitution de graphes de connaissances. Principaux axes de recherche actuel : représentations sémantiques de connaissances, constitution de graphes de connaissances, techniques d'apprentissage automatique sur ces graphes
Ce contenu a été publié dans Cuisine OWL, DBPedia, Données publiques. Vous pouvez le mettre en favoris avec ce permalien.

Une réponse à Exemple d’exploitation de requête SPARQL distribuée (federated query)

  1. Ping : Publication de références culturelles dans un triple-store | ILOT - Sémantique et éducation

Les commentaires sont fermés.