Tutorial "An Introduction to SPARQL and Queries over Linked Data" Chapter 2 (ICWE 2012 Ed.)
1. ICWE 2012 Tutorial
An Introduction to SPARQL and
Queries over Linked Data
●●●
Chapter 2: SPARQL
Olaf Hartig
http://olafhartig.de/foaf.rdf#olaf
@olafhartig
Database and Information Systems Research Group
Humboldt-Universität zu Berlin
2. SPARQL in General
● A family of W3C recommendations
● SPARQL Query
● Declarative query language for RDF data
● Our focus today
● SPARQL Update
● Declarative update language for RDF data
● SPARQL Protocol
● Communication between SPARQL processing
services (a.k.a. SPARQL endpoints) and clients
● SPARQL Query Results XML Format
● XML format for serializing query results
Olaf Hartig - ICWE 2012 Tutorial "An Introduction to SPARQL and Queries over Linked Data" - Chapter 2: SPARQL 2
3. Main Idea of SPARQL Queries
● Pattern matching:
● Describe subgraphs of the queried RDF graph
● Subgraphs that match your description contribute an answer
● Mean: graph patterns (i.e. RDF graphs with variables)
?v rdf:type
umbel-sc:Volcano
Olaf Hartig - ICWE 2012 Tutorial "An Introduction to SPARQL and Queries over Linked Data" - Chapter 2: SPARQL 3
4. Main Idea of SPARQL Queries
Queried RDF graph:
rdf:type
dbpedia:Mount_Baker umbel-sc:Volcano
p:lastEruption rdf:type
"1880" dbpedia:Mount_Etna
?v rdf:type
umbel-sc:Volcano
Olaf Hartig - ICWE 2012 Tutorial "An Introduction to SPARQL and Queries over Linked Data" - Chapter 2: SPARQL 4
5. Main Idea of SPARQL Queries
Queried RDF graph:
rdf:type
dbpedia:Mount_Baker umbel-sc:Volcano
p:lastEruption rdf:type
"1880" dbpedia:Mount_Etna
?v rdf:type
umbel-sc:Volcano
Result:
?v
dbpedia:Mount_Baker
dbpedia:Mount_Etna
Olaf Hartig - ICWE 2012 Tutorial "An Introduction to SPARQL and Queries over Linked Data" - Chapter 2: SPARQL 5
6. Components of SPARQL Queries
PREFIX
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX
PREFIX umbel-sc: <http://umbel.org/umbel/sc/>
umbel-sc: <http://umbel.org/umbel/sc/>
SELECT ?v
SELECT ?v
FROM <http://example.org/myGeoData>
FROM <http://example.org/myGeoData>
WHERE {
WHERE {
?v rdf:type umbel-sc:Volcano .
?v rdf:type umbel-sc:Volcano .
}
}
ORDER BY ?name
ORDER BY ?name
Olaf Hartig - ICWE 2012 Tutorial "An Introduction to SPARQL and Queries over Linked Data" - Chapter 2: SPARQL 6
7. Components of SPARQL Queries
PREFIX
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX
PREFIX umbel-sc: <http://umbel.org/umbel/sc/>
umbel-sc: <http://umbel.org/umbel/sc/>
SELECT ?v
SELECT ?v
FROM <http://example.org/myGeoData>
FROM <http://example.org/myGeoData>
WHERE {
WHERE {
?v rdf:type umbel-sc:Volcano .
?v rdf:type umbel-sc:Volcano .
}
}
ORDER BY ?name
ORDER BY ?name
● Prologue:
● Prefix definitions for using compact URIs (CURIEs)
● Attention (difference to Turtle): No period (“.”) character as
separator
Olaf Hartig - ICWE 2012 Tutorial "An Introduction to SPARQL and Queries over Linked Data" - Chapter 2: SPARQL 7
8. Components of SPARQL Queries
PREFIX
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX
PREFIX umbel-sc: <http://umbel.org/umbel/sc/>
umbel-sc: <http://umbel.org/umbel/sc/>
SELECT ?v
SELECT ?v
FROM <http://example.org/myGeoData>
FROM <http://example.org/myGeoData>
WHERE {
WHERE {
?v rdf:type umbel-sc:Volcano .
?v rdf:type umbel-sc:Volcano .
}
}
ORDER BY ?name
ORDER BY ?name
● Result form specification:
● SELECT, DESCRIBE, CONSTRUCT, or ASK
(more about that later)
Olaf Hartig - ICWE 2012 Tutorial "An Introduction to SPARQL and Queries over Linked Data" - Chapter 2: SPARQL 8
9. Components of SPARQL Queries
PREFIX
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX
PREFIX umbel-sc: <http://umbel.org/umbel/sc/>
umbel-sc: <http://umbel.org/umbel/sc/>
SELECT ?v
SELECT ?v
FROM <http://example.org/myGeoData>
FROM <http://example.org/myGeoData>
WHERE {
WHERE {
?v rdf:type umbel-sc:Volcano .
?v rdf:type umbel-sc:Volcano .
}
}
ORDER BY ?name
ORDER BY ?name
● Dataset specification:
● Specify the RDF dataset to be queried
(more about that later)
Olaf Hartig - ICWE 2012 Tutorial "An Introduction to SPARQL and Queries over Linked Data" - Chapter 2: SPARQL 9
10. Components of SPARQL Queries
PREFIX
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX
PREFIX umbel-sc: <http://umbel.org/umbel/sc/>
umbel-sc: <http://umbel.org/umbel/sc/>
SELECT ?v
SELECT ?v
FROM <http://example.org/myGeoData>
FROM <http://example.org/myGeoData>
WHERE {
WHERE {
?v rdf:type umbel-sc:Volcano .
?v rdf:type umbel-sc:Volcano .
}
}
ORDER BY ?name
ORDER BY ?name
● Query Pattern:
● WHERE clause specifies the graph pattern to be matched
Olaf Hartig - ICWE 2012 Tutorial "An Introduction to SPARQL and Queries over Linked Data" - Chapter 2: SPARQL 10
11. Graph Patterns
● Different types of graph patterns for the query pattern
(WHERE clause):
● Basic graph pattern (BGP)
● Group graph pattern
● Optional graph pattern
● Union graph pattern
● Graph graph pattern
● (Constraints)
Olaf Hartig - ICWE 2012 Tutorial "An Introduction to SPARQL and Queries over Linked Data" - Chapter 2: SPARQL 11
12. Basic Graph Patterns
● Set of triple patterns (i.e. RDF triples with variables)
● Variable names prefixed with “?” or “$” (e.g. ?v, $v)
● Turtle syntax
● Including syntactical sugar (e.g. property and object lists)
PREFIX
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX
PREFIX umbel-sc: <http://umbel.org/umbel/sc/>
umbel-sc: <http://umbel.org/umbel/sc/>
SELECT
SELECT ?name
?name
WHERE {
WHERE {
?v rdf:type umbel-sc:Volcano .
?v rdf:type umbel-sc:Volcano .
?v rdfs:label ?name .
?v rdfs:label ?name .
}
}
Olaf Hartig - ICWE 2012 Tutorial "An Introduction to SPARQL and Queries over Linked Data" - Chapter 2: SPARQL 12
13. Basic Graph Patterns
● Set of triple patterns (i.e. RDF triples with variables)
● Variable names prefixed with “?” or “$” (e.g. ?v, $v)
● Turtle syntax
● Including syntactical sugar (e.g. property and object lists)
PREFIX
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX
PREFIX umbel-sc: <http://umbel.org/umbel/sc/>
umbel-sc: <http://umbel.org/umbel/sc/>
SELECT
SELECT ?name
?name
WHERE {
WHERE {
?v rdf:type umbel-sc:Volcano ;
?v rdf:type umbel-sc:Volcano ;
rdfs:label ?name .
rdfs:label ?name .
}
}
Olaf Hartig - ICWE 2012 Tutorial "An Introduction to SPARQL and Queries over Linked Data" - Chapter 2: SPARQL 13
23. Optional Graph Patterns
dbpedia:Mount_Etna rdf:type umbel-sc:Volcano ;
dbpedia:Mount_Etna rdf:type umbel-sc:Volcano ; Data
rdfs:label "Etna" .
rdfs:label "Etna" .
dbpedia:Mount_Baker rdf:type umbel-sc:Volcano .
dbpedia:Mount_Baker rdf:type umbel-sc:Volcano .
dbpedia:Beerenberg rdf:type umbel-sc:Volcano ;
dbpedia:Beerenberg rdf:type umbel-sc:Volcano ;
rdfs:label "Beerenberg"@en .
rdfs:label "Beerenberg"@en .
● Question: What are all (known) volcanos and their names?
SELECT ?v ?name WHERE {
SELECT ?v ?name WHERE { Query
?v rdf:type umbel-sc:Volcano ;
?v rdf:type umbel-sc:Volcano ;
rdfs:label ?name . }
rdfs:label ?name . }
?v ?name
● Problem: Mount
dbpedia:Mount_Etna "Etna"
Baker missing
dbpedia:Beerenberg "Beerenberg"@en
(it has no name)
Olaf Hartig - ICWE 2012 Tutorial "An Introduction to SPARQL and Queries over Linked Data" - Chapter 2: SPARQL 23
24. Optional Graph Patterns
● Keyword OPTIONAL allows for optional patterns
SELECT ?v ?name WHERE {
SELECT ?v ?name WHERE { Query
?v rdf:type umbel-sc:Volcano .
?v rdf:type umbel-sc:Volcano .
OPTIONAL { ?v rdfs:label ?name }
OPTIONAL { ?v rdfs:label ?name }
}
}
?v ?name
dbpedia:Mount_Etna "Etna"
dbpedia:Mount_Baker
dbpedia:Beerenberg "Beerenberg"@en
● Optional patterns may result in unbound variables
Olaf Hartig - ICWE 2012 Tutorial "An Introduction to SPARQL and Queries over Linked Data" - Chapter 2: SPARQL 24
25. Union Graph Patterns
dbpedia:Mount_Etna rdf:type umbel-sc:Volcano ;
dbpedia:Mount_Etna rdf:type umbel-sc:Volcano ; Data
rdfs:label "Etna" ;
rdfs:label "Etna" ;
p:location dbpedia:Italy .
p:location dbpedia:Italy .
dbpedia:Mount_Baker rdf:type umbel-sc:Volcano ;
dbpedia:Mount_Baker rdf:type umbel-sc:Volcano ;
p:location dbpedia:United_States .
p:location dbpedia:United_States .
dbpedia:Beerenberg rdf:type umbel-sc:Volcano ;
dbpedia:Beerenberg rdf:type umbel-sc:Volcano ;
rdfs:label
rdfs:label "Beerenberg"@en ;
"Beerenberg"@en ;
p:location
p:location dbpedia:Norway .
dbpedia:Norway .
● Question: What volcanos are located in Italy or in Norway?
SELECT ?v WHERE {
SELECT ?v WHERE { Query
?v rdf:type umbel-sc:Volcano ;
?v rdf:type umbel-sc:Volcano ;
p:location
p:location ?
? . }
. }
Olaf Hartig - ICWE 2012 Tutorial "An Introduction to SPARQL and Queries over Linked Data" - Chapter 2: SPARQL 25
26. Union Graph Patterns
● Union graph patterns allow for alternatives
SELECT ?v WHERE { ?v rdf:type umbel-sc:Volcano .
SELECT ?v WHERE { ?v rdf:type umbel-sc:Volcano .
{ ?v p:location dbpedia:Italy }
{ ?v p:location dbpedia:Italy }
UNION
UNION
{ ?v p:location dbpedia:Norway }
{ ?v p:location dbpedia:Norway }
}
} Query
Olaf Hartig - ICWE 2012 Tutorial "An Introduction to SPARQL and Queries over Linked Data" - Chapter 2: SPARQL 26
27. Union Graph Patterns
● Union graph patterns allow for alternatives
SELECT ?v WHERE { ?v rdf:type umbel-sc:Volcano .
SELECT ?v WHERE { ?v rdf:type umbel-sc:Volcano .
{ ?v p:location dbpedia:Italy }
{ ?v p:location dbpedia:Italy }
UNION
UNION
{ ?v p:location dbpedia:Norway }
{ ?v p:location dbpedia:Norway }
}
} Query
SELECT
SELECT ?v WHERE
?v WHERE {
{ Query
{ ?v
{ ?v rdf:type
rdf:type umbel-sc:Volcano ;
umbel-sc:Volcano ;
p:location dbpedia:Italy }
p:location dbpedia:Italy }
Semantically UNION
UNION
equivalent { ?v rdf:type umbel-sc:Volcano
{ ?v rdf:type umbel-sc:Volcano ;
;
p:location dbpedia:Norway
p:location dbpedia:Norway }
}
}
}
Olaf Hartig - ICWE 2012 Tutorial "An Introduction to SPARQL and Queries over Linked Data" - Chapter 2: SPARQL 27
28. Group Graph Patterns
SELECT ?v WHERE { ?v rdf:type umbel-sc:Volcano .
SELECT ?v WHERE { ?v rdf:type umbel-sc:Volcano .
{ ?v p:location dbpedia:Italy }
{ ?v p:location dbpedia:Italy }
UNION
UNION
{ ?v p:location dbpedia:Norway }
{ ?v p:location dbpedia:Norway }
}
} Query
Semantically equivalent
SELECT ?v WHERE { { ?v rdf:type umbel-sc:Volcano }
SELECT ?v WHERE { { ?v rdf:type umbel-sc:Volcano }
{ { ?v p:location dbpedia:Italy }
{ { ?v p:location dbpedia:Italy }
UNION
UNION
{ ?v p:location dbpedia:Norway } }
{ ?v p:location dbpedia:Norway } }
}
} Query
Olaf Hartig - ICWE 2012 Tutorial "An Introduction to SPARQL and Queries over Linked Data" - Chapter 2: SPARQL 28
29. Constraints on Solutions
● Syntax: Keyword FILTER followed by filter expression
PREFIX
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX
PREFIX umbel-sc: <http://umbel.org/umbel/sc/>
umbel-sc: <http://umbel.org/umbel/sc/>
PREFIX p: <http://dbpedia.org/property/>
PREFIX p: <http://dbpedia.org/property/>
SELECT ?v
SELECT ?v
WHERE {
WHERE {
?v rdf:type umbel-sc:Volcano ;
?v rdf:type umbel-sc:Volcano ;
p:lastEruption ?le .
p:lastEruption ?le .
FILTER ( ?le > 1900 )
FILTER ( ?le > 1900 )
}
}
● Filter expressions contain operators and functions
● Operators and functions operate on RDF terms
Olaf Hartig - ICWE 2012 Tutorial "An Introduction to SPARQL and Queries over Linked Data" - Chapter 2: SPARQL 29
30. Constraints (Truth Table)
● Filter expressions evaluate to true, false, or error
● Truth table:
A B A || B A && B
T T T T
T F T F
F T T F
F F F F
T E T E
E T T E
F E E F
E F E F
E E E E
Olaf Hartig - ICWE 2012 Tutorial "An Introduction to SPARQL and Queries over Linked Data" - Chapter 2: SPARQL 30
31. Unary Operators in Constraints
Operator Type(A) Result type
!A xsd:boolean xsd:boolean
+A numeric numeric
-A numeric numeric
BOUND(A) variable xsd:boolean
isURI(A) RDF term xsd:boolean
isBLANK(A) RDF term xsd:boolean
isLITERAL(A) RDF term xsd:boolean
STR(A) literal / URI simple literal
LANG(A) literal simple literal
DATATYPE(A) literal simple literal
Olaf Hartig - ICWE 2012 Tutorial "An Introduction to SPARQL and Queries over Linked Data" - Chapter 2: SPARQL 31
32. Constraints (Example)
dbpedia:Mount_Etna rdf:type umbel-sc:Volcano ;
dbpedia:Mount_Etna rdf:type umbel-sc:Volcano ; Data
rdfs:label "Etna" .
rdfs:label "Etna" .
dbpedia:Beerenberg rdf:type umbel-sc:Volcano,
dbpedia:Beerenberg rdf:type umbel-sc:Volcano,
umbel-sc:NaturalElevation ;
umbel-sc:NaturalElevation ;
rdfs:label "Beerenberg"@en ;
rdfs:label "Beerenberg"@en ;
rdfs:label "Бееренберг"@ru .
rdfs:label "Бееренберг"@ru .
● Question: List all types of the volcano called “Beerenberg”
SELECT ?type WHERE {
SELECT ?type WHERE { Query
?v rdf:type ?type ;
?v rdf:type ?type ;
rdfs:label ?name
rdfs:label ?name .
.
FILTER ( STR(?name)
FILTER ( STR(?name) = "Beerenberg" )
= "Beerenberg" )
}
}
Olaf Hartig - ICWE 2012 Tutorial "An Introduction to SPARQL and Queries over Linked Data" - Chapter 2: SPARQL 32
33. Constraints (Example)
dbpedia:Mount_Etna rdf:type umbel-sc:Volcano ;
dbpedia:Mount_Etna rdf:type umbel-sc:Volcano ; Data
rdfs:label "Etna" .
rdfs:label "Etna" .
dbpedia:Beerenberg rdf:type umbel-sc:Volcano,
dbpedia:Beerenberg rdf:type umbel-sc:Volcano,
umbel-sc:NaturalElevation ;
umbel-sc:NaturalElevation ;
rdfs:label "Beerenberg"@en ;
rdfs:label "Beerenberg"@en ;
rdfs:label "Бееренберг"@ru .
rdfs:label "Бееренберг"@ru .
●Question: List all types of the volcano called “Beerenberg”
SELECT ?type WHERE {
SELECT ?type WHERE { Query ?type
?v rdf:type ?type ;
?v rdf:type ?type ; umbel-sc:Volcano
rdfs:label ?name .
rdfs:label ?name .
umbel-sc:NaturalElevation
FILTER ( STR(?name) = "Beerenberg" )
FILTER ( STR(?name) = "Beerenberg" )
}
}
Olaf Hartig - ICWE 2012 Tutorial "An Introduction to SPARQL and Queries over Linked Data" - Chapter 2: SPARQL 33
34. Constraints (Further Operators)
● Binary operators:
● Logical connectives && and || for xsd:boolean
● Comparison operators =, !=, <, >, <=, and >= for numeric
datatypes, xsd:dateTime, xsd:string, and xsd:boolean
● Comparison operators = and != for other datatypes
● Arithmetic operators +, -, *, and / for numeric datatypes
● Furthermore:
● REGEX(String,Pattern) or REGEX(String,Pattern,Flags)
● sameTERM(A,B)
● langMATCHES(A,B)
Olaf Hartig - ICWE 2012 Tutorial "An Introduction to SPARQL and Queries over Linked Data" - Chapter 2: SPARQL 34
35. Constraints (Example)
dbpedia:Mount_Etna rdf:type umbel-sc:Volcano ;
dbpedia:Mount_Etna rdf:type umbel-sc:Volcano ; Data
rdfs:label "Etna" .
rdfs:label "Etna" .
dbpedia:Beerenberg rdf:type umbel-sc:Volcano,
dbpedia:Beerenberg rdf:type umbel-sc:Volcano,
umbel-sc:NaturalElevation ;
umbel-sc:NaturalElevation ;
rdfs:label "Beerenberg"@en ;
rdfs:label "Beerenberg"@en ;
rdfs:label "Бееренберг"@ru .
rdfs:label "Бееренберг"@ru .
● Question: What volcanos have an “e” in their name?
SELECT ?v WHERE {
SELECT ?v WHERE { Query
?v
?v rdf:type umbel-sc:Volcano ;
?v rdf:type umbel-sc:Volcano ;
rdfs:label ?name . dbpedia:Beerenberg
rdfs:label ?name .
dbpedia:Beerenberg
FILTER( REGEX(STR(?name),"e") )
FILTER( REGEX(STR(?name),"e") )
}
}
Olaf Hartig - ICWE 2012 Tutorial "An Introduction to SPARQL and Queries over Linked Data" - Chapter 2: SPARQL 35
36. Constraints (Example)
dbpedia:Mount_Etna rdf:type umbel-sc:Volcano ;
dbpedia:Mount_Etna rdf:type umbel-sc:Volcano ; Data
rdfs:label "Etna" .
rdfs:label "Etna" .
dbpedia:Beerenberg rdf:type umbel-sc:Volcano,
dbpedia:Beerenberg rdf:type umbel-sc:Volcano,
umbel-sc:NaturalElevation ;
umbel-sc:NaturalElevation ;
rdfs:label "Beerenberg"@en ;
rdfs:label "Beerenberg"@en ;
rdfs:label "Бееренберг"@ru .
rdfs:label "Бееренберг"@ru .
● Question: What volcanos have an “e” in their name?
SELECT ?v WHERE {
SELECT ?v WHERE { Query
?v
?v rdf:type umbel-sc:Volcano ;
?v rdf:type umbel-sc:Volcano ;
rdfs:label ?name . dbpedia:Mount_Etna
rdfs:label ?name .
dbpedia:Beerenberg
FILTER( REGEX(STR(?name),"e","i") )
FILTER( REGEX(STR(?name),"e","i") ) dbpedia:Beerenberg
}
}
Olaf Hartig - ICWE 2012 Tutorial "An Introduction to SPARQL and Queries over Linked Data" - Chapter 2: SPARQL 36
37. Graph Graph Patterns
● SPARQL queries
are executed over
an RDF dataset:
● One default graph and
● Zero or more named graphs (identified by an URI)
Olaf Hartig - ICWE 2012 Tutorial "An Introduction to SPARQL and Queries over Linked Data" - Chapter 2: SPARQL 37
38. Graph Graph Patterns
dbpedia:Mount_Etna rdfs:seeAlso <http://example.org/d1>.
dbpedia:Mount_Etna rdfs:seeAlso <http://example.org/d1>.
dbpedia:Mount_Baker rdfs:seeAlso <http://example.org/d2>.
dbpedia:Mount_Baker rdfs:seeAlso <http://example.org/d2>.
dbpedia:Mount_Etna
dbpedia:Mount_Etna http://example.org/d1
rdf:type umbel-sc:Volcano ;
rdf:type umbel-sc:Volcano ;
Default
rdfs:label "Etna" .
rdfs:label "Etna" .
Graph
dbpedia:Mount_Baker http://example.org/d2
dbpedia:Mount_Baker
rdf:type umbel-sc:Volcano .
rdf:type umbel-sc:Volcano .
dbpedia:Beerenberg http://example.org/d3
dbpedia:Beerenberg
● SPARQL queries rdf:type umbel-sc:Volcano ;
rdf:type umbel-sc:Volcano ;
are executed over rdfs:label "Beerenberg"@en .
rdfs:label "Beerenberg"@en .
an RDF dataset:
● One default graph and
● Zero or more named graphs (identified by an URI)
Olaf Hartig - ICWE 2012 Tutorial "An Introduction to SPARQL and Queries over Linked Data" - Chapter 2: SPARQL 38
39. Components of SPARQL Queries
PREFIX
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX
PREFIX umbel-sc: <http://umbel.org/umbel/sc/>
umbel-sc: <http://umbel.org/umbel/sc/>
SELECT ?v
SELECT ?v
FROM <http://example.org/myGeoData>
FROM <http://example.org/myGeoData>
WHERE {
WHERE {
?v rdf:type umbel-sc:Volcano .
?v rdf:type umbel-sc:Volcano .
}
}
ORDER BY ?name
ORDER BY ?name
● Dataset specification:
● Specify the RDF dataset to be queried
(more about that later)
Olaf Hartig - ICWE 2012 Tutorial "An Introduction to SPARQL and Queries over Linked Data" - Chapter 2: SPARQL 39
40. Components of SPARQL Queries
PREFIX
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX
PREFIX umbel-sc: <http://umbel.org/umbel/sc/>
umbel-sc: <http://umbel.org/umbel/sc/>
SELECT ?v
SELECT ?v
FROM <http://example.org/myGeoData>
FROM <http://example.org/myGeoData>
WHERE {
WHERE {
?v rdf:type umbel-sc:Volcano .
?v rdf:type umbel-sc:Volcano .
}
}
ORDER BY ?name
ORDER BY ?name
● Dataset specification:
● Specify the RDF dataset to be queried
(more about that later) here ...
● Specification using FROM and FROM NAMED
Olaf Hartig - ICWE 2012 Tutorial "An Introduction to SPARQL and Queries over Linked Data" - Chapter 2: SPARQL 40
55. Graph Graph Patterns
dbpedia:Mount_Etna rdfs:seeAlso <http://example.org/d1>.
dbpedia:Mount_Etna rdfs:seeAlso <http://example.org/d1>.
dbpedia:Mount_Baker rdfs:seeAlso <http://example.org/d2>.
dbpedia:Mount_Baker rdfs:seeAlso <http://example.org/d2>.
dbpedia:Mount_Etna
dbpedia:Mount_Etna http://example.org/d1
rdf:type umbel-sc:Volcano ;
rdf:type umbel-sc:Volcano ;
Default
rdfs:label "Etna" .
rdfs:label "Etna" .
Graph
dbpedia:Mount_Baker http://example.org/d2
dbpedia:Mount_Baker
rdf:type umbel-sc:Volcano .
rdf:type umbel-sc:Volcano .
dbpedia:Beerenberg
dbpedia:Beerenberg http://example.org/d3
rdf:type umbel-sc:Volcano ;
rdf:type umbel-sc:Volcano ;
rdfs:label "Beerenberg"@en .
rdfs:label "Beerenberg"@en .
● Question: Which named graphs contain the name of a
volcano that is not referenced in the default graph?
Olaf Hartig - ICWE 2012 Tutorial "An Introduction to SPARQL and Queries over Linked Data" - Chapter 2: SPARQL 55
56. Graph Graph Patterns
dbpedia:Mount_Etna rdfs:seeAlso <http://example.org/d1>.
dbpedia:Mount_Etna rdfs:seeAlso <http://example.org/d1>.
dbpedia:Mount_Baker rdfs:seeAlso <http://example.org/d2>.
dbpedia:Mount_Baker rdfs:seeAlso <http://example.org/d2>.
dbpedia:Mount_Etna
dbpedia:Mount_Etna http://example.org/d1
rdf:type umbel-sc:Volcano ;
rdf:type umbel-sc:Volcano ;
Default
rdfs:label "Etna" .
rdfs:label "Etna" .
Graph
SELECT ?g WHERE
SELECT ?g WHERE {
dbpedia:Mount_Baker http://example.org/d2
{dbpedia:Mount_Baker
GRAPH ?g {
GRAPH ?g { rdf:type umbel-sc:Volcano .
rdf:type umbel-sc:Volcano .
?v rdf:type umbel-sc:Volcano ;
?v rdf:type umbel-sc:Volcano ;
dbpedia:Beerenberg
dbpedia:Beerenberg http://example.org/d3
rdfs:label ?name .
rdfs:label ?name .
rdf:type umbel-sc:Volcano ;
rdf:type umbel-sc:Volcano ;
}}
rdfs:label "Beerenberg"@en .
OPTIONAL { ?v rdfs:seeAlso ?r } "Beerenberg"@en .
rdfs:label
OPTIONAL { ?v rdfs:seeAlso ?r }
● Question: ! BOUND(?r) ) graphs contain the name of a
FILTER ( Which named
FILTER ( ! BOUND(?r) )
}
} volcano that is not referenced in the default graph?
Olaf Hartig - ICWE 2012 Tutorial "An Introduction to SPARQL and Queries over Linked Data" - Chapter 2: SPARQL 56
57. Summary – Graph Patterns
● Different types of graph patterns for the query pattern
(WHERE clause):
● Basic graph pattern (BGP)
● Group graph pattern
● Optional graph pattern – keyword OPTIONAL
● Union graph pattern – keyword UNION
● Graph graph pattern – keyword GRAPH
● Constraints – keyword FILTER
Olaf Hartig - ICWE 2012 Tutorial "An Introduction to SPARQL and Queries over Linked Data" - Chapter 2: SPARQL 57
58. Components of SPARQL Queries
PREFIX
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX
PREFIX umbel-sc: <http://umbel.org/umbel/sc/>
umbel-sc: <http://umbel.org/umbel/sc/>
SELECT ?v
SELECT ?v
FROM <http://example.org/myGeoData>
FROM <http://example.org/myGeoData>
WHERE {
WHERE {
?v rdf:type umbel-sc:Volcano .
?v rdf:type umbel-sc:Volcano .
}
}
ORDER BY ?name
ORDER BY ?name
● Result form specification:
● SELECT, DESCRIBE, CONSTRUCT, or ASK
(more about that later)
Olaf Hartig - ICWE 2012 Tutorial "An Introduction to SPARQL and Queries over Linked Data" - Chapter 2: SPARQL 58
59. Components of SPARQL Queries
PREFIX
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX
PREFIX umbel-sc: <http://umbel.org/umbel/sc/>
umbel-sc: <http://umbel.org/umbel/sc/>
SELECT ?v
SELECT ?v
FROM <http://example.org/myGeoData>
FROM <http://example.org/myGeoData>
WHERE {
WHERE {
?v rdf:type umbel-sc:Volcano .
?v rdf:type umbel-sc:Volcano .
}
}
ORDER BY ?name
ORDER BY ?name
● Result form specification:
● SELECT, DESCRIBE, CONSTRUCT, or ASK
(more about that later)
^ here ...
Olaf Hartig - ICWE 2012 Tutorial "An Introduction to SPARQL and Queries over Linked Data" - Chapter 2: SPARQL 59
60. Result Forms
● SELECT
● Result: sequence of solutions (i.e. sets of variable bindings)
● Selected variables separated by space (not by comma!)
● Asterisk character (“*”) selects all variables in the pattern
Olaf Hartig - ICWE 2012 Tutorial "An Introduction to SPARQL and Queries over Linked Data" - Chapter 2: SPARQL 60
61. Result Forms
● SELECT
● Result: sequence of solutions (i.e. sets of variable bindings)
● Selected variables separated by space (not by comma!)
● Asterisk character (“*”) selects all variables in the pattern
● ASK
● Check whether there is at least one result
● Result: true or false
● Example: Do we have data about volcanos?
ASK WHERE {
ASK WHERE { Query
?v rdf:type umbel-sc:Volcano .
?v rdf:type umbel-sc:Volcano .
}
}
Olaf Hartig - ICWE 2012 Tutorial "An Introduction to SPARQL and Queries over Linked Data" - Chapter 2: SPARQL 61
62. Result Forms
● DESCRIBE
● Result: an RDF graph with data about resources
● Non-deterministic (i.e. query processor defines the actual
structure of the resulting RDF graph)
● Example: just name the resource
DESCRIBE <http://dbpedia.org/resource/Beerenberg>
DESCRIBE <http://dbpedia.org/resource/Beerenberg> Query
Olaf Hartig - ICWE 2012 Tutorial "An Introduction to SPARQL and Queries over Linked Data" - Chapter 2: SPARQL 62
63. Result Forms
● DESCRIBE
● Result: an RDF graph with data about resources
● Non-deterministic (i.e. query processor defines the actual
structure of the resulting RDF graph)
● Example: just name the resource
DESCRIBE <http://dbpedia.org/resource/Beerenberg>
DESCRIBE <http://dbpedia.org/resource/Beerenberg> Query
● Example: Specify the resource(s) with a query pattern
DESCRIBE ?v WHERE {
DESCRIBE ?v WHERE { Query
?v rdf:type umbel-sc:Volcano ;
?v rdf:type umbel-sc:Volcano ;
rdfs:label ?name .
rdfs:label ?name . }
}
● Multiple variables possible or asterisk (“*”) for all
Olaf Hartig - ICWE 2012 Tutorial "An Introduction to SPARQL and Queries over Linked Data" - Chapter 2: SPARQL 63
64. Result Forms
● CONSTRUCT
● Result: an RDF graph constructed from a template
● Template: graph pattern with variables from the query pattern
Olaf Hartig - ICWE 2012 Tutorial "An Introduction to SPARQL and Queries over Linked Data" - Chapter 2: SPARQL 64
65. Result Forms
● CONSTRUCT
● Result: an RDF graph constructed from a template
● Template: graph pattern with variables from the query pattern
CONSTRUCT { ?v rdfs:label ?name ;
CONSTRUCT { ?v rdfs:label ?name ; Query
rdf:type myTypes:VolcanosOutsideTheUS
rdf:type myTypes:VolcanosOutsideTheUS
}
}
WHERE {
WHERE {
?v rdf:type umbel-sc:Volcano ;
?v rdf:type umbel-sc:Volcano ;
rdfs:label ?name .
rdfs:label ?name .
OPTIONAL { ?v p:location
OPTIONAL { ?v p:location ?l
?l
FILTER ( ?l =
FILTER ( ?l = dbpedia:United_States ) }
dbpedia:United_States ) }
FILTER ( ! BOUND(?l) )
FILTER ( ! BOUND(?l) )
}
}
Olaf Hartig - ICWE 2012 Tutorial "An Introduction to SPARQL and Queries over Linked Data" - Chapter 2: SPARQL 65
67. Components of SPARQL Queries
PREFIX
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX
PREFIX umbel-sc: <http://umbel.org/umbel/sc/>
umbel-sc: <http://umbel.org/umbel/sc/>
SELECT ?v
SELECT ?v
FROM <http://example.org/myGeoData>
FROM <http://example.org/myGeoData>
WHERE {
WHERE {
?v rdf:type umbel-sc:Volcano .
?v rdf:type umbel-sc:Volcano .
}
}
ORDER BY ?name
ORDER BY ?name
● Solution modifiers:
● Only for SELECT queries
● Modify the result set as a whole (not single solutions)
● Keywords: DISTINCT, ORDER BY, LIMIT, and OFFSET
Olaf Hartig - ICWE 2012 Tutorial "An Introduction to SPARQL and Queries over Linked Data" - Chapter 2: SPARQL 67
68. Solution Modifiers
● DISTINCT removes duplicates from the result set
dbpedia:Mount_Etna rdf:type umbel-sc:Volcano ;
dbpedia:Mount_Etna rdf:type umbel-sc:Volcano ; Data
rdfs:label "Etna" .
rdfs:label "Etna" .
dbpedia:Mount_Baker rdf:type umbel-sc:Volcano.
dbpedia:Mount_Baker rdf:type umbel-sc:Volcano.
dbpedia:Beerenberg rdf:type umbel-sc:Volcano,
dbpedia:Beerenberg rdf:type umbel-sc:Volcano,
umbel-sc:NaturalElevation ;
umbel-sc:NaturalElevation ;
rdfs:label "Beerenberg"@en ;
rdfs:label "Beerenberg"@en ;
rdfs:label "Бееренберг"@ru .
rdfs:label "Бееренберг"@ru .
?type
SELECT ?type
SELECT ?type Query
umbel-sc:Volcano
WHERE { _:x rdf:type ?type }
WHERE { _:x rdf:type ?type } umbel-sc:Volcano
umbel-sc:NaturalElevation
umbel-sc:Volcano
Olaf Hartig - ICWE 2012 Tutorial "An Introduction to SPARQL and Queries over Linked Data" - Chapter 2: SPARQL 68
69. Solution Modifiers
● DISTINCT removes duplicates from the result set
dbpedia:Mount_Etna rdf:type umbel-sc:Volcano ;
dbpedia:Mount_Etna rdf:type umbel-sc:Volcano ; Data
rdfs:label "Etna" .
rdfs:label "Etna" .
dbpedia:Mount_Baker rdf:type umbel-sc:Volcano.
dbpedia:Mount_Baker rdf:type umbel-sc:Volcano.
dbpedia:Beerenberg rdf:type umbel-sc:Volcano,
dbpedia:Beerenberg rdf:type umbel-sc:Volcano,
umbel-sc:NaturalElevation ;
umbel-sc:NaturalElevation ;
rdfs:label "Beerenberg"@en ;
rdfs:label "Beerenberg"@en ;
rdfs:label "Бееренберг"@ru .
rdfs:label "Бееренберг"@ru .
?type
SELECT DISTINCT ?type
SELECT DISTINCT ?type Query
umbel-sc:Volcano
WHERE { _:x rdf:type ?type }
WHERE { _:x rdf:type ?type } umbel-sc:NaturalElevation
Olaf Hartig - ICWE 2012 Tutorial "An Introduction to SPARQL and Queries over Linked Data" - Chapter 2: SPARQL 69
70. Solution Modifiers
● ORDER BY orders the results
SELECT ?v WHERE { ?v rdf:type umbel-sc:Volcano ;
SELECT ?v WHERE { ?v rdf:type umbel-sc:Volcano ; Query
rdfs:label ?name }
rdfs:label ?name }
ORDER BY ?name
ORDER BY ?name
Olaf Hartig - ICWE 2012 Tutorial "An Introduction to SPARQL and Queries over Linked Data" - Chapter 2: SPARQL 70
71. Solution Modifiers
● ORDER BY orders the results
SELECT ?v WHERE { ?v rdf:type umbel-sc:Volcano ;
SELECT ?v WHERE { ?v rdf:type umbel-sc:Volcano ; Query
rdfs:label ?name }
rdfs:label ?name }
ORDER BY ?name
ORDER BY ?name
● How do we order different kinds of elements?
unbound variable < blank node < URI < literal
● ASC for ascending (default) and DESC for descending
● Hierarchical order criteria:
SELECT ?name WHERE { ?v rdf:type umbel-sc:Volcano ; Query
SELECT ?name WHERE { ?v rdf:type umbel-sc:Volcano ;
p:lastEruption ?le ;
p:lastEruption ?le ;
rdfs:label ?name }
rdfs:label ?name }
ORDER BY DESC(?le), ?name
ORDER BY DESC(?le), ?name
Olaf Hartig - ICWE 2012 Tutorial "An Introduction to SPARQL and Queries over Linked Data" - Chapter 2: SPARQL 71
72. Solution Modifiers
● LIMIT – limits the number of results
SELECT ?name WHERE { ?v rdf:type umbel-sc:Volcano ; Query
SELECT ?name WHERE { ?v rdf:type umbel-sc:Volcano ;
rdfs:label ?name }
rdfs:label ?name }
ORDER
ORDER BY ?name
BY ?name
LIMIT
LIMIT 5
5
Olaf Hartig - ICWE 2012 Tutorial "An Introduction to SPARQL and Queries over Linked Data" - Chapter 2: SPARQL 72
73. Solution Modifiers
● LIMIT – limits the number of results
SELECT ?name WHERE { ?v rdf:type umbel-sc:Volcano ; Query
SELECT ?name WHERE { ?v rdf:type umbel-sc:Volcano ;
rdfs:label ?name }
rdfs:label ?name }
ORDER
ORDER BY ?name
BY ?name
LIMIT
LIMIT 5
5
● OFFSET – position/index of the first reported results
SELECT ?name WHERE { ?v rdf:type umbel-sc:Volcano ; Query
SELECT ?name WHERE { ?v rdf:type umbel-sc:Volcano ;
rdfs:label ?name }
rdfs:label ?name }
ORDER
ORDER BY ?name
BY ?name
LIMIT
LIMIT 5 OFFSET 10
5 OFFSET 10
● Order of result should be predictable
(i.e. combine with ORDER BY)
Olaf Hartig - ICWE 2012 Tutorial "An Introduction to SPARQL and Queries over Linked Data" - Chapter 2: SPARQL 73
75. Outline
Chapter 1:
Linked Data and RDF
No
w:
Chapter 2: Ha
nd
s-o
The SPARQL Query Language n
Chapter 3:
Querying Linked Data on the Web
http://olafhartig.de/icwe.html
Olaf Hartig - ICWE 2012 Tutorial "An Introduction to SPARQL and Queries over Linked Data" - Chapter 2: SPARQL 75
76. These slides have been created by
Olaf Hartig
http://olafhartig.de
This work is licensed under a
Creative Commons Attribution-Share Alike 3.0 License
(http://creativecommons.org/licenses/by-sa/3.0/)
Olaf Hartig - ICWE 2012 Tutorial "An Introduction to SPARQL and Queries over Linked Data" - Chapter 2: SPARQL 76