ActiveRDF + DBPedia + Ruby on Rails

This article show how to use ActiveRDF in Ruby on Rails to write queries for DBPedia. DBPedia is the semantic version of WikiPedia. Basically the whole knowledge in Wikipedia is available in DBPedia over RDF (Resource Definition Framework). There is a query language for RDF called SPARQL. With SPARQL and RDF you can write queries and fetch data from DBPedia/Wikipedia.

That is pretty awesome. You can see DBPedia/Wikipedia as a big Database or Knowledge base.

ActiveRDF is a Ruby GEM to use RDF in Ruby. To use it in Rails you have to add this two lines to your Gemfile

gem 'activerdf'
gem 'activerdf_sparql'

In you application.rb file you have to add this line pretty much in the top.

require 'active_rdf'

In the same file, in the class part you have to configure the connection pool for RDF.


module TrophicWeb
  class Application < Rails::Application

  adapter = ConnectionPool.add_data_source(:type => :sparql, :results => :sparql_xml, :engine => :virtuoso, :url ="http://dbpedia.org/sparql")
  adapter.enabled = true
  Namespace.register(:dbpedia, "http://dbpedia.org/ontology/")

That’s it for the initialization. Now you can use it in your code. Here is an example how to fetch a species and the corresponding thumbnail uri.

species = RDFS::Resource.new("http://dbpedia.org/resource/Symphurus")
thumbnail = species.dbpedia::thumbnail.uri

Thats it.

ActiveRdfError: cannot execute query without data sources

I am playing around with LinkedData, RDF and SPARQL. That are the basics of the semantic web, the web 3.0.  ActiveRDF is a Ruby Framework for accessing LinkedData in a object oriented way. It is pretty cool. I installed the GEM on my MacBook Air:

gem install activerdf

And I installed the SPARQL Adapter:

gem install acitverdf_sparql

I started the ruby console to try the example from the front page of ActiveRDF. And I got this Exception:

ActiveRdfError: cannot execute query without data sources

The example from the ActiveRDF page does not work for me. I had to add one more line to make it work:

adapter.enabled = true

The full modified example is here:

require 'active_rdf'

adapter = ConnectionPool.add_data_source(:type => :sparql, :results => :sparql_xml, :engine => :virtuoso, :url => "http://dbpedia.org/sparql")
adapter.enabled = true
Namespace.register(:dbpedia, "http://dbpedia.org/ontology/")
tj = RDFS::Resource.new("http://dbpedia.org/resource/Thomas_Jefferson")
tj.dbpedia::birthPlace
tj.dbpedia::deathDate

query = Query.new.distinct(:o).where(tj, RDF::type, :o)
query.execute

This is working fine for me.