Domanda

Ho la seguente query:

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

e i risultati sono:

abc
abc
abc
abc
abc
abc
abc
abd
ads
anb

Voglio ottenere qualcosa del genere:

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

L'ho provato con count (*) e count (? tag) , ma poi ricevo il messaggio di errore " Variable o " * " previsto. " Qualcuno può dirmi, come farlo bene?

È stato utile?

Soluzione

Se stai usando ARQ di Java e Jena, puoi utilizzare Estensioni ARQ per aggregati . La tua query sarebbe simile a:

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

Le specifiche SPARQL originali del 2008 non includevano aggregati, ma la versione attuale, 1.1, del 2013 sì.

Altri suggerimenti

L'uso di COUNT (), MIN (), MAX (), SUM (), AVG () con GROUP BY può produrre valori di riepilogo per gruppi di triple. Nota, questi schemi potrebbero essere specifici di SPARQL 1.1.

Ad esempio, questo può sommare il? valore per ogni? categoria,

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

Questo può contare il numero di usi per predicato? p,

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

Questi esempi sono ispirati al materiale di Bob DuCharme (2011), "Learning SPARQL". O & # 8217; Reilly Media, Sebastopol, California, USA; vedi http://www.learningsparql.com/

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top