2016-07-20 32 views
1

Ich habe die nachstehende SPARQL-Abfrage und möchte die Summe von? MyInt für alle eindeutigen? Z-Werte erhalten. Ist es möglich, eine solche Abfrage in SPARQL 1.1 auszudrücken?Kombinieren beliebige Eigenschaftspfad, distinct, und zählen

SELECT ?z SUM(xsd:int(?myInt)) 
where{ 
?x property1+ ?y 
?x property2 ?k 
?k property3 ?z 
?x property4 ?myInt 
} group by distinct(?z) 

ich dies in Jena ARQ laufen und erhalten den folgenden Fehler:

Exception in thread "main" com.hp.hpl.jena.query.QueryParseException: Encountered " "sum" "SUM "" at line 1, column 11. 

Auch hier ist ein Beispiel Daten:

<http://a.com/6> <http://aq.com/p> <http://e.com/c5>. 

<http://a.com/6> <http://aq.com/q> <http://a.com/5>. 

<http://e.com/c5> <http://aq.com/a> <http://eoq.com/u1>. 

<http://a.com/6> <http://aq.com/num> "10"^^<http://www.w3.org/2001/XMLSchema#integer> . 

<http://a.com/5> <http://aq.com/p> <http://e.com/c4>. 

<http://a.com/5> <http://aq.com/q> <http://a.com/4>. 

<http://e.com/c4> <http://aq.com/a> <http://eoq.com/u1>. 

<http://a.com/5> <http://aq.com/num> "10"^^<http://www.w3.org/2001/XMLSchema#integer>. 
+2

'GROUP BY DISTINCT (? Z)' macht keinen Sinn. Sie müssen die Variablen angeben, auf denen das Ergebnis gruppiert wird. – AKSW

+1

Und die Klasse "SUM" so umbrechen müssen, dass ein Variablenname bekannt ist, z. '(SUM (...) AS? Summe)'. Übrigens wäre es beim nächsten Mal gut, eine SPARQL-Abfrage mit korrekter Syntax (unter anderem fehlende Präfixe und Punkte) zu haben, so dass Leute sie testen können, z. hier: http://sparql.org/query-validator.html – AKSW

+2

Und was ist die Idee des ersten Dreifachmusters? Ich meine, '' y' 'wird nirgends verwendet, also wäre es ausreichend '' x property1? Y' zu verwenden. – AKSW

Antwort

3

Sie keine Ausdrücke direkt auswählen können, müssen Sie Wähle sie als Variablen aus. Das heißt, was Sie tun müssen:

SELECT ?z (SUM(xsd:int(?myInt)) as ?sum) 

Dies ist ein häufiger Fehler, weil einige Endpunkte (beispielsweise der öffentliche DBpedia Endpunkt, der Virtuoso läuft) tun lassen Sie Ihre ursprüngliche Form, auch wenn es nicht legal SPARQL ist.

Wie in einem Kommentar erwähnt, sollten Sie von Null gruppieren, nicht von distinct (? Z).