semantic web - sparql - uni-koblenz · semantic web sparql gerd gr oner, matthias thimm...

Post on 24-May-2018

217 Views

Category:

Documents

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Semantic WebSPARQL

Gerd Groner, Matthias Thimm

{groener,thimm}@uni-koblenz.de

Institute for Web Science and Technologies (WeST)University of Koblenz-Landau

July 15, 2013

Gerd Groner, Matthias Thimm Semantic Web 1 / 56

Agenda for this Week

I SPARQL (2 lectures)

I Semantic Search

I Ontology Engineering

I Pattern-based Ontology Design

I Semantic Web Applications, Closing

Gerd Groner, Matthias Thimm Semantic Web 2 / 56

Outline

1 SPARQL Protocol and RDF Query Language

2 SPARQL Protocol

Gerd Groner, Matthias Thimm Semantic Web 3 / 56

Outline

1 SPARQL Protocol and RDF Query Language

2 SPARQL Protocol

Gerd Groner, Matthias Thimm Semantic Web 4 / 56

Semantic Web Layer Cake

Gerd Groner, Matthias Thimm Semantic Web 5 / 56

Goals of this lecture

I Understanding basic and advanced queries using SPARQL

I Gain knowledge about how to query data sources

Gerd Groner, Matthias Thimm Semantic Web 6 / 56

SPARQL

I W3C Recommendation 15 January 2008I http://www.w3.org/TR/rdf-sparql-query/

I Standard query language for RDFI Native RDF knowledge basesI knowledge bases viewed as RDF via middleware

I Language for querying for graph patternsI Includes unions, conjunctions and optional patternsI No support for inserts or updates

I Supports extensible testing for values and constraints

Gerd Groner, Matthias Thimm Semantic Web 7 / 56

SPARQL 1.1

I SPARQL 1.1 (W3C Recommendation 21 March 2013)

I http://www.w3.org/TR/sparql11-query/I SPARQL 1.1 Query - Adds support for aggregates, subqueries, projected

expressions, and negation to the SPARQL query language.

I SPARQL 1.1 Update - Defines an update language for RDF graphs.

I SPARQL 1.1 Protocol - Defines an abstract interface and HTTP bindings for aprotocol to issue SPARQL Query and SPARQL Update statements against aSPARQL endpoint.

I SPARQL 1.1 Service Description - Defines a vocabulary and discoverymechanism for describing the capabilities of a SPARQL endpoint.

I SPARQL 1.1 Uniform HTTP Protocol for Managing RDF Graphs - Describes theuse of the HTTP protocol for managing named RDF graphs on an HTTP server.

I SPARQL 1.1 Entailment Regimes - Defines conditions under which SPARQLqueries can be used with entailment regimes such as RDF, RDF Schema, OWL,or RIF.

I SPARQL 1.1 Property Paths - Defines a more succinct way to write parts ofbasic graph patterns and also extend matching of triple pattern to arbitrarylength paths.

Gerd Groner, Matthias Thimm Semantic Web 8 / 56

SPARQL Query Types

I SELECTI returns the set of variables bound in a query pattern match

I CONSTRUCTI returns an RDF graph constructed by substituting variables in

a set of triple templates

I DESCRIBEI returns an RDF graph that describes the resources found

I ASKI returns whether a query pattern matches any triples or not

(true / false query)

Gerd Groner, Matthias Thimm Semantic Web 9 / 56

SPARQL SELECT Query

PREFIX . . .

SELECT . . .

FROM . . .

WHERE { . . . }

schemas used in the query

values to be returned

identify source data to query

triple patterns and otherconditions tomatch the graph

Gerd Groner, Matthias Thimm Semantic Web 10 / 56

SPARQL ASK Query – Example

Query: Is the river Amazon longer than the river Nile?

PREFIX prop : <h t t p : / / d b p e d i a . org / p r o p e r t y />ASK{<h t t p : / / d b p e d i a . org / r e s o u r c e / Amazon River> prop : l e n g t h ? amazon .<h t t p : / / d b p e d i a . org / r e s o u r c e / N i l e> prop : l e n g t h ? n i l e .

FILTER (? amazon > ? n i l e ) .}

Answer: true

Gerd Groner, Matthias Thimm Semantic Web 11 / 56

SPARQL CONSTRUCT Query – Example

CONSTRUCT query is used to build an RDF graph.

PREFIX ex : <h t t p : / / example . org / schema/>PREFIX r d f : <h t t p : / /www. w3 . org /1999/02/22− r d f−syntax−ns#>CONSTRUCT{

? p e r s o n r d f : t y p e ex : Adu l t .}WHERE{

? p e r s o n ex : age ? ageFILTER (? age > 17)

}

Result is an RDF graph.

Gerd Groner, Matthias Thimm Semantic Web 12 / 56

SPARQL DESCRIBE Query – Example

DESCRIBE query is used to provide further information about anRDF resource

DESCRIBE <h t t p : / / d b p e d i a . org / r e s o u r c e / Amazon River>

Result is an extensive description of the resource “Amazon River”.Here is just an excerpt:

@ p r e f i x r d f : <h t t p : / /www. w3 . org /1999/02/22− r d f−syntax−ns#> .@ p r e f i x d b p e d i a : <h t t p : / / d b p e d i a . org / r e s o u r c e /> .@ p r e f i x dbpedia−owl : <h t t p : / / d b p e d i a . org / o n t o l o g y/> .

d b p e d i a : Amazon River r d f : t y p e dbpedia−owl : N a t u r a l P l a c e ,dbpedia−owl : P l a c e .

. . .

Gerd Groner, Matthias Thimm Semantic Web 13 / 56

Basic SPARQL Patterns

I Triple PatternI Similar to an RDF Triple

I subject, predicate, object

I Any component can be a query variableI Any combination of variables in the query is allowed

I Matching patterns in the WHERE clauseI Matching conjunction of triple patternsI Matching a triple pattern to a graph

I Finding bindings between variables and RDF Terms

I Underneath use of reasonersI Inferring triples originally not present in the knowledge base

Gerd Groner, Matthias Thimm Semantic Web 14 / 56

SPARQL Example

PREFIX f o a f : <h t t p : / / xmlns . com/ f o a f /0.1/>SELECT ?name ? pageWHERE {

? p e r s o n f o a f : page ? page .? p e r s o n f o a f : name ?name

}

?person

?name

?page

foaf:name

foaf:page

Gerd Groner, Matthias Thimm Semantic Web 15 / 56

Query Example

Data:

