结合任意属性路径,不同和计数

时间:2016-07-20 08:02:36

标签: sparql rdf

我有下面的SPARQL查询,想得到所有唯一?z值的?myInt的总和。是否可以在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>.

1 个答案:

答案 0 :(得分:3)

您无法直接选择表达式,您必须将它们选为变量。即,你需要这样做:

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

这是一个常见的错误,因为某些端点(例如,正在运行Virtuoso的公共DBpedia端点)允许您的原始表单,即使它不合法的SPARQL。

正如评论中所提到的,你应该按?零分组,而不是分开(?z)。