如何解决Wikidata sparql获取相关角色
我试图编写一个查询,以获取给定演员的演员,这些演员是他所播放的同一部电影中的演员。
以下查询为我提供了演员播放的电影。
SELECT distinct ?actorLabel ?movieLabel ?BoxOffice
WHERE {
{
SELECT ?actor WHERE {
?actor rdfs:label "Johnny Depp"@en.
?actor wdt:P106 ?occupation.
?occupation wdt:P279+ wd:Q33999.
}
}
?movie wdt:P161 ?actor.
?movie wdt:P2142 ?BoxOffice.
SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
}
ORDER BY DESC(?BoxOffice)
limit 10
所以现在我想从每部电影中获取所有相关的演员。我试图通过子查询来做到这一点
SELECT distinct ?actorLabel ?movieLabel ?BoxOffice ?relatedActor ?relatedActorLabel
WHERE {
{
SELECT ?actor WHERE {
?actor rdfs:label "Johnny Depp"@en.
?actor wdt:P106 ?occupation.
?occupation wdt:P279+ wd:Q33999.
}
}
?movie wdt:P161 ?actor.
?movie wdt:P2142 ?BoxOffice.
{
SELECT ?relatedActor WHERE {
?movie wdt:P161 ?relatedActor
}
limit 5
}
SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
}
ORDER BY DESC(?BoxOffice)
limit 10
但是由于某些原因,我不明白我一直在获得Barack Obama
和Douglas Adams
作为唯一结果。即使是从完全不同的演员开始。
任何人都可以阐明这一点,我在做什么错了?
解决方法
这是一个查询,它或多或少地满足您的要求:
SELECT ?actorLabel (SAMPLE(?movieLabel) AS ?sample_movie)
(GROUP_CONCAT(?movieLabel) AS ?movies) (COUNT(?movie) AS ?number_movies)
?relatedActor ?relatedActorLabel WHERE {
VALUES ?actor { wd:Q37175 }
?movie wdt:P161 ?actor,?relatedActor.
SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
}
GROUP BY ?relatedActor ?actorLabel ?relatedActorLabel
ORDER BY DESC (COUNT(?relatedActor))
(Link)
没有限制。但是,从好的方面来说,它仍然起作用,并且可以获得大约1000个结果。我相信电影名称的汇总应该可以,但是会遇到一个错误-文档中的某个部分对此进行了介绍,但是我现在找不到。
我按关节出场的数量进行了排序,但票房应该类似。但是,我不确定票房收益的数据是否完整。
Johnny Depp项目最近也遭到破坏,这可能是您的查询无法正常工作的原因。至少我一开始没有任何结果。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。