@ p r e f i x f o a f : <h t t p : / / xmlns . com/ f o a f /0.1/ > .: a f o a f : name ‘ ‘ S t e f f e n Staab ’ ’ .: a f o a f : homepage <h t t p : / /www. uni−k o b l e n z . de /˜ staab> .: b f o a f : name ‘ ‘ Gerd Groener ’ ’ .: b f o a f : homepage <h t t p : / /www. uni−k o b l e n z . de /˜ g r o e n e r> .

Query:

PREFIX f o a f : <h t t p : / / xmlns . com/ f o a f /0.1/>SELECT ?name ? pageWHERE {

? p e r s o n f o a f : homepage ? page .? p e r s o n f o a f : name ?name }

Query Result:

name page“Steffen Staab” <http://www.uni-koblenz.de/~staab>

“Gerd Groener” <http://www.uni-koblenz.de/~groener>

Gerd Groner, Matthias Thimm Semantic Web 16 / 56

Querying for Blank Nodes

Data:

@ p r e f i x f o a f : <h t t p : / / xmlns . com/ f o a f /0.1/ > .: a f o a f : name ‘ ‘ S t e f f e n Staab ’ ’ .: a f o a f : homepage <h t t p : / /www. uni−k o b l e n z . de /˜ staab> .: b f o a f : name ‘ ‘ Gerd Groener ’ ’ .: b f o a f : homepage <h t t p : / /www. uni−k o b l e n z . de /˜ g r o e n e r> .

Query:

PREFIX f o a f : <h t t p : / / xmlns . com/ f o a f /0.1/>SELECT ? p e r s o n ?name ? pageWHERE {

? p e r s o n f o a f : homepage ? page .? p e r s o n f o a f : name ?name }

Query Result:

person name page_:a “Steffen Staab” <http://www.uni-koblenz.de/~staab>

_:b “Gerd Groener” <http://www.uni-koblenz.de/~groener>

Gerd Groner, Matthias Thimm Semantic Web 17 / 56

Filters

I Further constrain graph patterns

I Applied to the whole group of patterns

I FILTER clause:

I Support for AND and OR logic operatorsI Extensive applications for testing literalsI Support for numerical operationsI Support for math equality operators for literals (<,=, >)I Use of regular expressionsI support for data types defined in XSL (e.g., comparision of

dates, time)I possible comparison of resources (equal, not equal)I even possible user extensions

Gerd Groner, Matthias Thimm Semantic Web 18 / 56

FILTER – Value Constraints

Data:

@ p r e f i x dc : <h t t p : / / p u r l . o rg / dc / e l e m e n t s /1.1/> .@ p r e f i x ex : <h t t p : / / example . org / book/> .@ p r e f i x ns : <h t t p : / / example . org / ns#> .ex : book1 dc : t i t l e ‘ ‘SPARQL T u t o r i a l ’ ’ .ex : book1 ns : p r i c e 42 .ex : book2 dc : t i t l e ‘ ‘ The Semant ic Web ’ ’ .ex : book2 ns : p r i c e 23 .

Query:

PREFIX dc : <h t t p : / / p u r l . o rg / dc / e l e m e n t s /1.1/>PREFIX ns : <h t t p : / / example . org / ns#>SELECT ? t i t l e ? p r i c eWHERE { ? x ns : p r i c e ? p r i c e .

FILTER ? p r i c e < 30 .? x dc : t i t l e ? t i t l e }

Query Result:

title price“The Semantic Web” 23

Gerd Groner, Matthias Thimm Semantic Web 19 / 56

FILTER – Value Constraints

Data:

@ p r e f i x dc : <h t t p : / / p u r l . o rg / dc / e l e m e n t s /1.1/> .@ p r e f i x ex : <h t t p : / / example . org / book/> .@ p r e f i x ns : <h t t p : / / example . org / ns#> .ex : book1 dc : t i t l e ‘ ‘SPARQL T u t o r i a l ’ ’ .ex : book1 ns : p r i c e 42 .ex : book2 dc : t i t l e ‘ ‘ The Semant ic Web ’ ’ .ex : book2 ns : p r i c e 23 .

Query:

PREFIX dc : <h t t p : / / p u r l . o rg / dc / e l e m e n t s /1.1/>PREFIX ns : <h t t p : / / example . org / ns#>SELECT ? t i t l e ? p r i c eWHERE { ? x ns : p r i c e ? p r i c e .

FILTER ? p r i c e < 30 .? x dc : t i t l e ? t i t l e }

Query Result:

title price“The Semantic Web” 23

Gerd Groner, Matthias Thimm Semantic Web 19 / 56

Scope of Filters

I Filters are applied to the whole group of patterns where theyappear.

{ ? x f o a f : name ?name .? x f o a f : homepage ? page .FILTER r e g e x (? name , ‘ ‘ S t e f f e n ’ ’ ) }

{ ? x f o a f : name ?name .FILTER r e g e x (? name , ‘ ‘ S t e f f e n ’ ’ ) .? x f o a f : homepage ? page }

{ FILTER r e g e x (? name , ‘ ‘ S t e f f e n ’ ’ ) .? x f o a f : name ?name .? x f o a f : homepage ? page }

I These patters are equivalent — have the same solution.

Gerd Groner, Matthias Thimm Semantic Web 20 / 56

Scope of Filters

I Filters are applied to the whole group of patterns where theyappear.

{ ? x f o a f : name ?name .? x f o a f : homepage ? page .FILTER r e g e x (? name , ‘ ‘ S t e f f e n ’ ’ ) }

{ ? x f o a f : name ?name .FILTER r e g e x (? name , ‘ ‘ S t e f f e n ’ ’ ) .? x f o a f : homepage ? page }

{ FILTER r e g e x (? name , ‘ ‘ S t e f f e n ’ ’ ) .? x f o a f : name ?name .? x f o a f : homepage ? page }

I These patters are equivalent — have the same solution.

Gerd Groner, Matthias Thimm Semantic Web 20 / 56

FILTER – Regular Expressions

Data:

@ p r e f i x f o a f : <h t t p : / / xmlns . com/ f o a f /0.1/> .: a f o a f : name ‘ ‘ S t e f f e n Staab ’ ’ .: a f o a f : homepage <h t t p : / /www. uni−k o b l e n z . de /˜ staab> .: b f o a f : name ‘ ‘ Gerd Groener ’ ’ .: b f o a f : homepage <h t t p : / /www. uni−k o b l e n z . de /˜ g r o e n e r> .

Query:

