Wikidata Sparql:如何获得从未由给定人员指导的演员列表?

Wikidata Sparql: how to get a list of actors that where never directed by a given person?

假设我想要一份热门电影列表中从未由蒂姆伯顿执导的演员列表。

我尝试按照以下步骤进行操作:

这是我试过但不起作用的代码(NOT IN 失败,我不知道为什么):

SELECT DISTINCT ?actor ?actorLabel
WHERE {
  ?film wdt:P31 wd:Q11424
        ;wdt:P161 ?actor
        ;wdt:P345 ?imdbId .
  {
    SELECT ?excludeActors
    WHERE {
      ?film wdt:P31 wd:Q11424
            ; wdt:P57 wd:Q56008
            ; wdt:P161 ?excludeActors .
    }
  } .
  FILTER(?actor NOT IN (?excludeActors)) . 
  FILTER(?imdbId = "tt1077368" || ?imdbId = "tt0167260") . 
  SERVICE wikibase:label { bd:serviceParam wikibase:language "fr" }
}

或关注this link

(Christopher Lee 有一个滤镜,你可以去掉[最后一个],用来突出我在这里解释的内容:)

在此代码中,我有两部电影:暗影(由蒂姆伯顿执导)和指环王 3。在此示例中,克里斯托弗李出现在两部电影中,这意味着他应该被排除在外,因为蒂姆伯顿执导他在黑暗阴影中。 你可以看到他在列表中。

我真的不明白为什么 NOT IN 会因为子 select 而失败。我尝试了 sub Select 请求,我在里面找到了 Christopher Lee,这意味着他应该被排除在外。

如果我没理解错的话,你想要所有在给定电影中表演过但从未在蒂姆伯顿导演的任何电影中表演过的演员。我会使用 FILTER NOT EXISTS:

SELECT DISTINCT ?actor ?actorLabel
WHERE {
  VALUES ?imdbId { "tt1077368" "tt0167260" }
  ?film wdt:P31 wd:Q11424
        ;wdt:P161 ?actor
        ;wdt:P345 ?imdbId .
  FILTER NOT EXISTS {
      [] wdt:P31 wd:Q11424
            ; wdt:P57 wd:Q56008
            ; wdt:P161 ?actor .
  } 
  SERVICE wikibase:label { bd:serviceParam wikibase:language "fr" }
}
LIMIT 100