Requêter le contenu de Wikipedia avec SPARQL

Pour prolonger le débat récent entre Thomas et Bruno sur RDF et XML, un petit exemple illustrant le fait que SPARQL permet de requêter un graphe RDF, même très grand, sans connaître a priori ni sa structure, ni l’ontologie sous-jacente.

DBpedia, dont je vous ai déjà parlé, définit une URI à partir de chaque article du Wikipedia anglais, cette URI identifiant le sujet de l’article, la chose dont il parle. En fait l’article parle en général de beaucoup de choses, mais il a un sujet principal, par principe même de l’encyclopédie : « un article, une chose décrite ». Par exemple l’article http://en.wikipedia.org/wiki/Mondeca a pour sujet … Mondeca. Ce sujet est défini dans DBpedia par l’URI
http://dbpedia.org/resource/Mondeca. Cette URI est différente de celle de l’article lui-même conformément aux recommandations du Web sémantique : distinguer l’URI identifiant la chose Mondeca d’autres URI identifiant des représentations, descriptions et autres ressources décrivant cette chose, comme par exemple la page de Wikipedia.

Le serveur de DBpedia gère une négociation de contenu en définissant deux autres URI, l’une pour la description RDF générée automatiquement à partir du contenu structuré de l’article, et l’autre fournissant un rendu html de cette description (via une feuille de style). Une requête standard envoyée par un navigateur standard, qui demande une représentation texte/html, sera ridirigée via un « 303 redirect » vers la page html http://dbpedia.org/page/Mondeca. Si la requête demande du RDF (par exemple en utilisant l’extension Tabulator de Firefox), la requête ramènera la description RDF http://dbpedia.org/data/Mondeca.

Cela semble compliqué a priori, pourquoi 4 URI pour la même chose? En fait seule l’URI http://dbpedia.org/resource/Mondeca identifie vraiment la chose Mondeca, les trois autres identifient des représentations diverses de cette chose : un article d’encyclopédie, une descrition formelle extraite de cet article, et un rendu html de cette description formelle.

Maintenant si on regarde le contenu de la description RDF, on peut retenir que Mondeca a un nom d’entreprise, une localisation, et une catégorie indiquée par une propriété skos:subject.

p:companyName « Mondeca »
p:location dbpedia:Paris
skos:subject dbpedia:Category:Software_companies

Même sans connaître les détails de l’ontologie utilisé par DBpedia, ni la structure du graphe ou de la base de données, on peut simplement s’intéresser à ces trois éléments de description, et poser par exemple la question : « Quelles sont les autres « choses » de même catégorie situées au même endroit, et quel est leur nom? » Pour cela, on peut interroger la base DBpedia à partir du « SPARQL endpoint » situé à l’adresse http://dbpedia.openlinksw.com:8890/sparql.

La requête a la forme suivante, qu’il suffit de copier dans la fenêtre de saisie (Firefox recommandé).

PREFIX p: <http://dbpedia.org/property/&gt;
PREFIX dbpedia: <http://dbpedia.org/resource/&gt;
PREFIX category: <http://dbpedia.org/resource/Category:&gt;
PREFIX skos: <http://www.w3.org/2004/02/skos/core#&gt;

SELECT ?x ?n
WHERE {
?x p:location dbpedia:Paris.
?x p:companyName ?n.
?x skos:subject category:Software_companies.}

Et les résultats sont les suivants

http://dbpedia.org/resource/Business_Objects_%28company%29 Business Objects SA
http://dbpedia.org/resource/AdaCore AdaCore, Inc.
http://dbpedia.org/resource/Valtech Valtech
http://dbpedia.org/resource/FatWire FatWire Software
http://dbpedia.org/resource/Mondeca Mondeca

Maintenant si je veux savoir quels sont les éléments de description utilisés pour ces choses, c’est-à-dire interroger l’ontologie elle-même, je peux envoyer la requête suivante, qui traduit formellement la question : « Quels sont les éléments de description utilisés par les sociétés de logiciel situées à Paris? »

