Skip to content

Sparql : pas 8 (sortir du graphe initial – corrigé de l’exercice)

09/07/2012

Voici la requête SPARQL à laquelle j’arrive

PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX rdf: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?formeretenue ?altLabel_Libelle ?formerejetee
FROM <http://www.w3.org/2004/02/skos/core#>
FROM <http://www.idref.fr/026882949.rdf>
WHERE
{
?Notice skos:prefLabel ?formeretenue.
?Notice skos:altLabel ?formerejetee.
skos:altLabel rdf:label ?altLabel_Libelle.
}

C’est donc une des grandes forces de SPARQL, ou plutôt du web des données, de pouvoir ainsi, en partant d’un graphe, rapatrier sans trop d’efforts dans une requête des données complètements externes à ce graphe initial.

Comment j’en suis arrivé à ça

Attention : je rappelle que je suis moi-même en cours d’apprentissage de la chose. Donc je bidouille, je bricole, j’avance à pas lents et parfois je recule aussi. Donc je suis convaincu qu’il existait une manière plus rapide d’obtenir ce résultat. Je n’explique pas comment il fallait faire, mais bien comment j’ai fait.

Dans Twinkle, j’ai conservé ma requête initiale :

PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
SELECT ?formeretenue ?formerejetee
FROM <http://www.idref.fr/026882949.rdf>
WHERE
{
?Notice skos:prefLabel ?formeretenue.
?Notice skos:altLabel ?formerejetee.
}

Puis j’ai ouvert une autre fenêtre afin d’y explorer le graphe « caché » derrière SKOS :

skos: <http://www.w3.org/2004/02/skos/core#>
SELECT ?verbe ?objet
FROM <http://www.w3.org/2004/02/skos/core#>
WHERE
{
skos:altLabel ?verbe ?objet.
}

La requête ci-dessus ouvre l’URL qui décrit SKOS, et identifie (ligne WHERE) tous les triplets qui ont skos:altLabel comme objet : l’un de ces triplets devrait avoir comme objet le libellé de skos:altLabel. La requête rapatrie le ?verbe et l’ ?objet des triplets rencontrés :

Le dernier de ces triplets (dont je n’affiche pas le sujet : je sais que c’est « skos:altLabel ») a :

Donc c’est bien cet objet que je dois récupérer dans ma requête portant sur la notice IdRef de Romain Gary.

Revenons à ma requête-corrigé :

PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX rdf: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?formeretenue ?altLabel_Libelle ?formerejetee
FROM <http://www.w3.org/2004/02/skos/core#>
FROM <http://www.idref.fr/026882949.rdf>
WHERE
{
?Notice skos:prefLabel ?formeretenue.
?Notice skos:altLabel ?formerejetee.
skos:altLabel rdf:label ?altLabel_Libelle.
}
  • J’ai ajouté en tête le préfixe rdf:, puisqu’il va me servir pour aller chercher le label dans le fichier SKOS
  • Dans ma ligne SELECT, je vais récupérer ce label : c’est la variable ?altLabel_Libelle
  • J’ai désormais deux sources à explorer :
    • la notice IdRef
    • le graphe SKOS
  • Dans les définitions des variables (partie WHERE), j’ai ajouté une ligne : la variable ?altLabel_Libelle se définit comme étant l’objet d’un triplet qui aurait skos:altLabel pour sujet, et rdf:label pour prédicat (càd verbe).

Dans longtemps, peut-être, je serai aussi capable d’aller chercher la traduction française de ce libellé🙂 Mais il n’est pas dans le graphe SKOS, alors…

Une dernière pour la route

Peut-être avez-vous estimé que j’avais triché, et qu’en fin de compte je n’avais jamais fait qu’ajouter une valeur fixe « alterative label@en ».

Mais en réalité si dans la notice RDF on décide de récupérer plusieurs champs (et pas seulement les formes rejetées), la valeur de ce label va changer également :

PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX rdf: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?formeretenue ?Libelle ?proprietes
FROM <http://www.w3.org/2004/02/skos/core#>
FROM <http://www.idref.fr/026882949.rdf>
WHERE
{
?Notice skos:prefLabel ?formeretenue.
?Notice ?verbe ?proprietes.
?verbe rdf:label ?Libelle.
}

Bon, en réalité ça ne rajoute que la forme retenue (que nous avions déjà), mais ça prouve au moins que la chose est possible.

%d blogueurs aiment cette page :