from sql to sparql

Post on 08-May-2015

6.732 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

DESCRIPTION

This is a presentation at the Cluj Semantic Meetup on May 17, 2011. The presenter was Dia Miron, Semantic WEB Researcher at Recognos Romania.

TRANSCRIPT

Semantic Web Meetup

SPARQL Query Language for RDFCluj Semantic WEB meetup

http://www.meetup.com/Cluj-Semantic-WEB/

presented by

Dia MIRON

17 May 2011

Semantic Web Meetup

Introduction - SPARQL

• SPARQL is a query language/engine for RDF graphs.

• An RDF graph is a set of triples. A flexible and extensible way to represent information about WWW resources

• A concept similar to SQL for data bases. A W3C standard query language to fetch data from distributed Semantic Web data models.

• Can query a triple store or data on the Web (at a given URL). It provides facilities to:– extract information in the form of URIs, blank nodes, plain and typed

literals. – extract RDF subgraphs. – construct new RDF graphs based on information in the queried graphs

Semantic Web Meetup

SPARQL – a first example

prefix sch-ont: <http://education.data.gov.uk/def/school/>

SELECT ?name WHERE { ?school a sch-ont:School;

sch-ont:establishmentName ?name;

sch-ont:districtAdministrative <http://statistics.data.gov.uk/id/local-authority-district/00AA> ; }

ORDER BY ?name

• If executed on the UK government's Open Semantic Database, will return the names of all the schools in the UK in administrative district 00AA, and order the results in alphabetical order (http://data.gov.uk/sparql)

• SPARQL Is Similar To SQL– Like SQL, SPARQL selects data from the query data set by using a SELECT statement to

determine which subset of the selected data is returned. Also, SPARQL uses a WHERE clause to define graph patterns to find a match for in the query data set.

Semantic Web Meetup

SPARQL General Form

PREFIX (Namespace Prefixes)e.g. PREFIX plant:<http://www.linkeddatatools.com/plants>

SELECT (Result Set)e.q. SELECT ?name

FROM (Data Set)e.g. FROM <http://www.linkeddatatools.com/plantsdata/plants.rdf>

WHERE (Query Triple Pattern)e.g. WHERE { ?planttype plant:planttype ?name }

ORDER BY, DISTINCT etc (Modifiers)e.g. ORDER BY ?name

Semantic Web Meetup

Data set

Example: triple data containing a variety of shrubs and plants, and their family names

Semantic Web Meetup

Select All Data

PREFIX plants: <http://www.linkeddatatools.com/plants>

SELECT * WHERE

{ ?name plants:family ?family }

• select all the plant URIs (subjects) and plant family names (literal-type objects) from the data above;

• the wildcard '*' in SPARQL, similar to SQL, will return all the mapped data in the result set;

• as we have stated two variables ?name and ?family, the query will return both these declared query variables in our result set, according to the subjects, predicates or objects they're mapped to;

Semantic Web Meetup

And the results are…

01. <?xml version="1.0" ?>02.<sparql xmlns="http://www.w3.org/2005/sparql-results#"03.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">04.   <head>05.      <variable name="name"/>06.      <variable name="family"/>07.   </head>08.   <results>09.      <result>10.         <binding name="name">11.            <uri>http://www.linkeddatatools.com/plants#magnolia</uri>12.         </binding>13.         <binding name="family">14.            <literal>Magnoliaceae</literal>15.         </binding>16.      </result>17.      <result>18.         <binding name="name">19.            <uri>http://www.linkeddatatools.com/plants#african_lilly</uri>20.         </binding>21.         <binding name="family">22.            <literal>Liliaceae</literal>23.         </binding>24.      </result>25.      <result>26.         <binding name="name">27.            <uri>http://www.linkeddatatools.com/plants#silvertop</uri>28.         </binding>

29.         <binding name="family">30.            <literal>Aralianae</literal>31.         </binding>32.      </result>33.      <result>34.         <binding name="name">35.            <uri>http://www.linkeddatatools.com/plants#velvetleaf</uri>36.         </binding>37.         <binding name="family">38.            <literal>Malvaceae</literal>39.         </binding>40.      </result>41.      <result>42.         <binding name="name">43.            <uri>http://www.linkeddatatools.com/plants#manglietia</uri>44.         </binding>45.         <binding name="family">46.            <literal>Magnoliaceae</literal>47.         </binding>48.      </result>49.   </results>50.</sparql>

Semantic Web Meetup

A more specific query

1.PREFIX plants: <http://www.linkeddatatools.com/plants>

2.SELECT * WHERE

3.{ ?name plants:family "Magnoliaceae“ }-----------------------------------------------------------------------------------------------------------------------

<?xml version="1.0" ?>

<sparql xmlns="http://www.w3.org/2005/sparql-results#"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<head>

<variable name="name"/>

</head>

<results>

<result>

<binding name="name">

<uri>http://www.linkeddatatools.com/plants#magnolia</uri>

</binding>

</result>

<result>

<binding name="name">

<uri>http://www.linkeddatatools.com/plants#manglietia</uri>

</binding>

</result>

</results>

</sparql>

Semantic Web Meetup

What About CREATE, INSERT, UPDATE?

• at the moment, they are not implemented;• organizations publishing data in a queryable, public

SPARQL endpoint will probably in most circumstances not just want anyone writing and making changes to their (valuable) data;

• SPARUL (SPARQL/Update) and SPARQL+ are being developed to address this problem, however a solid contender to fill this gap in functionality is yet to arise,

Semantic Web Meetup

Basic Graph Pattern - Multiple Matches

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

SELECT ?name ?mbox

WHERE

{ ?x foaf:name ?name .

?x foaf:mbox ?mbox }

@prefix foaf: <http://xmlns.com/foaf/0.1/> .

_:a foaf:name "Johnny Lee Outlaw" .

_:a foaf:mbox <mailto:jlow@example.com> .

_:b foaf:name "Peter Goodguy" .

_:b foaf:mbox <mailto:peter@example.org> .

name mbox

"Johnny Lee Outlaw"

<mailto:jlow@example.com>

"Peter Goodguy" <mailto:peter@example.org>

Group Graph Pattern (set of graph patterns) also!

Data

Query

Query Result

Semantic Web Meetup

Basic Graph Pattern - Blank Nodes

PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT ?x ?name

WHERE { ?x foaf:name ?name }

@prefix foaf: <http://xmlns.com/foaf/0.1/> .

_:a foaf:name "Alice" .

_:b foaf:name "Bob" .

x name

_:c “Alice“

_:d “Bob”

Data

Query

Query Result

Semantic Web Meetup

Value Constraints

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 .

?x dc:title ?title . }

@prefix dc: <http://purl.org/dc/elements/1.1/> . @prefix : <http://example.org/book/> .

@prefix ns: <http://example.org/ns#> .

:book1 dc:title "SPARQL Tutorial" .

:book1 ns:price 42 .

:book2 dc:title "The Semantic Web" .

:book2 ns:price 23 .

title price

"The Semantic Web" 23

Data

Query

Query Result

Semantic Web Meetup

Optional graph patterns

PREFIX dc: <http://purl.org/dc/elements/1.1/>

PREFIX ns: <http://example.org/ns#>

SELECT ?title ?price

WHERE { ?x dc:title ?title .

OPTIONAL { ?x ns:price ?price .

FILTER ?price < 30 }}

@prefix dc: <http://purl.org/dc/elements/1.1/> .

@prefix : <http://example.org/book/> .

@prefix ns: <http://example.org/ns#> .

:book1 dc:title "SPARQL Tutorial" .

:book1 ns:price 42 .

:book2 dc:title "The Semantic Web" .

:book2 ns:price 23 .

title price

“SPARQL Tutorial“

"The Semantic Web" 23

Data

Query

Query Result

Semantic Web Meetup

Multiple Optional Blocks

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

SELECT ?name ?mbox ?hpage

WHERE { ?x foaf:name ?name .

OPTIONAL { ?x foaf:mbox ?mbox }. OPTIONAL { ?x foaf:homepage ?hpage } }

@prefix foaf: <http://xmlns.com/foaf/0.1/> .

@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .

_:a foaf:name "Alice" .

_:a foaf:homepage <http://work.example.org/alice/> .

_:b foaf:name "Bob" .

_:b foaf:mbox <mailto:bob@work.example> .

Data

Query

Query Result

name Mbox hpage

“Alice“ <http://work.example.org/alice/>

“Bob“ <mailto:bob@example.com>

Semantic Web Meetup

Alternative Graph Patterns

PREFIX dc10: <http://purl.org/dc/elements/1.0/>

PREFIX dc11: <http://purl.org/dc/elements/1.1/>

SELECT ?x ?y

WHERE { { ?book dc10:title ?x } UNION { ?book dc11:title ?y } }

@prefix dc10: <http://purl.org/dc/elements/1.0/> .

@prefix dc11: <http://purl.org/dc/elements/1.1/> .

_:a dc10:title "SPARQL Query Language Tutorial" .

_:b dc11:title "SPARQL Protocol Tutorial" .

_:c dc10:title "SPARQL" .

_:c dc11:title "SPARQL (updated)" .

Data

Query

Query Result

x y

"SPARQL (updated)"

"SPARQL Protocol Tutorial"

"SPARQL"

"SPARQL Query Language Tutorial"

Semantic Web Meetup

RDF Dataset

• RDF data stores may hold multiple RDF graphs:– record information about each graph– queries that involve information from more than one graph – RDF Dataset in SPARQL terminology– the background graph, which does not have a name, and zero or

more named graphs, identified by URI reference

• the relationship between named and background graphs:– (i) to have information in the background graph that includes

provenance information about the named graphs (the application is not directly trusting the information in the named graphs )

– (ii) to include the information in the named graphs in the background graph as well.

Semantic Web Meetup

RDF Dataset- The Relationship between Named and Background Graphs (I)

# Background graph

@prefix dc: <http://purl.org/dc/elements/1.1/> .

<http://example.org/bob> dc:publisher "Bob" .

<http://example.org/alice> dc:publisher "Alice" .

# Graph: http://example.org/bob

@prefix foaf: <http://xmlns.com/foaf/0.1/> .

_:a foaf:name "Bob" .

_:a foaf:mbox <mailto:bob@oldcorp.example.org> .

# Graph: http://example.org/alice

@prefix foaf: <http://xmlns.com/foaf/0.1/> .

_:a foaf:name "Alice" .

_:a foaf:mbox <mailto:alice@work.example.org> .

Semantic Web Meetup

RDF Dataset- The Relationship between Named and Background Graphs (II)

# Background graph

@prefix foaf: <http://xmlns.com/foaf/0.1/> . _:x foaf:name "Bob" .

_:x foaf:mbox <mailto:bob@oldcorp.example.org> .

_:y foaf:name "Alice" .

_:y foaf:mbox <mailto:alice@work.example.org> .

# Graph: http://example.org/bob

@prefix foaf: <http://xmlns.com/foaf/0.1/> .

_:a foaf:name "Bob" .

_:a foaf:mbox <mailto:bob@oldcorp.example.org> .

# Graph: http://example.org/alice

@prefix foaf: <http://xmlns.com/foaf/0.1/> .

_:a foaf:name "Alice" .

_:a foaf:mbox <mailto:alice@work.example.org> .

Semantic Web Meetup

Querying the Dataset

# Graph: http://example.org/foaf/aliceFoaf

@prefix foaf: <http://xmlns.com/foaf/0.1/> .

@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .

_:a foaf:name "Alice" .

_:a foaf:mbox <mailto:alice@work.example> .

_:a foaf:knows _:b .

_:b rdfs:seeAlso <http://example.org/foaf/bobFoaf> .

<http://example.org/foaf/bobFoaf> rdf:type foaf:PersonalProfileDocument .

_:b foaf:name "Bob" .

_:b foaf:mbox <mailto:bob@work.example> .

_:b foaf:age 32 . # Graph: http://example.org/foaf/bobFoaf

@prefix foaf: <http://xmlns.com/foaf/0.1/> .

@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .

_:1 foaf:mbox <mailto:bob@work.example> .

_:1 rdfs:seeAlso <http://example.org/foaf/bobFoaf> .

_:1 foaf:age 35 .

<http://example.org/foaf/bobFoaf> rdf:type foaf:PersonalProfileDocument .

Semantic Web Meetup

Querying the Dataset - Accessing Graph Labels

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

SELECT ?src ?bobAge

WHERE { GRAPH ?src

{ ?x foaf:mbox <mailto:bob@work.example> .

?x foaf:age ?bobAge }

}

src bobAge

<http://example.org/foaf/aliceFoaf> 32

<http://example.org/foaf/bobFoaf> 35

Semantic Web Meetup

Querying the Dataset - Restricting by Graph Label

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

PREFIX data: <http://example.org/foaf/>

SELECT ?age

WHERE

{

GRAPH data:bobFoaf {

?x foaf:mbox <mailto:bob@work.example> .

?x foaf:age ?age }

}

age

35

Semantic Web Meetup

Querying the Dataset - Restricting via Query Pattern

PREFIX data: <http://example.org/foaf/>

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

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

SELECT ?mbox ?age ?ppd

WHERE

{ GRAPH data:aliceFoaf

{ ?alice foaf:mbox <mailto:alice@work.example> ;

foaf:knows ?whom .

?whom foaf:mbox ?mbox ;

rdfs:seeAlso ?ppd .

?ppd a foaf:PersonalProfileDocument . } .

GRAPH ?ppd { ?w foaf:mbox ?mbox ;

foaf:age ?age } }

mbox age ppd

<mailto:bob@work.example> 35 <http://example.org/foaf/bobFoaf>

Semantic Web Meetup

Query Execution and Ordering

• Optional-1: an optional pattern that has a common variable with a(more) basic graph pattern(s) must be executed after the basic graph pattern(s)

• Optional-2: there can't be two optionals with a common variable, if that variable does not occur in a basic graph pattern as well

• Constraint: constraints are evaluated after variables are assigned values

Semantic Web Meetup

Query forms:

– SELECT

• returns all, or a subset of the variables bound in a query pattern match

• formats : XML or RDF/XML

– CONSTRUCT • returns an RDF graph constructed by substituting variables in a

set of triple templates

– DESCRIBE• returns an RDF graph that describes the resources found.

– ASK• returns whether a query pattern matches or not.

Semantic Web Meetup

CONSTRUCT Examples(I)

@prefix foaf: <http://xmlns.com/foaf/0.1/> .

_:a foaf:name "Alice" .

_:a foaf:mbox <mailto:alice@example.org> .

@prefix vcard: <http://www.w3.org/2001/vcard-rdf/3.0#>.

<http://example.org/person#Alice> vcard:FN "Alice" .

PREFIX foaf: <http://xmlns.com/foaf/0.1/> PREFIX vcard: <http://www.w3.org/2001/vcard-rdf/3.0#> CONSTRUCT { <http://example.org/person#Alice> vcard:FN ?name } WHERE { ?x foaf:name ?name }

#extracting a whole graph from the target RDF dataset

CONSTRUCT { ?s ?p ?o }

WHERE { GRAPH <http://example.org/myGraph> { ?s ?p ?o } . }

Semantic Web Meetup

CONSTRUCT Examples(II)

PREFIX dc: <http://purl.org/dc/elements/1.1/>

PREFIX app: <http://example.org/ns#>

CONSTRUCT { ?s ?p ?o }

WHERE { GRAPH ?g { ?s ?p ?o } .

{ ?g dc:publisher <http://www.w3.org/> } .

{ ?g dc:date ?date } .

FILTER app:myDate(?date) > "2005-02-8T00:00:00Z"^^xsd:dateTime. }

accesing a graph conditional on other information contained in the metadata about named graphs in the dataset

Semantic Web Meetup

DESCRIBE

PREFIX ent: <http://myorg.example/employees#> DESCRIBE ?x

WHERE { ?x ent:employeeId "1234" }

@prefix foaf: <http://xmlns.com/foaf/0.1/> .

@prefix vcard: <http://www.w3.org/2001/vcard-rdf/3.0> .

@prefix myOrg: <http://myorg.example/employees#> .

_:a myOrg:employeeId "1234" ;

foaf:mbox_sha1sum "ABCD1234" ;

vcard:N [ vcard:Family "Smith" ;

vcard:Given "John" ] .

foaf:mbox_sha1sum rdf:type owl:InverseFunctionalProperty .

Semantic Web Meetup

ASK

@prefix foaf: <http://xmlns.com/foaf/0.1/> .

@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .

_:a foaf:name "Alice" .

_:a foaf:homepage <http://work.example.org/alice/> .

_:b foaf:name "Bob" .

_:b foaf:mbox <mailto:bob@work.example> .

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

ASK { ?x foaf:name "Alice" } .

Semantic Web Meetup

Testing Values

• Named functions and syntactically constructed operations: – operands: subset of XML Schema DataTypes {xsd:string,

xsd:decimal, xsd:double, xsd:dateTime} and types derived from xsd:decimal.

• Subset of XPath functions and operators– Operands: xs:string, xs:double, xs:float, xs:decimal, xs:integer, xs:dateTime – additional operators: sop:RDFterm-equal, sop:bound , sop:isURI,

sop:isBlank, sop:isLiteral, sop:str , sop:lang, sop:datatype, sop:logical-or, sop:logical-and

• Type Promotion : xs:double, xs:float, xs:decimal– each of the numeric types is promoted to any type higher in the

above list when used as an argument to function expecting that higher type.

Semantic Web Meetup

Support for SPARQL

• SPARQL and Jena– module called ARQ that implements SPARQL; also parses

queries expressed in RDQL or its own internal language.– not yet part of the standard Jena distribution; availbale from

either Jena‘s CVS repository or as a self-contained download

• Twinkle – simple Java interface that wraps the ARQ SPARQL Processor

library (the add-on to Jena).

• Redland– set of free software packages that provide support for RDF,

including querying with RDQL and SPARQL using the Rasqal RDF Query Library. .

Semantic Web Meetup

Contact

Romania

Dia Miron – Recognos Romania

Email: dia.miron@recognos.ro

www.recognos.ro

USA

George Roth – Recognos USA

Email: groth@recognos.com

www.recognos.com

top related