我对 SPARQL 完全陌生。
我想计算这个本体中的参与者数量:http://data.linkedmdb.org/directory/actor http://data.linkedmdb.org/directory/actor
我尝试了以下方法:
SELECT ?s (COUNT(*) AS ?count)
WHERE
{
?a <http://data.linkedmdb.org/directory/actor> ?s}
GROUP BY ?s
但我相信这不是正确的语法,因为它给了我 0 个结果..我知道该数据源中有几个结果!难道是链接不正确吗?
计算每部电影的演员数
在问题的原始表述中,您似乎试图计算每部电影的演员数量。该查询实际上与此非常接近,但我不确定您从哪里获得属性 URI,但它是不正确的。例如,如果你看http://data.linkedmdb.org/page/film/1 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 http://data.linkedmdb.org/page/actor/10,每个参与者都有 rdf:typehttp://data.linkedmdb.org/resource/movie/actor
,这意味着您可以只要求并计算该类型的事物:
select(count(distinct ?actor) as ?nActors) where {
?actor a <http://data.linkedmdb.org/resource/movie/actor> .
}
该查询返回 2500,这似乎更合适(因为它可能达到端点中 2500 的限制)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)