3

我们正在使用 RDF4J(以前称为 sesame)框架对远程 GraphDB 三元存储运行 sparql 查询。

这通过 rdf4j HTTPRepository 接口成功工作,该接口采用 Graphdb 服务器的 URL 和存储库 ID,但在使用 rdf4j SPARQLRepository 接口时失败,该接口将 sparlq 端点 url 作为参数。

在运行查询时,我们在查询验证中遇到异常

“获取服务器协议失败;此服务器上没有此类资源:http:///sparql?sparql?queryLn=SPARQL&query=",

http://<host:port>/sparql我们认为sparql 端点的 url 在哪里。这发生在 sesame 2.7.8 和 rdf4j M3 库中,同样发生在两个“开箱即用”上,即从启动脚本开始,安装 graphdb free 6.6.2 和 7.0.3。尝试通过 rdf4j SPARQLRepository 接口连接到 sparlq 端点http://factforge.net/sparql时也会发生这种情况,我们知道它在 graphdb 上运行。

我们认为实际的 sparql 端点的 url 可能不是 http:///sparql 而是我们在 graphdb 文档中找不到的其他东西。欣赏任何人可能照亮的任何灯。

编辑:针对 Factforge 的 sparql 端点执行的代码:

    final String endPoint = "http://factforge.net/sparql";
    final String query = "Select distinct ?airport where {?airport a dbp-ont:Airport} LIMIT 2";

    SPARQLRepository repository = new SPARQLRepository(endPoint,endPoint);
    repository.initialize();
    RepositoryConnection connection = repository.getConnection();
    TupleQueryResult result = connection.prepareTupleQuery(QueryLanguage.SPARQL,query)
                                        .evaluate();

生成以下异常:

    Caused by: org.eclipse.rdf4j.repository.RepositoryException: Failed to    get server protocol; no such resource on this server: http://factforge.net/sparql?queryLn=SPARQL&query=Select+distinct+%3Fairport+where+%7B%3Fairport+a+dbp-ont%3AAirport%7D+LIMIT+2&infer=true
at org.eclipse.rdf4j.http.client.SparqlSession.executeOK(SparqlSession.java:1023)
at org.eclipse.rdf4j.http.client.SparqlSession.sendTupleQueryViaHttp(SparqlSession.java:787)
at org.eclipse.rdf4j.http.client.SparqlSession.getBackgroundTupleQueryResult(SparqlSession.java:684)
at org.eclipse.rdf4j.http.client.SparqlSession.sendTupleQuery(SparqlSession.java:341)
at org.eclipse.rdf4j.repository.sparql.query.SPARQLTupleQuery.evaluate(SPARQLTupleQuery.java:43)
... 1 more

谢谢您的帮助

4

2 回答 2

2

要将 GraphDB SPARQL 端点访问到您的存储库,例如在本地计算机上,您可以使用以下 URL:http://localhost:7200/repositories/ <#your_repository#>

您可以在此处阅读有关将 Sesame API 与 GraphDB 一起使用的更多信息:http: //graphdb.ontotext.com/documentation/free/using-graphdb-with-the-sesame-api.html

于 2016-09-20T14:13:01.183 回答
1

我还没有查明根本原因,但是,我注意到问题出现在 RDF4J 2.0M3 中,但不再出现在 2.0 最终版(或 2.0.1,最新版本)中。从那时起,有两个可能的问题已得到修复,即 RDF4J 使用的 Apache HttpComponents 库的版本提升(#267),以及 RDF4J 客户端如何编写其 HTTP Accept 标头(#228)的改进。

TL;DR:升级到 RDF4J 2.0.1,您的问题应该会消失。

于 2016-09-14T10:45:55.187 回答