这个RDF.rb查询有什么问题?

时间:2013-12-08 10:34:41

标签: ruby rdf semantic-web

我正在通过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'代替上面的谓词它确实返回结果,所以我知道图表已加载好了。

我希望有人可以提供帮助。提前谢谢!

1 个答案:

答案 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