« SPARQL Protocol and RDF Query Language/Requêtes de lecture » : différence entre les versions

Contenu supprimé Contenu ajouté
Ligne 148 :
==== ORDER BY ====
 
ORDER BY permet d'ordonner le résultat de la requête. Il suffit de lui donner en argument la colonne selon laquelle il doit ordonner. Parselon exemplelaquelle :il doit ordonner les résultats.
{{Exemple|titre=Exemple avec ORDER BY|contenu=
<pre>SELECT ?familyName WHERE {?x foaf:familyName ?familyName . } ORDER BY ?familyName</pre>
<pre>SELECT ?familyName
<pre>SELECT ?familyName WHERE {?x foaf:familyName ?familyName . } ORDER BY ?familyName</pre>
ORDER BY ?familyName</pre>
}}
 
Vous constatez qu'en effet, c'est ordonné par ordre de nom, mais vous pouvez également spécifier plusieurs colonnes pour l'ordonnancement du résultat. Par exemple par nom puis par prénom:
{{exemple|titre=Exemple avec plusieurs colonnes|contenu=<pre>SELECT ?familyName ?givenName
WHERE {
?x foaf:familyName ?familyName ;
foaf:givenName ?givenName;
}
ORDER BY ?familyName ?givenName</pre>}}
 
Si vous voulez trier une colonne par ordre inverse, il vous suffit d'ajouter le mot-clef DESC devant le nom de la colonne concernée entre parenthèse. Par exemple la même requête qu'au dessus avec les noms triés par ordre inverse :
{{exemple|titre=Exemple avec les noms triés par ordre inverse|contenu=<pre>SELECT ?familyName ?givenName
WHERE {
?x foaf:familyName ?familyName ;
foaf:givenName ?givenName;
}
ORDER BY DESC(?familyName) ?givenName </pre>}}
 
{{non}} ORDER BY permet de trier selon les colonnes récupérées uniquement, ainsi la requête suivante n'est pas conforme étant donné que la colonne "givenName" ne fait pas partie des colonnes rapatriées (dans la clause SELECT) :
 
{{non}} ORDER BY permet de trier selon les colonnes récupérées uniquement, ainsi la requête suivante n'est pas conforme étant donné que la colonne "givenName" ne fait pas partie des colonnes rapatriées (dans la clause SELECT) :.
{{exemple|titre=Requête non conforme car ?givenName n'est pas dans la clause SELECT|contenu=
<pre>SELECT ?familyName
WHERE {
Ligne 174 ⟶ 178 :
foaf:givenName ?givenName;
}
ORDER BY ?familyName ?givenName</pre>}}
 
==== LIMIT ====
LIMIT permet de limiter le nombre de lignes retournées. N'hésitez pas à l'utiliser car dans beaucoup de cas cela vous permettra d'obtenir des temps de réponses plus faible de votre serveur.
{{exemple|titre=Exemple de requête avec une limite|contenu=
 
Par exemple :
<pre>SELECT * WHERE {?x ?y ?z . } LIMIT 10 </pre>
}}
 
{{remarque|titre=Utilisation|contenu=
N'hésitez pas à l'utiliser car dans beaucoup de cas cela vous permettra d'obtenir des temps de réponses plus faible de votre serveur.
}}
==== OFFSET ====
OFFSET permet de diren'afficher de prendre les lignes dele résultat qu'à partir de la ligne y :indiquée.
{{exemple|titre=Exemple de requête qui donne le résultat qu'à partir de la cinquième ligne|contenu=
<pre>SELECT * WHERE {?x ?y ?z . } OFFSET 5 </pre>
}}
 
On peut donc luiindiquer direen avecmême temps une LIMIT et un OFFSET prendre x lignes à partir de la ligne y :.
{{exemple|titre=Exemple où n'affiche 10 lignes du résultat à partir de la ligne 5|contenu=
<pre>SELECT * WHERE {?x ?y ?z . } OFFSET 5 LIMIT 10</pre>
<pre>SELECT *
 
WHERE {?x ?y ?z . }
OFFSET 5
LIMIT 10</pre>
}}
On a maintenant tout ce qu'il nous faut pour naviguer de page en page dans les résultats d'une requêtes.
 
Ligne 196 ⟶ 208 :
Ce masque de graphe est composé d'un ensemble de triplets RDF, sauf que chaque sujet, prédicat et objet peut être une variable. Chaque triplet devient alors une condition pour notre requête.
 
Ce masque de graphe est comparé à des données RDF. Il y a alors deux possibilitésréponses possibles :
* Ce masque de graphe ne peut recouvrir aucun sous-graphe des données RDF. Il n'y a alors aucun résultat.
* Ce masque de graphe peut recouvrir un ou plusieurs sous-graphe des données RDF. Le résultat est alors équivalent à tous les sous-graphes ainsi découvert à l'aide de ce masque.
 
==== EcrireÉcrire une simple requête ====
 
L'exemple ci-dessous montre une requête SPARQL pour trouver le titre d'un livre à partir du graphe des données RDF suivant décrit au format Turtle. La requête se compose de deux parties:
Ligne 226 ⟶ 238 :
| "Tutoriel SPARQL"
|}
 
==== Obtenir plusieurs réponses ====
Le résultat d'une requête est un tableau où chaque ligne représente une solution différente qui correspond à un sous-graphe trouvé à l'aide du masque de la requête. Il peut y avoir zéro, une ou plusieurs solutions à une requête.
Ligne 272 ⟶ 283 :
:z ns:p "abc"^^dt:specialDatatype .</pre>
 
{{remarque|titre=Rappel. dansAvec le format Turtle :|contenu=
* "cat"@en est un littéral avec la forme lexicale "cat" et une balise de langue en (pour langue anglaise)
* "42"^^xsd:integer est un littéral typé avec le type de données http://www.w3.org/2001/XMLSchema#integer
*, et "abc"^^dt:specialDatatype est un littéral typé avec le type de données <nowiki>http://example.org/datatype#specialDatatype</nowiki>.
}}
 
==== Littéral avec une balise langue ====
Ligne 283 ⟶ 295 :
Cependant, quant on compare un littéral, il est alors indispensable de ne pas oublié la balise langue sous peine de n'obtenir aucune solution.
 
ainsiAinsi la requête :
<pre>SELECT ?v WHERE { ?v ?p "cat" }</pre>
 
Ligne 470 ⟶ 482 :
|}
Pour "Bob", il n'y a pas de valeur pour la variable mbox car la clause optionnelle n'est pas vérifiée pour "Bob" .
Cette requête trouve des noms de personnes dans les données en fonction du masque. S'il y a un triplet avec le prédicat mbox qui a le même sujet qu'un nom trouvé, une solution contiendra alors l'objet du triplet, avec le predicat mbox, sera affecté à la variable mbox. Dans cet exemple, un seul triplet vérifie cette clause optionnelle.
 
On peut mettre plusieurs clauses OPTIONAL dans une requête.
Ligne 518 ⟶ 529 :
}}
 
Il arrive que les données que l'on désire atteindre, soient enregistrésenregistrées à des moments différents et donc probablement avec des ontologies différentes, c'est-à-dire dans des graphes de structures différentes.
 
Il existe le mot clé UNION qui permet d'utiliser la même variable dans des masques différents sans s'exclure mutuellement.
Ligne 597 ⟶ 608 :
 
{{solution|contenu=
 
<pre>
PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#>