SPARQL BIND (COUNT() AS) не работает

Я пытаюсь присвоить счетчик переменной для последующего использования в запросе (SPARQL).

Я даже не могу заставить работать следующее:

SELECT ?resultsCount
WHERE{
    ?subject ?predicate ?object.
    BIND(COUNT(?object) AS ?resultsCount)
}

Здесь что-то не так с моим синтаксисом или семантикой, так как я просто получаю пустой результат, повторяющийся ?resultsCount много раз, а не просто, например. 86 (количество результатов).

Однако я получаю количество результатов (например, 86), когда делаю следующее:

SELECT (COUNT(?object) AS ?resultsCount)
WHERE{
    ?subject ?predicate ?object
}

Есть ли способ заставить BIND работать с COUNT, как в первом примере? Если нет, есть ли другой правильный способ получить ту же функциональность?

Я использую Blazegraph 2.1.2. Может ли это быть ошибкой с этим?


person Navigateur    schedule 07.08.2016    source источник


Ответы (1)


count – это агрегатная функция. Чтобы использовать count, вам нужно использовать group by в своем запросе и использовать count в прогнозе. Count будет подсчитывать количество результатов в каждой группе. Вы также можете использовать distinct с count, поэтому вы можете сделать что-то вроде следующего, чтобы получить количество различных объектов для каждого субъекта:

select ?subject (count(?object) as ?numObjects) {
    ?subject ?predicate ?object
}
group by ?subject

Если вы просто пытаетесь подсчитать количество совпадений, вы можете использовать count без group by (что дает вам одну неявную группу):

select (count(*) as ?numResults) {
    ?subject ?predicate ?object
}
person Joshua Taylor    schedule 08.08.2016