2. +
Disclaimer
License
This work is licensed under a
Creative Commons Attribution-Share Alike 3.0 License
(http://creativecommons.org/licenses/by-sa/3.0/)
Material for these slides has been taken from
W3C pages for SPARQL
Jena and Sesame‟s documentation
6. +
Architecture of SW applications
Local access
The RDF graph is stored
locally and is accessible
through an API
Mixed access
Manual (hard coded)
Federated Queries
Traversal
Remote access
The RDF graph is owned by
a third party and expossed
through an SPARQLendpoint or a web service
8. +
Local access
Data is managed locally by
means of a triple store (e.g.,
Jena, Sesame)
Data may be:
RDF (e.g., local copies of
Linked Data
Legacy data transformed into
RDF (more in a few)
9. +
Local access(triple stores)
Possible triple stores:
Jena
TDB, SDB, Sesame, 4Store,
…
Virtuoso, OWLIM, AllegroGra
ph,…
3rd party data:
From DUMPs
http://wiki.dbpedia.org/
http://pro.europeana.eu/dat
asets
Crawling (e.g, LDSpider)
Legacy transformation
10. +
Local access (legacy sources)
3rd party tools to transform
CSV
XLS, etc.
XSLT to transform XML
Mapping based
(R2RML, D2RQ)
3rd party tools to transform
RDBMS into RDF dumps
3rd party tools to expose
RDBMS as virtual RDF
All of these will be covered in
the course
11. +
Local access (local queries)
All triple stores offer SPARQL
execution
Accessible through console
tools (mysql and psql style)
bin/sparql --data=data-mydata.rdf
--query=my-sparql-query.rq
Through their own API
12. +
SPARQL with Jena in Java
Key API objects
Query
QueryFactory
QueryExecutionFactory
QueryExecution
execAsk() > boolean
execConstruct() > Model
execDescribe() > Model
execSelect() > ResultSet
String queryString = "PREFIX owl:
<http://www.w3.org/2002/07/owl#> SELECT *
WHERE { ?x owl:sameas ?y }";
Query query =
QueryFactory.create(queryString);
QueryExecution qe =
QueryExecutionFactory.create(query, tdb);
ResultSet results = qe.execSelect();
13. +
SPARQL with Jena in Java
ResultSet
Results from a query in a
table-like manner for
SELECT queries. Each row
corresponds to a set of
bindings which fulfil the
conditions of the query.
Access to the results is by
variable name.
getResultVars() >
List<String>
hasNext() > boolean
next() > QuerySolution
String queryString = "PREFIX owl:
<http://www.w3.org/2002/07/owl#> SELECT *
WHERE { ?x owl:sameas ?y }";
Query query =
QueryFactory.create(queryString);
QueryExecution qe =
QueryExecutionFactory.create(query, tdb);
ResultSet results = qe.execSelect();
14. +
SPARQL with Jena in Java
QuerySolution
A single answer from a
SELECT query
varNames() >
Iterator<String>
contains(varname) > boolean
get(varname) > RDFNode
getResource(varname) >
Resource
getLiteral(varname) > Literal
String queryString = "PREFIX owl:
<http://www.w3.org/2002/07/owl#> SELECT *
WHERE { ?x owl:sameas ?y }";
Query query =
QueryFactory.create(queryString);
QueryExecution qe =
QueryExecutionFactory.create(query, tdb);
ResultSet results = qe.execSelect();
17. +
Remote access (SPARQL Protocol)
Means to access query
processors
Compatible with RDF
Abstract specification
Bindings with the following
protocols:
HTTP
SOAP (WSDL)
18. +
SPARQL Protocol
Main elements:
operation
one operation „query‟
In message
one sparql query
zero or more datasets
Out Message
SPARQL results document
(for SELECT or ASK)
An RDF graph serialized in
RDF/XML (for DESCRIBE
and CONSTRUCT)
19. +
SPARQL Protocol
Means to access query
processors
Compatible with RDF
Abstract specification
Bindings with the following
protocols:
HTTP
SOAP (WSDL)
20. +
SPARQL Protocol (HTTP bindings)
Uses HTTP GET and POST messages
Encoded query message (HTTP Encode)
Returns document in requested format (or the default)
PREFIX dc: <http://purl.org/dc/elements/1.1/>
SELECT ?book ?who
WHERE { ?book dc:creator ?who }
21. +
SPARQL Protocol (HTTP bindings)
Request
GET /sparql/?query=EncodedQuery HTTP/1.1
Host: www.example
User-agent: my-sparql-client/0.1
Response (next page)
(Uses the XML formatting for SPARQL results)
25. +
SPARQL Protocol (HTTP bindings)
Request with content negotiation
GET /sparql/?query=EncodedQuery&default-graph-uri=http://www.example/jose-foaf.rdf HTTP/1.1
Host: www.example
User-agent: sparql-client/0.1
Accept: text/turtle, application/rdf+xml
Response (next page)
Using the format specified by the client
27. +
SPARQL Protocol (SOAP bindings)
A protocol for accessing web services
Based on HTTP and XML
Messages are passed through envelopes
SPARQL requests and responses are embedded in the
envelopes
29. +
SPARQL Protocol (SOAP bindings)
Response is a SOAP message embedding SPARQL/XML
HTTP/1.1 200 OK
Content-Type: application/soap+xml
<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<query-result xmlns="http://www.w3.org/2005/09/sparql-protocol-types/#">
<ns1:sparql xmlns:ns1="http://www.w3.org/2005/sparql-results#">
<ns1:head>
<ns1:variable name="z"/>
</ns1:head>
<ns1:results distinct="false" ordered="false">
<ns1:result>
<ns1:binding name="z">
<ns1:literal>Harry Potter and the Chamber of Secrets</ns1:literal>
</ns1:binding>
</ns1:result>
...
</ns1:results>
</ns1:sparql>
</query-result>
</soapenv:Body>
</soapenv:Envelope>
30. +
SPARQL Protocol (SOAP bindings)
Response is a SOAP message embedding SPARQL/XML
HTTP/1.1 200 OK
Content-Type: application/soap+xml
<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<query-result xmlns="http://www.w3.org/2005/09/sparql-protocol-types/#">
<ns1:sparql xmlns:ns1="http://www.w3.org/2005/sparql-results#">
<ns1:head>
<ns1:variable name="z"/>
</ns1:head>
<ns1:results distinct="false" ordered="false">
<ns1:result>
<ns1:binding name="z">
<ns1:literal>Harry Potter and the Chamber of Secrets</ns1:literal>
</ns1:binding>
</ns1:result>
...
</ns1:results>
</ns1:sparql>
</query-result>
</soapenv:Body>
</soapenv:Envelope>
31. +
Remote access (SPARQLendpoints)
A SPARQL processor that is accessible
through the SPARQL protocol
Many open endpoints:
http://www.w3.org/wiki/SparqlEndpoints
Often accessible through query forms, e.g.:
Dbpedia:
http://dbpedia.org/sparql
BBC programme information:
http://lod.openlinksw.com/sparql/
32. +
Remote access (SPARQLendpoints)
Using implementing the SPARQL protocol
on your own, or
Using a library that supports the SPARQL
protocol:
Python: RDFLib
PHP: librdf, RAP
JavaScript
Java: Jena, Sesame, etc
33. +
Remote access (SPARQLendpoints with Jena)
In Jena:
String location = “http://dbpedia.org/sparql”;
String query = “PREFIX …. SELECT …. “;
QueryExecution x = QueryExecutionFactory.sparqlService(location, query);
ResultSet results = x.execSelect();
ResultSetFormatter.out(System.out, results);
The library hides all details about the protocol. You can use the
normal API calls and objects to work with the results.
35. +
Creating a SPARQL end-point
Most triple stores include a HTTP implementation of the
SPARQL protocol
Set up depends on the system
Jena‟s way is by mean of JOSEKI now (FUSEKI)
36. +
Setting up Joseki
Package comes with
Server JARs
Scripts to manage the server and data
Once the system is running, the control panel can be found at:
http://localhost:3030/
37. +
Running a Fuseki Server
fuseki-server --mem /DatasetPathName
create an empty, in-memory dataset
fuseki-server --file=FILE /DatasetPathName
create an empty, in-memory dataset and load FILE into it
fuseki-server --loc=DB /DatasetPathName
Use an existing TDB database, or create one if it doesn‟t exist.
fuseki-server --config=ConfigFile
construct one ore more endpoints based on the config. desc.
38. +
Server URI scheme
http://*host*/dataset/query
the SPARQL query endpoint.
http://*host*/dataset/update
the SPARQL Update language endpoint.
http://*host*/dataset/data
the SPARQL Graph Store Protocol endpoint.
http://*host*/dataset/upload
the file upload endpoint.
Default port 3030
39. +
Script Control
Load data
s-put http://localhost:3030/ds/data default books.ttl
Get it back
s-get http://localhost:3030/ds/data default
Query it with SPARQL using the .../query endpoint.
s-query --service http://localhost:3030/ds/query 'SELECT * {?s ?p ?o}'
Update it with SPARQL using the .../update endpoint.
s-update --service http://localhost:3030/ds/update 'CLEAR DEFAULT'