2012-04-09 50 views
7

Câu hỏi của tôi cũng tương tự như những gì đã được hỏi về chủ đề này Is it possible to combine those 2 SPARQL INSERT into one?Nhiều SPARQL "INSERT WHERE" truy vấn trong một yêu cầu duy nhất

Tôi muốn có nhiều INSERT ĐÂU báo cáo trong một truy vấn, nhưng đối với các đối tượng khác nhau. Tôi muốn thử nghiệm một giá trị cụ thể ("testValueN") và nếu hiện tại muốn chèn một giá trị mới cho đối tượng đó.

Một ví dụ về nó sẽ là,

PREFIX Sensor: <http://example.com/Equipment.owl#> 
{ 
    INSERT { 
     ?subject1 Sensor:test2 'newValue1' . 
      } 
    WHERE { 
     ?subject1 Sensor:test1 'testValue1' . 
      } 
}; 
{ 
    INSERT { 
     ?subject2 Sensor:test2 'newValue2' . 
      } 
    WHERE { 
     ?subject2 Sensor:test1 'testValue2' . 
      } 
}; 

Tôi biết các truy vấn trên là sai. Tôi muốn biết nếu một cái gì đó tương tự là có thể trong SPARQL.

Trả lời

8

Có, điều này là có thể. Thực tế, ví dụ của bạn gần như hoàn toàn tốt đẹp, chỉ cần mất các dấu ngoặc xung quanh mỗi lần chèn:

PREFIX Sensor: <http://example.com/Equipment.owl#> 
INSERT { 
    ?subject1 Sensor:test2 'newValue1' . 
} 
WHERE { 
    ?subject1 Sensor:test1 'testValue1' . 
}; 
INSERT { 
    ?subject2 Sensor:test2 'newValue2' . 
} 
WHERE { 
    ?subject2 Sensor:test1 'testValue2' . 
} 

là một chuỗi cập nhật SPARQL hợp lệ.

+0

Đã hoạt động! Cảm ơn Jeen Tôi đã chạy bản cập nhật hàng loạt 100, sau đó 1000 bộ ba bằng truy vấn trên. Các bản cập nhật nhận được rất chậm khi tôi tiếp tục tăng số lượng bộ ba. Đối với 100 INSERT WHERE cập nhật mất 4,2 giây và 1000 INSERT KHI cập nhật mất 40,7 giây Đây có phải là cách chính xác và hiệu quả nhất để thực hiện số lượng lớn INSERT WHERE updates? – Nikhil

+0

Tôi không nghĩ như vậy, tôi đoán nó hiệu quả hơn để làm điều đó trong một bản cập nhật duy nhất, chứ không phải là một chuỗi với bản cập nhật cho từng giá trị riêng lẻ. Nhưng đó là một câu hỏi riêng và yêu cầu chi tiết hơn một chút về dữ liệu của bạn và cái gì, chính xác, bạn đang cố gắng đạt được :) –

+0

Tôi đang cố gắng chèn số lượng lớn các chỉ số cảm biến trong một cửa hàng RDF tuân thủ SPARQL 1.1. Tôi nhận được một luồng các bài đọc và ID cảm biến tương ứng. Tôi cần tra cứu ID cảm biến lấy URI cho cảm biến đó và nếu có chèn các cảm biến đo. Vì vậy, tôi cần thực hiện tra cứu trước và sau đó là một Phụ trang. Tìm nạp trước các URI cảm biến có thể không tốt vì các bản cập nhật sẽ từ các máy khác nhau và số cảm biến được cho là có quy mô đến một triệu và nhiều hơn nữa. xin vui lòng cho tôi biết nếu tôi đang đi đúng hướng. – Nikhil

0

Tôi muốn có nhiều câu lệnh INSERT WHERE trong truy vấn, nhưng cho các chủ đề khác nhau. Tôi sẽ thử nghiệm một giá trị cụ thể ("testValueN") và nếu hiện tại muốn chèn một giá trị mới cho đối tượng đó.

Bạn có thể làm điều này bằng giá trị để xác định các cặp OldValue/newValue mà bạn muốn, và nó chỉ đòi hỏi một đơn chèn. Nó cũng quy mô độc đáo hơn cho các cặp mới, vì bạn chỉ phải thêm một dòng vào truy vấn.

PREFIX Sensor: <http://example.com/Equipment.owl#> 
INSERT { 
    ?subject Sensor:test2 ?newValue 
} 
WHERE { 
    values (?oldValue ?newValue) { 
     ('testValue1' 'newValue1') 
     ('testValue2' 'newValue2') 
    } 
    ?subject Sensor:test1 ?oldValue 
} 
Các vấn đề liên quan