2013-08-21 17 views
5

Thêm chỉ này một quad đến một cửa hàng rỗng:Truy vấn SPARQL đơn nhất + quad cơ bản = 1 kết quả trong Jena, 2 kết quả trong Sesame - ai là đúng?

<http://x.com/s> <http://x.com/p> 2 <http://x.com/g> . 

Sau đó, thực hiện truy vấn SPARQL này (lấy từ mỗi Bob Ducharme của cuốn sách 'Học SPARQL', vì vậy đây phải là tiêu chuẩn SPARQL để lấy tất cả Quads trên tập dữ liệu, bất kể triển khai, đúng không !?):

SELECT ?g ?s ?p ?o 
WHERE { 
{ ?s ?p ?o } 
UNION 
{ GRAPH ?g { ?s ?p ?o } } } 

Nhưng Jena và Sesame trả lời với các câu trả lời khác nhau !!? Đây là những gì tôi thấy: (! Phiên bản 2.10.0 - out-of-the-box, không có thay đổi cấu hình) -

Jena Fuseki console trên Tomcat 6.0.37 (câu trả lời đúng như tôi hiểu điều):

Sesame Workbench trên Tomcat 6.0.37 (phiên bản 2.7.3 - ngoài hộp, không thay đổi cấu hình!): Chỉ cần sử dụng tính năng 'Thêm' trong bàn làm việc để thêm thủ công quad ở trên (với 'N -Quad 'được chọn trong hộp thả xuống' Định dạng dữ liệu '), trong hộp thoại' Nhập dữ liệu RDF bạn muốn tải lên ', sau đó chạy truy vấn trên:

-------------------------------------------------------------- 
| g    | s    | p    | o | 
============================================================== 
|     | <http://x.com/s> | <http://x.com/p> | 2 | 
| <http://x.com/g> | <http://x.com/s> | <http://x.com/p> | 2 | 
-------------------------------------------------------------- 

Vì vậy, điều này là đáng sợ cho một ai đó bắt đầu nhìn vào RDF - tôi đang thiếu gì ở đây? Tôi cho rằng Sesame không thể 'sai' - vì vậy nó phải là 'giải thích' của tôi, tôi cho rằng (hoặc truy vấn của Bob không phải là 'SPARQL chuẩn', và các triển khai khác nhau được tự do trả về các kết quả khác nhau) chào mừng :)!

+3

Phía bên trái truy vấn 'UNION' của bạn dựa trên biểu đồ mặc định.Tôi nghi ngờ rằng sự khác biệt phát sinh từ những gì được chứa trong đồ thị mặc định trong hai hệ thống này. Ví dụ, có lẽ trong Jena, đồ thị mặc định là rỗng, trừ khi ba được thêm vào, và trong Sesame đồ thị mặc định là sự kết hợp của các đồ thị được đặt tên? –

Trả lời

7

Khi @Joshua Taylor chỉ ra trong nhận xét của mình, nguyên nhân là do Sesame và Jena sử dụng cách diễn giải khác nhau của biểu đồ mặc định.

Trong Sesame, toàn bộ kho lưu trữ được coi là biểu đồ mặc định: tất cả các câu lệnh trong tất cả các biểu đồ có tên cũng như tất cả các câu lệnh không có biểu đồ có tên. Do đó, đối số đầu tiên của công đoàn của bạn, truy vấn biểu đồ mặc định, thành công và liên kết ?s, ?p?o (nhưng không phải ?g). Lập luận thứ hai của công đoàn của bạn rõ ràng là thành công cũng bởi vì quad ban đầu là tất nhiên trong một đồ thị có tên, và do đó bạn nhận được hai câu trả lời.

Jena sử dụng biểu đồ mặc định "độc quyền" theo mặc định: chỉ các câu lệnh không được thêm rõ ràng vào bất kỳ biểu đồ cụ thể nào có trong biểu đồ mặc định. Do đó, trong Jena, phần đầu tiên của công đoàn thất bại (không có câu lệnh nào phù hợp trong biểu đồ mặc định của Jena), phần thứ hai thành công và do đó bạn chỉ nhận được 1 kết quả.

Lạ như âm thanh, cả hai đều chính xác. Sự khác biệt chỉ đơn giản là cách tập dữ liệu mà truy vấn được thực hiện được thiết lập.

Tất nhiên, có nhiều cách để giải quyết vấn đề này. Trong cả Jena và Sesame, bạn có thể thêm các mệnh đề FROM (NAMED) để làm rõ dữ liệu được truy vấn là gì (Sesame cung cấp tên đồ thị sesame:nil để truy vấn một cách rõ ràng các câu lệnh không có biểu đồ được đặt tên được liên kết). Ngoài ra, bạn có thể sửa đổi chương trình định nghĩa tập dữ liệu mà trên đó một truy vấn được thực hiện. Các cơ chế chính xác trong Jena và Sesame có chút khác biệt, nhưng cả hai đều có tùy chọn (trong Sesame, bạn có thể tạo và cung cấp đối tượng Dataset với truy vấn của mình trước khi thực hiện, trong Jena tôi tin rằng bạn có thể cấu hình lại cửa hàng hoặc mô hình thực tế bạn thực hiện truy vấn để hoạt động khác nhau).

+4

Sau khi đăng bình luận trước đó, tôi đã xem xét các cách để có được các đồ thị mặc định và công đoàn trong Jena. [Tài liệu] (http://jena.apache.org/documentation/tdb/datasets.html) mô tả hai đồ thị đặc biệt, 'urn: x-arq: UnionGraph' và' urn: x-arq: DefaultGraph'. –

+4

Tôi không phải truy vấn: nếu bạn đặt thông qua ngữ cảnh TDB.getContext(). Set (TDB.symUnionDefaultGraph, true); thì biểu đồ mặc định truy vấn là sự kết hợp của các biểu đồ được đặt tên. Xem http://jena.apache.org/documentation/tdb/datasets.html – AndyS

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