Tôi không thể mô tả vấn đề của mình một cách chính thức do tiếng Anh xấu của tôi; hãy để tôi nói nó bằng cách sử dụng một ví dụ. Bảng bên dưới thực sự được nhóm theo 'chủ đề', 'vị ngữ'.Kết hợp nhiều bộ hàng trong SPARQL
Chúng tôi xác định tập hợp trên hàng, nếu chúng có cùng 'chủ đề'. Bây giờ tôi muốn kết hợp bất kỳ hai bộ nào nếu chúng chứa cùng một 'vị ngữ', tính tổng 'số' của cùng một 'vị ngữ' và đếm số đối tượng riêng biệt có cùng một tập hợp.
subject predicate count
-----------------------------
s1 p1 1
s1 p2 2
s2 p1 3
s3 p1 2
s3 p2 2
Vì vậy, những gì muốn từ bảng này là hai bộ:
{2, (p1, 3), (p2, 4)},
{1, (p1,3)}
nơi trong tập đầu tiên, 2 chỉ có hai đối tượng (s1 và s3) có bộ này; (p1,3) là tổng từ (s1, p1, 1) và (s3, p1, 2).
Vậy làm cách nào tôi có thể truy xuất các bộ này và lưu chúng trong Java?
Tôi làm cách nào để sử dụng SPARQL?
Hoặc, trước tiên lưu trữ các bộ ba này trong Java, thì làm cách nào tôi có thể nhận các bộ này bằng Java?
Một giải pháp có thể được concat vị từ và đếm,
SELECT (COUNT(?s) AS ?distinct)
?propset
(group_concat(?count; separator = \"\\t\") AS ?counts)
{
SELECT ?s
(group_concat(?p; separator = \" \") AS ?propset)
(group_concat(?c; separator = \" \") AS ?count
{
?s ?p ?c
} GROUP BY ?s ORDER BY ?s
} GROUP BY ?propset ORDER BY ?propset
Rồi đếm có thể được tách riêng, sau đó tổng hợp. Nó hoạt động tốt trên tập dữ liệu nhỏ, nhưng rất tốn thời gian.
Tôi nghĩ rằng tôi sẽ từ bỏ vấn đề kỳ lạ này. Cảm ơn bạn rất nhiều vì đã trả lời.
có ý tôi là 's1 và s3 có cùng một tập hợp'. xin lỗi vì lỗi đánh máy, tôi đã sửa đổi nó (và thay đổi giá trị vị ngữ của s2 để làm cho nó rõ ràng hơn). Tuy nhiên, kết quả tôi muốn là 'tập hợp các bộ'. Hai tập hợp, giả sử {p1, p2} và {p1}, không thể kết hợp vì chúng khác nhau. Vì vậy, chúng tôi sẽ không chỉ tổng hợp giá trị của mọi biến vị ngữ tương tự. Cảm ơn bạn đã trả lời :) – bobharris
Ah, hiểu rồi. Điều đó có thể khó, nhưng tôi đã thêm một lần thứ hai. – user205512
Nó gần như gần với những gì tôi muốn :) nhưng nó vẫn tiếp tục chạy và có vẻ như nó sẽ không đưa ra bất kỳ kết quả nào. Bên cạnh đó, nếu truy vấn này thành công, làm cách nào tôi có thể truy xuất các tập hợp đó tạo thành bảng kết quả?Tôi chỉ có thể thấy bảng kết quả có chứa hai cột, nhưng không cung cấp thông tin về các bộ. Đối với kết quả, chúng sẽ được lưu trữ trong java, vì vậy .. thực tế tôi chỉ muốn những kết quả này. Cám ơn bạn một lần nữa. – bobharris