# SPARQL Protocol and RDF Query Language/Requêtes d'exportation

Dans le chapitre « le protocole SPARQL », nous avons vu que l’on pouvait obtenir différents formats en sortie en fonction des paramètres de la requête HTTP et du type de requête SPARQL.
Nous allons revenir sur chacun de ces formats en sortie et nous arrêter sur le format JSON avec le langage Javascript.

## Exporter des données
### Avec une requête SELECT

La réponse d'une requête SELECT est un "SPARQL result" (tableau de résultat) qui peut prendre le format :
* XML
* JSON qu'on utilisera un peu plus loin avec Javascript
* texte avec tabulation ou HTML, etc. (pour l'afficher dans le navigateur, c’est en fonction de votre triplestore)
Pour être certain du format en sortie, il faut utiliser le paramètre output dans la requête HTTP.

#### XML

Par exemple, voici la requête GET HTTP pour obtenir le format XML :
http://dbpedia.org/sparql/?output=xml&query=SELECT ?siteweb WHERE { <http://dbpedia.org/resource/Star_Trek> <http://xmlns.com/foaf/0.1/homepage> ?siteweb }
Résultat en XML :

#### JSON

Par exemple, voici la requête GET HTTP pour obtenir le format JSON :
http://dbpedia.org/sparql/?output=json&query=SELECT ?siteweb WHERE { <http://dbpedia.org/resource/Star_Trek> <http://xmlns.com/foaf/0.1/homepage> ?siteweb }
Résultat au format JSON :

#### JSONP

Par exemple, voici la requête GET HTTP pour obtenir le format JSONP :
http://dbpedia.org/sparql/?output=json&callback=ma_fonction&query=SELECT ?siteweb WHERE { <http://dbpedia.org/resource/Star_Trek> <http://xmlns.com/foaf/0.1/homepage> ?siteweb }
Résultat au format JSONP :

#### HTML

Par exemple, voici la requête GET HTTP pour obtenir le format HTML avec Dbpedia :
http://dbpedia.org/sparql/?output=html&query=SELECT ?siteweb WHERE { <http://dbpedia.org/resource/Star_Trek> <http://xmlns.com/foaf/0.1/homepage> ?siteweb }
Résultat en HTML:

#### RDF

Par exemple, voici la requête GET HTTP pour obtenir le format RDF avec Dbpedia :
http://dbpedia.org/sparql/?output=RDF&query=SELECT ?siteweb WHERE { <http://dbpedia.org/resource/Star_Trek> <http://xmlns.com/foaf/0.1/homepage> ?siteweb }
Résultat en HTML:

#### N3 (Notation3)

N3 (Notation3) ressemble au format Turtle. DBPedia peut répondre en Notation3 avec, par exemple, cette requête :
http://dbpedia.org/sparql/?output=N3&query=SELECT ?siteweb WHERE { <http://dbpedia.org/resource/Star_Trek> <http://xmlns.com/foaf/0.1/homepage> ?siteweb }
Résultat en N3:

#### Les autres formats

N'hésitez pas à lire attentivement la documentation de votre base de données pour connaître les valeurs autorisées pour le paramètre output d'une requête HTTP.

### Avec une requête CONSTRUCT

Une requête CONSTRUCT retourne un graphe RDF/XML. Le graphe obtenu est construit en fonction du patron qui est indiqué dans la clause CONSTRUCT.
Prenons par exemple la requête : Les écoles de Birmingham laïques pour les élèves de 15 ans avec moins de 300 élèves.
On veut importer les résultats dans un autre triplestore. Ce triplestore peut prendre en entrée un fichier RDF/XML (format de sauvegarde et d'importation massive). Sans savoir fabriquer un document RDF/XML, je fabrique la requête SPARQL où je remplace la définition SELECT par une définition CONSTRUCT où j'indique la structure des données que je veux obtenir.
Cela donnera la solution en RDF/XML :
Comme pour une requête SELECT, CONSTRUCT retourne un graphe RDF en XML, ou bien en Turtle, ou en N3, etc. C'est en fonction du paramètre output (dans une requête HTTP POST ou GET). Attention, le format de sortie est en fonction du triplestore utilisé, mais le format RDF/XML est celui indiqué dans la recommandation.

### Avec une requête DESCRIBE

Une requête DESCRIBE retourne un document en Turtle ou un document RDF en XML. Pour obtenir un format comme Turtle, il faut le préciser avec le paramètre output.
Par exemple, voici la requête GET HTTP pour obtenir le détail d'une référence dans le silo Data.gov.uk Education : http://gov.tso.co.uk/education/sparql/?output=turtle&query=DESCRIBE <http://education.data.gov.uk/id/school/134908>
Résultat en Turtle:
Cette requête est utile si on veut exporter par exemple les prédicats et les valeurs associées à une référence précise.

## Exporter dans votre programme Javascript

Parmi les formats d'exportation, il en existe un qui est de plus en plus utilisé : le JSON.
La raison de cet engouement est que le format JSON peut être chargé en mémoire dans du Javascript sans avoir besoin de transformer la réponse SPARQL en XML avec les méthodes SAX ou DOM.
Par exemple, si la variable doc contient une réponse SPARQL en JSON, en utilisant la ligne suivante, on obtiendra un objet :
Nous l’utiliserons ensuite de cette manière, par exemple, pour en faire un tableau HTML :
Voici l'exemple d'une fonction javascript pour faire une requête SPARQL :
Vous voici, après 8 chapitres, équipé pour utiliser SPARQL en long, en large et en travers ! Le prochain chapitre abordera les futures étapes de l'implémentation de SPARQL, qui s'adresse donc à un public très motivé ;)
| Requêtes de découverte | Système d'implication |