我不太明白群组模式的含义。从我读到的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的更改应该没有任何区别?
答案 0 :(得分:2)
虽然它们是不同的查询,但最终会在SPARQL中以相同的代数表达式结束,并且应该产生相同的答案。但是,根据数据分布,您可能会在引擎中达到内部执行限制,因为该模式可能会生成大量可能被过滤的可能性。这可以解释不同时期的不同结果。