首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Jena写入Ontotext GraphDB

使用Jena写入Ontotext GraphDB
EN

Stack Overflow用户
提问于 2018-06-29 09:51:52
回答 2查看 631关注 0票数 4

我试图使用Jena来编写本地免费的独立GraphDB (Version8.5.0)存储库。

我已经尝试过的

(1)耶拿的直接使用

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

代码语言:javascript
复制
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();

这将导致以下异常

代码语言:javascript
复制
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)

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

代码语言:javascript
复制
[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

(2) GraphDB通过Jena Fuseki

作为另一种选择,我研究了GraphDB文档,它指出可以使用Joseki (现在是Fuseki )服务器访问GraphDB。但对于这个问题,Fuseki需要配置为将GraphDB读入Jena数据集,然后通过Ontotext适配器com.ontotext.jena.SesameDataset进行访问。但是我找不到任何GraphDB库来入侵这个类。

(3)使用RDF4J访问GraphDB

从GraphDB访问RDF4J没有问题:

代码语言:javascript
复制
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();
}

我的问题

有办法从耶拿有效地访问GraphDB吗?我已经看过这个与此相关的问题,但我希望有一个更好的方法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-29 11:00:52

GraphDB根据RDF4J协议实现标准的SPARQL1.1端点。

  • http://localhost:7200/repositories/PersonData - SPARQL查询端点,它不支持“应用程序/sparql更新”
  • http://localhost:7200/repositories/PersonData/statements - SPARQL更新端点

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

代码语言:javascript
复制
UpdateProcessor updateProcessor = UpdateExecutionFactory.createRemote(updateRequest, 
    "http://localhost:7200/repositories/PersonData/statements");

不再支持GraphDB的Jena适配器。

票数 5
EN

Stack Overflow用户

发布于 2018-07-03 05:33:20

FWIW没有回答“如何与Jena连接”,但是通过GraphDB API访问RDF4J的代码比它所需要的要复杂得多。您可以简单地这样做:

代码语言:javascript
复制
 Repository repository = new HTTPRepository(GRAPHDB_SERVER, REPOSITORY_ID);
 repository.initialize();

 try(RepositoryConnection conn = repository.getConnection()) {
    conn.prepareUpdate(strInsert).execute();
 }

如果需要,它将自动提交,并在连接关闭时自动回滚.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51098996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档