2009-08-03 39 views
27

Tôi đã truy vấn sau đây:SPARQL truy vấn và đếm riêng biệt

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

và kết quả là:

abc 
abc 
abc 
abc 
abc 
abc 
abc 
abd 
ads 
anb 

Tôi muốn nhận được somthing như:

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

tôi đã thử nó với count(*)count(?tag), nhưng tôi đã thử e thông báo lỗi "Variable or "*" expected." Ai đó có thể cho tôi biết, làm thế nào để làm cho nó đúng?

+0

SPARQL lõi không có tổng hợp như COUNT. Bạn đang làm việc với SPARQL nào? – laalto

+0

Tôi nghĩ rằng, tôi đang sử dụng lõi: ( – cupakob

+0

@laalto Cũng giống như một lưu ý, phiên bản mới nhất của SPARQL, phiên bản 1.1, từ năm 2013, * không * bao gồm các tập hợp. –

Trả lời

32

Nếu bạn đang sử dụng ARQ của Java và Jena, bạn có thể sử dụng ARQ's extensions for aggregates. truy vấn của bạn sẽ giống như thế:

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

Các original SPARQL specification from 2008 không bao gồm uẩn, nhưng the current version, 1.1, from 2013 làm.

+5

không, nhưng tập hợp được thêm vào SPARQL 1.1 và chúng được triển khai rộng rãi (thông qua các phần mở rộng khác nhau, như đã lưu ý) – dajobe

25

Sử dụng COUNT(), MIN(), MAX(), SUM(), AVG() với GROUP BY có thể tạo ra giá trị tóm tắt cho các nhóm ba. Lưu ý, các mẫu này có thể là riêng cho SPARQL 1.1.

Ví dụ, chương trình này có thể tóm tắt không? Giá trị cho mỗi danh mục?,

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

Cái này có thể đếm số lượng sử dụng cho vị p?,

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

Những ví dụ được lấy cảm hứng từ tài liệu từ Bob DuCharme (2011), "Học SPARQL". O’Reilly Media, Sebastopol, CA, Hoa Kỳ; xem http://www.learningsparql.com/

Các vấn đề liên quan