Question

J'ai la requête suivante:

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

et les résultats sont:

abc
abc
abc
abc
abc
abc
abc
abd
ads
anb

Je veux obtenir quelque chose comme:

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

Je l'ai essayé avec count (*) et count (? tag) , mais je reçois le message d'erreur "Variable ou" * " attendu. " Quelqu'un peut-il me dire comment y remédier?

Était-ce utile?

La solution

Si vous utilisez Java et l'ARQ de Jena, vous pouvez utiliser les extensions d'ARQ pour les agrégats . Votre requête ressemblerait à quelque chose comme:

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

La spécification SPARQL d'origine de 2008 n'incluait pas d'agrégats, mais la version actuelle, 1.1, de 2013 , le fait.

Autres conseils

L'utilisation de COUNT (), MIN (), MAX (), SUM (), AVG () avec GROUP BY peut produire des valeurs récapitulatives pour des groupes de triples. Notez que ces modèles peuvent être spécifiques à SPARQL 1.1.

Par exemple, celui-ci peut additionner la valeur? pour chaque catégorie?,

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

Celui-ci peut compter le nombre d'utilisations du prédicat? p,

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

Ces exemples sont inspirés du matériel de Bob DuCharme (2011), "Learning SPARQL". O’Reilly Media, Sebastopol, Californie, États-Unis; voir http://www.learningsparql.com/

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top