Linked Data Content Negotiation for Sinatra Applications
This is a Sinatra extension that provides Linked Data content negotiation for Sinatra applications.
Features
- Implements HTTP content negotiation for RDF content types using
the
Rack::LinkedDatamiddleware. - Supports all RDF.rb-compatible serialization formats.
- Supports both classic and modular Sinatra applications.
Examples
Adding Linked Data content negotiation to a classic Sinatra application
#!/usr/bin/env ruby -rubygems require 'sinatra' require 'sinatra/linkeddata' get '/hello' do RDF::Graph.new do |graph| graph << [RDF::Node.new, RDF::DC.title, "Hello, world!"] end end
Adding Linked Data content negotiation to a modular Sinatra application
#!/usr/bin/env ruby -rubygems require 'sinatra/base' require 'sinatra/linkeddata' module My class Application < Sinatra::Base register Sinatra::LinkedData get '/hello' do RDF::Graph.new do |graph| graph << [RDF::Node.new, RDF::DC.title, "Hello, world!"] end end end end My::Application.run! :host => '127.0.0.1', :port => 4567
Adding Linked Data content negotiation to a Rackup application
#!/usr/bin/env rackup require 'sinatra/base' require 'sinatra/linkeddata' module My class Application < Sinatra::Base register Sinatra::LinkedData get '/hello' do RDF::Graph.new do |graph| graph << [RDF::Node.new, RDF::DC.title, "Hello, world!"] end end end end run My::Application
Testing Linked Data content negotiation using rackup and curl
$ rackup doc/examples/config.ru $ curl -iH "Accept: text/plain" http://localhost:9292/hello $ curl -iH "Accept: text/turtle" http://localhost:9292/hello $ curl -iH "Accept: application/rdf+xml" http://localhost:9292/hello $ curl -iH "Accept: application/json" http://localhost:9292/hello $ curl -iH "Accept: application/trix" http://localhost:9292/hello $ curl -iH "Accept: */*" http://localhost:9292/hello
Description
Sinatra::LinkedData is a thin Sinatra-specific wrapper around the
Rack::LinkedData middleware, which implements Linked
Data content negotiation for Rack applications.
At the moment the Sinatra extension simply corresponds to doing the following manually in a Sinatra application:
require 'rack/linkeddata' module My class Application < Sinatra::Base use Rack::LinkedData::ContentNegotiation helpers Sinatra::LinkedData::Helpers include RDF include LinkedData end end
See the Rack::LinkedData documentation for more information on the
operation and details of the content negotiation.
Documentation
http://datagraph.rubyforge.org/sinatra-linkeddata/
Dependencies
- Sinatra (>= 1.0)
- Rack::LinkedData (>= 0.2.0)
Installation
The recommended installation method is via RubyGems. To install the latest official release of the gem, do:
% [sudo] gem install sinatra-linkeddata
Download
To get a local working copy of the development repository, do:
% git clone git://github.com/datagraph/sinatra-linkeddata.git
Alternatively, you can download the latest development version as a tarball as follows:
% wget http://github.com/datagraph/sinatra-linkeddata/tarball/master
References
- http://www.w3.org/DesignIssues/LinkedData.html
- http://linkeddata.org/docs/how-to-publish
- http://linkeddata.org/conneg-303-redirect-code-samples
- http://www.w3.org/TR/cooluris/
- http://www.w3.org/TR/swbp-vocab-pub/
- http://patterns.dataincubator.org/book/publishing-patterns.html
Authors
License
Sinatra::LinkedData is free and unencumbered public domain software. For more
information, see http://unlicense.org/ or the accompanying UNLICENSE file.