sparql intro: a query language for rdf

Post on 22-Feb-2016

49 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

SPARQL Intro: A query language for RDF. Alexandra Cristea & Matthew Yau C.Y.Yau@warwick.ac.uk. What is SPARQL. a query language for RDF(S) W3C Recommendation 15 th January 2008 provides a standard format for writing queries that target RDF data - PowerPoint PPT Presentation

TRANSCRIPT

SPARQL Intro:A query language for RDF

Alexandra Cristea & Matthew Yau C.Y.Yau@warwick.ac.uk

1

a query language for RDF(S) W3C Recommendation 15th January 2008

◦provides a standard format for writing queries that target RDF data

◦and a set of standard rules for processing queries and returning the results

http://www.w3.org/TR/rdf-sparql-query/ Read also: as guided on course website!

2

What is SPARQL

3

RDF Statements

SubjectPredicate

author http://www.w3schools.com/RDF

Object

Jan Egil Refsnes

SPARQL searches for all sub-graphs that match the graph described by the triples in the query.

?subject ?predicate ?object

SELECT ?studentWHERE { ?student b:studies bmod:CS328 }

~ SQL

4

A sample of SPARQL (TURTLE notation)

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:cd="http://www.recshop.fake/cd#">

b:studiesbmod:CS328PREFIX b: http://...

PREFIX bmod: <http://www2.warwick.ac.uk/fac/sci/dcs/teaching/material/>

The PREFIX keyword is SPARQL’s version of an xmlns:namespace declaration and works in basically the same way.

5

Prefixes & namespaces

Different syntax from XMLVariables: begin with ? or $ triples patterns enclosed within braces {}Result: variables after SELECT (~SQL)

6

SPARQL basics

PREFIX b: <http://www2.warwick.ac.uk/rdf/>PREFIX bmod:

<http://www2.warwick.ac.uk/fac/sci/dcs/teaching/material/>PREFIX foaf: <http://xmlns.com/foaf/0.1/>

SELECT ?name

WHERE { ?student b:studies bmod:CS328 . ?student foaf:name ?name }

7

Combining conditions

FOAF (Friend Of A Friend) experimental project using RDF, defining a

standardised vocabulary. Goal: make personal homepages machine-

readable & understandable, create an internet-wide connected database of people.

Defined at:http://xmlns.com/foaf/0.1/

8

FOAF

Idea: most personal homepages contain similar info.◦E.g, person’s name, living place, work place, details

on work of the moment, links to friends.◦define RDF predicates to represent them. ◦So: Pages: understood/ manipulated by computers.

So a db can be queried for: ◦“what projects are my friends working on?”, ◦“do any of my friends know the director of

BigCorp?” etc..

9

FOAF

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-

ns#" xmlns:foaf="http://xmlns.com/foaf/0.1#"> <foaf:Person> <foaf:name>Matthew Yau</foaf:name> <foaf:mbox rdf:resource="mailto:C.Y.Yau@warwick.ac.uk"/> </foaf:Person> </rdf:RDF>

10

A sample FOAF RDF document

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:foaf="http://xmlns.com/foaf/0.1/"> <foaf:Person> <foaf:name>Leigh Dodds</foaf:name> <foaf:firstName>Leigh</foaf:firstName> <foaf:surname>Dodds</foaf:surname> <foaf:mbox_sha1sum>71b88e951</foaf:mbox_sha1sum> <foaf:knows> <foaf:Person> <foaf:name>Dan Brickley</foaf:name> <foaf:mbox_sha1sum>241021fb0</foaf:mbox_sha1sum> <rdfs:seeAlso rdf:resource="http://rdfweb.org/people/danbri/foaf.rdf"/> </foaf:Person> </foaf:knows> </foaf:Person> </rdf:RDF>

11

FOAF: another example

PREFIX b: <http://www2.warwick.ac.uk/rdf/>PREFIX bmod: <

http://www2.warwick.ac.uk/fac/sci/dcs/teaching/material/>PREFIX foaf:http://xmlns.com/foaf/0.1/

SELECT ?module ?nameWHERE { ?student b:studies ?module . ?student foaf:name ?name }

12

Extracting multiple results

