Ruby on Rails SPARQL client
I'm currently working with the Ruby on Rails SPARQL client to try and retrieve information from the public SPARQL endpoint at dbpedia. The generic query I'm running is the following:
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') }
}"
It's a generic query that returns some general information about a city from dbpedia. I've tested this manually on the sparql endpoint and it retrieves the information I expect it to return. However, 开发者_如何学运维I can't seem to find a way to parse the response in Ruby on Rails.
Currently I'm trying this with RDF for Ruby and sparql-client. The code looks like this (based upon the examples I could find):
result = {}
client = SPARQL::Client.new("http://dbpedia.org/sparql")
client.query(query).first.each_binding { |name, value| result[name] << value}
result
But I'm unable to retrieve anything. When running with the debugger to step into the variables manually, it just stops as soon as the query is executed, and I can't even view the return values.
Anyone have a good example on how to execute a query against a SPARQL endpoint and parse the response?
I just tried your code (with a minor modification using = instead of <<), and it seems to work:
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
and when I run it:
$ 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)>}
Given your description it may be that you have a connection issue, or dbpedia may have been overloaded.
精彩评论