Подсчет количества особей в 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 в конечной точке).