为什么分组会改变查询的语义?

时间:2013-02-08 13:04:02

标签: grouping sparql dbpedia

我不太明白群组模式的含义。从我读到的in the specification开始,我是否将已经在组中的图形模式放入嵌套组(没有UNION或类似的东西)应该没有任何区别。还有一个例子说明了这一点。

因此,我不理解我在DBpedia上看到的以下行为:

以下查询产生14个结果:

PREFIX ygo: <http://dbpedia.org/class/yago/>

SELECT ?p ?bn ?ya
WHERE {
    ?p rdf:type ygo:AmericanFilmDirectors.
    ?p dbpprop:birthname ?bn.
    ?p dbpprop:yearsActive ?ya.
    FILTER((?ya > 1980) && (regex(?bn, "e"))).
}

然而,由于某种原因,这个只产生了13个 - 与其他结果集相比,Shonda Rhimes缺失了:

PREFIX ygo: <http://dbpedia.org/class/yago/>

SELECT ?p ?bn ?ya
WHERE {
    {
        ?p rdf:type ygo:AmericanFilmDirectors.
        ?p dbpprop:birthname ?bn.
        ?p dbpprop:yearsActive ?ya.
    }
    FILTER((?ya > 1980) && (regex(?bn, "e"))).
}

我已使用DBpedia's Snorql frontend对此进行了测试。

(奇怪的是,我有时只能用DBpedia's Virtuoso query frontend重现这个...有时,两个查询只返回13个结果。)

这是为什么?这是我尚未正确理解的SPARQL规范的一部分,还是三元组实现中的错误,从查询1到查询2的更改应该没有任何区别?

1 个答案:

答案 0 :(得分:2)

虽然它们是不同的查询,但最终会在SPARQL中以相​​同的代数表达式结束,并且应该产生相同的答案。但是,根据数据分布,您可能会在引擎中达到内部执行限制,因为该模式可能会生成大量可能被过滤的可能性。这可以解释不同时期的不同结果。