PREFIX f o a f : <h t t p : / / xmlns . com/ f o a f /0.1/>SELECT ?name ? pageWHERE {

? p e r s o n f o a f : homepage ? page .? p e r s o n f o a f : name ?name .FILTER r e g e x (? name , ‘ ‘ S t e f f e n ’ ’ )}

Query Result:

name page“Steffen Staab” <http://www.uni-koblenz.de/~staab>

Gerd Groner, Matthias Thimm Semantic Web 21 / 56

FILTER – Regular Expressions

Data:

@ p r e f i x f o a f : <h t t p : / / xmlns . com/ f o a f /0.1/> .: a f o a f : name ‘ ‘ S t e f f e n Staab ’ ’ .: a f o a f : homepage <h t t p : / /www. uni−k o b l e n z . de /˜ staab> .: b f o a f : name ‘ ‘ Gerd Groener ’ ’ .: b f o a f : homepage <h t t p : / /www. uni−k o b l e n z . de /˜ g r o e n e r> .

Query:

PREFIX f o a f : <h t t p : / / xmlns . com/ f o a f /0.1/>SELECT ?name ? pageWHERE {

? p e r s o n f o a f : homepage ? page .? p e r s o n f o a f : name ?name .FILTER r e g e x (? name , ‘ ‘ i ’ ’ , ‘ ‘ g r o e n e r ’ ’ )}

Query Result: case insensitive

name page“Gerd Groener” <http://www.uni-koblenz.de/~groener>

Gerd Groner, Matthias Thimm Semantic Web 22 / 56

Optional Patterns

I include optional triple patterns to match

I optional is a pattern itself — can include further constraints

SELECTWHERE {

. . .OPTIONAL { . . . }

}

I OPTIONAL is left-associative (i.e., operators are groupedfrom left to right)pattern OPTIONAL {pattern } OPTIONAL { pattern }is the same as{ pattern OPTIONAL { pattern } } OPTIONAL { pattern }

Gerd Groner, Matthias Thimm Semantic Web 23 / 56

Query Example

Data:

@ p r e f i x f o a f : <h t t p : / / xmlns . com/ f o a f /0.1/> .: a f o a f : name ‘ ‘ S t e f f e n Staab ’ ’ .: a f o a f : homepage <h t t p : / /www. uni−k o b l e n z . de /˜ staab> .: b f o a f : name ‘ ‘ Gerd Groener ’ ’ .: b f o a f : mbox <g r o e n e r @ u n i−k o b l e n z . de> .

Query:

PREFIX f o a f : <h t t p : / / xmlns . com/ f o a f /0.1/>SELECT ?name ? pageWHERE {

? p e r s o n f o a f : name ?name .? p e r s o n f o a f : homepage ? page .}Query Result:

name page“Steffen Staab” <http://www.uni-koblenz.de/~staab>

Gerd Groner, Matthias Thimm Semantic Web 24 / 56

Query Example

Data:

@ p r e f i x f o a f : <h t t p : / / xmlns . com/ f o a f /0.1/> .: a f o a f : name ‘ ‘ S t e f f e n Staab ’ ’ .: a f o a f : homepage <h t t p : / /www. uni−k o b l e n z . de /˜ staab> .: b f o a f : name ‘ ‘ Gerd Groener ’ ’ .: b f o a f : mbox <g r o e n e r @ u n i−k o b l e n z . de> .

Query:

PREFIX f o a f : <h t t p : / / xmlns . com/ f o a f /0.1/>SELECT ?name ? pageWHERE {

? p e r s o n f o a f : name ?name .? p e r s o n f o a f : homepage ? page .}Query Result:

name page“Steffen Staab” <http://www.uni-koblenz.de/~staab>

Gerd Groner, Matthias Thimm Semantic Web 24 / 56

Query Example — OPTIONAL

Data:

@ p r e f i x f o a f : <h t t p : / / xmlns . com/ f o a f /0.1/> .: a f o a f : name ‘ ‘ S t e f f e n Staab ’ ’ .: a f o a f : homepage <h t t p : / /www. uni−k o b l e n z . de /˜ staab> .: b f o a f : name ‘ ‘ Gerd Groener ’ ’ .: b f o a f : mbox <g r o e n e r @ u n i−k o b l e n z . de> .

Query:

PREFIX f o a f : <h t t p : / / xmlns . com/ f o a f /0.1/>SELECT ?name ? pageWHERE {

? p e r s o n f o a f : name ?name .OPTIONAL ? p e r s o n f o a f : homepage ? page .}Query Result:

name page“Steffen Staab” <http://www.uni-koblenz.de/~staab>

“Gerd Groener”

Gerd Groner, Matthias Thimm Semantic Web 25 / 56

Query Example — OPTIONAL

Data:

@ p r e f i x f o a f : <h t t p : / / xmlns . com/ f o a f /0.1/> .: a f o a f : name ‘ ‘ S t e f f e n Staab ’ ’ .: a f o a f : homepage <h t t p : / /www. uni−k o b l e n z . de /˜ staab> .: b f o a f : name ‘ ‘ Gerd Groener ’ ’ .: b f o a f : mbox <g r o e n e r @ u n i−k o b l e n z . de> .

Query:

PREFIX f o a f : <h t t p : / / xmlns . com/ f o a f /0.1/>SELECT ?name ? pageWHERE {

? p e r s o n f o a f : name ?name .OPTIONAL ? p e r s o n f o a f : homepage ? page .}Query Result:

name page“Steffen Staab” <http://www.uni-koblenz.de/~staab>

“Gerd Groener”

Gerd Groner, Matthias Thimm Semantic Web 25 / 56

Union of Graph Pattern

UNION

I combining alternative graph patterns

I if more than one of the alternatives matches, all the possiblepattern solutions are included in result

SELECTWHERE {

{ p a t t e r n }UNION{ p a t t e r n }

}

Gerd Groner, Matthias Thimm Semantic Web 26 / 56

Query Example — UNION

Data:

@ p r e f i x dc10 : <h t t p : / / p u r l . o rg / dc / e l e m e n t s /1.0/> .@ p r e f i x dc11 : <h t t p : / / p u r l . o rg / dc / e l e m e n t s /1.1/> .book1 dc10 : t i t l e ‘ ‘SPARQL T u t o r i a l ’ ’ .book1 dc10 : c r e a t o r ‘ ‘ A l i c e ’ ’ .book2 dc11 : t i t l e ‘ ‘ The Semant ic Web’ ’ .book2 dc11 : c r e a t o r ‘ ‘ Robert ’ ’ .

Query:

