具有多个FROM子句

时间:2016-10-21 08:12:27

标签: sparql jena arq

我试图弄清楚Jena TDB如何在物理查询计划级别上处理多个FROM子句的SPARQL查询。 我想知道Jena TDB如何处理在不同图表上执行查询。

我做了一些小实验并查看了查询代数,然而,我不清楚FROM子句如何影响代数。 看起来像FROM子句在代数中被丢弃了。我希望通过图的并集来评估代数,但我想确定。

我有以下四边形:

<http://example.com/book2/> <http://example.com/price> "5"^^<http://www.w3.org/2001/XMLSchema#integer> <http://example.com/A> .
<http://example.com/book2/> <http://example.com/title> "Lord of the Rings" <http://example.com/B> .

以及以下查询:

SELECT (AVG(?price) as ?total)
FROM <http://example.com/A>
FROM <http://example.com/B>
WHERE {
    ?book <http://example.com/price> ?price .
    ?book <http://example.com/title> ?title .
}

./tdbquery --loc test --query test.sparql --explain

查询代数如下所示:

INFO  exec                 :: ALGEBRA
  (project (?total)
    (extend ((?total ?.0))
      (group () ((?.0 (avg ?price)))
        (bgp (triple ?book <http://example.com/price> ?price)))))

当我对数据执行查询时,我收到了预期的结果。

1 个答案:

答案 0 :(得分:0)

FROM(和FROM NAMED)实际上并不是查询的一部分,而是指示要查询的数据集应该是什么。这些子句不会改变查询将执行的操作,只会更改操作的内容,因此您不会在代数中看到它们。

特定处理器对该信息的处理方式各不相同:

  • 某些处理器将构建请求的数据集(甚至下载数据)
  • 但在API中明确提供数据集也很常见(例如query(query_string, dataset)),在这种情况下,处理器将忽略它,因为已经提供了数据集。
  • 数据集也可能在SPARQL protocol request中提供,在这种情况下,与API调用一样,处理器将忽略NAMED子句。

现在TDB数据库是一个数据集,但TDB有一个名为'dynamic datasets'的特殊功能,它使用FROMFROM NAMED来形成有效的子数据集,将查询的图形限制为FROM条款中提到的那些。