使用 RDF4J SPARQLRepository 查询 Marklogic

Query Marklogic with RDF4J SPARQLRepository

我尝试通过其 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) Endpoint does not support query parameter: invalid parameters: queryLn, infer for request"}}

有什么建议吗?

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

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

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

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

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

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

您的解决方案是升级到 RDF4J 2.2。改进 #721,这是关于确保只有 standards-compliant 参数被发送到非 RDF4J SPARQL 端点,在这个新版本中实现,并且(假设 MarkLogic 是 standards-compliant)这应该修复与 MarkLogic 端点​​通信的问题。