I have config.ttl file for a local GraphDB SailRepository but I also want to access it not only via direct java invocation but also via SPARQL endpoints. My config.ttl file looks like this:
# RDF4J configuration template for a GraphDB Free repository
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
@prefix rep: <http://www.openrdf.org/config/repository#>.
@prefix sr: <http://www.openrdf.org/config/repository/sail#>.
@prefix sail: <http://www.openrdf.org/config/sail#>.
@prefix owlim: <http://www.ontotext.com/trree/owlim#>.
@prefix sparql: <http://www.openrdf.org/config/repository/sparql#>.
[] a rep:Repository ;
rep:repositoryID "test" ;
rep:repositoryImpl [
rep:repositoryType "graphdb:FreeSailRepository" ;
sparql:query-endpoint <http://localhost:7200/repositories/test> ;
sparql:update-endpoint <http://localhost:7200/repositories/test/statements> ;
sr:sailImpl [
sail:sailType "graphdb:FreeSail" ;
...
]
].
This configuration is a combination of a SPARQL and a Sail repository (https://rdf4j.org/documentation/reference/configuration/ 1.1 and 1.3). While an access via org.eclipse.rdf4j.repository.sail.SailRepository is possible I cannot access my local repository via org.eclipse.rdf4j.repository.sparql.SPARQLRepository
Here is the full code:
private static LocalRepositoryManager repositoryManager;
private static RepositoryConnection embeddedRepoCon;
private static SPARQLProtocolSession session;
@BeforeClass
public static void init() {
try {
//Create local repo
File baseDir = new File("target","GraphDB");
if (!baseDir.exists())
baseDir.mkdirs();
repositoryManager = new LocalRepositoryManager(baseDir);
repositoryManager.init();
if(new File("target/GraphDB/repositories/test").exists()) {
repositoryManager.removeRepository("test");
System.out.println("Repository removed.");
}
//Add repository config to repository manager
InputStream config = TestRDFStarTimestampingPlugin.class.getResourceAsStream("/repo-defaults.ttl");
Model repo_config_graph = Rio.parse(config, "", RDFFormat.TURTLE);
Resource repositoryNode = Models.subject(repo_config_graph.filter(null, RDF.TYPE, RepositoryConfigSchema.REPOSITORY)).orElse(null);
RepositoryConfig repositoryConfig = RepositoryConfig.create(repo_config_graph, repositoryNode);
repositoryManager.addRepositoryConfig(repositoryConfig);
//Initialize repo
//Repository repo = repositoryManager.getRepository("test");
SailRepository repo = (SailRepository) repositoryManager.getRepository("test");
repo.init();
//Establish connection to repo
embeddedRepoCon = repo.getConnection();
} catch (RDFHandlerException | RDFParseException | IOException | RepositoryConfigException | RepositoryException e) {
System.err.println("The GraphDB repository will not be created.");
System.err.println(e.getMessage());
}
}
Following test passes
@Test
public void repoSailConnectionTest() {
//Test queries
BooleanQuery query = embeddedRepoCon.prepareBooleanQuery("ask from <http://example.com/testGraph> { ?s ?p ?o }");
boolean hasResults = query.evaluate();
assertFalse("No triples should be in the graph yet.", hasResults);
System.out.println("Result from ask query: " + hasResults);
System.out.println("Read queries are executable against the embedded repository");
// Test update statements
String updateString;
updateString = "clear graph <http://example.com/testGraph>";
embeddedRepoCon.prepareUpdate(updateString).execute();
embeddedRepoCon.commit();
updateString = "delete data {graph <http://example.com/testGraph> " +
"{<http://example.com/s/v1> <http://example.com/p/v2> <http://example.com/o/v3>}}";
embeddedRepoCon.prepareUpdate(updateString).execute();
embeddedRepoCon.commit();
System.out.println("Write statements are executable against the embedded repository");
But the access via SPARQLRepository test does not pass because the connection gets refused:
@Test
public void repoSPARQLConnectionTest() {
//Test queries
SPARQLRepository repo = new SPARQLRepository("http://localhost:7200/repositories/test");
repo.init();
try (RepositoryConnection connection = repo.getConnection()) {
BooleanQuery query = connection.prepareBooleanQuery("ask from <http://example.com/testGraph> { ?s ?p ?o }");
boolean hasResults = query.evaluate();
assertFalse("No triples should be in the graph yet.", hasResults);
System.out.println("Result from ask query: " + hasResults);
System.out.println("Read queries are executable against the embedded repository");
}
repo.shutDown();
// Test update statements
repo = new SPARQLRepository("http://localhost:7200/repositories/test/statements");
repo.init();
try (RepositoryConnection connection = repo.getConnection()) {
String updateString;
updateString = "clear graph <http://example.com/testGraph>";
connection.begin();
connection.prepareUpdate(updateString).execute();
connection.commit();
updateString = "delete data {graph <http://example.com/testGraph> " +
"{<http://example.com/s/v1> <http://example.com/p/v2> <http://example.com/o/v3>}}";
connection.prepareUpdate(updateString).execute();
connection.commit();
System.out.println("Write statements are executable against the embedded repository");
}
}
Exception:
org.eclipse.rdf4j.query.QueryEvaluationException: Connect to localhost:7200 [localhost/127.0.0.1] failed: Connection refused (Connection refused)