2012-05-08 22 views
8

Nó có vẻ là có thể đếm một thực thể duy nhất sử dụngCách truy vấn số lượng bộ dữ liệu khác nhau bằng SPARQL 1.1?

(COUNT(DISTINCT ?x) as ?count) 

và cho số lượng các bộ riêng biệt cho tất cả các biến trong truy vấn sử dụng

(COUNT(DISTINCT *) as ?count) 

Tuy nhiên, tôi không thể tìm ra cách để đếm cụ thể (khác biệt) tuples. Một cái gì đó như

(COUNT(DISTINCT ?a ?b ?c) as ?count) 

dường như không hoạt động. Tôi làm điều đó sai hay là điều này thực sự không được phép trong SPARQL 1.1? Hoặc là nó phải làm việc và chỉ không được hỗ trợ trong Sesame 2.6.0 mà tôi đang sử dụng để thử nghiệm này?

Trả lời

9

Chào mừng bạn đến với StackOverflow!

Hãy chắc chắn rằng kết quả trung gian của bạn chỉ chứa ba biến ?a ?b ?c rằng bạn đang quan tâm.

Một cách để làm điều này là sử dụng một subquery. Truy vấn phụ chỉ có ba biến mong muốn. Một cái gì đó như thế này:

SELECT (COUNT(*) AS ?count) { 
    SELECT DISTINCT ?a ?b ?c { 
     … 
    } 
} 

(Tôi không chắc liệu Sesame hỗ trợ truy vấn con.)

Một cách khác là chỉ cần chắc chắn rằng truy vấn của bạn chỉ chứa ba biến. Nếu bạn cần thêm các biến bên trong truy vấn, bạn có thể thay thế chúng bằng các nút trống. Các nút trống trong các mẫu biểu đồ SPARQL hoạt động như “các biến ẩn danh”. Tuy nhiên, có một số vấn đề về phạm vi vui nhộn, vì vậy phương pháp tiếp cận phụ có lẽ tốt hơn.

+1

Chỉ để xác nhận rằng Sesame 2.6 hỗ trợ các truy vấn phụ. Tuy nhiên, việc cập nhật lên 2.6.5 có thể là một ý tưởng hay - đã có một số sửa lỗi trong đánh giá truy vấn phụ từ 2.6.0. –

+0

Cảm ơn, điều này có vẻ như một mẹo hay để thực hiện điều này. Như bạn đã nói, Sesame cho phép truy vấn phụ, vì vậy điều này sẽ có thể thực hiện được. Câu trả lời của bạn cũng có vẻ ngụ ý rằng thực sự, định nghĩa ngôn ngữ SPARQL không cho phép xây dựng điều này bên trong một biểu thức đếm một cách rõ ràng? – Johsm

+0

Bạn không thể có nhiều hơn một biến bên trong 'COUNT'. Đó là 'COUNT (*)' hoặc 'COUNT (? Var)', với tùy chọn 'DISTINCT'. – cygri