2016-08-07 32 views
0

Ich versuche, eine Zahl für eine spätere Verwendung in der Abfrage (SPARQL) zu zählen.SPARQL BIND (COUNT (...) AS ...) funktioniert nicht

ich kann nicht einmal die Arbeit folgende bekommen:

etwas falsch mit meiner Syntax oder Semantik
SELECT ?resultsCount 
WHERE{ 
    ?subject ?predicate ?object. 
    BIND(COUNT(?object) AS ?resultsCount) 
} 

Es ist hier, wie ich wiederholt ?resultsCount oft einfach ein leeres Ergebnis erhalten, einfach statt z.B. 86 (Anzahl der Ergebnisse).

Allerdings bekomme ich die Anzahl der Ergebnisse (zum Beispiel 86), wenn ich wie folgt vorgehen:

SELECT (COUNT(?object) AS ?resultsCount) 
WHERE{ 
    ?subject ?predicate ?object 
} 

Gibt es eine Möglichkeit BIND zu bekommen mit COUNT wie im ersten Beispiel zu arbeiten? Wenn nicht, gibt es einen anderen korrekten Weg, die gleiche Art von Funktionalität zu erhalten?

Ich benutze Blazegraph 2.1.2. Könnte es ein Fehler sein?

Antwort

2

zählen ist eine Aggregatfunktion. Um Count zu verwenden, müssen Sie Gruppe von in Ihrer Abfrage verwenden und Count in der Projektion verwenden. Count zählt die Anzahl der Ergebnisse innerhalb jeder Gruppe. Sie können auch verschiedene mit Zählung, verwenden, so könnte man so etwas wie das tun nach der Anzahl der verschiedenen Objekte für jedes Thema zu erhalten:

select ?subject (count(?object) as ?numObjects) { 
    ?subject ?predicate ?object 
} 
group by ?subject 

Wenn Sie nur versuchen, die Anzahl der Spiele zu zählen , dann können Sie Zählung ohne Gruppe von (das gibt Ihnen eine einzige, implizit, Gruppe) verwenden:

select (count(*) as ?numResults) { 
    ?subject ?predicate ?object 
}