我正在通过RDF.rb ruby库学习rdf。我能够将以下龟文件加载到图表中:
# filename: ex002.ttl
@prefix ab: <http://learningsparql.com/ns/addressbook#> .
ab:richard ab:homeTel "(229) 276-5135" .
ab:richard ab:email "richard49@hotmail.com" .
ab:cindy ab:homeTel "(245) 646-5488" .
ab:cindy ab:email "cindym@gmail.com" .
ab:craig ab:homeTel "(194) 966-1505" .
ab:craig ab:email "craigellis@yahoo.com" .
ab:craig ab:email "c.ellis@usairwaysgroup.com" .
但是当我尝试使用#homeTel提取所有三元组时,使用查询,我根本得不到任何结果。我不确定我是否对查询应该如何工作有一个基本的误解,或者我是否对RDF.rb如何工作有误解,因为我对这一切都是新手!
这是红宝石代码:
require 'rdf'
require 'rdf/ntriples'
require 'rdf/raptor'
graph = RDF::Graph.load("../data/ex002.ttl")
query = RDF::Query.new do
pattern [:person, RDF::URI("http://learningsparql.com/ns/addressbook/#homeTel"), :o]
end
response = query.execute(graph)
puts "response: #{response.to_s}" # gives me an empty result
我尝试了各种代表谓词的替代方法,包括一个带有完整uri的普通字符串,以及“ab:homeTel和一个RDF ::词汇表。如果我只是用':p'代替上面的谓词它确实返回结果,所以我知道图表已加载好了。
我希望有人可以提供帮助。提前谢谢!
答案 0 :(得分:0)
数据中的前缀是
@prefix ab: <http://learningsparql.com/ns/addressbook#> .
这意味着ab:homeTel
是IRI
http://learningsparql.com/ns/addressbook#homeTel
但是,在您的查询中,您使用的是其他IRI:
RDF::URI("http://learningsparql.com/ns/addressbook/#homeTel")
# ^
# |
# get rid of this slash