【问题标题】:SPARQL query. order of triple patternsSPARQL 查询。三重模式的顺序
【发布时间】:2018-06-04 16:08:57
【问题描述】:

考虑一个带有 where 子句的 SPARQL 聚合查询,该子句仅由三重模式和 filter 语句组成。

三重模式的顺序或filters 的顺序是否会影响结果(而不是性能)?我非常相信它不会影响结果的有效性。但也许有人可以澄清为什么?另外,group by 中变量的顺序是否会影响结果的有效性?我也不这么认为,但也许有人可以澄清原因?

下面的例子只是为了说明;我问的是一般性。

该查询计算按眼睛颜色和国家/地区分组的人数,并应用几个filters。查询只包含这四种三元组模式(以点结尾的每一行都是一个三元组模式,即带变量的三元组)

?p wdt:P26 ?human.
?p wdt:P27 ?country.
?human wdt:P31 wd:Q5.
?human wdt:P1340 ?eyeColor.

还有这两个filters:

FILTER (?country != wd:Q142)
FILTER (?eyeColor != wd:Q17122705)

WHERE 子句不包含任何OPTIONALUNIONMINUS、...或任何其他构造函数;只有三重模式和过滤器。

SELECT ?eyeColor (COUNT(?human) AS ?count) ?country
WHERE
{
    ?p wdt:P26 ?human.
    ?p wdt:P27 ?country.
    ?human wdt:P31 wd:Q5.
    ?human wdt:P1340 ?eyeColor.
    FILTER (?country != wd:Q142)
    FILTER (?eyeColor != wd:Q17122705)
    SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
}
GROUP BY ?eyeColor ?country

我的问题再次:如果我们以任何方式更改 WHERE 子句中六个元素的顺序,这是否会影响结果(不仅在此查询中,而且对于类似的查询结构方面)?关于GROUP BY 中变量的顺序是否会影响结果的相同问题,例如GROUP BY ?country ?eyeColor 而不是GROUP BY ?eyeColor ?country。再一次,我问的是笼统的,不仅仅是这个案例查询。

【问题讨论】:

  • 给出代码(查询)示例来澄清你的问题。
  • 我添加了一个例子,但这只是为了澄清,我问的是一般的概念。
  • 如果没有查询优化器,显然 FILTER 的顺序可能会影响执行性能。 AFAIK,所有三重存储都进行一些查询计划+优化,特别是类似于 SQL 数据库的过滤器推送等。组的不同顺序完全是一回事,这显然会在您创建和聚合不同组时影响结果。
  • 关于三元组和过滤器的顺序,我只问结果,请忘记任何性能/优化细节。
  • 关于分组,为什么会有影响?如果我要求蓝眼睛和意大利人(按 ?eye Color ?country 分组),蓝眼睛的意大利人(按 ?country ?eyeColor 分组)的数量会改变吗?为什么一个组的解决方案的成员资格会随着顺序而改变?

标签: sparql


【解决方案1】:

不,该订单不会仅更改牛肚模式和过滤器的结果。

所有过滤器都发生在它们所在的 {} 块的末尾(优化器可以移动它们,但不能改变结果)。

许多三元组模式“主谓宾”无论顺序如何都会产生相同的结果。

SERVICE 不是三重模式。

wikibase:label 对于 wikidata 来说是特殊的,而不是 SPARQL 规范。

包括任何图形模式操作,如 SERVICE 或 OPTIONAL。

查看 SPARQL 代数规范或 sparql.org 以查看代数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多