SPARQL:将BGP划分为多个组
在之前的一篇文章中,有评论指出SPARQL:将BGP划分为多个组,sparql,Sparql,在之前的一篇文章中,有评论指出 select ?x ?y where { {?x rdf:type ex:someType} {?x ex:someProperty ?y} } 类似于(不完全相同): 使用相同的三重模式。但是,第一个查询包含两个BGP(每个都在一个组模式中),而第二个查询包含一个BGP(没有组模式)。 第一个查询的代数是两个BGP之间的JOIN,而第二个查询的代数只是BGP 第一查询代数(ApacheJena) (项目(?x
select ?x ?y where {
{?x rdf:type ex:someType}
{?x ex:someProperty ?y}
}
类似于(不完全相同):
使用相同的三重模式。但是,第一个查询包含两个BGP(每个都在一个组模式中),而第二个查询包含一个BGP(没有组模式)。
第一个查询的代数是两个BGP
之间的JOIN
,而第二个查询的代数只是BGP
第一查询代数(ApacheJena)
(项目(?x?y)
(加入
(bgp(三重x))
(bgp(三重x?y)))
第二个查询代数(ApacheJena):
(项目(?x?y)
(bgp
(三倍x)
(三倍x?y)
))
在最初的问题中,答案表明它们不完全相同,并进行了论证
现在我们把空白节点(2)和不同的语法树放在一起(4),并问如下:<强>这两个查询在任何情况下都会因过滤器(3)或蕴涵(1)< /强>而产生不同的结果吗?我看不出有任何可能性。好的,那些有不同意见的人,请你,用一些例子来说明吗?
过滤器的范围受到影响 在: 筛选器始终为false,因为?y
未绑定,因此表达式为error,而筛选器为false,而不管?x ex:someProperty?y
(3) 和(4)是相关的。1。关于过滤器,让我们假设一个不会导致错误或未绑定变量的情况。。。两个查询结果(带组和不带组)之间会有什么区别吗。你能举一个例子,说明蕴涵对这两种情况之间的解决方案有何影响?我知道蕴涵适用于单个BGP,但我不确定它将如何产生不同的解决方案,并冲击我的头脑,但仍然无法想出一个例子…另一个区别是可变范围。如果目标变量以前使用过,通常不能使用BIND。但如果另一个用途在组外,则可以在组内使用它。
select ?x ?y where {
?x rdf:type ex:someType.
?x ex:someProperty ?y.
}
(project (?x ?y)
(join
(bgp (triple ?x <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.example.com/someType>))
(bgp (triple ?x <http://www.example.com/someProperty> ?y))))
(project (?x ?y)
(bgp
(triple ?x <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.example.com/someType>)
(triple ?x <http://www.example.com/someProperty> ?y)
))
select ?x ?y where {
{?x rdf:type ex:someType FILTER (?y > 0 ) }
{?x ex:someProperty ?y}
}