PREFIX dc10 : <h t t p : / / p u r l . o rg / dc / e l e m e n t s /1.0/>PREFIX dc11 : <h t t p : / / p u r l . o rg / dc / e l e m e n t s /1.1/>SELECT ? t i t l eWHERE { { ? x dc10 : t i t l e ? t i t l e }

UNION{ ? x dc11 : t i t l e ? t i t l e } }

Query Result: title“SPARQL Tutorial”“The Semantic Web”

Gerd Groner, Matthias Thimm Semantic Web 27 / 56

Query Example — UNION

Data:

@ p r e f i x dc10 : <h t t p : / / p u r l . o rg / dc / e l e m e n t s /1.0/> .@ p r e f i x dc11 : <h t t p : / / p u r l . o rg / dc / e l e m e n t s /1.1/> .book1 dc10 : t i t l e ‘ ‘SPARQL T u t o r i a l ’ ’ .book1 dc10 : c r e a t o r ‘ ‘ A l i c e ’ ’ .book2 dc11 : t i t l e ‘ ‘ The Semant ic Web’ ’ .book2 dc11 : c r e a t o r ‘ ‘ Robert ’ ’ .

Query:

PREFIX dc10 : <h t t p : / / p u r l . o rg / dc / e l e m e n t s /1.0/>PREFIX dc11 : <h t t p : / / p u r l . o rg / dc / e l e m e n t s /1.1/>SELECT ? t i t l eWHERE { { ? x dc10 : t i t l e ? t i t l e }

UNION{ ? x dc11 : t i t l e ? t i t l e } }

Query Result: title“SPARQL Tutorial”“The Semantic Web”

Gerd Groner, Matthias Thimm Semantic Web 27 / 56

Modification of the Result Set

Result of SPARQL query can be further modified

I ORDER BYI sort results alphabetically / numerically by specific variable

I LIMITI Limit number of returned results (only top n results)

I OFFSETI Skip n top results and return the rest

These expressions can be combined in a query.

Gerd Groner, Matthias Thimm Semantic Web 28 / 56

Sequencing and Limiting Results

Query:

PREFIX f o a f : <h t t p : / / xmlns . com/ f o a f /0.1/>SELECT ?name ? pageWHERE {

? p e r s o n f o a f : homepage ? page .? p e r s o n f o a f : name ?name

}ORDER BY ?nameLIMIT 20OFFSET 10

Gerd Groner, Matthias Thimm Semantic Web 29 / 56

Bound Variables

I one of the FILTER expressions

I supports testing if a variable in a query can be bound to an instancein the knowledge base

I mostly used for negation as failure

PREFIX f o a f : < h t t p : / / xmlns . com/ f o a f /0.1/>SELECT ?nameWHERE {

? p e r s o n f o a f : name ?name .OPTIONAL { ? p e r s o n f o a f : knows ? x . }FILTER ( ! bound (? x ) )

}

Gerd Groner, Matthias Thimm Semantic Web 30 / 56

Bound Variables – Example

Data:

@ p r e f i x f o a f : <h t t p : / / xmlns . com/ f o a f /0.1/> .: a f o a f : name ‘ ‘ S t e f f e n Staab ’ ’ .: a f o a f : homepage <h t t p : / /www. uni−k o b l e n z . de /˜ staab> .: b f o a f : name ‘ ‘ Gerd Groener ’ ’ .: b f o a f : mbox <g r o e n e r @ u n i−k o b l e n z . de> .

Query:

PREFIX f o a f : <h t t p : / / xmlns . com/ f o a f /0.1/>SELECT ?name ? pageWHERE {

? p e r s o n f o a f : name ?name .OPTIONAL { ? p e r s o n f o a f : homepage ? page .}FILTER ( bound (? page ) )

}Query Result:

name page“Steffen Staab” <http://www.uni-koblenz.de/~staab>

Gerd Groner, Matthias Thimm Semantic Web 31 / 56

Bound Variables – Example

Data:

@ p r e f i x f o a f : <h t t p : / / xmlns . com/ f o a f /0.1/> .: a f o a f : name ‘ ‘ S t e f f e n Staab ’ ’ .: a f o a f : homepage <h t t p : / /www. uni−k o b l e n z . de /˜ staab> .: b f o a f : name ‘ ‘ Gerd Groener ’ ’ .: b f o a f : mbox <g r o e n e r @ u n i−k o b l e n z . de> .

Query:

PREFIX f o a f : <h t t p : / / xmlns . com/ f o a f /0.1/>SELECT ?name ? pageWHERE {

? p e r s o n f o a f : name ?name .OPTIONAL { ? p e r s o n f o a f : homepage ? page .}FILTER ( bound (? page ) )

}Query Result:

name page“Steffen Staab” <http://www.uni-koblenz.de/~staab>

Gerd Groner, Matthias Thimm Semantic Web 31 / 56

Tricky Negation

Find people who do not know Steffen.First attempt:

PREFIX f o a f : < h t t p : / / xmlns . com/ f o a f /0.1/>SELECT ?nameWHERE {

? p e r s o n f o a f : name ?name .? p e r s o n f o a f : knows ? x .FILTER ( ? x != ‘ ‘ S t e f f e n ’ ’ ) }

Data:... we know that ...

‘ ‘ Paul ’ ’ f o a f : knows ‘ ‘ S t e f f e n ’ ’‘ ‘ Paul ’ ’ f o a f : knows ‘ ‘ S e r g e j ’ ’

... so “Paul” is still a valid answer (do you know why?)

... and we do not want this!

Gerd Groner, Matthias Thimm Semantic Web 32 / 56

Negation with bound

Find people who do not know Steffen.

I now the correct way using bound expression and optional graphpattern

PREFIX f o a f : h t t p : / / xmlns . com/ f o a f / 0 . 1 /SELECT ?nameWHERE {

? p e r s o n f o a f : name ?name .OPTIONAL { ? p e r s o n f o a f : knows ? x .

FILTER ( ? x = ‘ ‘ S t e f f e n ’ ’ ) }FILTER ( ! bound (? x ) )

}

Gerd Groner, Matthias Thimm Semantic Web 33 / 56

Other SPARQL Filter Expressions

Testing if a bounded variable is a blank node.

annotation

:_

Alan Smith

dc:creator

foaf:given

foaf:family

Gerd Groner, Matthias Thimm Semantic Web 34 / 56

Other SPARQL Filter Expressions (2)

I isBlank: Testing if a bounded variable is a blank node.

SELECT ? g i v e n ? f a m i l yWHERE { ? a n n o t a t i o n dc : c r e a t o r ? c .

OPTIONAL {? c f o a f : g i v e n ? g i v e n .? c f o a f : f a m i l y ? f a m i l y } .

FILTER i s B l a n k (? c ) }

