SPARQL查询。三重模式顺序

SPARQL查询。三重模式顺序,sparql,Sparql,考虑一个SPARQL聚合查询,其中的where子句仅由三重模式和filter语句组成 三重模式的顺序或过滤器的顺序是否会影响结果(而不是性能)?我确信这不会影响结果的有效性。但也许有人能澄清原因?此外,分组中变量的顺序是否会影响结果的有效性?我也不这么认为,但也许有人能澄清原因 以下示例仅用于澄清;我一般都会问。 该查询统计按眼睛颜色和国家分组的人数,并应用两个过滤器。查询仅包含这四个三重模式(每行以点结尾是一个三重模式,即带有变量的三重模式) 这两个过滤器: FILTER (?country

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

三重模式的顺序或过滤器的顺序是否会影响结果(而不是性能)?我确信这不会影响结果的有效性。但也许有人能澄清原因?此外,
分组中变量的顺序是否会影响结果的有效性?我也不这么认为,但也许有人能澄清原因

以下示例仅用于澄清;我一般都会问。

该查询统计按眼睛颜色和国家分组的人数,并应用两个
过滤器
。查询仅包含这四个三重模式(每行以点结尾是一个三重模式,即带有变量的三重模式)

这两个
过滤器

FILTER (?country != wd:Q142)
FILTER (?eyeColor != wd:Q17122705)
WHERE
子句不包含任何
可选
联合
减号
,。。。或任何其他建造商;只有三重模式和过滤器

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
子句中六个元素的顺序,这是否会影响结果(不仅在这个查询中,而且在结构方面也会影响类似的查询)?关于
groupby
中变量的顺序是否会影响结果的相同问题,例如
groupby?country?eyeColor
而不是
groupby?eyeColor?country
。同样,我要求的是一般性的,不仅仅是这个案例查询。

否,顺序不会改变tripe模式和过滤器的结果

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

许多三重模式“主谓宾”将产生相同的结果,而不管顺序如何

服务不是三重模式

wikibase:label
是wikidata特有的,而不是SPARQL规范

包括任何图形模式操作,如服务或可选


请参阅SPARQL代数规范或SPARQL.org以查看代数。

给出代码(查询)示例以澄清您的问题。我添加了一个示例,但这只是为了澄清,我询问的是一般概念。没有查询优化器,显然过滤器的顺序可能会影响执行性能。好的,所有的三层存储都会做一些查询规划+优化,特别是过滤推送等,类似于SQL数据库。组的不同顺序完全是一回事,这显然会影响创建和聚合不同组的结果。关于三元组和筛选器的顺序,我只问结果,请忘记任何性能/优化细节。关于分组,为什么会影响?如果我要求使用蓝眼睛和意大利语(按眼睛颜色分组),那么拥有蓝眼睛的意大利人(按国家分组)的人数会发生变化吗?为什么团体解决方案的成员会随顺序发生变化?
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