rdf - 计算 SPARQL 中的个体数量

标签 rdf sparql linkedmdb

我是 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 个结果。我知道该数据源中有多个结果!会不会是链接不对?

最佳答案

计算每部电影的 Actor

在问题的原始表述中,您似乎在尝试计算每部电影的 Actor 数。查询实际上与此非常接近,但我不确定您从哪里获得属性 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

计数 Actor

现在,您可以修改此查询以计算 Actor 数量,方法是运行相同的三重模式,但不是按电影分组并计算 Actor 数量,而是只计算所有电影中不同的 Actor 数量:

select(count(distinct ?actor) as ?nActors) where {
  [] <http://data.linkedmdb.org/resource/movie/actor> ?actor .
}

现在,这似乎提供了 162 的答案,这似乎相当低,但在其他问题中我们已经看到 LinkedMDB 的端点有一些奇怪的限制。可能是因为这些,但这也不是我们计算 Actor 数量的唯一方法。您可以通过查看 Actor 的页面来记录,例如 http://data.linkedmdb.org/page/actor/10 ,每个 Actor 都有 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 的限制)。

关于rdf - 计算 SPARQL 中的个体数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24161679/

相关文章:

python - 从python中的嵌套字典创建层次树

SPARQL 为缺失字段生成值

SPARQL:查询以获取与第三个类共享相同连接的两个类的所有实例

sparql - 如何判断三元组是否存在?

sparql - 星关系执行限制怎么解决

java - 我应该使用什么样的 jena 词汇来创建主要基于 ART 的 PDF?

rdf - SPARQL 查询从 DBPedia 提取所有日期/时间数据

java - 无法查询链接电影数据库的本地版本

rdf - 如何使用 SPARQL 查找相似内容

java - 如何增加资源?