I lang: Accessing the language of a literal

SELECT ?name ?mboxWHERE { ? x f o a f : name ?name .

? x f o a f : mbox ?mbox .FILTER ( l a n g (? name ) = ‘ ‘DE’ ’ ) }

Gerd Groner, Matthias Thimm Semantic Web 35 / 56

Other SPARQL Filter Expressions (3)

Testing if a bounded variable is a literal (not a resource).

:_

“Gerd”

<groener@uni-koblenz.de>

foaf:name

foaf:mbox

Gerd Groner, Matthias Thimm Semantic Web 36 / 56

Other SPARQL Filter Expressions (4)

I isLiteral: Testing if a bounded variable is a literal (not a resource)

SELECT ?name ?mboxWHERE { ? x f o a f : name ?name .

? x f o a f : mbox ?mbox .FILTER i s L i t e r a l (? mbox ) }

I str: Converting resource URI to string for regular expression matching

SELECT ?name ?mboxWHERE { ? x f o a f : name ?name .

? x f o a f : mbox ?mbox .FILTER r e g e x ( s t r (? mbox ) , ‘ ‘ @uni−k o b l e n z . de ’ ’ ) }

Gerd Groner, Matthias Thimm Semantic Web 37 / 56

Equal Terms and Same Terms

I check if two terms are equal or if they describe the same entity

term1 = term2 orsameTerm ( term1 , term2 )

I returns true if

I terms are of the same type (URI, literal, blank node)I two terms represent URIs are equivalentI two terms represent literals are equivalentI two terms are bound by the same blank node

I same entity can have even different URIs, but connected withowl:sameAs

Gerd Groner, Matthias Thimm Semantic Web 38 / 56

Equal Terms

Find people who have the same email address, but use different names

@ p r e f i x f o a f : <h t t p : / / xmlns . com/ f o a f /0.1/> .: a f o a f : name ‘ ‘ A l i c e ’ ’ .: a f o a f : mbox <m a i l t o : a l i c e @ w o r k . example> .: b f o a f : name ‘ ‘Ms A . ’ ’ .: b f o a f : mbox <m a i l t o : a l i c e @ w o r k . example> .

PREFIX f o a f : <h t t p : / / xmlns . com/ f o a f /0.1/>SELECT ?name1 ?name2WHERE {

? x f o a f : name ?name1 .? x f o a f : mbox ?mbox1 .? y f o a f : name ?name2 .? y f o a f : mbox ?mbox2 .FILTER ( sameTerm (? mbox1 , ?mbox2 ) && ?name1 != ?name2 ) }

Gerd Groner, Matthias Thimm Semantic Web 39 / 56

User-defined Functions

FILTER enables using user-defined expressions

PREFIX aGeo : <h t t p : / / example . org / geo#>SELECT ? n e i g h b o r WHERE {

? a aGeo : placeName ‘ ‘ Koblenz ’ ’ .? a aGeo : l o c a t i o n ? axLoc .? a aGeo : l o c a t i o n ? ayLoc .?b aGeo : placeName ? n e i g h b o r .?b aGeo : l o c a t i o n ? bxLoc .?b aGeo : l o c a t i o n ? byLoc .FILTER

( aGeo : d i s t a n c e (? axLoc , ? ayLoc , ? bxLoc , ? byLoc ) < 5 )}

Definition of user function geometric distance between two points described by (x, y)coordinates:

xsd:double aGeo:distance (numeric x1, numeric y1, numeric x2, numeric y2)

Gerd Groner, Matthias Thimm Semantic Web 40 / 56

User-defined Functions

FILTER enables using user-defined expressions

PREFIX aGeo : <h t t p : / / example . org / geo#>SELECT ? n e i g h b o r WHERE {

? a aGeo : placeName ‘ ‘ Koblenz ’ ’ .? a aGeo : l o c a t i o n ? axLoc .? a aGeo : l o c a t i o n ? ayLoc .?b aGeo : placeName ? n e i g h b o r .?b aGeo : l o c a t i o n ? bxLoc .?b aGeo : l o c a t i o n ? byLoc .FILTER

( aGeo : d i s t a n c e (? axLoc , ? ayLoc , ? bxLoc , ? byLoc ) < 5 )}

Definition of user function geometric distance between two points described by (x, y)coordinates:

xsd:double aGeo:distance (numeric x1, numeric y1, numeric x2, numeric y2)

Gerd Groner, Matthias Thimm Semantic Web 40 / 56

Querying for Inferred Knowledge

I SPARQL does not have specific constructs for accessing inferred knowledge

I Underlying knowledge base is responsible for supportinginference, e.g.,

I Class hierarchyI Property hierarchyI Transitive or symmetric propertiesI OWL restrictionsI Defining classes by unions and/or intersections

I Different knowledge bases can offer different level of support

I Same knowledge in different knowledge bases may returndifferent results for the same query, depending on supportedentailment

Gerd Groner, Matthias Thimm Semantic Web 41 / 56

Query Example

Alice Bob

Clare

daughterOf

sonOf

ancestorOf

ancestorOf

ancestorOf

ancestorOf = owl:transitiveProperty ∧ union(inverse(daughterOf), inverse(sonOf))

Find ancestors of Alice:

Query:

SELECT ? xWHERE { ? x a n c e s t o r O f A l i c e }

Gerd Groner, Matthias Thimm Semantic Web 42 / 56

Query Example

Alice Bob

Clare

daughterOf

sonOf

ancestorOf

ancestorOf

ancestorOf

ancestorOf = owl:transitiveProperty ∧ union(inverse(daughterOf), inverse(sonOf))

Find ancestors of Alice:

Query:

SELECT ? xWHERE { ? x a n c e s t o r O f A l i c e }

Gerd Groner, Matthias Thimm Semantic Web 42 / 56

Query Example

Alice Bob

Clare

daughterOf

sonOf

ancestorOf

ancestorOf

ancestorOf

ancestorOf = owl:transitiveProperty ∧ union(inverse(daughterOf), inverse(sonOf))

Find ancestors of Alice:

Query:

SELECT ? xWHERE { ? x a n c e s t o r O f A l i c e }

Gerd Groner, Matthias Thimm Semantic Web 42 / 56

CONSTRUCT Queries

I Special type of query to construct a new RDF graph from the existingknowledge base

PREFIX

CONSTRUCT{

. . . graph p a t t e r n . . .

. . . d e f i n i t i o n o f t r i p l e s . . .}

