-
Notifications
You must be signed in to change notification settings - Fork 172
Sesame_API_embedded_mode
A sample Java application demonstrates using Blazegraph™ in embedded mode with Sesame API. It uploads data from a document located in resources into a repository and executes sparql query. It was created in Eclipse IDE with Maven. If you are not familiar with Eclipse and Maven you may take a look at our step by step tutorial on how to create Java project using Blazegraph™ in Eclipse.
You can download sample-sesame-embedded application here.
package sample.sesame.embedded;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.Properties;
import org.apache.log4j.Logger;
import org.openrdf.OpenRDFException;
import org.openrdf.query.BindingSet;
import org.openrdf.query.QueryLanguage;
import org.openrdf.query.TupleQuery;
import org.openrdf.query.TupleQueryResult;
import org.openrdf.repository.Repository;
import org.openrdf.repository.RepositoryConnection;
import org.openrdf.rio.RDFFormat;
import com.bigdata.rdf.sail.BigdataSail;
import com.bigdata.rdf.sail.BigdataSailRepository;
public class SampleBlazegraphSesameEmbedded {
protected static final Logger log = Logger.getLogger(SampleBlazegraphSesameEmbedded.class);
public static void main(String[] args) throws IOException, OpenRDFException {
// load journal properties from resources
Properties props = loadProperties("/blazegraph.properties");
// instantiate a sail
final BigdataSail sail = new BigdataSail(props);
final Repository repo = new BigdataSailRepository(sail);
try{
repo.initialize();
loadData(repo, "/data.n3", "");
String query = "select * {<http://blazegraph.com/blazegraph> ?p ?o}";
TupleQueryResult result = executeSelectQuery(repo, query, QueryLanguage.SPARQL);
try {
while(result.hasNext()){
BindingSet bs = result.next();
log.info(bs);
}
} finally {
result.close();
}
} finally {
repo.shutDown();
}
}
/*
* Load a Properties object from a file.
*/
public static Properties loadProperties(String resource) throws IOException {
Properties p = new Properties();
InputStream is = SampleBlazegraphSesameEmbedded.class
.getResourceAsStream(resource);
p.load(new InputStreamReader(new BufferedInputStream(is)));
return p;
}
/*
* Load data from resources into a repository.
*/
public static void loadData(Repository repo, String resource, String baseURL)
throws OpenRDFException, IOException {
RepositoryConnection cxn = repo.getConnection();
try {
cxn.begin();
try {
InputStream is = SampleBlazegraphSesameEmbedded.class.
getResourceAsStream(resource);
if (is == null) {
throw new IOException("Could not locate resource: " + resource);
}
Reader reader = new InputStreamReader(new BufferedInputStream(is));
try {
cxn.add(reader, baseURL, RDFFormat.N3);
} finally {
reader.close();
}
cxn.commit();
} catch (OpenRDFException ex) {
cxn.rollback();
throw ex;
}
} finally {
// close the repository connection
cxn.close();
}
}
/*
* Execute sparql select query.
*/
public static TupleQueryResult executeSelectQuery(Repository repo, String query,
QueryLanguage ql) throws OpenRDFException {
RepositoryConnection cxn;
if (repo instanceof BigdataSailRepository) {
cxn = ((BigdataSailRepository) repo).getReadOnlyConnection();
} else {
cxn = repo.getConnection();
}
try {
final TupleQuery tupleQuery = cxn.prepareTupleQuery(ql, query);
tupleQuery.setIncludeInferred(true /* includeInferred */);
return tupleQuery.evaluate();
} finally {
// close the repository connection
cxn.close();
}
}
}
/stc/main/resource/blazegraph.properies - is a Blazegraph™ journal property file.
com.bigdata.journal.AbstractJournal.bufferMode=DiskRW
com.bigdata.journal.AbstractJournal.file=/tmp/blazegraph/test.jnl
com.bigdata.journal.AbstractJournal.bufferMode=DiskRW -sets a journal mode. 'DiskRW' - journal will be persistent located on path specified by com.bigdata.journal.AbstractJournal.file property. You can use 'MemStore' for a journal located in memory. For details see Blazegraph javadocs com.bigdata.journal.BufferMode. com.bigdata.journal.AbstractJournal.file=/tmp/blazegraph/test.jnl - sets journal location.
Load property file from resources:
public static Properties loadProperties(String resource) throws IOException {
Properties p = new Properties();
InputStream is = SampleBlazegraphSesameEmbedded.class
.getResourceAsStream(resource);
p.load(new InputStreamReader(new BufferedInputStream(is)));
return p;
}
See also Sesame API tutorial for more details on using Sesame with Blazegraph™
// load journal properties from resources
Properties props = loadProperties("/blazegraph.properties");
// instantiate a sail
final BigdataSail sail = new BigdataSail(props);
final Repository repo = new BigdataSailRepository(sail);
repo.initialize();
The application uploads data from /src/main/resources/data.n3 using following procedure:
public static void loadData(Repository repo, String resource, String baseURL)
throws OpenRDFException, IOException {
RepositoryConnection cxn = repo.getConnection();
try {
cxn.begin();
try {
InputStream is = SampleBlazegraphSesameEmbedded.class
.getResourceAsStream(resource);
if (is == null) {
throw new IOException("Could not locate resource: " + resource);
}
Reader reader = new InputStreamReader(new BufferedInputStream(is));
try {
cxn.add(reader, baseURL, RDFFormat.N3);
} finally {
reader.close();
}
cxn.commit();
} catch (OpenRDFException ex) {
cxn.rollback();
throw ex;
}
} finally {
// close the repository connection
cxn.close();
}
}
File data.n3 contains some RDF statements in notation3:
PREFIX : <http://blazegraph.com/>
PREFIX schema: <http://schema.org/>
:systap a schema:Organization ;
schema:owns :blazegraph .
:blazegraph a schema:Product ;
schema:brand :systap;
:productOf <http://systap.com/>;
:implements <http://rdf4j.org>, <http://blueprints.tinkerpop.com> .
Function executes sparql query:
public static TupleQueryResult executeSelectQuery(Repository repo, String query,
QueryLanguage ql) throws OpenRDFException {
RepositoryConnection cxn;
if (repo instanceof BigdataSailRepository) {
cxn = ((BigdataSailRepository) repo).getReadOnlyConnection();
} else {
cxn = repo.getConnection();
}
try {
final TupleQuery tupleQuery = cxn.prepareTupleQuery(ql, query);
tupleQuery.setIncludeInferred(true /* includeInferred */);
return tupleQuery.evaluate();
} finally {
// close the repository connection
cxn.close();
}
}
TupleQueryResult result = executeSelectQuery(repo, query, QueryLanguage.SPARQL);
try {
while(result.hasNext()){
BindingSet bs = result.next();
log.info(bs);
}
} finally {
result.close();
}
BlazeGraph(TM) Graph Engine
Flexible
Reliable
Affordable
Web-Scale Computing for the Enterprise
Copyright SYSTAP, LLC 2006-2015. All rights reserved.
192.168.3.3
Wed Apr 22 16:34:36 YEKT 2015
Linux/3.13.0-49-generic amd64
AMD FX(tm)-6100 Six-Core Processor Family 21 Model 1 Stepping 2, AuthenticAMD #CPU=6
Oracle Corporation 1.8.0_40
freeMemory=229890224
buildVersion=1.5.1
Dependency License
ICU http://source.icu-project.org/repos/icu/icu/trunk/license.html
bigdata-ganglia http://www.apache.org/licenses/LICENSE-2.0.html
blueprints-core https://github.com/tinkerpop/blueprints/blob/master/LICENSE.txt
colt http://acs.lbl.gov/software/colt/license.html
commons-codec http://www.apache.org/licenses/LICENSE-2.0.html
commons-fileupload http://www.apache.org/licenses/LICENSE-2.0.html
commons-io http://www.apache.org/licenses/LICENSE-2.0.html
commons-logging http://www.apache.org/licenses/LICENSE-2.0.html
dsiutils http://www.gnu.org/licenses/lgpl-2.1.html
fastutil http://www.apache.org/licenses/LICENSE-2.0.html
flot http://www.opensource.org/licenses/mit-license.php
high-scale-lib http://creativecommons.org/licenses/publicdomain
httpclient http://www.apache.org/licenses/LICENSE-2.0.html
httpclient-cache http://www.apache.org/licenses/LICENSE-2.0.html
httpcore http://www.apache.org/licenses/LICENSE-2.0.html
httpmime http://www.apache.org/licenses/LICENSE-2.0.html
jackson-core http://www.apache.org/licenses/LICENSE-2.0.html
jetty http://www.apache.org/licenses/LICENSE-2.0.html
jquery https://github.com/jquery/jquery/blob/master/MIT-LICENSE.txt
log4j http://www.apache.org/licenses/LICENSE-2.0.html
lucene http://www.apache.org/licenses/LICENSE-2.0.html
nanohttp http://elonen.iki.fi/code/nanohttpd/#license
rexster-core https://github.com/tinkerpop/rexster/blob/master/LICENSE.txt
river http://www.apache.org/licenses/LICENSE-2.0.html
servlet-api http://www.apache.org/licenses/LICENSE-2.0.html
sesame http://www.openrdf.org/download.jsp
slf4j http://www.slf4j.org/license.html
zookeeper http://www.apache.org/licenses/LICENSE-2.0.html
INFO: com.bigdata.util.config.LogUtil: Configure: file:/home/maria/workspace_sample/sample-sesame-embedded/target/classes/log4j.properties
New service class org.openrdf.query.resultio.sparqljson.SPARQLResultsJSONWriterFactory replaces existing service class com.bigdata.rdf.rio.json.BigdataSPARQLResultsJSONWriterFactory
New service class org.openrdf.query.resultio.sparqljson.SPARQLResultsJSONParserFactory replaces existing service class com.bigdata.rdf.rio.json.BigdataSPARQLResultsJSONParserFactory
[p=http://blazegraph.com/implements;o=http://blueprints.tinkerpop.com]
[p=http://blazegraph.com/implements;o=http://rdf4j.org]
[p=http://blazegraph.com/productOf;o=http://systap.com/]
[p=http://schema.org/brand;o=http://blazegraph.com/systap]
[p=http://www.w3.org/1999/02/22-rdf-syntax-ns#type;o=http://schema.org/Product]