我正在尝试计算给定属性的值的数量,并输出每个检索到的资源以及该数字。我正在尝试使用BIND
将COUNT
函数的结果值存储在变量中,并将该变量投影到我的结果中。但是,这个值似乎是空的,我不明白为什么会这样。
我的查询目前看起来像这样:
SELECT DISTINCT ?a ?c
WHERE {
?a <http://www.w3.org/2000/01/rdf-schema#label> ?b.
BIND(COUNT(?b) AS ?c).
}
LIMIT 100
我想我必须按?a
进行分组,虽然我不知道如何继续我想要为多个属性执行此操作,但这不是这个问题的关注:现在,我只是想知道为什么?c
似乎是空的。
不应该 - 现在 - 每个结果行只有一个标签?如果是这样,为什么不是文字1^^xsd:integer
绑定到?c
- 或者至少有一些高数字代表标签的总数(未组合)(类似于发生的here) - ,例如,在以下端点上:
我知道我正在寻找的功能可能不受某些或所有这些实现的支持 - 但如果是这样的话,COUNT
被简单地“吞没”而没有错误消息似乎是不寻常的(我做了在语法的某些其他端点上获取错误消息。
因此,我的问题是:为什么COUNT
的返回值为空?
COUNT
功能?
COUNT
函数是否仅在以后评估(如果是,为什么它至少不会返回0
之类的内容?)答案 0 :(得分:4)
您的查询实际上并不合法。有一个SPARQL query validator at sparql.org,它报告count
上的语法错误:
语法错误:
第4行,第8列:此时聚合表达式不合法
我无法说出为什么有些引擎不会窒息。在SPARQL函数中构建的数字可能会产生错误,并且通常最终将绑定变量绑定到看似空的结果。也许一些SPARQL引擎开发人员更进一步,并且调用缺少的函数会返回错误(看起来像一个未绑定的变量)。这可能是个案调查,您需要单独联系这些产品的开发人员。
无论如何,您可能希望最终编写一个或多或少类似于以下内容的查询。您可以在查询的投影部分中使用(aggregate-function(args) as variable)
,这样就可以了解如何将?b
的{{1}}个数量?a
绑定到?c
一次&# 39;按?a
分组。
select distinct ?a (count(?b) as ?c)
where { ?a rdfs:label ?b }
group by ?a