2009-08-03 3 views
27

나는 다음 쿼리 한 :SPARQL 쿼리 및 고유 한 카운트는

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

I :

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

결과는 다음과 같습니다 : 나는 뭔가를해야만 같은를 얻을 수

abc 
abc 
abc 
abc 
abc 
abc 
abc 
abd 
ads 
anb 

을 원하는 count(*)count(?tag)으로 시도했지만, e 오류 메시지 "Variable or "*" expected." 누군가가 내게 말해 줄 수 있습니까?

+0

핵심 SPARQL에는 COUNT와 같은 집계가 없습니다. 어떤 SPARQL 확장 프로그램을 사용하고 있습니까? – laalto

+0

필자는 코어를 사용하고 있다고 생각한다. ( – cupakob

+0

@laalto 2013 년 SPARQL 버전 1.1의 최신 버전 인 *은 * 집계를 포함한다. –

답변

32

Java 및 Jena의 ARQ를 사용하는 경우 ARQ's extensions for aggregates을 사용할 수 있습니다. 귀하의 질의는 같은 보일 것이다 :

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

original SPARQL specification from 2008는 집계에 포함되지 않았다, 그러나 the current version, 1.1, from 2013 않습니다.

+5

집합체는 SPARQL에 추가되고있다. 1.1 그리고 그들은 광범위하게 구현되어있다 (언급 된 다른 확장을 통해) – dajobe

25

GROUP BY를 사용하여 COUNT(), MIN(), MAX(), SUM() 및 AVG()를 사용하면 트리플의 그룹에 대한 요약 값을 생성 할 수 있습니다. 이 패턴은 SPARQL 1.1에만 적용될 수 있습니다.

는 예를 들어, 하나

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, Sebastopol, CA, USA; http://www.learningsparql.com/