43
+ Sesame Mariano Rodriguez-Muro, Free University of Bozen-Bolzano

4 sesame

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: 4 sesame

+

Sesame

Mariano Rodriguez-Muro, Free University of Bozen-Bolzano

Page 2: 4 sesame

+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 Programming the Semantic Web (Chapter 8) Sesame’s documentation

Page 3: 4 sesame

+Reading material

Programming the Semantic Web Chapter 8

Sesame user guide http://www.openrdf.org/doc/sesame2/users/

See also Jetty 8http://download.eclipse.org/jetty/stable-8/dist/

Page 4: 4 sesame

+

Overview

Page 5: 4 sesame

+Overview

Sesame History Overview Repository API

Creating a Repository Repository connections

Sesame Console Sesame workbench

Page 6: 4 sesame

+Overview and History

Open source Java for storage and querying RDF

RDF inference

RDF IO (all file formats)

JDBC-like user API

RESTful HTTP interface

SPARQL Protocol support

Easy learning curve, great management features

By Aduna for the On-To-Knowledge EU project

Now developed by Nlnet foundation, Ontotext and community volunteers

Available at www.openrdf.org

Page 7: 4 sesame

+Sesame components

RDF Model: contains all basic entities

Rio: parsers and writers

Sail: low level API for RDF stores and inferencers (abstraction)

Repository API: high level API with developer-methods

HTTP Server: Java Servlets to access Sesame repos

HTTPClient: Abstraction layer to access HTTP Servers

Page 8: 4 sesame

+

Repository API

Page 9: 4 sesame

+Repository API

Developer-focused API

In contrast with Jena, in Sesame RDF models are not handled by the user (normally), instead we use Repositories.

Vendors provide triple stores as Repository implementations

Sesame provides the following repository implementations: Main memory Native RDF repository Remote repository (HTTP proxy)

To use Sesame repositories, these must be stacked in Sails, i.e., stacks of layered behavior

Page 10: 4 sesame

+Creating a repository

An in-memory repo

An in-memory repo with persistance

Repository myRepository = new SailRepository(new MemoryStore());myRepository.initialize();

File dataDir = new File("c:\\temp\\myRepository\\");Repository myRepository = new SailRepository( new MemoryStore(dataDir) );myRepository.initialize();

Page 11: 4 sesame

+Creating a repository

a native RDF repository

a native RDF repository with custom indexes

File dataDir = new File("/path/to/datadir/");Repository myRepository = new SailRepository(new NativeStore(dataDir));myRepository.initialize();

File dataDir = new File("/path/to/datadir/");String indexes = "spoc,posc,cosp";Repository myRepository = new SailRepository(new NativeStore(dataDir, indexes));myRepository.initialize();

Page 12: 4 sesame

+Creating a repository

a remote Repository

String sesameServer = "http://example.org/sesame2";String repositoryID = "example-db";

Repository myRepository = new HTTPRepository(sesameServer, repositoryID);myRepository.initialize();

Page 13: 4 sesame

+Using a repository: RepositoryConnection

JDBC like-interface

Operations add triples by file, URI,

Statement query using SPARQL

SELECT, ASK or Construct queries

create, retrieve, remove individual statements

prepared queries

Transaction support commit(), rollback()

Page 14: 4 sesame

+Adding to a repository

File file = new File("/path/to/example.rdf");String baseURI = "http://example.org/example/local";

try { RepositoryConnection con = myRepository.getConnection(); try { con.add(file, baseURI, RDFFormat.RDFXML);

URL url = new URL("http://example.org/example/remote"); con.add(url, url.toString(), RDFFormat.RDFXML); } finally { con.close(); }}catch (…)

Page 15: 4 sesame

+Querying a repository (tuple)

