Consulta SPARQL y recuento distinto
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?
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/