« 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
Ligne 145 :
 
== Protocole SPARQL ==
===Protocole de lecture===
 
====Requête====
 
{{Définition|titre=Adresse type d'un service SPARQL|contenu=
'''<nowiki>http://IP_ou_NOM_DE_DOMAINE/sparql/</nowiki>'''
 
Définition:
* '''IP_ou_NOM_DE_DOMAINE''' : adresse pour atteindre le serveur
* '''/sparql/''' : chemin du service
}}
 
{{remarque|contenu=
Les services SPARQL qui utilisent de vieux logiciels, ont comme chemin : /sparql et non /sparql/
}}
 
{{Définition|titre=Paramètres d'une requête de lecture|contenu=
;query : paramètre obligatoire, passe la requête SPARQL au service
;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é 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.
}}
 
{{Définition|titre=Commandes HTTP pour faire une requête de lecture|contenu=
'''On peut faire une requête de lecture avec la commande GET ou POST.'''
 
La méthode '''GET''' permet d'écrire très simplement une requête (dans un navigateur pour tester une requête).
 
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.
}}
 
{{Exemple|titre=Exemple d'entête HTTP GET pour une requête SPARQL|contenu=
<source lang="text">
GET /sparql/?query='''EncodedQuery''' HTTP/1.1
Host: www.example
User-agent: my-sparql-client/0.1
</source>
}}
 
{{Exemple|titre=Exemple d'entête HTTP POST pour une requête SPARQL|contenu=
<source lang="text">
POST /sparql/ HTTP/1.1
Host: www.example
User-agent: sparql-client/0.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 9461
 
query=VeryLongEncodedQuery&default-graph-uri=http://another.example/calendar.rdf
</source>
}}
 
====Réponse====
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 logiciel)
*La forme graphe RDF peut prendre le format XML ou Turtle.
 
SPARQL adapte le format de sortie en fonction du type de requêtes de lecture.
 
{{Définition|titre=Format des réponses SPARQL|contenu=
Il y a quatre type de requêtes en SPARQL (que nous étudirons plus tard) :
;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 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.
}}
 
