Ruby on Rails SPARQL 客户端
Posted
技术标签:
【中文标题】Ruby on Rails SPARQL 客户端【英文标题】:Ruby on Rails SPARQL client 【发布时间】:2011-11-01 18:25:16 【问题描述】:我目前正在使用 尝试从 dbpedia 上的公共 SPARQL 端点检索信息。我正在运行的通用查询如下:
query = "
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX prop: <http://dbpedia.org/property/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT * WHERE
?city prop:name 'Antwerpen'@en;
a dbo:PopulatedPlace;
dbo:abstract ?abstract .
FILTER langMatches( lang(?abstract), 'en')
OPTIONAL ?city foaf:homepage ?homepage
OPTIONAL ?city rdfs:comment ?comment .
FILTER langMatches( lang(?comment), 'en')
"
这是一个通用查询,可从 dbpedia 返回有关城市的一些通用信息。我已经在 sparql 端点上手动测试了它,它检索了我希望它返回的信息。 但是,我似乎找不到在 Ruby on Rails 中解析响应的方法。
目前我正在尝试使用 RDF for Ruby 和 sparql-client。代码如下所示(基于我能找到的示例):
result =
client = SPARQL::Client.new("http://dbpedia.org/sparql")
client.query(query).first.each_binding |name, value| result[name] << value
result
但我无法检索任何内容。使用调试器运行手动单步执行变量时,查询一执行就停止,我什至无法查看返回值。
谁有一个关于如何对 SPARQL 端点执行查询并解析响应的好例子?
【问题讨论】:
复制于answers.semanticweb.com/questions/11263/… 现在有支持 sparql 的 dbpedia gem github.com/farbenmeer/dbpedia 【参考方案1】:我刚刚尝试了您的代码(使用 = 而不是
require 'rubygems'
require 'sparql/client'
query = "
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX prop: <http://dbpedia.org/property/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT * WHERE
?city prop:name 'Antwerpen'@en;
a dbo:PopulatedPlace;
dbo:abstract ?abstract .
FILTER langMatches( lang(?abstract), 'en')
OPTIONAL ?city foaf:homepage ?homepage
OPTIONAL ?city rdfs:comment ?comment .
FILTER langMatches( lang(?comment), 'en')
"
result =
client = SPARQL::Client.new("http://dbpedia.org/sparql")
client.query(query).first.each_binding |name, value| result[name] = value
p result
当我运行它时:
$ jruby sparql.rb
:city=>#<RDF::URI:0x890(http://dbpedia.org/resource/Antwerp)>, :abstract=>#<RDF::Literal:0x892("Antwerp is a city and municipality in Belgium and the capital of the Antwerp province in Flanders, one of Belgium's three regions. Antwerp's total population is 472,071 (as of 1 January 2008) and its total area is 204.51 km, giving a population density of 2,308 inhabitants per km\u00B2. The metropolitan area, including the outer commuter zone, covers an area of 1,449 km with a total of 1,190,769 inhabitants as of 1 January 2008. The nickname of inhabitants of Antwerp is Sinjoren, after the Spanish word se\u00F1or, which means 'mister' or 'gent'. Antwerp has long been an important city in the nations of the Benelux both economically and culturally, especially before the Spanish Fury of the Dutch Revolt. It is located on the right bank of the river Scheldt, which is linked to the North Sea by the estuary Westerschelde."@en)>, :homepage=>#<RDF::URI:0x898(http://www.antwerpen.be/)>, :comment=>#<RDF::Literal:0x89a("Antwerp is a city and municipality in Belgium and the capital of the Antwerp province in Flanders, one of Belgium's three regions. Antwerp's total population is 472,071 (as of 1 January 2008) and its total area is 204.51 km, giving a population density of 2,308 inhabitants per km\u00B2. The metropolitan area, including the outer commuter zone, covers an area of 1,449 km with a total of 1,190,769 inhabitants as of 1 January 2008."@en)>
根据您的描述,可能是您遇到了连接问题,或者 dbpedia 可能已超载。
【讨论】:
我明天上班再研究一下,也许 Windows 上的 jruby 和 ruby 有区别 不太可能(尽管并非不可能)存在差异。根据我的经验,dbpedia 端点可能是不可预测的,所以我的钱就在上面。 好的,很高兴知道。 JSON 目前也在工作,所以我现在坚持使用该解决方案。以上是关于Ruby on Rails SPARQL 客户端的主要内容,如果未能解决你的问题,请参考以下文章
Ruby on Rails 为 SSL 连接正确配置法拉第 http 客户端
jquery .ajax 对 ruby on rails 服务器的 post 请求在客户端出现 JSON.parse 错误
oauth2 策略与 ruby on rails 与许多具有 API 的客户端