SPARQL查询。三重模式的顺序

时间:2018-06-04 16:08:58

标签: sparql

考虑使用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。同样,我一般都在问这个案例查询。

1 个答案:

答案 0 :(得分:2)

不,订单不会仅改变牛肚图案和过滤器的结果。

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

许多三重模式“主题谓词对象”将导致相同的结果,无论顺序如何。

服务不是三重模式。

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

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

请参阅SPARQL代数spec或sparql.org以查看代数。