web-dev-qa-db-ja.com

SPARQLクエリと個別カウント

次のクエリがあります。

_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."_を受け取るよりも、誰かが教えてくれますか?

29
cupakob

JavaとJenaのARQを使用している場合は、 ARQの集計用拡張機能 を使用できます。クエリは次のようになります。

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

2008年の元のSPARQL仕様 には集計が含まれていませんでしたが、 現在のバージョン、2013年の1.1 は含まれています。

37
Phil M

COUNT()、MIN()、MAX()、SUM()、AVG()をGROUP BYとともに使用すると、トリプルのグループの集計値を生成できます。これらのパターンはSPARQL 1.1に固有のものである可能性があることに注意してください。

たとえば、これは各?categoryの?valueを合計できます。

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

これは、述語?pの使用回数をカウントできます。

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

これらの例は、Bob DuCharme(2011)、「Learning SPARQL」の資料に触発されています。米国カリフォルニア州セバストポルのO’Reilly Media。 http://www.learningsparql.com/ を参照してください

GROUP BYを使用する際の「Bad aggregate」エラーを回避するには:

  1. グループ化変数は一致する必要があります。 (?最初の例のカテゴリ)
  2. SELECTの残りの変数は、それぞれ1つの値になります。 (SUM(?value)as?valueSum)最初の例では。
30
Darren Weber