我正在尝试从Sesame triplestore访问FactForge。这是查询:
select *
where{
SERVICE <http://factforge.net/sparql>{
?s ?p ?o
}
}
LIMIT 100
查询未执行。相同的结构适用于DBpedia。 FactForge在Web上的SPARQL端点正在运行。从Sesame成功访问端点需要做什么?
答案 0 :(得分:1)
您需要做的是编写更有意义(或至少更受约束)的查询。您的查询只是选择所有可能的三元组,这可能会给factforge端点(包含大约30亿三元组)带来很大的压力。您的查询“未执行”(这可能意味着您只是等待查询返回结果)的原因是它需要SPARQL端点很长时间才能返回其响应。
您在查询中LIMIT 100
SERVICE
子句的范围,因此实际上并未传达给您正在查询的远程端点。虽然在这种特殊情况下,Sesame的优化器可以添加它(因为在查询范围之外的查询中没有其他约束),不幸的是它当前不那么聪明 - 因此发送到factforge的查询没有限制,并且实际限制仅在 之后应用返回结果(在“给我所有三元组”查询的情况下,自然需要一段时间)。
但是,从Sesame使用时,事实证明SERVICE
子句 对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中可用的存储库类型之一),而不是使用{ {1}}条款。 SERVICE
仅在尝试将本地存储库中的数据与单个查询中的远程端点数据组合时非常有用。使用SPARQL端点代理可以确保LIMIT子句实际传递给端点,并且通常只会提供比SERVICE查询更好的性能。