Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wikidata SPARQL多个筛选器_Sparql_Wikidata - Fatal编程技术网

Wikidata SPARQL多个筛选器

Wikidata SPARQL多个筛选器,sparql,wikidata,Sparql,Wikidata,我试图找到在不同电影中一起出现的演员 例如: “找到所有出现在《帝国反击战》和《末日圣殿》中的演员”应该是哈里森·福特 “找到所有在《帝国反击战》和《绝地归来》中出现的演员”应该是哈里森·福特、卡莉·费舍尔、马克·哈米尔等 这让所有《末日圣殿》的演员都感到震惊: SELECT ?actor ?actorLabel WHERE { ?movie wdt:P161 ?actor . SERVICE wikibase:label { bd:serviceParam wikibase:lan

我试图找到在不同电影中一起出现的演员

例如:

  • “找到所有出现在《帝国反击战》和《末日圣殿》中的演员”应该是哈里森·福特
  • “找到所有在《帝国反击战》和《绝地归来》中出现的演员”应该是哈里森·福特、卡莉·费舍尔、马克·哈米尔等
这让所有《末日圣殿》的演员都感到震惊:

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" }
} 

但是,这错过了很多演员。即使只使用一部电影,也只会返回一个不完整的演员名单。

您期望的操作员是而不是

试用

过滤器(?电影=wd:Q179215 | |?电影=wd:Q181795)


您需要的操作员是而不是

试用

过滤器(?电影=wd:Q179215 | |?电影=wd:Q181795)


&&
是连词运算符,意思是逻辑的
-这没有意义,对吧?任何东西都不能有两个不同的值。您必须使用由
|
表示的逻辑
——但这不是您想要的。第二个查询确实是正确的,它返回两部电影中扮演的所有演员。结果怎么了?你认为缺少哪位演员?你想要两部电影中都演过的演员,对吗?或者你是说在这两部电影中?然后使用
|
或者更好的
值?电影{wd:Q181795 wd:Q181803}?电影wdt:P161?演员。
我明白了。运行第二个查询会遗漏Carrie Fisher和Mark Hamill。还有两部电影中的其他几位。好的,明白了。问题是,并非每个参与者都有维基数据中的职业参与者。例如,打开
https://www.wikidata.org/wiki/Q108941
在浏览器中。她的职业是“电影演员”,这是演员的一个亚类型。只需删除第一个三重模式`?actor wdt:P106 wd:Q33999。`或者您可以
选择distinct?actor?actor标签,其中{actor wdt:P106/wdt:P279*wd:Q33999.wd:Q181795 wdt:P161?actor.wd:Q181803 wdt:P161?actor.SERVICE wikibase:label{bd:serviceParam wikibase:language“en”}
获取所有具有职业参与者或参与者子类型的人员。这里的重要部分是
wdt:P106/wdt:P279*
,它在SPARQL 1中被称为属性路径。1@AKSW太好了!如果你想发布,我很乐意接受这个答案。干杯
&&
是连词运算符,这意味着逻辑
-这没有意义,对吗?任何东西都不能有两个不同的值。您必须使用由
|
表示的逻辑
——但这不是您想要的。第二个查询确实是正确的,它返回两部电影中扮演的所有演员。结果怎么了?你认为缺少哪位演员?你想要两部电影中都演过的演员,对吗?或者你是说在这两部电影中?然后使用
|
或者更好的
值?电影{wd:Q181795 wd:Q181803}?电影wdt:P161?演员。
我明白了。运行第二个查询会遗漏Carrie Fisher和Mark Hamill。还有两部电影中的其他几位。好的,明白了。问题是,并非每个参与者都有维基数据中的职业参与者。例如,打开
https://www.wikidata.org/wiki/Q108941
在浏览器中。她的职业是“电影演员”,这是演员的一个亚类型。只需删除第一个三重模式`?actor wdt:P106 wd:Q33999。`或者您可以
选择distinct?actor?actor标签,其中{actor wdt:P106/wdt:P279*wd:Q33999.wd:Q181795 wdt:P161?actor.wd:Q181803 wdt:P161?actor.SERVICE wikibase:label{bd:serviceParam wikibase:language“en”}
获取所有具有职业参与者或参与者子类型的人员。这里的重要部分是
wdt:P106/wdt:P279*
,它在SPARQL 1中被称为属性路径。1@AKSW太好了!如果你想发布,我很乐意接受这个答案。干杯那不行。这将挑选第一部电影中的演员,但第二部电影中的演员不在。你应该尝试交叉操作。这不起作用。这将挑选在第一部电影中但不在第二部电影中的演员。您应该尝试交叉操作。