2016-07-20 6 views
1

У меня есть следующий запрос SPARQL и хотелось бы получить сумму? MyInt для всех уникальных значений z. Можно ли выразить такой запрос в SPARQL 1.1?Сочетание пути произвольного свойства, отличного от него и количества

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

я запускаю это в Jena ARQ и получить следующее сообщение об ошибке:

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

Вот и пример данных:

<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)' не имеет смысла. Вы должны указать переменные, по которым будет сгруппирован результат. – AKSW

+1

И нужно обернуть класс 'SUM' таким образом, чтобы имя переменной было известно, например. '(SUM (...) AS? Sum)'. Кстати, в следующий раз было бы неплохо иметь запрос SPARQL с правильным синтаксисом (отсутствующие префиксы и точки, среди прочего), чтобы люди могли его протестировать, например. здесь: http://sparql.org/query-validator.html – AKSW

+2

И какова идея первого тройного шаблона? Я имею в виду, что '? Y' нигде не используется, поэтому достаточно использовать'? X property1? Y'. – AKSW

ответ

3

Вы не можете выбрать выражения непосредственно, вы должны выберите их как переменные. Т.е., вам нужно сделать:

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

Это распространенная ошибка, потому что некоторые конечные точки (например, общественность DBpedia конечная точка, которая работает Virtuoso) сделать позволяют исходную форму, несмотря на то, что это не законно SPARQL.

Как указано в комментарии, вы должны группировать нулем, а не отдельным (? Z).

 Смежные вопросы

  • Нет связанных вопросов^_^