« SPARQL Protocol and RDF Query Language/Le protocole SPARQL » : différence entre les versions

Contenu supprimé Contenu ajouté
m Robot : Changement de type cosmétique
Relecture
Ligne 1 :
{{ébauche informatique}}
{{Chapitre
| idfaculté = informatique
Ligne 5 ⟶ 4 :
| titre_leçon = SPARQL
| numéro = 4
| niveau = 130
| précédent = [[../Modèle de données RDF/]]
| suivant = [[../Requêtes de lecture/]]
}}
 
Dans ce chapitreschapitre, nous allons apprendre à envoyer des requêtes à une base de données qui répond à la recommandation SPARQL. Ainsi, dans les chapitres suivants, nous pourrons tester nos requêtes SPARQL immédiatement.
 
Le langage SPARQL 1.1 estétant en cours d'implémentation donc, nous aborderons dans cette leçon uniquement les éléments déjà implémentéimplémentés dans le serveur que nous utiliserons durant les lestravaux travaux-pratiques.
 
== Protocole HTTP ==
L'[[w:HyperText Transfer Protocol|HyperText Transfer Protocol]] — littéralement « protocole de transfert [[w:hypertexte|hypertexte]] » —, plus connu sous l'[[w:abréviation|abréviation]] '''HTTP''' — littéralement « protocole de transfert [[w:hypertexte|hypertexte]] » —, est un [[w:protocole de communication|protocole de communication]] [[w:client-serveur|client-serveur]] développé pour le [[w:World Wide Web|World Wide Web]] (ou W3C pour World Wide Web Consortium). '''HTTPS''' (avec S pour ''"secured''", soit « sécurisé ») est la variante du HTTP ''"sécurisée''" par l'usage des [[w:Protocole de communication|protocoles]] [[w:Transport Layer Security|SSL]] ou [[w:Transport Layer Security|TLS]].
 
HTTP est un protocole de la couche application. Il peut fonctionner sur n'importe quelle connexion fiable,. dansEn les faitspratique, on utilise le protocole [[w:Transmission Control Protocol|TCP]] comme couche de transport. Un serveur HTTP utilise alors par défaut le [[w:port (logiciel)|port]] 80 (443 pour HTTPS).
 
Les [[w:client HTTP|clients HTTP]] les plus connus sont les [[w:navigateur Web|navigateurs Web]] permettant à un utilisateur d'accéder à un serveur contenant les données. Il existe aussi des systèmes pour récupérer automatiquement le contenu d'un site, teltels que les [[w:Aspirateur de site Web|aspirateurs de site Web]] ou les [[w:robot d'indexation|robots d'indexation]].
 
Ces clients se connectent à des [[w:serveur HTTP|serveurs HTTP]] tels qu'[[w:Apache HTTP Server|Apache HTTP Server]], que nous installerons durant un TP.
 
La liaison entre le client et le serveur n'est pas toujours directe, mais, du point de vue du client HTTP, ces intermédiaires sont invisibles, à moins qu'une erreur ait lieu.
 
=== Requêtes ===
Dans le protocole HTTP, une méthode est une '''Commandecommande''' spécifiant un type de requête, c'est-à-dire qu'elle demande au serveur d'effectuer une action. En général, l'action concerne une ressource identifiée. Nous allons étudier ce que l'on nomme une ressource et voir la listelister desles principales commandes.
 
==== Ressources ====
Jusqu'à maintenantprésent, une ressource est identifiée par une [[w:Uniform Resource Locator|URL]], qui suit le nom de la méthode HTTP. La notion d'URL a rapidement atteint ses limites et un nouveau standard est entrainen train de le remplacer que: l'onIRI nomme(Internationalized IRIResource Identifier).
 
===== Localisateur uniforme de ressource (URL) =====
{{Définition|titre=Localisateur uniforme de ressource (URL)|contenu=
Une URL (UniversalUniform Resource Locator) est une chaîne de caractères '''ASCII''' qui spécifie où une ressource connuconnue est disponible sur Internet et indique le mécanisme pour l'atteindre.
}}
 
