3. SPARQL: SPARQL Protocol and RDF Query
Language
SPARQL
• pronounced "sparkle" [1]) is an RDF query language; its name
is a recursive acronym that stands for SPARQL Protocol and
RDF Query Language. It is standardized by the RDF Data
Access Working Group (DAWG) of the
World Wide Web Consortium, and is considered a component
of the semantic web.
• Initially released as a Candidate Recommendation in April
2006, but returned to Working Draft status in October 2006,
due to two open issues. [2] In June 2007, SPARQL advanced
to Candidate Recommendation once again. [3] On 12th
November 2007 the status of SPARQL changed into Proposed
Recommendation. [4] On 15th January 2008, SPARQL became
an official W3C Recommendation. [5]
page 3
Computer Science Department
Semantic Web in Action
4. SPARQL: SPARQL Protocol and RDF Query
Language
SPARQL
=
• A Query Language
• A Result Form
• An Access Protocol
page 4
Computer Science Department
Linked Data & Social Web
5. SPARQL: SPARQL Protocol and RDF Query
Language
The
Query Language: query forms
• « Select » clause returns all or subset of the
variables bound in a query pattern match
• « Construct » returns an RDF graph constructed by
substituting variables in a set of triple templates
• « Ask » returns a boolean indicating whether a query
pattern matches
• « Describe » returns an RDF graph that describe the
resources found
page 5
Computer Science Department
Linked Data & Social Web
6. SPARQL: SPARQL Protocol and RDF Query
Language
«
Select » equivalent to « SQL Select » returns a
regular table
Select …
From …
Identify data sources to query
Where { … } The triple/graph pattern
to be matched against the
triple/graphs of RDF
A conjunction of triples
PREFIX
page 6
to declare the schema used in the query
Computer Science Department
Linked Data & Social Web
7. SPARQL: SPARQL Protocol and RDF Query
Language
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?name
FROM <http://example.org/foaf/aliceFoaf>
WHERE
{
?x foaf:name ?name
}
Result:
name
« Alice »
page 7
Computer Science Department
Linked Data & Social Web
8. SPARQL: SPARQL Protocol and RDF Query
Language
PREFIX
PREFIX
PREFIX
PREFIX
foaf: <http://xmlns.com/foaf/0.1/>
: <http://dbpedia.org/resource/>
dbpedia2: <http://dbpedia.org/property/>
dbpedia: <http://dbpedia.org/>
SELECT distinct ?name ?birth ?person
FROM
<http://dbpedia.org/>
WHERE
page 8
{
?person dbpedia2:birthPlace <http://dbpedia.org/resource/Berlin>.
?person dbpedia2:birth ?birth .
?person foaf:name ?name .
}
Computer Science Department
Semantic Web in Action
9. SPARQL: SPARQL Protocol and RDF Query
Language
SPARQL
results:
namebirthperson« ":Dru_Berrymore/birth/birth_date_and_age :Dru_Berrymore "Dru
Berrymore"@de:Dru_Berrymore/birth/birth_date_and_age :Dru_Berrymore "Walter
Benjamin"@de:Berlin :Walter_Benjamin "Walter Benjamin"@de:Germany
:Walter_Benjamin
Name
Birth
« Dru Berrymore »
page 9
Computer Science Department
Semantic Web in Action
Person
10. SPARQL: SPARQL Protocol and RDF Query
Language
page 10
SELECT distinct ?name ?person
FROM
<http://dbpedia.org/>
WHERE
{
?person dbpedia2:birthPlace
<http://dbpedia.org/resource/Berlin> .
?person foaf:name ?name .
}
SELECT distinct ?name ?birth ?death ?person
FROM
<http://dbpedia.org/>
WHERE
{
?person dbpedia2:birthPlace
<http://dbpedia.org/resource/Berlin> .
?person dbpedia2:birth ?birth .
?person foaf:name ?name .
?person dbpedia2:death ?death.
}
Computer Science Department
Semantic Web in Action
11. SPARQL: SPARQL Protocol and RDF Query
Language
A
constraint, expressed by the keyword “FILTER”,
is a restriction on solutions over the whole group
in which the filter appears
PREFIX dc: <http://purl.org/dc/elements/1.1/>
PREFIX ns: <http://example.org/ns#>
SELECT ?title ?price
WHERE
{
?x ns:price ?price .
FILTER (?price < 30.5)
?x dc:title ?title .
}
page 11
Computer Science Department
Linked Data & Social Web
12. SPARQL: SPARQL Protocol and RDF Query
Language
“regex”
matches only plain literals with no
language tag
page 12
{
?x foaf:name ?name .
?x foaf:mbox ?mbox .
FILTER regex(?name, "Smith")
}
PREFIX dc: <http://purl.org/dc/elements/1.1/>
SELECT ?title
WHERE
{
?x dc:title ?title
FILTER regex(?title, "web", "i" ) }
Computer Science Department
Linked Data & Social Web
13. SPARQL: SPARQL Protocol and RDF Query
Language
Optional
parts of the graph pattern may be
specified syntactically with the “OPTIONAL”
keyword applied to a graph pattern
page 13
SELECT distinct ?name ?birth ?death ?person
FROM
<http://dbpedia.org/>
WHERE
{ ?person dbpedia2:birthPlace
<http://dbpedia.org/resource/Berlin> .
?person dbpedia2:birth ?birth .
?person foaf:name ?name .
OPTIONAL {?person dbpedia2:death ?death}
}
Computer Science Department
Linked Data & Social Web
14. SPARQL: SPARQL Protocol and RDF Query
Language
Matching
alternative
• Pattern alternatives are syntactically specified with the
UNION keyword
SELECT distinct ?name ?birth ?death ?person
WHERE {
{?person dbpedia2:birthPlace
<http://dbpedia.org/resource/Berlin> }
UNION
{?person dbpedia2:death ?death}
?person foaf:name ?name .
?person dbpedia2:birth ?birth .
}
page 14
Computer Science Department
Linked Data & Social Web
15. SPARQL: SPARQL Protocol and RDF Query
Language
Sequence
& Modify
• « Order By » to sort,
• « LIMIT » result number,
• « OFFSET » rank of first result
SELECT distinct ?name ?person
WHERE
{
?person dbpedia2:birthPlace <http://dbpedia.org/resource/Berlin>.
?person foaf:name ?name.
}
ORDER BY ?name LIMIT 20 OFFSET 20
page 15
Computer Science Department
Linked Data & Social Web
16. SPARQL: SPARQL Protocol and RDF Query
Language
«
Construct »
• The CONSTRUCT query form returns a single RDF
graph specified by a graph template.
- The result is an RDF graph formed by taking each query
solution in the solution sequence, substituting for the
variables in the graph template, and combining the triples into
a single RDF graph by set union.
• Useful for aggregating data from multiple sources
and merging it into a local store (from Ingenta)
page 16
Computer Science Department
Linked Data & Social Web
17. SPARQL: SPARQL Protocol and RDF Query
Language
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
FROM <http://molene.enstb.org/mlearning09/wpcontent/plugins/wp-rdfa/foaf.php
CONSTRUCT
{
?friend a foaf:Person;
foaf:name ?name;
foaf:homepage ?home.}
WHERE
{
?person foaf:mbox <mailto:ac@enstb.com>;
foaf:knows ?friend.
?friend foaf:name ?name;
foaf:homepage ?home.}
page 17
Computer Science Department
Linked Data & Social Web
18. SPARQL: SPARQL Protocol and RDF Query
Language
ASK
• Returns a true/false value: test whether or not a query pattern
has a solution.
• No information is returned about the possible query solutions,
just whether or not a solution exists
• Is there data that looks like this? Do you have any information
about that? (from Ingenta)
page 18
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
ASK
WHERE {
?person a foaf:Person;
foaf:mbox <mailto:ab@telecom-bretagne>.
}
Computer Science Department
Semantic Web in Action
19. SPARQL: SPARQL Protocol and RDF Query
Language
DESCRIBE
• The DESCRIBE form returns a single result RDF
graph containing RDF data about resources.
• CONSTRUCT but with less control
- Tell me about this or things that look like this … but you
decide what’s relevant (from Ingenta)
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
DESCRIBE ?friend
WHERE {
?person foaf:mbox “mailto:ab@telecom-bretagne”;
foaf:knows ?friend.}
page 19
Computer Science Department
Semantic Web in Action
20. SPARQL: SPARQL Protocol and RDF Query
Language
Applied
uses (from Ingenta)
• DESCRIBE for Prototyping
- DESCRIBE <http://example.org/someResource>
- Quickly assembling Uis, Web APIs
• SELECT for Indexing
- Building an ordering over some data ORDER BY, LIMIT
page 20
Computer Science Department
Semantic Web in Action
21. SPARQL: SPARQL Protocol and RDF Query
Language
Applied
uses (from Ingenta)
• CONSTRUCT for transformation and also simple
inferencing
- CONSTRUCT could be the XSLT of RDF
- Currently limited by lack of expressions in CONSTRUCT
triple templates
• ASK for validation
• ASK – DESCRIBE – CONSTRUCT Pattern:
- Probe endpoint, Grab default view of data, Refine data extraction and/or
apply transformation
page 21
Computer Science Department
Semantic Web in Action
22. SPARQL: SPARQL Protocol and RDF Query
Language
SPARQL
Protocol (from F. Gandon, INRIA)
• Sending queries and their results accross the web
Example
with HTTP binding
• GET /sparql/?query=<encoded query>
HTTP/1.1
Host: www.inria.fr
User-agent: my-sparql-client/0.1
page 22
Computer Science Department
Semantic Web in Action
23. SPARQL: SPARQL Protocol and RDF Query
Language
Example
with SOAP binding (from F. Gandon)
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope
xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<query-request xmlns="http://www.w3.org/2005/09/sparqlprotocol-types/#">
<query> SELECT ?x ?p ?y WHERE {?x ?p ?y} </query>
</query-request>
</soapenv:Body>
</soapenv:Envelope>
page 23
Computer Science Department
Semantic Web in Action
24. SPARQL: SPARQL Protocol and RDF Query
Language
Access
to Data on the web
• http://dbpedia.org/snorql/
• http://dbpedia.org/sparql
• http://demo.openlinksw.com/rdfbrowser2/
• http://dataviewer.zitgist.com/
• Etc.
Twinkle : a sparql query tool
• http://www.ldodds.com/projects/twinkle
page 24
Computer Science Department
Linked Data & Social Web
25. SPARQL: SPARQL Protocol and RDF Query
Language
Resources
• http://en.wikipedia.org/wiki/SPARQL
• http://www.w3.org/TR/rdf-sparql-query/
• http://jena.sourceforge.net/ARQ/Tutorial/
• http://esw.w3.org/topic/SparqlImplementations
• http://arc.semsol.org/home
• http://virtuoso.openlinksw.com/wiki/main/Main/
page 25
Computer Science Department
Semantic Web in Action