" Sparql按对象数量过滤为给定谓词返回

时间:2014-09-13 23:02:48

标签: sparql

在下面的查询中,我试图获取所有条目的列表,其中包含谓词sctap:mentionedBy的3个以上对象。但是,我一直在为此搜索收到格式错误的查询错误。有人看到我的查询有什么问题吗?

由于

SELECT ?s
WHERE {
    ?s sctap:mentionedBy ?o 
    FILTER (count(?o) > 3) 
}

sparql错误说:“聚合表达式不合法”。我不确定这意味着什么。

1 个答案:

答案 0 :(得分:4)

  

有人看到我的查询有什么问题吗?

不确定。就像错误消息所说的那样,您使用的是聚合表达式(count(?o)),其中一个是不合法的。您可以在SPARQL 1.1 Query Language的目录中看到您可以在过滤器中使用哪些过滤器功能,哪些是聚合,以及您可以在哪里使用它们。您还可以尝试在sparql.org's query validator解析查询。对于您的查询,它将为您提供出错的行号和列号。它在count(?o)

在这种情况下,您尝试计算每个 s ?o 的数量,这意味着您需要分组?,并且您的过滤器需要父亲出局。例如,

select ?s where {
  ?s sctap:mentionedBy ?o
}
group by ?s
having (count(?o) > 3)

在这种情况下,它不太可能有所作为,但您可能只想计算?o 不同值,因此您还可以考虑:

select ?s where {
  ?s sctap:mentionedBy ?o
}
group by ?s
having (count(distinct ?o) > 3)