RepositoryConnection con = myRepository.getConnection(); try { String queryString = “SELECT …. “;TupleQuery tupleQuery = con.prepareTupleQuery(SPARQL, queryString); TupleQueryResult result = tupleQuery.evaluate(); try { .... // do something with the result } finally { result.close(); } } finally { con.close(); }

Page 16: 4 sesame

+Tuple queries (cont)

while (result.hasNext()) { BindingSet bindingSet = result.next(); Value valueOfX = bindingSet.getValue("x"); Value valueOfY = bindingSet.getValue("y");

// do something interesting with the values here...}

List<String> bindingNames = result.getBindingNames();while (result.hasNext()) { BindingSet bindingSet = result.next(); Value firstValue = bindingSet.getValue(bindingNames.get(0)); Value secondValue = bindingSet.getValue(bindingNames.get(1));

// do something interesting with the values here...}

Page 17: 4 sesame

+TupleQueryResultHandlerFileOutputStream out = new FileOutputStream("/path/to/result.srx");try { SPARQLResultsXMLWriter sparqlWriter = new SPARQLResultsXMLWriter(out);

RepositoryConnection con = myRepository.getConnection(); try { String queryString = "SELECT * FROM {x} p {y}"; TupleQuery tupleQuery = con.prepareTupleQuery(QueryLanguage.SERQL, queryString); tupleQuery.evaluate(sparqlWriter); } finally { con.close(); }}finally { out.close();}

Page 18: 4 sesame

+Evaluating Graph queries

GraphQueryResult graphResult = con.prepareGraphQuery( QueryLanguage.SPARQL, "CONSTRUCT ….").evaluate();

while (graphResult.hasNext()) { Statement st = graphResult.next(); // ... do something with the resulting statement here.}

Page 19: 4 sesame

+RDF Handler

Equivalent for TupleQueryResultHandler > RDFHandler

Examples: RDFXMLWriter, TurtleWriter, etc.

TurtleWriter turtleWriter = new TurtleWriter(System.out);

con.prepareGraphQuery(QueryLanguage.SPARQL, "CONSTRUCT …").evaluate(turtleWriter);

Page 20: 4 sesame

+Adding individual statements

ValueFactory f = myRepository.getValueFactory();

URI alice = f.createURI("http://example.org/people/alice");URI bob = f.createURI("http://example.org/people/bob");URI name = f.createURI("http://example.org/ontology/name");URI person = f.createURI("http://example.org/ontology/Person");Literal bobsName = f.createLiteral("Bob");Literal alicesName = f.createLiteral("Alice");

RepositoryConnection con = myRepository.getConnection();

con.add(alice, RDF.TYPE, person); con.add(alice, name, alicesName);

con.add(bob, RDF.TYPE, person); con.add(bob, name, bobsName);

Page 21: 4 sesame

+Retrieving

RepositoryResult<Statement> statements = con.getStatements(alice, null, null, true);

try { while (statements.hasNext()) { Statement st = statements.next();

... // do something with the statement }}finally { statements.close(); // make sure the result object is closed properly}

Page 22: 4 sesame

+Deleting statements

a single statement

many statements

con.remove(alice, name, alicesName);

con.remove(alice, null, null);

Page 23: 4 sesame

+Iterators and statements

Sesame’s API offer many calls compatible for iterators to facilitate “batch” manipulation

// Retrieve all statements about Alice and put them in a listRepositoryResult<Statement> statements = con.getStatements(alice, null, null, true));List<Statement> aboutAlice = Iterations.addAll(statements, new ArrayList<Statement>());

// Then, remove them from the repositorycon.remove(aboutAlice);

con.remove(con.getStatements(alice, null, null, true));

Page 24: 4 sesame

+Named graphs

Named graphs are natively supported by Sesame

Named graphs are called “Context” in Sesame

String location = "http://example.org/example/example.rdf";String baseURI = location;URL url = new URL(location);URI context = f.createURI(location);

con.add(url, baseURI, RDFFormat.RDFXML, context);

Page 25: 4 sesame

+Transactions

SQL-like transactions

Treat a “block” of operations as a single update

Failures can be “rolled back”

Page 26: 4 sesame

+TransactionsFile inputFile1 = new File("/path/to/example1.rdf");String baseURI1 = "http://example.org/example1/";

File inputFile2 = new File("/path/to/example2.rdf");String baseURI2 = "http://example.org/example2/";

RepositoryConnection con = myRepository.getConnection();try { con.setAutoCommit(false);

con.add(inputFile1, baseURI1, RDFFormat.RDFXML);

con.add(inputFile2, baseURI2, RDFFormat.RDFXML);

con.commit();}catch (RepositoryException e) { con.rollback(); }finally { con.close(); }

Page 27: 4 sesame

+

Sesame Console

Page 28: 4 sesame

+Sesame console

command-line application to interact with Sesame

Easy way to create and manage repositories

Create in the console, use from Java

Possible actions: Creating repositories Load/Unload data from

Files/URIs/SPARQL Update Query using SPARQL Querying/Managing

remote Sesame repositories

> sh bin/console.shConnected to default data directory

Commands end with '.' at the end of a lineType 'help.' for help> help.

Page 29: 4 sesame

+Repository types

memory,memory-rdfsa memory based RDF repository (optionaly with RDFS inference)

native, native-rdfsa repository that uses on-disk data structure (optional RDFS inference)

pgsql, mysqla repository that stores data in a PostgreSQL (mysql) database

remote -- a repository that serves as a proxy for a

repository on a Sesame Server

Please specify values for the following variables:Repository ID [native]: myRepoRepository title [Native store]: My repositoryTriple indexes [spoc,posc]: Repository created> show repositories.> +----------> |SYSTEM> |myRepo(”My repository")> +----------

Page 30: 4 sesame

+

Sesame WorkbenchRepository Manager and SPARQL end-points with Sesame

Page 31: 4 sesame

+Sesame workbench

SPARQL Protocol implementation (sparql-endpoint) for Sesame repositories

Web based management console for Sesame repositories

Web based query interface for repositories.

Page 32: 4 sesame

+Setup

Requires a JSP server, e.g., Tomcat or Jetty 8

Drop the 2 .war files from the /war folder of the sesame .zip into your webapps folder

Start the JSP server If you are using Jetty, do:

jetty.sh/bat start

in the command line

Page 33: 4 sesame
Page 34: 4 sesame
Page 35: 4 sesame
Page 36: 4 sesame
Page 37: 4 sesame
Page 38: 4 sesame
Page 39: 4 sesame
Page 40: 4 sesame
Page 41: 4 sesame
Page 42: 4 sesame
Page 43: 4 sesame