WHERE{

c o n s t r a i n t t r i p l e p a t t e r n s ,f i l t e r s , e t c .

}

Gerd Groner, Matthias Thimm Semantic Web 43 / 56

Constructing Graphs

Data:

@ p r e f i x f o a f :<h t t p : / / xmlns . com/ f o a f /0.1/> .

: a f o a f : g ivenname ” A l i c e ” .: a f o a f : f a m i l y n a m e ” Hacker ” .: b f o a f : f i r s t n a m e ”Bob” .: b f o a f : surname ” Hacker ” .

Result:

@ p r e f i x v c a r d : <h t t p : / /www. w3 . org /2001/ vcard−r d f /3.0#>

: v1 v c a r d :N : x .: x v c a r d : givenName

” A l i c e ” .: x v c a r d : familyName

” Hacker ” .: v2 v c a r d :N : z .: z v c a r d : givenName ”Bob” .

: z v c a r d : familyName” Hacker ” .

Query:

PREFIX f o a f :<h t t p : / / xmlns . com/ f o a f /0.1/>

PREFIX v c a r d : <h t t p : / /www. w3 . org /2001/ vcard−r d f /3.0#>

CONSTRUCT{? x v c a r d :N : v .

: v v c a r d : givenName ?gname .: v v c a r d : familyName ? fname

}WHERE{{ ? x f o a f : f i r s t n a m e ?gname }

UNION{ ? x f o a f : g ivenname ?gname } .{ ? x f o a f : surname ? fname }

UNION{ ? x f o a f : f a m i l y n a m e ? fname }}

Gerd Groner, Matthias Thimm Semantic Web 44 / 56

Constructing Graphs

Data:

@ p r e f i x f o a f :<h t t p : / / xmlns . com/ f o a f /0.1/> .

: a f o a f : g ivenname ” A l i c e ” .: a f o a f : f a m i l y n a m e ” Hacker ” .: b f o a f : f i r s t n a m e ”Bob” .: b f o a f : surname ” Hacker ” .

Result:

@ p r e f i x v c a r d : <h t t p : / /www. w3 . org /2001/ vcard−r d f /3.0#>

: v1 v c a r d :N : x .: x v c a r d : givenName

” A l i c e ” .: x v c a r d : familyName

” Hacker ” .: v2 v c a r d :N : z .: z v c a r d : givenName ”Bob” .

: z v c a r d : familyName” Hacker ” .

Query:

PREFIX f o a f :<h t t p : / / xmlns . com/ f o a f /0.1/>

PREFIX v c a r d : <h t t p : / /www. w3 . org /2001/ vcard−r d f /3.0#>

CONSTRUCT{? x v c a r d :N : v .

: v v c a r d : givenName ?gname .: v v c a r d : familyName ? fname

}WHERE{{ ? x f o a f : f i r s t n a m e ?gname }

UNION{ ? x f o a f : g ivenname ?gname } .{ ? x f o a f : surname ? fname }

UNION{ ? x f o a f : f a m i l y n a m e ? fname }}

Gerd Groner, Matthias Thimm Semantic Web 44 / 56

Constructing Graphs

Data:

@ p r e f i x f o a f :<h t t p : / / xmlns . com/ f o a f /0.1/> .

: a f o a f : g ivenname ” A l i c e ” .: a f o a f : f a m i l y n a m e ” Hacker ” .: b f o a f : f i r s t n a m e ”Bob” .: b f o a f : surname ” Hacker ” .

Result:

@ p r e f i x v c a r d : <h t t p : / /www. w3 . org /2001/ vcard−r d f /3.0#>

: v1 v c a r d :N : x .: x v c a r d : givenName

” A l i c e ” .: x v c a r d : familyName

” Hacker ” .: v2 v c a r d :N : z .: z v c a r d : givenName ”Bob” .

: z v c a r d : familyName” Hacker ” .

Query:

PREFIX f o a f :<h t t p : / / xmlns . com/ f o a f /0.1/>

PREFIX v c a r d : <h t t p : / /www. w3 . org /2001/ vcard−r d f /3.0#>

CONSTRUCT{? x v c a r d :N : v .

: v v c a r d : givenName ?gname .: v v c a r d : familyName ? fname

}WHERE{{ ? x f o a f : f i r s t n a m e ?gname }

UNION{ ? x f o a f : g ivenname ?gname } .{ ? x f o a f : surname ? fname }

UNION{ ? x f o a f : f a m i l y n a m e ? fname }}

Gerd Groner, Matthias Thimm Semantic Web 44 / 56

ASK Queries

I True / false queries — check if given set of triple patterns hasat least one match in the knowledge base

I Does not include ORDER BY, LIMIT or OFFSET

@ p r e f i x f o a f : <h t t p : / / xmlns . com/ f o a f /0.1/> .: a f o a f : name ” A l i c e ” .: a f o a f : homepage <h t t p : / / work . example . org / a l i c e /> .: b f o a f : name ”Bob” .: b f o a f : mbox <m a i l t o : bob@work . example>

Query:

PREFIX f o a f : <h t t p : / / xmlns . com/ f o a f /0.1/>ASK { ? x f o a f : name ” A l i c e ” .

? x f o a f : mbox ? y }

Answer: NO

Gerd Groner, Matthias Thimm Semantic Web 45 / 56

ASK Queries

I True / false queries — check if given set of triple patterns hasat least one match in the knowledge base

I Does not include ORDER BY, LIMIT or OFFSET

@ p r e f i x f o a f : <h t t p : / / xmlns . com/ f o a f /0.1/> .: a f o a f : name ” A l i c e ” .: a f o a f : homepage <h t t p : / / work . example . org / a l i c e /> .: b f o a f : name ”Bob” .: b f o a f : mbox <m a i l t o : bob@work . example>

Query:

PREFIX f o a f : <h t t p : / / xmlns . com/ f o a f /0.1/>ASK { ? x f o a f : name ” A l i c e ” .

? x f o a f : mbox ? y }

Answer: NO

Gerd Groner, Matthias Thimm Semantic Web 45 / 56

ASK Queries

I True / false queries — check if given set of triple patterns hasat least one match in the knowledge base

I Does not include ORDER BY, LIMIT or OFFSET

@ p r e f i x f o a f : <h t t p : / / xmlns . com/ f o a f /0.1/> .: a f o a f : name ” A l i c e ” .: a f o a f : homepage <h t t p : / / work . example . org / a l i c e /> .: b f o a f : name ”Bob” .: b f o a f : mbox <m a i l t o : bob@work . example>

