Wikidata sparql 获取相关演员
Wikidata sparql get related actors
我正在尝试编写一个查询,以在给定一个演员的情况下获取他所出演的同一部电影中的演员。
以下查询为我提供了该演员出演的电影。
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 个结果。我相信电影名称的聚合应该有效,但有一个错误——文档中某处有一个关于它的部分,但我现在找不到它。
我按联合出场次数排序,但票房应该差不多。但是,我不确定票房 returns 的数据有多完整。
Johnny Depp 的物品最近也遭到了破坏,这可能是您查询失败的原因。至少我一开始没有得到任何结果。
SELECT distinct ?actorLabel ?movieLabel ?relatedActor ?relatedActorLabel
WHERE {
?actor rdfs:label "Johnny Depp"@en.
?movie wdt:P161 ?actor.
?movie wdt:P161 ?relatedActor.
SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
}
我正在尝试编写一个查询,以在给定一个演员的情况下获取他所出演的同一部电影中的演员。
以下查询为我提供了该演员出演的电影。
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 个结果。我相信电影名称的聚合应该有效,但有一个错误——文档中某处有一个关于它的部分,但我现在找不到它。
我按联合出场次数排序,但票房应该差不多。但是,我不确定票房 returns 的数据有多完整。
Johnny Depp 的物品最近也遭到了破坏,这可能是您查询失败的原因。至少我一开始没有得到任何结果。
SELECT distinct ?actorLabel ?movieLabel ?relatedActor ?relatedActorLabel
WHERE {
?actor rdfs:label "Johnny Depp"@en.
?movie wdt:P161 ?actor.
?movie wdt:P161 ?relatedActor.
SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
}