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::LinkedData][Rack::LinkedData]
middleware. - 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: application/n-triples" http://localhost:9292/hello
$ curl -iH "Accept: application/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][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][Rack::LinkedData]
documentation for more information on the
operation and details of the content negotiation.
Documentation
Dependencies
- Sinatra (~> 2.1)
- Rack::LinkedData (~> 3.3)
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/ruby-rdf/sinatra-linkeddata.git
Alternatively, you can download the latest development version as a tarball as follows:
% wget https://github.com/ruby-rdf/sinatra-linkeddata/tarball/master
References
- https://www.w3.org/DesignIssues/LinkedData.html
- https://linkeddata.org/docs/how-to-publish
- https://linkeddata.org/conneg-303-redirect-code-samples
- https://www.w3.org/TR/cooluris/
- https://www.w3.org/TR/swbp-vocab-pub/
- https://patterns.dataincubator.org/book/publishing-patterns.html
Authors
License
Sinatra::LinkedData
is free and unencumbered public domain software. For more
information, see https://unlicense.org/ or the accompanying UNLICENSE file.