|
|
1
2
您所发布的示例演示了SPARQL规范的一个重要案例,它结合了多个相关主题,在我看来非常模糊。下面的详细信息解释了在GRAPHDB引擎中采取的假设和设计决策。请注意,这可能与其他实现读取以下规范行的方式不同: 服务与价值观的相互作用 这个 SPARQL Federation 1.1 有一个非规范性的章节,描述了在这种情况下的行为:
GRAPHDB的查询优化器无法从远程SPARQL端点检索任何统计信息,因此它采用这种方法将查询简单地抛出到远程服务并在本地联接结果。因此,查询优化任务掌握在熟悉两个存储库中模式的用户手中,用户可以按照过程性的方式重新排列查询(见下文)。 联合查询是子查询 每个远程查询都被视为子查询,并按原样发送到外部端点。以下是等效语法:
首先计算子查询,然后自下而上传播所有变量 根据 SPARQL specification ,不应在子查询中从外部推送变量绑定:
在这一点上,用一个非常有选择性的本地子句来有效地执行查询已经不可能了。这就是为什么graphdb数据库会公开一个特殊的配置参数,以打破对sparql规范的遵从性:
在这种情况下,查询引擎将忽略SPARQL规范,并在子选择中从外部查询推送变量。启用此参数后,查询的正确版本为:
如何优化远程端点的查询执行计划 VALUES/BIND 是程序性的,根据SPARQL规范,它们的位置很重要
在这种特殊情况下,同一查询的另一种效率要低得多的形式是首先执行远程端点查询(即从wikidata下载所有结果),然后将它们与本地较小的日期集连接起来:
我希望这能让您全面了解SPARQL规范的GRAPHDB解释以及如何优化联合查询的所有可能性。 |
|
|
marco · 使用两个变量应用sparql并在java变量中返回结果 8 年前 |
|
|
stsquad · 如何优雅地处理不同本体中的dbpedia生日查询 8 年前 |
|
|
Knarf · Python sparql对“错误”URI的查询 8 年前 |