使用 Jena 写入 Ontotext GraphDB

Hen*_*mse 4 jena graphdb

我正在尝试使用 Jena 写入本地免费的独立 GraphDB(8.5.0 版)存储库。

我试过的

(1) 从耶拿直接使用

我使用了这个 Jena 3.7.0 代码片段:

String strInsert =  
  "INSERT DATA {"
    + "<http://dbpedia.org/resource/Grace_Hopper> " 
    + "<http://dbpedia.org/ontology/birthDate>" 
    + " \"1906-12-9\"^^<http://www.w3.org/2001/XMLSchema#date> .}";

UpdateRequest updateRequest = UpdateFactory.create(strInsert);

UpdateProcessor updateProcessor = UpdateExecutionFactory.createRemote(updateRequest, 
  "http://localhost:7200/repositories/PersonData");

updateProcessor.execute();
Run Code Online (Sandbox Code Playgroud)

这导致以下异常

org.apache.jena.atlas.web.HttpException: 415 - 
at org.apache.jena.riot.web.HttpOp.exec(HttpOp.java:1091)
at org.apache.jena.riot.web.HttpOp.execHttpPost(HttpOp.java:718)
at org.apache.jena.riot.web.HttpOp.execHttpPost(HttpOp.java:501)
at org.apache.jena.riot.web.HttpOp.execHttpPost(HttpOp.java:459)
at org.apache.jena.sparql.modify.UpdateProcessRemote.execute(UpdateProcessRemote.java:81)
at org.graphdb.jena.tutorial.SimpleInsertQueryExample.main(SimpleInsertQueryExample.java:91)
Run Code Online (Sandbox Code Playgroud)

在 GraphDB 方面,我收到以下错误:

[INFO ] 2018-06-29 11:33:05,605 [repositories/PersonData | o.e.r.h.s.ProtocolExceptionResolver] Client sent bad request ( 415)
org.eclipse.rdf4j.http.server.ClientHTTPException: Unsupported MIME type: application/sparql-update
Run Code Online (Sandbox Code Playgroud)

(2) GraphDB 通过 Jena Fuseki

作为替代方案,我浏览了GraphDB 文档,其中指出可以使用 Jena Joseki(现在是 Fuseki)服务器访问 GraphDB。但是为此 Fuseki 需要配置为将 GraphDB 作为 Jena 数据集读取,然后通过 Ontotext Jena 适配器进行访问com.ontotext.jena.SesameDataset。但是我找不到包含此类的 GraphDB 库。

(3) 使用RDF4J访问GraphDB

从 RDF4J 访问 GraphDB 没有问题:

Repository repository = new HTTPRepository(GRAPHDB_SERVER, REPOSITORY_ID);
repository.initialize();
RepositoryConnection repositoryConnection = repository.getConnection();
repositoryConnection.begin();

Update updateOperation = repositoryConnection.prepareUpdate(QueryLanguage.SPARQL, strInsert);
updateOperation.execute();

try {
  repositoryConnection.commit();
} catch (Exception e) {
  if (repositoryConnection.isActive())
    repositoryConnection.rollback();
}
Run Code Online (Sandbox Code Playgroud)

我的问题

有没有办法从 Jena 有效地访问 GraphDB?我已经看到了这个相关的 SO 问题,但我希望有更好的方法。

小智 5

GraphDB 根据 RDF4J 协议实现标准 SPARQL 1.1 端点。

尝试更改您的代码以指向更新端点:

UpdateProcessor updateProcessor = UpdateExecutionFactory.createRemote(updateRequest, 
    "http://localhost:7200/repositories/PersonData/statements");
Run Code Online (Sandbox Code Playgroud)

不再支持 GraphDB 的 Jena 适配器。