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太好了!如果你想发布,我很乐意接受这个答案。干杯那不行。这将挑选第一部电影中的演员,但第二部电影中的演员不在。你应该尝试交叉操作。这不起作用。这将挑选在第一部电影中但不在第二部电影中的演员。您应该尝试交叉操作。