« SPARQL Protocol and RDF Query Language/Requêtes d'exportation » : différence entre les versions

Contenu supprimé Contenu ajouté
m Robot : Changement de type cosmétique
Ligne 117 :
 
=== Avec une Requête CONSTRUCT ===
http://dbpedia.org/sparql/?output=RDF&query=SELECT ?siteweb WHERE { <http://dbpedia.org/resource/Star_Trek> <http://xmlns.com/foaf/0.1/homepage> ?siteweb }
 
http://dbpedia.org/sparql/?query=CONSTRUCT { <http://dbpedia.org/resource/Star_Trek> <http://xmlns.com/foaf/0.1/homepage> ?siteweb . } WHERE { <http://dbpedia.org/resource/Star_Trek> <http://xmlns.com/foaf/0.1/homepage> ?siteweb }
 
Une requête CONSTRUCT retourne un graphe RDF/XML par défaut. Le graphe obtenu est construit en fonction du patron qui est indiqué dans la clause CONSTRUCT.
 
Prenons par exemple la requête : [http://en.sparql.pro/wiki/Find_school_in_england Les écoles de Birmingham laïques pour les élèves de 15 ans avec moins de 300 élèves].
Utilisons le graphe RDF/Turtle suivant :
<pre>@prefix : <http://example.org/ns#> .
@prefix org: <http://example.com/ns#> .
 
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.
:a org:employeeName "Alice" .
:a org:employeeId 12345 .
 
<source lang="sql">
:b org:employeeName "Bob" .
PREFIX rdf: xmlns:rdf="<http://www.w3.org/1999/02/22-rdf-syntax-ns#">
:b org:employeeId 67890 .</pre>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
 
PREFIX sch-ont: <http://education.data.gov.uk/def/school/>
Ainsi la requête :
<pre>PREFIX foafrdfs: <http://xmlnswww.comw3.org/foaf2000/0.101/rdf-schema#>
PREFIX orggeo: <http://examplewww.comw3.org/2003/01/geo/nswgs84_pos#>
CONSTRUCT {
 
<http://solution/1> <http://solution/goodschool> ?school.
CONSTRUCT { ?x foaf:name ?name }
?school a sch-ont:School;
WHERE { ?x org:employeeName ?name }</pre>
sch-ont:establishmentName ?name;
 
sch-ont:websiteAddress ?web .
donnera la solution :
}
<pre>@prefix : <http://example.org/ns#> .
WHERE {
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
?school a sch-ont:School;
 
sch-ont:establishmentName ?name;
:x foaf:name "Alice" .
sch-ont:schoolCapacity ?capacity ;
:y foaf:name "Bob" .</pre>
sch-ont:religiousCharacter sch-ont:ReligiousCharacter_Does_not_apply ;
sch-ont:statutoryHighAge ?ageMax ;
sch-ont:statutoryLowAge ?ageMin ;
geo:long ?long;
geo:lat ?lat;
sch-ont:districtAdministrative ?da .
?da rdfs:label "Birmingham".
OPTIONAL {?school sch-ont:websiteAddress ?web .}
OPTIONAL {
?school sch-ont:address ?address.
?address sch-ont:address1 ?address1;
sch-ont:postcode ?postcode;
sch-ont:town ?town.
OPTIONAL {?address sch-ont:address2 ?address2. }
}
FILTER (?capacity < 300 && ?ageMax >= 15 && ?ageMin <= 15 )
}
ORDER BY DESC(?capacity)
LIMIT 2
</source>
 
etdonnera la solution sera sérialisée en RDF/XML :
<source lang="xml"><rdf:RDF
<?xml version="1.0"?>
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
<rdf:RDF xmlns:foafrdf="http://xmlnswww.comw3.org/foaf1999/0.102/22-rdf-syntax-ns#">
<rdf:Description rdf:about="http://example.orgsolution/ns#x1">
>
<p:goodschool xmlns:p="http://solution/" rdf:resource="http://education.data.gov.uk/id/school/134908" />
</rdf:Description >
rdf:about="http://example.org/ns#x">
<rdf:Description rdf:about="http://education.data.gov.uk/id/school/134908">
<foaf:name>Alice</foaf:name>
<p:type xmlns:p="http://www.w3.org/1999/02/22-rdf-syntax-ns#" rdf:resource="http://education.data.gov.uk/def/school/School" />
</rdf:Description>
</rdf:Description >
<rdf:Description rdf:about="http://exampleeducation.orgdata.gov.uk/id/school/ns#y134908">
<p:establishmentName xmlns:p="http://education.data.gov.uk/def/school/">Elmhurst School for Dance In Association With Birmingham Royal Ballet</p:establishmentName>
<foaf:name>Bob</foaf:name>
</rdf:Description>
<rdf:Description rdf:about="http://solution/1">
<p:goodschool xmlns:p="http://solution/" rdf:resource="http://education.data.gov.uk/id/school/135378" />
</rdf:Description>
<rdf:Description rdf:about="http://education.data.gov.uk/id/school/135378">
<p:type xmlns:p="http://www.w3.org/1999/02/22-rdf-syntax-ns#" rdf:resource="http://education.data.gov.uk/def/school/School" />
</rdf:Description>
<rdf:Description rdf:about="http://education.data.gov.uk/id/school/135378">
<p:establishmentName xmlns:p="http://education.data.gov.uk/def/school/">Sz School</p:establishmentName>
</rdf:Description>
</rdf:RDF>
</source>
 
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 recommendation.
;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.
 
=== Avec une requête DESCRIBE ===