Outils pour utilisateurs

Outils du site


besson_sylvain:documentation_sparql

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
Prochaine révision Les deux révisions suivantes
besson_sylvain:documentation_sparql [2021/03/31 14:30]
Sylvain Besson
besson_sylvain:documentation_sparql [2021/07/05 16:49]
Vincent Alamercery Links to projets_individuels:etapes_fusion changed to besson_sylvain:etapes_fusion
Ligne 3: Ligne 3:
 ====== SPARQL ====== ====== SPARQL ======
 \\ \\
-SPARQL (**S**PARQL **P**rotocol and **R**DF** Q**uery **L**anguage - [[https://​en.wikipedia.org/​wiki/​SPARQL|page en wikipedia]]) est langage de requêtes. Il permet d’interroger,​ supprimer, modifier des données qui se trouve ​au format RDF (**R**esource **D**escription **F**ramework - [[https://​fr.wikipedia.org/​wiki/​Resource_Description_Framework|page fr wikipedia]]). Il est apparu en 2008 et est un standard ​recommandé par le [[https://​www.w3.org/​|W3C]]. ​Comme le RDF, il repose sur l'​utilisation ​des triplets. C'​est-à-dire qu'une donnée est composée de trois informations:​ un sujet, un prédicat et un objet. À l'​instar d'une phrase composée d'un sujet, d'un verbe et d'un complément,​ ici une donnée est répartie entre :+SPARQL (**S**PARQL **P**rotocol and **R**DF** Q**uery **L**anguage - [[https://​en.wikipedia.org/​wiki/​SPARQL|page en wikipédia]]) est un langage de requête et un protocole. Il permet d’interroger,​ supprimer, modifier des données qui se trouvent ​au format ​RDF. Le langage SPARQL est un standard recommandé par le [[https://​www.w3.org/​|W3C]] depuis 2008. 
 + 
 +====RDF==== 
 + 
 +Le RDF (**R**esource **D**escription **F**ramework - [[https://​fr.wikipedia.org/​wiki/​Resource_Description_Framework|page fr wikipédia]]) est un modèle de donnée graph orienté. Il est utilisé pour décrire des ressources web avec leurs métadonnées. Il est apparu en 1996 et recommandé ​depuis 1999 par le [[https://​www.w3.org/​|W3C]]. ​ 
 + 
 +Le modèle ​repose sur l'​utilisation ​de triplet, c'​est-à-dire qu'une donnée est composée de trois informations : un sujet, un prédicat et un objet. À l'​instar d'une phrase composée d'un sujet, d'un verbe et d'un complément,​ ici une donnée est répartie entre :
  
   * un **sujet**, la ressource à décrire   * un **sujet**, la ressource à décrire
 +
   * un **prédicat**,​ le type de propriété pour laquelle est applicable la ressource   * un **prédicat**,​ le type de propriété pour laquelle est applicable la ressource
-  ​* un **objet**, une autre ressource ou donnée; la valeur de la propriété+ 
 +  ​* un **objet**, une autre ressource ou donnée ; la valeur de la propriété
  
 exemple: exemple:
Ligne 13: Ligne 21:
 <​http://​dbpedia.org/​resource/​Yuri_Maltsev>​ dpb:​birthDate <"​1950-12-31">​ <​http://​dbpedia.org/​resource/​Yuri_Maltsev>​ dpb:​birthDate <"​1950-12-31">​
  
-Il est possible de "​traduire"​ ce triplet de la façon suivante: Yuri Maltsev (sujet) est né (prédicat) le 31 décembre 1950 (objet).+Il est possible de "​traduire"​ ce triplet de la façon suivante : Yuri Maltsev (sujet) est né (prédicat) le 31 décembre 1950 (objet).
  
-"​dpb:"​ est un espace de nom qui dans lequel sont regroupés tous les types de ressources de dbpedia. Cela permet de faire en sorte que tout le monde utilise le même vocabulaire pour décrire des choses semblables. ​+"​dpb:"​ est un préfixe ​qui dans lequel sont regroupés tous les types de ressources de [[documentation_dbpedia|DBpedia]]. Cela permet de faire en sorte que tout le monde utilise le même vocabulaire pour décrire des choses semblables. ​
  
-vocabulaire de base à utiliser pour le langage de requête SPARQL: ​+[[https://​www.w3.org/​TR/​2014/​NOTE-rdf11-primer-20140624/​|Document]] fournie par le [[https://​www.w3.org/​|W3C]] pour comprendre le fonctionnement du RDF. 
 + 
 +====Vocabulaire==== 
 + 
 +Voici le vocabulaire de base à utiliser pour le langage de requête SPARQL: ​
  
 <code sparql> <code sparql>
Ligne 23: Ligne 35:
  
 SELECT # permet de choisir les variables du résultat, parmi les résultats de la clause WHERE SELECT # permet de choisir les variables du résultat, parmi les résultats de la clause WHERE
-SELECT distinct # enleve ​les doublons parmi les couples+SELECT distinct # enlève ​les doublons parmi les couples
 SELECT * # conserver toutes les variables de la requête SELECT * # conserver toutes les variables de la requête
  
Ligne 53: Ligne 65:
 Cette «[[http://​www.iro.umontreal.ca/​~lapalme/​ift6281/​sparql-1_1-cheat-sheet.pdf|anti-sèche]]» permet aussi de retrouver l'​ensemble de la syntaxe du langage SPARQL. Cette «[[http://​www.iro.umontreal.ca/​~lapalme/​ift6281/​sparql-1_1-cheat-sheet.pdf|anti-sèche]]» permet aussi de retrouver l'​ensemble de la syntaxe du langage SPARQL.
  
-Un document qui permet d'​avoir toutes les clés en main pour comprendre le language ​SPARQL: Du Charme Bob, //Learning SPARQL: querying and updating with SPARQL 1.1//, Beijing, Chine, Pays multiples, 2011. +Un document qui permet d'​avoir toutes les clés en main pour comprendre le langage ​SPARQL : Du Charme Bob, //Learning SPARQL: querying and updating with SPARQL 1.1//, Beijing, Chine, Pays multiples, 2011. 
-Il est aussi possible de consulté ​le [[http://​learningsparql.com/​|site de l'​auteur]],​ ainsi que son [[http://​www.bobdc.com/​|blog]] (ici l'​[[http://​www.snee.com/​bobdc.blog/​metadata/​rdf/​sparql/​|ancienne version]] avec les articles avant Février ​2019).+Il est aussi possible de consulter ​le [[http://​learningsparql.com/​|site de l'​auteur]],​ ainsi que son [[http://​www.bobdc.com/​|blog]] (ici l'​[[http://​www.snee.com/​bobdc.blog/​metadata/​rdf/​sparql/​|ancienne version]] avec les articles avant février ​2019).
  
- +===Exemple de requête SPARQL===
-Exemple de requête SPARQL:+
  
 <code sparql> <code sparql>
Ligne 68: Ligne 79:
  
 SELECT DISTINCT ?s ?name (year(xsd:​dateTime(?​Birth_Date)) AS ?year) #ce sont les variables que l'on veut afficher SELECT DISTINCT ?s ?name (year(xsd:​dateTime(?​Birth_Date)) AS ?year) #ce sont les variables que l'on veut afficher
-# year permet de convertir une date (Année/​Mois/​Jour) en une année ​+la clause "year" ​permet de convertir une date (Année/​Mois/​Jour) en une année ​
 WHERE WHERE
        {?s a dbo:Person .        {?s a dbo:Person .
Ligne 76: Ligne 87:
         ​         ​
         FILTER regex(?​abstract,​ "​lawyer"​) # la clause regex permet d'​aller chercher dans les résumés ceux qui ont comme motif "​lawyer" ​         FILTER regex(?​abstract,​ "​lawyer"​) # la clause regex permet d'​aller chercher dans les résumés ceux qui ont comme motif "​lawyer" ​
-        FILTER (xsd:date (?​Birth_Date) > "1800-01-01"​^^xsd:​date) # permet de ne garder que ceux qui sont nés après ​1800.+        FILTER (xsd:date (?​Birth_Date) > "1770-01-01"​^^xsd:​date) # permet de ne garder que ceux qui sont nés après ​1770.
         }         }
 ORDER BY (?year) #Cela ordonne les données par année de façon croissante ORDER BY (?year) #Cela ordonne les données par année de façon croissante
Ligne 82: Ligne 93:
 </​code>​ </​code>​
  
-Ici, le but est d'​afficher les juristes qui sont nés après ​1800 avec leur nom.+Ici, le but est d'​afficher les juristes qui sont nés après ​1770 avec leur nom.
 Il est possible de l’exécuter sur un [[https://​dbpedia.org/​sparql|point d'​accès SPARQL]]. Il est possible de l’exécuter sur un [[https://​dbpedia.org/​sparql|point d'​accès SPARQL]].
  
 Les points d'​accès permettent d'​accéder à des jeux de données. ​ Les points d'​accès permettent d'​accéder à des jeux de données. ​
  
-Dans ce projet nous exécutons nos requêtes directement avec le language ​python. Pour cela, nous utilisons la bibliothèque [[https://​rdflib.dev/​sparqlwrapper/​|SPARQLWrapper]] (il faut l'​installer préalablement avec [[https://​anaconda.org/​conda-forge/​sparqlwrapper|conda]] ou [[https://​pypi.org/​project/​SPARQLWrapper/​|pip]] en ligne de commande sur un terminal).+Dans ce projetnous exécutons nos requêtes directement avec le langage [[python:​accueil|python]]. Pour cela, nous utilisons la bibliothèque [[https://​rdflib.dev/​sparqlwrapper/​|SPARQLWrapper]] (il faut l'​installer préalablement avec [[https://​anaconda.org/​conda-forge/​sparqlwrapper|conda]] ou [[https://​pypi.org/​project/​SPARQLWrapper/​|pip]] en ligne de commande sur un terminal)
 + 
 +====GraphDB==== 
 + 
 +Bien qu'il n'est pas possible d'​associer différents jeux de données (provenant de sites différents) sur un même point SPARQL (pour des raisons de sécurité),​ il est possible de les fédérer via un système tiers ([[https://​www.w3.org/​TR/​sparql11-federated-query/​|documentation W3C]]) sur le sujet. Nous avons fait le choix d'​utiliser la version gratuite de GraphDB ([[https://​graphdb.ontotext.com/​documentation/​free/​|documentation]] et [[https://​www.ontotext.com/​products/​graphdb/​graphdb-free/​|lien de téléchargement]]),​ qui a une interface graphique permettant d'​avoir un serveur local. GraphDB permet notamment de faire des requêtes SPARQL fédérées. Pour les réaliser, il faut indiquer dans la requête les points d'​accès que l'on veut utiliser en se servant de la clause SERVICE (voir le lien sur les requêtes fédérées pour l'​utiliser correctement).  
 + 
 +GraphDB est aussi très utile pour mettre les individus sur un serveur local, afin de fusionner les données présentes sur plusieurs bases de données ainsi que de ne plus à aller chercher sur les différentes bases de données. Nous montrons comment nous faisons pour le réaliser à cette **[[etapes_fusion|page]]**. Il est possible par la suite d'​aligner les données avec un vocabulaire propre au serveur local.
  
-Bien qu'il n'est pas possible ​d'​associer différents jeux de données (provenant de sites différents) sur un même point SPARQL (pour des raisons de sécurité), il est possible ​de les fédérer via un système tiers ([[https://www.w3.org/TR/sparql11-federated-query/​|documentation ​W3C]]) sur le sujet. Nous avons fait le choix d'​utiliser la version gratuite de GraphDB ([[https://graphdb.ontotext.com/documentation/free/|documentation]] et [[https://www.ontotext.com/products/graphdb/graphdb-free/|lien de téléchargement]]), qui a une interface graphique permettant d'​avoir un serveur local permettant notamment de faire des requêtes SPARQL fédérées. Pour les réaliser, il faut indiquer dans la requête les points d'​accès que l'on veut utiliser en se servant de la clause SERVICE (voir le lien sur les requêtes fédérées pour l'​utiliser correctement).+Il est aussi possible de faire les requêtes directement dans un carnet python. Pour cela, il faut utiliser l'​API ​de GraphDB ​([[https://graphdb.ontotext.com/documentation/enterprise/​devhub/​workbench-rest-api/index.html|documentation]]), plus précisément dans le serveur local, cela se situe dans REST API -lui-même dans //help//- puis il faut choisir SPARQL puis //expend operations//- soit en choissant //GET// pour interroger les données ou bien //POST// pour les modifierIl suffit ensuite de reporter le chemin -localhost:​7200/webapi/repositories/{repositoryID} par exempledans le //wrapper// sur [[python:​accueil|python]]). 
  
-Il est là encore possible de faire les requêtes directement dans un carnet python. Pour cela, il faut utiliser l'API de GraphDB ([[https://​graphdb.ontotext.com/​documentation/​enterprise/​devhub/​workbench-rest-api/​index.html|documentation]],​ plus précisement dans le serveur local, cela ce situe dans REST API -lui-même dans //help//- puis il faut choisir SPARQL puis //expend operations//​- soit on choisie //GET// pour interroger les données ou //POST// pour les modifier. Il suffit ensuite de reporter le chemin -localhost:​7200/​webapi/​repositories/​{repositoryID} par exemple- dans le //wrapper// sur python). ​+====Outils====
  
-Afin de vérifier si la syntaxe d'une requête est bien faite, il existe des outils: +Afin de vérifier si la syntaxe d'une requête est bien faite, il existe des outils : 
-  * [[http://​sparql.org/​query-validator.html|query-validator]] +  * [[http://​sparql.org/​query-validator.html|query-validator]]: pour les requêtes avec un SELECT ou un CONSTRUCT 
-  * [[http://​www.sparql.org/​update-validator.html|update-validator]]+  * [[http://​www.sparql.org/​update-validator.html|update-validator]] ​: pour les requêtes pour mettre à jour les données (INSERT, DELETE, etc.)
  
-:!: ils vérifient uniquement si la requête est bien formulée mais cela ne permet pas de juger de la pertinence de la requête ou de sa réussite.+:!: Ils vérifient uniquement si la requête est bien formuléemais cela ne permet pas de juger de la pertinence de la requête ou de sa réussite.
besson_sylvain/documentation_sparql.txt · Dernière modification: 2021/08/03 18:11 par Sylvain Besson