{{Exemple|titre=Exemples d'URL|contenu=
:http://fr.wikiversity.org est une URL pour atteindre le site fr.Wikiversity via le protocole http.
:git://github.com/BorderCloud/4store-php.git est une URL pour atteindre les sources de 4store-php via le protocole git}}
 
===== Identificateur de ressource internationalisé (IRI) =====
{{Définition|titre=Identificateur de ressource internationalisé (IRI)|contenu=
UneUn IRI (Internationalized Resource Identifier) est une chaîne de caractères (ASCII ou non) qui spécifie où une ressource connuconnue est disponible sur Internet et indique le mécanisme pour l'atteindre.
 
La différence avec une URL est qu'uneun IRI peut pointer sur un contenu en utilisant la même langue que ce contenu.
}}
 
{{Exemple|titre=Exemple d'IRI|contenu=<nowiki>http://fr.wikipedia.org</nowiki> (URL) pourra devenir <nowiki>http://fr.wikip</nowiki>'''é'''dia.org (IRI)}}
 
{{Remarque|contenu=Une URL est uneun IRI, mais uneun IRI n'est pas forcément une URL.
 
L'architecture HTTP ne supportentsupporte pas encore les IRI, mais l'implémentation est en cours. Cependant, les nouveaux logiciels comme les serveurs SPARQL ne travaillent qu'avec des IRI (et, donc, supporte aussisupportent les URL).}}
 
==== Commandes ====
Liste des principales '''Commandescommandes''' HTTP :
;<code>GET</code>:C'est la méthode la plus courante pour demander une ressource. Une requête GET est sans effet sur la ressource, il doit être possible de répéter la requête sans effet.
;<code>POST</code>:Cette méthode doit être utilisée pour soumettre des données, en vue d'un traitement, à une ressource (typiquement depuis un formulaire HTML) mais; cette méthodeelle est souvent utilisée aussi pour la création et la mise à jour de ressources.
;<code>PUT</code>:Cette méthode permet de remplacer ou d'ajouter une ressource sur le serveur. L'URL fournifournie est celuicelle de la ressource en question.
;<code>DELETE</code>:Cette méthode permet de supprimer une ressource du serveur.
 
Ces commandes sont souvent détournées de leur mission initiale. Par exemple, un développeur peut utiliser la méthode GET pour envoyer des informations à un serveur et pourra implémenter un traitement de mise à jour des données du serveur en cas de réception de cette commande GET.
 
=== Codes de statut HTTP ===
La réponse du serveur à une commande contient le code de [[w:Liste des codes HTTP|statut HTTP]](Status codescode)
 
Voici la liste desles plus courants :
{| class="wikitable"
! Code !! Message !! Signification
Ligne 109 ⟶ 108 :
</pre>
 
Une requête respecte un certain nombre de retourretours à la ligne et contient la version du protocole, ici '''HTTP/1.1''', la commande, ici '''GET''', la destination, ici '''www.example.com''', et le paramètre de la commande, ici '''index.html'''.
 
==== Réponse ====
Ligne 130 ⟶ 129 :
</pre>
 
La réponse se compose d'uneun entête et du message.
 
L'entête se compose :
;La première ligne donne le [[w:Liste des codes HTTP|code de statut HTTP]] : 200 dans ce cas, c'est-à-dire que le serveur comprend la requête et vous transmet le résultat.
;<code>Date</code>:Moment auquel le message est généré.
;<code>Server</code>:Indique quel modèle de [[w:serveur HTTP|serveur HTTP]] répond à la requête.
;<code>Last-Modified</code>:Indique la date de dernière modification de la ressource.
;<code>ETag</code> (entity tag) : numéroNuméro de version de la page dans le cache du serveur ; permet aux navigateurs Web de gérer leur [[w:mémoire cache|mémoire cache]].
;<code>Accept-Ranges</code>: méthodeMéthode pour récupérer la ressource.
;<code>Content-Length</code>:Indique la taille en [[w:octet|octet]]s de la ressource.
;<code>Content-Type</code>:Indique le type [[w:Multipurpose Internet Mail Extensions|MIME]] de la ressource.
 
Le message contient ensuite une page HTML, mais cela dépend de la requête envoyée.
 
Nous allons étudier, dans la partie suivante, les différentes commandes HTTP utilisables pour un serveur SPARQL 1.0 et ses réponses.
 
== Protocole SPARQL ==
Ligne 167 ⟶ 166 :
;default-graph-uri : paramètre facultatif qui peut être répété, indique le ou les graphes de la base de données où exécuter la requête
;named-graph-uri : paramètre facultatif qui peut être répété, indique le ou les graphes qui seront utilisés au sein de la requête
;output : paramètre facultatif '''qui peut différédifférer d'un logiciel à l'autre''', si c'est une requête SELECT ou ASK, on peut demander un autre format de réponse, comme le format "json" par exemple. Par défaut, le format est en XML.
 
Nous étudierons dans les leçons suivantes à quoi servent ces paramètres.
Ligne 179 ⟶ 178 :
Par exemple : ''<nowiki>http://lod.bordercloud.com/sparql/?query=ask {?x ?y "TSO"@en . }</nowiki>''
 
La méthode '''POST''' permet de faire les mêmes requêtes, mais POST permet d'envoyer des requêtes de taille plus importante par rapport à une requête GET.
}}
 
Ligne 205 ⟶ 204 :
La réponse d'une requête prend la forme d'un "SPARQL result" (tableau de résultat) ou le format d'un graphe RDF.
 
* La forme "SPARQL result" peut prendre le format XML ou JSON (ou texte avec tabulation, en fonction des logiciellogiciels)
* La forme graphe RDF peut prendre le format XML ou Turtle.
 
Ligne 211 ⟶ 210 :
 
{{Définition|titre=Format des réponses SPARQL|contenu=
Il y a quatre typetypes de requêtes en SPARQL (que nous étudierons en détail dans les chapitres suivants) :
;SELECT : retourne un [http://www.w3.org/TR/rdf-sparql-XMLres/ SPARQL result en XML] par défaut. Pour obtenir un autre format comme [http://www.w3.org/TR/rdf-sparql-json-res/ JSON], il faut le préciser avec le paramètre output.
;ASK : retourne un [http://www.w3.org/TR/rdf-sparql-XMLres/ SPARQL result en XML] par défaut. Pour obtenir un autre format comme [http://www.w3.org/TR/rdf-sparql-json-res/ JSON], il faut le préciser avec le paramètre output.
;CONSTRUCT : retourne un graphe RDF en XML par défaut. Pour obtenir un autre format comme Turtle, il faut le préciser avec le paramètre output.
;DESCRIBE : retourne un document en Turtle ou un graphe RDF en XML. Pour obtenir un autre format précis, il faut le préciserl'indiquer avec le paramètre output.
}}
 
Ligne 346 ⟶ 345 :
 
{{remarque|titre=Option CORS à activer avec JSON|contenu=
L’intérêt d'obtenir un format JSON est d'utiliser ce contenu à travers un script en Javascript. Cependant, votre navigateur n'autorise pas le chargement de JSON d'un autre domaine que celui du site où vous vous trouvez. Bien que cette limitation soit justifiée pour des raisons de sécurité est justifié, elle empêche le chargement de résultat SPARQL en JSON.
 
Une alternative existe, : elle consiste à activer dans votre serveur l'option CORS ([[w:en:Cross-Origin_Resource_Sharing|Cross-Origin Resource Sharing]]). Cette option insère la ligne '''Access-Control-Allow-Origin: * ''' dans l'entête de la réponse HTTP pour désactiver cette sécurité.
}}
 
Ligne 473 ⟶ 472 :
 
==== Réponse ====
Pour savoir, si une requête c'est bien déroulée, on lit le code de statut HTTP, qui doit être égaleégal à 200.
 
En fonction des implémentations, des messages d'erreurs peuvent être envoyés par le serveur.