Query:

PREFIX f o a f : <h t t p : / / xmlns . com/ f o a f /0.1/>ASK { ? x f o a f : name ” A l i c e ” .

? x f o a f : mbox ? y }

Answer: NO

Gerd Groner, Matthias Thimm Semantic Web 45 / 56

ASK Queries

I True / false queries — check if given set of triple patterns hasat least one match in the knowledge base

I Does not include ORDER BY, LIMIT or OFFSET

@ p r e f i x f o a f : <h t t p : / / xmlns . com/ f o a f /0.1/> .: a f o a f : name ” A l i c e ” .: a f o a f : homepage <h t t p : / / work . example . org / a l i c e /> .: b f o a f : name ”Bob” .: b f o a f : mbox <m a i l t o : bob@work . example>

Query:

PREFIX f o a f : <h t t p : / / xmlns . com/ f o a f /0.1/>ASK { ? x f o a f : name ” A l i c e ” .

? x f o a f : mbox ? y }

Answer: NO

Gerd Groner, Matthias Thimm Semantic Web 45 / 56

DESCRIBE Queries

I Return a graph that includes description of specific resourcesI Results of DESCRIBE queries reveal meta-information not

returned by standard SELECT queriesI Type of bounded resourcesI Types of relationships used in query pattern

I Exact description of resources is determined by the queryservice

I No common standard of descriptionI Can even include information about related resources

Gerd Groner, Matthias Thimm Semantic Web 46 / 56

DESCRIBE Query Example

PREFIX e n t : <h t t p : / / org . example . com/ employees#>DESCRIBE ? xWHERE { ? x e n t : e m p l o y e e I d ”1234” }

Result:

@ p r e f i x f o a f : <h t t p : / / xmlns . com/ f o a f /0.1/> .@ p r e f i x v c a r d : <h t t p : / /www. w3 . org /2001/ vcard−r d f /3.0> .@ p r e f i x exOrg : <h t t p : / / org . example . com/ employees#> .@ p r e f i x r d f : <h t t p : / /www. w3 . org /1999/02/22− r d f−syntax−ns#> .@ p r e f i x owl : <h t t p : / /www. w3 . org /2002/07/ owl#>

: a exOrg : e m p l o y e e I d ”1234” ;f o a f : mbox sha1sum ”ABCD1234” ;v c a r d :N

[ v c a r d : Fami ly ” Smith ” ;v c a r d : Given ” John ” ] .

f o a f : mbox sha1sum r d f : t y p e owl : I n v e r s e F u n c t i o n a l P r o p e r t y

Gerd Groner, Matthias Thimm Semantic Web 47 / 56

Named Graphs

I RDF data stores may hold multiple RDF graphs:I record information about each graphI queries that involve information from more than one graphI default graph (does not have a name)I multiple named graphs (identified by URI reference)I direct implementation for reification

I Accessing named graphsI FROM

I access knowledge in default graph

I FROM NAMEDI access information from specific named graph

Gerd Groner, Matthias Thimm Semantic Web 48 / 56

Remember: Ad hoc reification (direct)

→ remember: there are several alternatives for reification in RDF(modeling choices)

Repetition: Reification (statement on a statement):

Example:“Kant” examined “Jonas” in “Introduction to CS” and gave himgrade “1.0”

How can we model this in RDF?

Gerd Groner, Matthias Thimm Semantic Web 49 / 56

Ad hoc reification (direct)

“Kant” examined “Jonas” in “Introduction to CS” and gave himgrade “1.0”

s:kant/#me s:exam1 s:introCS

1.0

s:jonas/#me

s:examiner

s:examinee

s:grade

s:in

Gerd Groner, Matthias Thimm Semantic Web 50 / 56

Named Graph for reification

“Kant” examined “Jonas” in “Introduction to CS” and gave himgrade “1.0”

s:JonasGraph

s:kant/#me s:exam1 s:introCS

1.0

s:examiner

s:grade

s:in

s:Stud2Graph

Gerd Groner, Matthias Thimm Semantic Web 51 / 56

Named Graphs — Example

Data:

# D e f a u l t graph ( h t t p : / / example . org / f r i e n d s )@ p r e f i x dc : <h t t p : / / p u r l . o rg / dc / e l e m e n t s /1.1/> .<h t t p : / / example . org /bob> dc : p u b l i s h e r ‘ ‘ Bob ’ ’ .<h t t p : / / example . org / a l i c e > dc : p u b l i s h e r ‘ ‘ A l i c e ’ ’ .

# Bob ’ s Graph : h t t p : / / example . org /bob@ p r e f i x f o a f : <h t t p : / / xmlns . com/ f o a f /0.1/> .

: a f o a f : name ‘ ‘ Bob ’ ’ .: a f o a f : mbox <m a i l t o : bob@oldcorp . example . org> .

# A l i c e ’ s Graph : h t t p : / / example . org / a l i c e@ p r e f i x f o a f : <h t t p : / / xmlns . com/ f o a f /0.1/> .

: a f o a f : name ‘ ‘ A l i c e ’ ’ .: a f o a f : mbox <m a i l t o : a l i c e @ w o r k . example . org> .

Query:

SELECT . . .FROM NAMED <h t t p : / / example . org / a l i c e >FROM NAMED <h t t p : / / example . org /bob>. . .

Gerd Groner, Matthias Thimm Semantic Web 52 / 56

Named Graphs — Example

Data:

# D e f a u l t graph ( h t t p : / / example . org / f r i e n d s )@ p r e f i x dc : <h t t p : / / p u r l . o rg / dc / e l e m e n t s /1.1/> .<h t t p : / / example . org /bob> dc : p u b l i s h e r ‘ ‘ Bob ’ ’ .<h t t p : / / example . org / a l i c e > dc : p u b l i s h e r ‘ ‘ A l i c e ’ ’ .

# Bob ’ s Graph : h t t p : / / example . org /bob@ p r e f i x f o a f : <h t t p : / / xmlns . com/ f o a f /0.1/> .

: a f o a f : name ‘ ‘ Bob ’ ’ .: a f o a f : mbox <m a i l t o : bob@oldcorp . example . org> .

# A l i c e ’ s Graph : h t t p : / / example . org / a l i c e@ p r e f i x f o a f : <h t t p : / / xmlns . com/ f o a f /0.1/> .

: a f o a f : name ‘ ‘ A l i c e ’ ’ .: a f o a f : mbox <m a i l t o : a l i c e @ w o r k . example . org> .

Query:

