0

我不太明白组模式的含义。从我在规范中读到的内容来看,是否将已经在一个组中的图形模式放入一个嵌套组(没有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 的 Snorql frontend对此进行了测试。

(奇怪的是,我有时只能使用DBpedia 的 Virtuoso 查询前端来重现这一点……有时,两个查询都只返回 13 个结果。)

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

4

1 回答 1

2

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

于 2013-02-08T15:16:05.277 回答