=====Format SPARQL result XML=====
{{Exemple|titre=Exemple de session avec une requête SELECT|contenu=
Voici un exemple de requête
<source lang="text">
PREFIX dc: <http://purl.org/dc/elements/1.1/>
SELECT ?book ?who
WHERE { ?book dc:creator ?who }
</source>
 
Cette requête aura comme entête HTTP :
<source lang="text">
GET /sparql/?query=EncodedQuery HTTP/1.1
Host: www.example
User-agent: my-sparql-client/0.1
</source>
 
La réponse aura comme entête :
<source lang="text">
HTTP/1.1 200 OK
Date: Fri, 06 May 2005 20:55:12 GMT
Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3
Connection: close
Content-Type: application/sparql-results+xml
</source>
 
Et la réponse contiendra le document [http://www.w3.org/TR/rdf-sparql-XMLres/ SPARQL result XML] :
<source lang="text">
<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
 
<head>
<variable name="book"/>
<variable name="who"/>
</head>
<results distinct="false" ordered="false">
<result>
<binding name="book"><uri>http://www.example/book/book5</uri></binding>
<binding name="who"><bnode>r29392923r2922</bnode></binding>
</result>
...
</sparql>
</source>
}}
 
{{Exemple|titre=Exemple de session avec une requête ASK|contenu=
Voici un exemple de requête '''ASK''' :
<source lang="text">
PREFIX dc: <http://purl.org/dc/elements/1.1/>
ASK WHERE { ?book dc:creator "J.K. Rowling"}
</source>
 
Cette requête aura comme entête HTTP :
<source lang="text">
GET /sparql/?query=EncodedQuery&default-graph-uri=http://www.example/books HTTP/1.1
Host: www.example
User-agent: sparql-client/0.1
</source>
 
La réponse aura comme entête :
<source lang="text">
HTTP/1.1 200 OK
Date: Fri, 06 May 2005 20:48:25 GMT
Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3
Connection: close
Content-Type: application/sparql-results+xml
</source>
 
Et la réponse contiendra le document [http://www.w3.org/TR/rdf-sparql-XMLres/ SPARQL result XML] :
<source lang="text">
<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
<head></head>
<boolean>true</boolean>
</sparql>
</source>
}}
 
=====Format SPARQL result JSON=====
{{Exemple|titre=Exemple de session avec une requête SELECT et en sortie du JSON|contenu=
Voici un exemple de requête SELECT
<source lang="text">
PREFIX dc: <http://purl.org/dc/elements/1.1/>
SELECT ?book ?who
WHERE { ?book dc:creator ?who }
</source>
 
Cette requête aura comme entête HTTP :
<source lang="text">
GET /sparql/?query=EncodedQuery HTTP/1.1
Host: www.example
User-agent: my-sparql-client/0.1
</source>
 
La réponse aura comme entête :
<source lang="text">
HTTP/1.1 200 OK
Date: Fri, 06 May 2005 20:55:12 GMT
Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3
Connection: close
Content-Type: application/sparql-results+xml
</source>
 
Et la réponse contiendra le document [http://www.w3.org/TR/rdf-sparql-json-res/ JSON] :
<source lang="text">
<?xml version="1.0"?>
{
"head": { "vars": [ "book" , "who" ]
} ,
"results": {
"bindings": [
{
"book": { "type": "uri" , "value": "http://example.org/book/book6" } ,
"who": { "type": "bnode" , "value": "r29392923r2922" }
} ,
...
]
}
}
</source>
}}
 
{{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 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 ([http://en.wikipedia.org/wiki/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é.
}}
 
=====Format graphe RDF XML=====
{{Exemple|titre=Exemple de session avec une requête DESCRIBE|contenu=
Voici un exemple de requête '''DESCRIBE''' :
<source lang="text">
PREFIX books: <http://www.example/book/>
DESCRIBE books:book6
</source>
 
Cette requête aura comme entête HTTP :
<source lang="text">
GET /sparql/?query=EncodedQuery&default-graph-uri=http://www.example/books HTTP/1.1
Host: www.example
User-agent: sparql-client/0.1
</source>
 
La réponse aura comme entête :
<source lang="text">
HTTP/1.1 200 OK
Date: Wed, 03 Aug 2005 12:48:25 GMT
Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3
Connection: close
Content-Type: application/rdf+xml
</source>
 
Et la réponse contiendra le document turtle :
<source lang="text">
<?xml version="1.0"?>
<rdf:RDF ...
<rdf:Description rdf:about="http://www.example/book/book6">
<dc:title>Example Book #6 </dc:title>
</rdf:Description>
</rdf:RDF>
</source>
}}
 
=====Format graphe RDF Turtle=====
{{Exemple|titre=Exemple de session avec une requête CONSTRUCT avec en sortie du Turtle|contenu=
Voici un exemple de requête '''CONSTRUCT''' :
<source lang="text">
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX myfoaf: <http://www.example/jose/foaf.rdf#>
 
CONSTRUCT { myfoaf:jose foaf:depiction <http://www.example/jose/jose.jpg>.
myfoaf:jose foaf:schoolHomepage <http://www.edu.example/>.
?s ?p ?o.}
WHERE { ?s ?p ?o. myfoaf:jose foaf:nick "Jo".
FILTER ( ! (?s = myfoaf:kendall && ?p = foaf:knows && ?o = myfoaf:edd )
&& ! ( ?s = myfoaf:julia && ?p = foaf:mbox && ?o = <mailto:julia@mail.example> )
&& ! ( ?s = myfoaf:julia && ?p = rdf:type && ?o = foaf:Person))
}
</source>
 
Cette requête aura comme entête HTTP :
<source lang="text">
GET /sparql/?query=EncodedQuery&default-graph-uri=http://www.example/jose-foaf.rdf HTTP/1.1
Host: www.example
User-agent: sparql-client/0.1
Accept: text/turtle, application/rdf+xml
</source>
 
La réponse aura comme entête :
<source lang="text">
HTTP/1.1 200 OK
Date: Fri, 06 May 2005 20:55:11 GMT
Server: Apache/1.3.29 (Unix)
Connection: close
Content-Type: text/turtle
</source>
 
Et la réponse contiendra le document turtle :
<source lang="text">
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix foaf: <http://xmlns.com/foaf/0.1/>.
@prefix myfoaf: <http://www.example/jose/foaf.rdf#>.
 
myfoaf:jose foaf:name "Jose Jimeñez";
foaf:depiction <http://www.example/jose/jose.jpg>;
foaf:nick "Jo";
...
</source>
}}
 
 
 
===Protocole d'écriture===
 
[[Catégorie:SPARQL Protocol and RDF Query Language]]