Подсчет количества особей в SPARQL

Я совершенно новичок в 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 результатов... Насколько я знаю, в этом источнике данных есть несколько результатов! Может быть, ссылка не правильная?

1 ответ

Решение

Подсчет актеров за фильм

В первоначальной постановке вопроса кажется, что вы пытаетесь сосчитать актеров за фильм. Запрос на самом деле очень близок к этому, но я не уверен, откуда вы взяли 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 в конечной точке).

Другие вопросы по тегам