考虑使用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
子句不包含任何OPTIONAL
,UNION
,MINUS
,...或任何其他构造函数;只有三重模式和过滤器。
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
。同样,我一般都在问这个案例查询。
答案 0 :(得分:2)
不,订单不会仅改变牛肚图案和过滤器的结果。
所有过滤器都发生在它们所在的{}块的末尾(优化器可能会移动它们但不得更改结果)。
许多三重模式“主题谓词对象”将导致相同的结果,无论顺序如何。
服务不是三重模式。
wikibase:label
对于wikidata是特殊的,而不是SPARQL规范。
包括任何图形模式操作,如SERVICE或OPTIONAL。
请参阅SPARQL代数spec或sparql.org以查看代数。