我对SPARQL完全不熟悉。
我想计算这个本体中的演员数量: http://data.linkedmdb.org/directory/actor
我尝试了以下内容:
SELECT ?s (COUNT(*) AS ?count)
WHERE
{
?a <http://data.linkedmdb.org/directory/actor> ?s}
GROUP BY ?s
但我相信这不是正确的语法,因为它给了我0结果..我知道在那个数据源中有几个结果!可能是链接不正确吗?
答案 0 :(得分:3)
在问题的原始表述中,您似乎正在尝试计算每部电影的演员。该查询实际上非常接近,但我不确定您从哪里获得属性URI,但它不对。例如,如果您查看http://data.linkedmdb.org/page/film/1并右键单击movie:actor
属性,则可以看到其URI为http://data.linkedmdb.org/resource/movie/actor
。因此,您的查询可能是:
SELECT ?film (count(*) as ?nActors) WHERE {
?film <http://data.linkedmdb.org/resource/movie/actor> ?actor .
}
group by ?film
limit 10
现在,您可以通过运行相同的三重模式来修改此查询以计算角色,但不是通过电影和计算演员进行分组,而是只计算所有电影中不同的演员:
select(count(distinct ?actor) as ?nActors) where {
[] <http://data.linkedmdb.org/resource/movie/actor> ?actor .
}
现在,这似乎提供了162的答案,这似乎相当低,但在其他问题中,我们已经看到LinkedMDB的端点有一些奇怪的限制。可能是因为这些,但这不是我们可以计算演员的唯一方式。您可以通过查看演员的页面来注意,例如,http://data.linkedmdb.org/page/actor/10,每个演员都有rdf:type http://data.linkedmdb.org/resource/movie/actor
,这意味着您可以只询问并计算该类型的东西:
select(count(distinct ?actor) as ?nActors) where {
?actor a <http://data.linkedmdb.org/resource/movie/actor> .
}
该查询返回2500,这似乎更合适(因为它可能在端点中达到2500的限制)。