簡體   English   中英

Ruby SPARQL查詢,對於給定的主題,SELECT都進行三重選擇

[英]A ruby SPARQL query that SELECT(s) all triples for a given subject

我正在使用下面的ruby庫查詢SPARQL endpont。 http://ruby-rdf.github.io/sparql-client/

我真的很接近實現我想要的目標。 使用以下代碼,我可以打印出數據庫中所有三元組。

sparql = SPARQL::Client.new("http://localhost:3030/ds/query")
query = sparql.select.where([:s, :p, :o]).offset(100).limit(1000)
query.each_solution do |solution|
puts solution.inspect
end

但是現在我想稍微改變一下,並為給定主題選擇所有三元組。 我以為以下方法會起作用,但不會。

sparql = SPARQL::Client.new("http://localhost:3030/ds/query")
itemname = "lectio1"    
query = sparql.select.where(["<http://scta.info/items/#{itemname}>", :p, :o]).offset(100).limit(1000)
query.each_solution do |solution|
puts solution.inspect
end

這將以簡單的SPARQL語法工作,但是用我想要查詢的文字主題將符號:s替換為某種方式是行不通的。 Sinatra給我的錯誤是:

預期主題為零或術語為"<http://scta.info/items/lectio1>"

正如您在評論中指出的那樣,

Sinatra給我的錯誤是:預期的主題是
零或一個術語是"<http://scta.info/items/lectio1>"

您正在將方法粘貼為字符串,但是期望為nil或term。 它期望的術語是RDF :: Term 在特定情況下,您需要一個URI(它是RDF :: Resource的子類,它是RDF :: Term的子類)。 您可以創建所需的參考

RDF::URI.new("http://scta.info/items/#{itemname}")

因此,您應該能夠將代碼更新為以下代碼(並根據您的導入,也許可以刪除RDF::前綴):

sparql = SPARQL::Client.new("http://localhost:3030/ds/query")
itemname = "lectio1"    
query = sparql.select.where([ RDF::URI.new("http://scta.info/items/#{itemname}"), :p, :o]).offset(100).limit(1000)
query.each_solution do |solution|
  puts solution.inspect
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM