Wikidata SPARQL несколько фильтров - PullRequest
1 голос
/ 23 июня 2019

Я пытаюсь найти актеров, которые появляются вместе в разных фильмах.

Например:

  • «Найдите всех актеров, которые появились в« Империи наносит ответный удар »и« Храм Судьбы », следует вернуть Харрисона Форда.
  • «Найдите всех актеров, которые появились в« Империи наносит ответный удар »и« Возвращение джедая »», следует вернуть Харрисона Форда, Кэрри Фишер, Марка Хэмилла и т. Д.

Это получает всех актеров Храма Судьбы:

SELECT ?actor ?actorLabel WHERE {
  ?movie wdt:P161 ?actor .
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
  FILTER(?movie = wd:Q179215)
}
LIMIT 100

Я бы подумал, что смогу изменить фильтр на

FILTER(?movie = wd:Q179215 && ?movie = wd:Q181795)

но это не возвращает никаких предметов.

Я пытался использовать

select ?actor ?actorLabel where {
  ?actor wdt:P106 wd:Q33999 .
   wd:Q181795 wdt:P161 ?actor .
   wd:Q181803 wdt:P161 ?actor .
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
} 

Но это упускает многих актеров. Даже если сделать это с одним фильмом, получится неполный список актеров.

1 Ответ

0 голосов
/ 24 июня 2019

Ожидаемый оператор: ИЛИ , а не И .

Попробуйте использовать

FILTER (? Movie = wd: Q179215 ||? Movie = wd: Q181795)

...