Sparql两个嵌套的opt dawg测试查询结果难以理解
DAWG测试查询two-nested-opt.rq如下所示:Sparql两个嵌套的opt dawg测试查询结果难以理解,sparql,optional,Sparql,Optional,DAWG测试查询two-nested-opt.rq如下所示: PREFIX : <http://example/> SELECT * { :x1 :p ?v . OPTIONAL { :x3 :q ?w . OPTIONAL { :x2 :p ?v } } } 测试数据为: @prefix : <http://example/> . @prefix xsd: <ht
PREFIX : <http://example/>
SELECT *
{
:x1 :p ?v .
OPTIONAL
{
:x3 :q ?w .
OPTIONAL { :x2 :p ?v }
}
}
测试数据为:
@prefix : <http://example/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
:x1 :p "1"^^xsd:integer .
:x2 :p "2"^^xsd:integer .
:x3 :q "3"^^xsd:integer .
:x3 :q "4"^^xsd:integer .
如果我运行查询,预期的结果只是一条短为?v=1的记录。由于对第二个可选项进行了注释,因此无法真正理解,结果是两条记录:
v=1,w=3
v=1,w=4
我发现一些可能的解释提到第二个可选的是no-op,因为第二个可选的和主bgp之间的?v绑定不匹配。但不明白这是怎么解释的。无论第二个可选的结果是什么,第一个可选的结果不应该总是包含在解决方案中吗?这个测试用例是关于功能性评估的,也称为自底向上,以及最早的内部设置对结果的影响。在测试中,最内部的?v设置会阻止第一个可选设置,并且?w=3和?w=4不是结果 一般情况下,在可选部分的左侧有一个外部的?v,然后是一个可选部分,该可选部分没有提到?v,它本身有一个可选的使用?v 如果查询被认为是自上而下的,那么答案就会不同 评价是:
:x3 :q ?w leftjoin :x2 :p ?v
Two rows:
?w = 3; ?v = 2
?w = 4; ?v = 2
:x1 :p ?v
?v = 1
现在左键将?v=1与?w=3?v=2-可选项未联接,因此结果为一行,v=1,且无w绑定
如果省略:x2:p?v,则第一个
:x3 :q ?w
Two rows:
?w = 3
?w = 4
这两个连接都使用?v=1进行连接,给出两行?v和?w。如果您来自SQL世界,请将可选连接视为左外连接。而求值是左关联的。查询代数树是leftjoin quadpattern quad:x1:p?v leftjoin quadpattern quad:x3:q?w quadpattern quad:x2:p?vb但这正是我的观点。从关系的角度来看,删除最后一个左外部联接/可选联接不会增加结果的数量。。