PREFIX b: <http://www2.warwick.ac.uk/rdf/>PREFIX bmod: <

http://www2.warwick.ac.uk/fac/sci/dcs/teaching/material/ >

PREFIX foaf:<http://xmlns.com/foaf/0.1/>

SELECT ?module ?nameWHERE { ?student b:studies ?module ; foaf:name ?name }

13

Using the same subject

SELECT ?module ?nameWHERE { ?student b:studies ?module . ?student b:studies bmod:CS328 ; foaf:name ?name }

is identical to:

SELECT ?module ?name

WHERE { ?student b:studies ?module , bmod:CS328 ;

foaf:name ?name }

14

Abbreviating multiple objects

SELECT ?student ?emailWHERE { ?student b:studies mod:CS328 . ?student foaf:mbox ?email }

PB: if a student does not have an e-mail address registered, with a foaf:mbox predicate, then the query will not match !!

15

Optional graph components

SELECT ?student ?emailWHERE { ?student b:studies mod:CS328 .OPTIONAL { ?student foaf:mbox ?email } }

OPTIONAL: match it if it can, but otherwise not reject the overall pattern.

16

Optional graph components

SELECT ?module ?name ?phoneWHERE { ?student b:studies ?module . ?student foaf:name ?name .OPTIONAL { ?student b:contactpermission true .?student b:phone ?phone} }

SELECT ?module ?name ?ageWHERE { ?student b:studies ?module . ?student foaf:name ?name .OPTIONAL { ?student b:age ?age . FILTER (?age > 25) } }

17

More optional graph components …and filters:

SELECT ?student ?email ?homeWHERE { ?student b:studies mod:CS328 .OPTIONAL { ?student foaf:mbox ?email . ?student foaf:homepage ?home } }

SELECT ?student ?email ?homeWHERE { ?student b:studies mod:CS328 .OPTIONAL { ?student foaf:mbox ?email } .OPTIONAL { ?student foaf:homepage ?home } }

18

Further optional examples …

SELECT ?studentWHERE { ?student foaf:mbox ?email . { ?student b:studies mod:CS328 } UNION { ?student b:studies mod:CS909 } }

When patterns are combined using the UNION keyword, the resulting combined pattern will match if any of the subpatterns is matched.

19

Combining matches

All the previous queries : single RDF graphs. Often: multiple RDF graphs. RDF graphs: identified by URI.

◦ Note: URI that represents the graph does not have to be the actual URI of the graph file

◦ although the program processing the query will need to somehow relate the URI to an actual RDF graph stored somewhere.

20

Multiple graphs and the dataset

SELECT ?student ?email ?homeFROM <http://www2.warwick.ac.uk/rdf/student>WHERE { ?student b:studies mod:CS909 . OPTIONAL { ?student foaf:mbox ?email . ?student foaf:homepage ?home } }

By using several FROM declarations, you can combine several graphs in the dataset:

SELECT ?student ?email ?homeFROM <http://www2.warwick.ac.uk/rdf/student>FROM <http://www2.warwick.ac.uk/rdf/foaf>WHERE { ?student b:studies mod:CS909 . OPTIONAL { ?student foaf:mbox ?email . ?student foaf:homepage ?home } }

21

Stating the dataset

one (optional) default graph + any number of named graphs. FROM specifies default graph.

◦Many FROM keywords, the graphs are merged into the default graph.

Additionally: named graphs, w FROM NAMED.◦However, to match patterns you must use GRAPH

keyword to state which graph !

22

Multiple graphs

SELECT ?student ?email ?homeFROM NAMED <http://www2.warwick.ac.uk/rdf/student>FROM NAMED<http://www2.warwick.ac.uk/rdf/foaf>