SELECT . . .FROM NAMED <h t t p : / / example . org / a l i c e >FROM NAMED <h t t p : / / example . org /bob>. . .

Gerd Groner, Matthias Thimm Semantic Web 52 / 56

Relationships between Named Graphs

# D e f a u l t graph@ p r e f i x f o a f : <h t t p : / / xmlns . com/ f o a f /0.1/> .

: y f o a f : name ‘ ‘ A l i c e ’ ’ x .: y f o a f : mbox <m a i l t o : a l i c e @ w o r k . example . org> .: y f o a f : mbox <m a i l t o : a l i c e @ o l d c o r p . org> .

# Graph : h t t p : / / example . org / a l i c e@ p r e f i x f o a f : <h t t p : / / xmlns . com/ f o a f /0.1/> .

: a f o a f : name ‘ ‘ A l i c e ’ ’ .: a f o a f : mbox <m a i l t o : a l i c e @ w o r k . example . org> .

# Graph : h t t p : / / example . org / a l i c e p r e v@ p r e f i x f o a f : <h t t p : / / xmlns . com/ f o a f /0.1/> .

: a f o a f : name ‘ ‘ A l i c e ’ ’ .: a f o a f : mbox <m a i l t o : a l i c e @ o l d c o r p . org> .

Gerd Groner, Matthias Thimm Semantic Web 53 / 56

Accessing the Name of Named Graphs

Data:

Query:

Result:

# Graph : h t t p : / / example . org / a l i c e: a f o a f : name ‘ ‘ A l i c e ’ ’ .: a f o a f : mbox <m a i l t o : a l i c e @ w o r k . example . org> .

# Graph : h t t p : / / example . org / a l i c e p r e v: a f o a f : name ‘ ‘ A l i c e ’ ’ .: a f o a f : mbox <m a i l t o : a l i c e @ o l d c o r p . org> .

SELECT ? s r c ?mboxWHERE {

GRAPH ? s r c{ ? x f o a f : name ‘ ‘ A l i c e ’ ’ .

? x f o a f : mbox ?mbox} }

src mboxhttp://example.org/alice mailto:alice@work.example.org

http://example.org/alice_prev mailto:alice@oldcorp.org

Gerd Groner, Matthias Thimm Semantic Web 54 / 56

Accessing the Name of Named Graphs

Data:

Query:

Result:

# Graph : h t t p : / / example . org / a l i c e: a f o a f : name ‘ ‘ A l i c e ’ ’ .: a f o a f : mbox <m a i l t o : a l i c e @ w o r k . example . org> .

# Graph : h t t p : / / example . org / a l i c e p r e v: a f o a f : name ‘ ‘ A l i c e ’ ’ .: a f o a f : mbox <m a i l t o : a l i c e @ o l d c o r p . org> .

SELECT ? s r c ?mboxWHERE {

GRAPH ? s r c{ ? x f o a f : name ‘ ‘ A l i c e ’ ’ .

? x f o a f : mbox ?mbox} }

src mboxhttp://example.org/alice mailto:alice@work.example.org

http://example.org/alice_prev mailto:alice@oldcorp.org

Gerd Groner, Matthias Thimm Semantic Web 54 / 56

Accessing the Name of Named Graphs

Data:

Query:

Result:

# Graph : h t t p : / / example . org / a l i c e: a f o a f : name ‘ ‘ A l i c e ’ ’ .: a f o a f : mbox <m a i l t o : a l i c e @ w o r k . example . org> .

# Graph : h t t p : / / example . org / a l i c e p r e v: a f o a f : name ‘ ‘ A l i c e ’ ’ .: a f o a f : mbox <m a i l t o : a l i c e @ o l d c o r p . org> .

SELECT ? s r c ?mboxWHERE {

GRAPH ? s r c{ ? x f o a f : name ‘ ‘ A l i c e ’ ’ .

? x f o a f : mbox ?mbox} }

src mboxhttp://example.org/alice mailto:alice@work.example.org

http://example.org/alice_prev mailto:alice@oldcorp.org

Gerd Groner, Matthias Thimm Semantic Web 54 / 56

Restricting Access by Graph Name

Data:

# Graph : h t t p : / / example . org / a l i c e: a f o a f : name ‘ ‘ A l i c e ’ ’ .: a f o a f : mbox <m a i l t o : a l i c e @ w o r k . example . org> .

# Graph : h t t p : / / example . org / a l i c e p r e v: a f o a f : name ‘ ‘ A l i c e ’ ’ .: a f o a f : mbox <m a i l t o : a l i c e @ o l d c o r p . org> .

Query:

PREFIX ex : <h t t p : / / example . org/>SELECT ?mboxWHERE {

GRAPH ex : a l i c e{ ? x f o a f : mbox ?mbox }

}

Result: mboxmailto:alice@work.example.org

Gerd Groner, Matthias Thimm Semantic Web 55 / 56

Restricting Access by Graph Name

Data:

# Graph : h t t p : / / example . org / a l i c e: a f o a f : name ‘ ‘ A l i c e ’ ’ .: a f o a f : mbox <m a i l t o : a l i c e @ w o r k . example . org> .

# Graph : h t t p : / / example . org / a l i c e p r e v: a f o a f : name ‘ ‘ A l i c e ’ ’ .: a f o a f : mbox <m a i l t o : a l i c e @ o l d c o r p . org> .

Query:

PREFIX ex : <h t t p : / / example . org/>SELECT ?mboxWHERE {

GRAPH ex : a l i c e{ ? x f o a f : mbox ?mbox }

}

Result: mboxmailto:alice@work.example.org

Gerd Groner, Matthias Thimm Semantic Web 55 / 56

Restricting Access by Graph Name

Data:

# Graph : h t t p : / / example . org / a l i c e: a f o a f : name ‘ ‘ A l i c e ’ ’ .: a f o a f : mbox <m a i l t o : a l i c e @ w o r k . example . org> .

# Graph : h t t p : / / example . org / a l i c e p r e v: a f o a f : name ‘ ‘ A l i c e ’ ’ .: a f o a f : mbox <m a i l t o : a l i c e @ o l d c o r p . org> .

Query:

PREFIX ex : <h t t p : / / example . org/>SELECT ?mboxWHERE {

GRAPH ex : a l i c e{ ? x f o a f : mbox ?mbox }

}

Result: mboxmailto:alice@work.example.org

Gerd Groner, Matthias Thimm Semantic Web 55 / 56

Outline

1 SPARQL Protocol and RDF Query Language

2 SPARQL Protocol

Gerd Groner, Matthias Thimm Semantic Web 56 / 56

top related