0

有人会解释我这个现象吗?我正在使用 SPARQL 查询来查询端点http://www.linkedmdb.org/snorql:获取曾出演英国电影 Q1 的演员列表:

SELECT * WHERE {
?Film <http://data.linkedmdb.org/resource/movie/country> <http://data.linkedmdb.org/resource/country/GB> .
?Film <http://data.linkedmdb.org/resource/movie/actor> ?actor.
}

在结果中,我们有一个 id 为 11764 的演员,奇怪的是,当我运行查询 Q2 时:

SELECT * WHERE {
   ?Film <http://data.linkedmdb.org/resource/movie/actor> ?actor.
}

尽管 Q2 的选择性不如 Q1 演员编号 11764 不再出现在结果中。请注意,我们通过删除 Q1 的第一个三重模式(较少约束)来获得 Q2

4

1 回答 1

1

这似乎是linkedmdb.org 端点的SPARQL 引擎中的一个错误,因为这些结果显然不一致。

为了排除查询结果大小上限的可能性,我尝试了原始查询的几种变体。

这个查询:

SELECT * WHERE {
    ?Film <http://data.linkedmdb.org/resource/movie/actor> ?actor . 
    FILTER (?actor = <http://data.linkedmdb.org/resource/actor/11764> )
}

给了我预期的结果(两个结果,都是我们期望的演员)。

但是,此查询:

 SELECT * WHERE {
    ?Film <http://data.linkedmdb.org/resource/movie/actor> ?actor . 
    FILTER (REGEX(STR(?actor), "11764"))
 }

给了我零个结果,而这个查询:

 SELECT * WHERE {
    ?Film <http://data.linkedmdb.org/resource/movie/country> <http://data.linkedmdb.org/resource/country/GB> .
    ?Film <http://data.linkedmdb.org/resource/movie/actor> ?actor . 
    FILTER (REGEX(STR(?actor), "11764"))
 }

正如预期的那样,给了我一个结果(与该演员合作的一部 GB 电影)。

因此,总而言之:您的 SPARQL 查询没有任何问题。您似乎偶然发现了他们的 SPARQL 引擎中的一个错误 - 您可能希望与他们联系并提供此信息。

于 2015-07-08T23:41:32.463 回答