PREFIX p: <http://dbpedia.org/property/&gt;
PREFIX dbpedia: <http://dbpedia.org/resource/&gt;
PREFIX category: <http://dbpedia.org/resource/Category:&gt;
PREFIX skos: <http://www.w3.org/2004/02/skos/core#&gt;

SELECT DISTINCT ?p
WHERE {
?x ?p ?y.
?x p:location dbpedia:Paris.
?x skos:subject category:Software_companies.}

Dans la liste des propriétés, je trouve dbpedia:companySlogan qui n’est pas utilisé dans la description de Mondeca.
Je peux donc maintenant m’intéresser aux slogans des sociétés basées à Paris. A noter qu’on suppose ici que les « choses » qui ont une propriété companyName et une propriété companySlogan sont des sociétés …

PREFIX p: <http://dbpedia.org/property/&gt;
PREFIX dbpedia: <http://dbpedia.org/resource/&gt;
PREFIX category: <http://dbpedia.org/resource/Category:&gt;
PREFIX skos: <http://www.w3.org/2004/02/skos/core#&gt;

SELECT ?n ?s
WHERE {
?x p:location dbpedia:Paris.
?x p:companyName ?n.
?x p:companySlogan ?s.}

… je vous laisse commenter les résultats.

3 commentaires pour Requêter le contenu de Wikipedia avec SPARQL

  1. J’avais exposé une idée similaire à celle exposée par Bernard dans le billet suivant : http://lespetitescases.net/sparql-maillon-essentiel-web-of-data . Par ailleurs, j’ai mis au point un certain nombre d’exemples d’utilisation de DBpedia qui complèteront l’exemple donné par Bernard : http://lespetitescases.net/dbpedia/ (cf les billets : http://www.lespetitescases.net/dbpedia-en-action et http://lespetitescases.net/dbpedia-en-action-la-suite).

  2. bruno dit :

    « Même sans connaître les détails de l’ontologie utilisé par DBpedia, » => je vois toujours pas le point là. Vous écrivez ça puis juste après vous donnez une requête qui utiilise des prédicats SKOS ou dbpedia.. Donc vous savez que dpedia utilise ces vocabulaires et donc vous avez une connaissance du modèle RDF dérrière. Je passe à côté de la subtilité là.
    A partir du moment où vous voulez naviguer par relations dans un graphe RDF, si vous voulez préciser les relations utilisées dans votre requête, vous êtes obligé de connaitre les vocabulaires utilisés pour indiquer les prédicats.

  3. bernard dit :

    Bruno

    Quand je dis que je ne connais pas a priori l’ontologie, je veux dire par là que je peux requêter le graphe de proche en proche *sans en connaître la structure globale*, à partir d’éléments minimaux comme la description d’une seule instance que j’ai trouvée par hasard sur le Web. Dans la description de cette instance je trouve les propriétés utilisées (type, catégorie, localisation …). Les requêtes SPARQL me permettent de découvrir aussi bien les autres instances partageant des propriétés identiques comme le type, la catégorie, la localisation, que d’autres propriétés utilisées par ces mêmes instances. Si je ne connaissais rien du tout de l’ontologie ni des instances je pourrais quand même interroger en cherchant par exemple toutes les classes disponibles. SELECT DISTINCT ?c WHERE {?x a ?c}, ou toutes les propriétés, SELECT DISTINCT ?p WHERE {?x ?p ?y}, etc. L’utilisation des prédicats SKOS et dbpedia aurait pu être « découvert » de cette façon, de proche en proche, sans aucune connaissance a priori ni de leur existence ni de leur mode d’utilisation. La seule chose à savoir a priori c’est un minimum du minimum, à savoir que les données sont structurées en triplets RDF. Tout le reste je le découvre dans le graphe.

Laisser un commentaire

Choisissez une méthode de connexion pour poster votre commentaire:

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 :