Frage

Ich habe die folgende Abfrage:

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

und die Ergebnisse sind:

abc
abc
abc
abc
abc
abc
abc
abd
ads
anb

Ich möchte somthing erhalten wie:

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

Ich habe es versucht, mit count(*) und count(?tag), aber als ich die Fehlermeldung "Variable or "*" expected." bekommen Kann mir jemand sagen, wie man es richtig machen?

War es hilfreich?

Lösung

Wenn Sie mit Java und Jena ARQ, können Sie ARQ die Erweiterungen für Aggregate . Ihre Abfrage würde in etwa so aussehen:

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

Die original SPARQL-Spezifikation von 2008 keine Aggregate enthalten waren, aber der aktuellen Version 1.1, ab 2013 der Fall ist.

Andere Tipps

Mit COUNT (), MIN (), MAX (), SUM (), AVG () mit GROUP BY können Summenwerte für Gruppen von Tripel produzieren. Beachten Sie, könnten diese Muster spezifisch für SPARQL 1.1.

Zum Beispiel kann dies eine Summe der? Wertes für jeden? Kategorie,

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

Dies kann die Anzahl der Verwendungen für Prädikat zählen? P,

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

Diese Beispiele von Material von Bob Ducharme (2011), "Lernen SPARQL" inspiriert. O'Reilly Media, Sebastopol, CA, USA; finden Sie unter http://www.learningsparql.com/

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top