SPARQL查询和独特计数

cup*_*kob 29 count sparql

我有以下查询:

SELECT ?tag WHERE {
  ?r ns9:taggedWithTag ?tagresource.
  ?tagresource ns9:name ?tag
}
LIMIT 5000
Run Code Online (Sandbox Code Playgroud)

结果是:

abc
abc
abc
abc
abc
abc
abc
abd
ads
anb
Run Code Online (Sandbox Code Playgroud)

我想得到像这样的东西:

tag | count
-----------------
abc     7
abd     1
ads     1
anb     1
Run Code Online (Sandbox Code Playgroud)

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

Phi*_*l M 37

如果您使用的是Java和Jena的ARQ,则可以使用ARQ的扩展来进行聚合.您的查询看起来像:

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

2008年原始SPARQL规范不包括聚合,但是从2013年起的当前版本1.1.

  • 它没有,但聚合被添加到SPARQL 1.1并且它们被广泛实现(通过不同的扩展,如上所述) (5认同)

Dar*_*ber 31

使用COUNT(),MIN(),MAX(),SUM(),AVG()和GROUP BY可以为三元组生成汇总值.请注意,这些模式可能特定于SPARQL 1.1.

例如,这个可以将每个?类别的?值相加,

SELECT ?category (SUM(?value) as ?valueSum)
WHERE
{
  ?s ?category ?value .
}
GROUP BY ?category
Run Code Online (Sandbox Code Playgroud)

这个可以计算谓词的使用次数?p,

SELECT ?p (COUNT(?p) as ?pCount)
WHERE
{
  ?s ?p ?o .
}
GROUP BY ?p
Run Code Online (Sandbox Code Playgroud)

这些例子的灵感来自Bob DuCharme(2011),"学习SPARQL"的材料.O'Reilly Media,Sebastopol,CA,USA; 见http://www.learningsparql.com/