我们正在使用 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
谢谢您的帮助