Utilisation de SPARQL avec le SMT


Les terminologies dont les concepts sont disponibles (indexés) dans le SMT peuvent être interrogées à l’aide du langage de requête SPARQL directement sur le site.

Qu’est-ce que SPARQL ?

SPARQL (SPARQL Protocol and RDF Query Language) est un langage de requêtes standardisé proposé et publié par le W3C.

Le développement et l’évolution de cette norme sont supervisés par le groupe de travail SPARQL au sein du W3C. Bien que certaines parties du langage soient encore en cours de développement, il est entièrement documenté et accessible au public.

La partie 3 du cours de l’INRIA sur le Web sémantique et le Web de données explique les bases du langage SPARQL.

Accès au point de terminaison SPARQL

Le point de terminaison (Endpoint) SPARQL est accessible publiquement. Le SMT intègre le client web SPARQL YasGUI pour l’interrogation du point de terminaison. Il permet la mise en évidence et la validation de la syntaxe des requêtes SPARQL, la saisie semi-automatique ainsi que la persistance des requêtes à travers les sessions.

En plus du client web qui est disponible sur le SMT, le point de terminaison SPARQL est aussi accessible à distance via un client SPARQL tiers, ou via l’API /api/sparql.

Limitations

Le point de terminaison SPARQL est fourni avec les limitations suivantes :

  • Seules les requêtes en lecture sont autorisées.
  • La durée d’exécution des requêtes sur le serveur est limitée à 10 secondes.
  • Le nombre maximum de résultats renvoyés par une requête est fixé à 10 000.

Par ailleurs, comme pour les autres moyens d’accès au détail des terminologies sur le SMT (le site web ou les API), il peut être nécessaire de s’authentifier avant de pour pouvoir effectuer des requêtes sur certaines terminologies.

Exemples de requêtes

Cette section liste des exemples de requêtes SPARQL testées et exécutées sur les terminologies du SMT en utilisant le point de terminaison.

Pour information des exemples de requêtes SPARQL sont fournies pour un certain nombre de terminologies en téléchargement comme pour la CIM-10.

Lister les graphes de terminologie disponibles

C’est la requête proposée par défaut.

SELECT  DISTINCT ?g
   WHERE  { GRAPH ?g {?s ?p ?o} } 
ORDER BY  ?g

Elle renvoie les URI des graphes sur lesquels il est possible de faire une requête (un graphe par terminologie).

Remarque : Il est fortement conseillé d’utiliser le mot-clé FROM pour définir quels sont les graphes des terminologies à interroger. Cela permet notamment d’améliorer d’exécution d’une requête et de limiter les réponses aux résultats concernant les terminologies ciblées.

Lister les concepts d’une terminologie

La requête suivante permet de récupérer tous les concepts de la terminologie ADICAP (code et label(s)) :

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
SELECT ?code ?label
FROM <http://data.esante.gouv.fr/graph/terminologie-adicap>
WHERE {
  ?adicap_uri skos:notation ?code .
  ?adicap_uri rdfs:label ?label .
}

Remarque : Les propriétés skos:notation et rdfs:label sont utilisées de manière standard dans les terminologies du catalogue CGTS pour représenter les identifiants et libellés des concepts. Une requête similaire (en changeant le nom du graphe) peut être appliquée aux terminologies CISP-2, CIM-10 et CIM-11.

Tester l’existence d’un label dans le SMT (requête ASK)

La requête ASK suivante teste l’existence du terme « Examen médical partiel; bilan de santé partiel » dans le SMT.

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
ASK 
WHERE { ?label rdfs:label "Examen médical partiel; bilan de santé partiel"@fr}
True : pour spécifier que le terme « Examen médical partiel; bilan de santé partiel » existe bien dans le SMT

Récupérer tous les termes : préférés et synonymes (si ils existent) d’une terminologie (exemple de la CISP-2)

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
SELECT ?code ?label ?synonym
FROM <http://data.esante.gouv.fr/graph/terminologie-cisp>
WHERE {
  ?cisp_uri skos:notation ?code .
  ?cisp_uri rdfs:label ?label .
  
OPTIONAL { 
  ?cisp_uri skos:altLabel ?synonym .   
} 
  FILTER(lang(?label) = lang(?synonym))  
}

Récupérer l’arborescence des concepts dans une terminologie (exemple de la CIM-10)

PREFIX owl: <http://www.w3.org/2002/07/owl#> 
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
PREFIX skos: <http://www.w3.org/2004/02/skos/core#> 
PREFIX xskos: <http://rdf-vocabulary.ddialliance.org/xkos#>  
PREFIX cim10:<http://data.esante.gouv.fr/atih-cim10#> 
PREFIX prov: <http://www.w3.org/ns/prov#> 

SELECT DISTINCT ?code ?label  ?cim10_parent_code ?cim10_parent_label
FROM <http://data.esante.gouv.fr/graph/terminologie-cim-10>
WHERE {  
    ?cim10_uri rdfs:subClassOf+ <http://data.esante.gouv.fr/atih/cim10>. 
    ?cim10_uri skos:notation ?code . 
    ?cim10_uri rdfs:label ?label . 
    ?cim10_uri rdfs:subClassOf ?cim10_parent_uri. 
    ?cim10_parent_uri skos:notation ?cim10_parent_code . 
    ?cim10_parent_uri rdfs:label ?cim10_parent_label . 
}