Pregunta

Tengo la siguiente consulta:

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

y los resultados son:

abc
abc
abc
abc
abc
abc
abc
abd
ads
anb

Quiero obtener algo como:

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

Lo he intentado con count (*) y count (? tag) , pero recibo el mensaje de error " Variable o " * " esperado. " ¿Alguien puede decirme cómo corregirlo?

¿Fue útil?

Solución

Si usa Java y Jena's ARQ, puede usar Extensiones de ARQ para agregados . Su consulta se vería así:

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

La especificación SPARQL original de 2008 no incluía agregados, pero la versión actual, 1.1, de 2013 sí.

Otros consejos

El uso de COUNT (), MIN (), MAX (), SUM (), AVG () con GROUP BY puede producir valores de resumen para grupos de triples. Tenga en cuenta que estos patrones pueden ser específicos de SPARQL 1.1.

Por ejemplo, este puede sumar el valor para cada categoría,

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

Este puede contar la cantidad de usos para el predicado? p,

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

Estos ejemplos están inspirados en el material de Bob DuCharme (2011), "Learning SPARQL". O & # 8217; Reilly Media, Sebastopol, CA, EE. UU.; ver http://www.learningsparql.com/

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top