Pergunta

Eu tenho a seguinte consulta:

SELECT ?tag WHERE {
  ?r ns9:taggedWithTag ?tagresource.
  ?tagresource ns9:name ?tag
}
LIMIT 5000

E os resultados são:

abc
abc
abc
abc
abc
abc
abc
abd
ads
anb

Eu quero fazer algo como:

tag | count
-----------------
abc     7
abd     1
ads     1
anb     1

Eu tentei com count(*) e count(?tag), mas então eu recebo a mensagem de erro "Variable or "*" expected." Alguém pode me dizer, como fazê -lo certo?

Foi útil?

Solução

Se você está usando o ARQ de Java e Jena, você pode usar Extensões da ARQ para agregados. Sua consulta seria algo como:

SELECT ?tag (count(distinct ?tag) as ?count)
WHERE {
    ?r ns9:taggedWithTag ?tagresource.
    ?tagresource ns9:name ?tag
}
LIMIT 5000

o Especificação SPARQL original de 2008 não incluía agregados, mas A versão atual, 1.1, de 2013 faz.

Outras dicas

Usando count (), min (), max (), sum (), avg () com grupo por pode produzir valores resumidos para grupos de triplos. Observe que esses padrões podem ser específicos para o SPARQL 1.1.

Por exemplo, este pode somar o valor?

SELECT ?category (SUM(?value) as ?valueSum)
WHERE
{
  ?s ?category ?value .
}
GROUP BY ?category

Este pode contar o número de usos para o predicado? P,

SELECT ?p (COUNT(?p) as ?pCount)
WHERE
{
  ?s ?p ?o .
}
GROUP BY ?p

Esses exemplos são inspirados no material de Bob Ducharme (2011), "Learning Sparql". O'Reilly Media, Sebastopol, CA, EUA; Vejo http://www.learningsparql.com/

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top