1

我尝试通过他们的 sparql 端点和来自 rdf4j(2.1.4) 的 sparqlrepository 查询 marklogic 服务器(版本 8),但 marklogic 端点​​似乎不接受这些 sparql 查询。

代码示例:

String sparqlEndpoint = "http://url/v1/graphs/sparql";
SPARQLRepository repo = new SPARQLRepository(sparqlEndpoint);
repo.initialize();
repo.getConnection().hasStatement(null, null, null, false);

这会导致以下错误:

"errorResponse":{"statusCode":400, "status":"Bad Request", "messageCode":"REST-UNSUPPORTEDPARAM", "message":"REST-UNSUPPORTEDPARAM: (err:FOER0000) 端点不支持查询参数:无效参数:queryLn,推断请求“}}

有什么建议么?

4

2 回答 2

4

MarkLogic 不接受名为queryLn(查询语言)的参数。

语言是 SARQL 和 StructuredQueries,并使用不同的参数来传递这两种语言。

请参阅此处的文档: https ://docs.marklogic.com/REST/GET/v1/graphs/sparql

我建议您找到一种方法来抑制调用代码中的queryLn参数。

于 2017-01-13T19:51:46.930 回答
1

正如 David Ennis 在回答中所解释的那样,问题在于 RDF4J 的 SPARQL 端点客户端在其请求中发送了几个不属于 W3C SPARQL 1.1 协议的参数;它们是RDF4J REST API(SPARQL 协议的扩展)的一部分。

虽然大多数 SPARQL 端点实现只是忽略不属于标准的参数(或记录警告),但 MarkLogic 实现了更严格的策略,并且完全拒绝回答此类请求。

您的解决方案是升级到 RDF4J 2.2。改进#721是关于确保仅将符合标准的参数发送到非 RDF4J SPARQL 端点,已在此新版本中实现,并且(假设 MarkLogic 在其他方面符合标准)这应该可以解决与您的通信的问题MarkLogic 端点​​。

于 2017-02-04T23:20:31.337 回答