我试图弄清楚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)))))
当我对数据执行查询时,我收到了预期的结果。
答案 0 :(得分:0)
FROM
(和FROM NAMED
)实际上并不是查询的一部分,而是指示要查询的数据集应该是什么。这些子句不会改变查询将执行的操作,只会更改操作的内容,因此您不会在代数中看到它们。
特定处理器对该信息的处理方式各不相同:
query(query_string, dataset)
),在这种情况下,处理器将忽略它,因为已经提供了数据集。NAMED
子句。现在TDB数据库是一个数据集,但TDB有一个名为'dynamic datasets'的特殊功能,它使用FROM
和FROM NAMED
来形成有效的子数据集,将查询的图形限制为FROM
条款中提到的那些。