我有以下查询:

SELECT ?tag WHERE {
  ?r ns9:taggedWithTag ?tagresource.
  ?tagresource ns9:name ?tag
}
LIMIT 5000

和的结果是:

abc
abc
abc
abc
abc
abc
abc
abd
ads
anb

我想获得的财产以后这样的:

tag | count
-----------------
abc     7
abd     1
ads     1
anb     1

我与count(*)count(?tag)尝试过,但比我得到的错误信息"Variable or "*" expected."谁能告诉我,如何作出正确的?

有帮助吗?

解决方案

如果您使用的是Java和耶拿的ARQ,您可以使用 ARQ的扩展聚集。您的查询看起来是这样的:

SELECT ?tag (count(distinct ?tag) as ?count)
WHERE {
    ?r ns9:taggedWithTag ?tagresource.
    ?tagresource ns9:name ?tag
}
LIMIT 5000

从2008 不包括聚集体的原始SPARQL说明书中,但当前版本,1.1,从2013年确实

其他提示

使用COUNT(),MIN(),MAX(),SUM(),AVG()与GROUP BY能产生汇总值三元组的基团。注意,这些模式可能是特定于SPARQL 1.1。

例如,这一个可以总结α值对于每个?类别,

SELECT ?category (SUM(?value) as ?valueSum)
WHERE
{
  ?s ?category ?value .
}
GROUP BY ?category

这可以计数谓词2 P的使用次数,

SELECT ?p (COUNT(?p) as ?pCount)
WHERE
{
  ?s ?p ?o .
}
GROUP BY ?p

这些实例由来自Bob迪沙尔姆(2011), “学习SPARQL” 材料的启发。 O'Reilly Media公司,塞瓦斯托波尔,CA,USA;请参阅 http://www.learningsparql.com/

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top