Ruby on Rails SPARQL Client

I am currently working with the SPARQL Ruby on Rails client to try to get information from the SPARQL open endpoint in dbpedia. The general query that I run 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') } }" 

This is a general query that returns some general city information from dbpedia. I checked it manually on the sparql endpoint and it receives the information that I expect it to return. However, I cannot find a way to parse the answer in Ruby on Rails.

I am currently trying to use RDF for Ruby and sparql-client . The code looks like this (based on 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 can’t get anything. When working with the debugger to manually enter variables, it just stops as soon as the query is executed, and I can’t even look at the return values.

Does anyone have a good example of how to execute a query with an SPARQL endpoint and parse the answer?

+4
source share
1 answer

I just tried my code (with 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 ran 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 three regions. Antwerp 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 three regions. Antwerp 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)>} 

Based on your description, a connection problem may occur, or dbpedia may be overloaded.

+4
source

All Articles