我应该怎么做,才能从 linkedmdb 获得所需的结果?

How should I do, for getting the desired result from linkedmdb?

谁能给我解释一下这个现象? 我正在使用 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

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

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

这个查询:

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 引擎中的一个错误 - 您可能想与他们联系并提供此信息。