在下面的查询中,我试图获取所有条目的列表,其中包含谓词sctap:mentionedBy的3个以上对象。但是,我一直在为此搜索收到格式错误的查询错误。有人看到我的查询有什么问题吗?
由于
SELECT ?s
WHERE {
?s sctap:mentionedBy ?o
FILTER (count(?o) > 3)
}
sparql错误说:“聚合表达式不合法”。我不确定这意味着什么。
答案 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)