无法将 SPARQL SERVICE 与 FactForge 一起使用

Unable to use SPARQL SERVICE with FactForge

我正在尝试从 Sesame triplestore 访问 FactForge。这是查询:

select * 

where{
SERVICE <http://factforge.net/sparql>{
?s ?p ?o
}

}
LIMIT 100

查询没有执行。相同的结构适用于 DBpedia。 FactForge 在 Web 上的 SPARQL 端点正在运行。我需要做什么才能从 Sesame 成功访问端点?

您需要做的是编写一个更有意义(或至少更受约束)的查询。您的查询只是选择所有可能的三元组,这可能会给 factforge 端点(包含大约 30 亿个三元组)带来很大压力。您的查询 "does not get executed" 的原因(这可能意味着您只是永远等待查询 return 结果)是 SPARQL 端点需要很长时间才能 return 它的响应.

您在查询中输入的 LIMIT 100 SERVICE 子句的范围之外,因此实际上并未与您的远程端点通信重新查询。虽然在这种特殊情况下,Sesame 的优化器可能会添加它(因为在 SERVICE 子句范围之外的查询中没有其他约束),但不幸的是,它目前并不那么聪明 - 所以发送到 factforge 的查询没有限制,而实际限制仅在 得到结果(对于 "give me all your triples" 查询,自然需要一段时间)。

但是,显然 SERVICE 子句 确实 在从 Sesame 使用时对 FactForge 有效,因为如果您尝试稍微限制更多的查询,例如选择所有的查询公司:

PREFIX dbp-ont: <http://dbpedia.org/ontology/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
select * 
where{
  SERVICE <http://factforge.net/sparql>{
    ?s a  dbp-ont:Company
  } 
} LIMIT 100

它工作正常,您会收到回复。

更一般地说,如果您想执行专门针对特定 SPARQL 端点的查询,您应该使用 SPARQL 端点代理(这是 Sesame 中可用的存储库类型之一)而不是使用SERVICE 子句。 SERVICE 仅在尝试将本地存储库中的数据与单个查询中的远程端点的数据组合时才真正有用。使用 SPARQL 端点代理可以确保 LIMIT 子句实际传达给端点,并且通常会比 SERVICE 查询提供更好的性能。