RDF::DataObjects

DataObjects-backed RDF.rb repository, aiming for a simple use case and currently targeting SQLite and Postgres.

This was written for a tutorial, and is thus a pretty naive implementation so far. RDF::DataObjects stores triples in a simple subject, predicate, object, context table. Don't try to back a big website with it yet. Nonetheless, it works, and it passes all its tests on Heroku as well.

Example:

repository = RDF::DataObjects::Repository.new "sqlite3:test.db"
repository.insert(statement)
repository.count              #=> 1
repository.delete(statement)

You can use any DataObjects compatible connection options to create a new repository, but only SQLite3 and Postgres are implemented for now. The different databases are just different enough with their handling of unique constraints that some database-specific work is required for a new adapter, but it's not much.

Installation:

The greatly preferred installation method is via RubyGems:

$ sudo gem install rdf-do

Manual downloads are available at http://github.com/bhuga/rdf-do/downloads

Ruby 1.8.6 is not supported, but the tests pass with the backports gem. Godspeed.

Connecting:

require 'do_postgres'
require 'do_sqlite3'
repo = RDF::DataObjects::Repository.new "postgres://localhost/database"
repo = RDF::DataObjects::Repository.new "sqlite3:test.db"

Using:

Your repository is a fully-functional RDF.rb RDF::Repository. As with any RDF.rb repository, this includes the mixins RDF::Enumerable, RDF::Mutable, RDF::Durable, and RDF::Queryable. Please see http://rdf.rubyforge.org/RDF/Repository.html for more information.

Example:

require 'rdf'
require 'rdf/ntriples'
require 'data_objects'
require 'do_sqlite3'
require 'rdf/do'

repo = RDF::DataObjects::Repository.new('sqlite3:test.db')
# repo = RDF::DataObjects::Repository.new 'postgres://postgres@server/database'
# heroku_repo = RDF::DataObjects::Repository.new(ENV['DATABASE_URL'])
repo.load('http://datagraph.org/jhacker/foaf.nt')

# How many statements did we have?
repo.count
#=> 10

# Get the URI of the first subject
jhacker = repo.first.subject
#=> #<RDF::URI(http://datagraph.org/jhacker/foaf)>

# Delete everything to do with it
jhacker_statements = repo.query(:subject => jhacker) 
repo.delete *jhacker_statements
repo.count
#=> 7

# with Postgres, we could have done this, but SQLite gives us a locking error:
# repo.delete(*repo.query(:subject => jhacker))

# Changed our mind--bring it back
repo.insert *jhacker_statements
repo.count
#=> 10

Developing

The main project page is on Github, at http://github.com/bhuga/rdf-do. You can get a working copy of the source tree with:

$ git clone git://github.com/bhuga/rdf-do.git

Or with:

$ wget http://github.com/bhuga/rdf-do/tarball/master

Support

The preferred method to report issues is the issue queue at http://github.com/bhuga/rdf-do/issues. You'll get the the most attention if you submit a failing test for a bug, or a pending test for a feature.

We'd also like to hear from you on the mailing list: http://lists.w3.org/Archives/Public/public-rdf-ruby

Miscellany