WHERE { GRAPH <http://www2.warwick.ac.uk/rdf/student> { ?student b:studies mod:CS909 } . GRAPH <http://www2.warwick.ac.uk/rdf/foaf> { OPTIONAL { ?student foaf:mbox ?email . ?student foaf:homepage ?home } } }

23

Examples of named graphs

PREFIX brdf: <http://www2.warwick.ac.uk/rdf/>SELECT ?student ?email ?homeFROM NAMED <http://www2.warwick.ac.uk/rdf/student>FROM NAMED <http://www2.warwick.ac.uk/rdf/foaf>

WHERE { GRAPH brdf:student { ?student b:studies mod:CS909 } . GRAPH brdf:foaf{ OPTIONAL { ?student foaf:mbox ?email . ?student foaf:homepage ?home } } }

24

Abbreviation using prefixes

PREFIX brdf: <http://www2.warwick.ac.uk/rdf/>SELECT ?student ?email ?homeFROM <http://www2.warwickac.uk/rdf/student>FROM NAMED <http://www2.warwickac.uk/rdf/foaf>

WHERE { ?student b:studies mod:CS909 . GRAPH brdf:foaf{ OPTIONAL { ?studentfoaf:mbox?email . ?studentfoaf:homepage ?

home } } } 25

Using named and default graph together

the GRAPH can also be a variable.◦to query which graph in the dataset holds a

particular relationship, ◦or which graph to search based on data in

another graph.

not mandatory to declare all graphs◦even if specified, the dataset can be

overridden on a per-query basis.

26

Graph as a query

PREFIX brdf: <http://www2.warwick.ac.uk/rdf/>SELECT ?student ?graphWHERE { ?student b:studies mod:CS909 . GRAPH ?graph { ?student foaf:mbox ?email } }

output var graph holds graph URL (matching student to e-mail address).

Presumption: query processor has knowledge of a finite set of graphs + their locations

27

Which graph is it in?

PREFIX brdf: <http://www2.warwickac.uk/rdf/>SELECT ?student ?emailWHERE { ?student b:studies mod:CS909 . ?student rdfs:seeAlso ?graph . GRAPH ?graph { ?student foaf:mbox ?email } } Note: if student doesn’t have a rdfs:seeAlso property

which points to a graph holding their e-mail address, they will not appear in the result at all.

28

Re-using the graph reference

SELECT ?name ?moduleWHERE { ?student b:studies ?module . ?student foaf:name ?name . }ORDER BY ?name

SELECT ?name ?ageWHERE { ?student b:age ?age . ?student foaf:name ?name . }ORDER BY DESC (?age) ASC (?name)

29

Sorting results of a query

SELECT ?name ?moduleWHERE { ?student b:studies ?module .?student foaf:name ?name .}LIMIT 20

30

Limiting the number of results

SELECT ?name ?moduleWHERE { ?student b:studies ?module . ?student foaf:name ?name . }ORDER BY ?nameOFFSET 10LIMIT 20

31

Extracting subsets of the results

Is any student studying any module?ASK { ?student b:studies ?module }

Is any student studying CS909?ASK { ?student b:studies bmod:CS909 }

Is student 029389 studying CS909?ASK { bstu:029389 b:studies bmod:CS909 }

Is anyone whom 029389 knows, studying CS909?ASK {bstu:029389 foaf:knows ?x .

?x b:studies bmod: CS909 } Is any student aged over 30 studying CS909?

32

Obtaining a Boolean result

SELECT ?studentWHERE { ?student b:studies ?module }

versus:

SELECT DISTINCT ?studentWHERE { ?student b:studies ?module }

33

Obtaining unique results

CONSTRUCT { ?student b:studyFriend ?friend }WHERE { ?student b:studies ?module . ?student foaf:knows ?friend . ?friend b:studies ?module } }

If there is more than one search result, the triples from each result are combined.

34

Constructing an RDF result

SPARQL language is used for querying RDF. SPARQL is not based on XML, but on SQL-

like syntax. Building blocks of SPARQL queries are graph

patterns that include variables. The result of the query will be the values the vars must take to match the RDF graph.

A SPARQL query can return results in several different ways, as determined by the query.

SPARQL queries can also be used for OWL querying.

35

Summary

[1] Dean Allemang & Jim Hendler. 2008 Semantic Web for the working ontologist. Morgan Kaufmann publishers. ISBN 978-0-12-373556-0

[2] Eric Prud'hommeaux ; & Andy Seaborne . 2008 SPARQL Query Language for RDF , [Online] http://www.w3.org/TR/rdf-sparql-query/

36

References

Download Jena from http://jena.sourceforge.net/ Protégé 3.4

http://protege.stanford.edu/

37

Tools to process

38

Questions?

top related