RDF::LDP ======== [![Build Status](https://travis-ci.org/ruby-rdf/rdf-ldp.svg?branch=develop)](https://travis-ci.org/ruby-rdf/rdf-ldp) Server-side support for Linked Data Platform (LDP) with RDF.rb. To get started with LDP, see the [LDP Primer](https://dvcs.w3.org/hg/ldpwg/raw-file/default/ldp-primer/ldp-primer.html). This software ships with the following libraries: - `RDF::LDP` --- contains the domain model and behavior for LDP Resources and interaction models. - `Rack::LDP` --- a suite of Rack middleware for creating LDP servers based on `RDF::LDP`. - Lamprey --- a basic LDP server implemented with `Rack::LDP`. Lamprey ======= Lamprey is a basic LDP server. To start it, use: ```sh $ gem install rdf-ldp $ lamprey ``` Lamprey currently uses an in-memory repository, and is therefore not a persistent datastore out of the box. Backends are swappable, using any `RDF::Repository` implementation with named graph (`#context`) support. We are working to complete a recommended, default backend and introduce startup configuration. See [/CONSTRAINED_BY.md](/CONSTRAINED_BY.md) and [/IMPLEMENTATION.md](/IMPLEMENTATION.md) for details. An `ldp:BasicContainer` will be created at the address of your first `GET` request if the backend store is empty. _Note that if that request is made to the server root, Sinatra will assume a trailing slash_. You can also create an initial container (or other resource) with HTTP `PUT`. ```bash $ curl -i http://localhost:4567 HTTP/1.1 200 OK Content-Type: text/turtle Link: ;rel="type",;rel="type",;rel="type" Allow: GET, POST, PUT, DELETE, OPTIONS, HEAD Accept-Post: application/n-triples, text/plain, application/n-quads, text/x-nquads, application/ld+json, application/x-ld+json, application/rdf+json, text/html, text/n3, text/rdf+n3, application/rdf+n3, application/rdf+xml, text/csv, text/tab-separated-values, application/csvm+json, text/turtle, text/rdf+turtle, application/turtle, application/x-turtle, application/trig, application/x-trig, application/trix Etag: "1B2M2Y8AsgTpgAmY7PhCfg==0" Vary: Accept X-Content-Type-Options: nosniff Server: WEBrick/1.3.1 (Ruby/2.1.0/2013-12-25) Date: Mon, 27 Jul 2015 23:19:06 GMT Content-Length: 0 Connection: Keep-Alive ``` Rack::LDP ========== Setting up a Custom Server -------------------------- You can quickly create your own server with any framework supporting [Rack](https://github.com/rack/). The simplest way to do this is with [Rackup](https://github.com/rack/rack/wiki/(tutorial)-rackup-howto). ```ruby # ./config.ru require 'rack/ldp' use Rack::LDP::ContentNegotiation use Rack::LDP::Errors use Rack::LDP::Responses use Rack::LDP::Requests # Setup a repository and an initial container: # # - You probably want some persistent repository implementation. The example # uses an in-memory repository. # - You may not need an initial "base" container, if you handle create on PUT # requests. # repository = RDF::Repository.new RDF::LDP::Container.new(RDF::URI('http://localhost:9292/'), repository) .create('', 'text/plain') if repository.empty? app = proc do |env| # Return a Rack response, giving an `RDF::LDP::Resource`-like object as the body. # The `Rack::LDP` middleware marhsalls the request to the resource, builds the response, # and handles conneg for RDF serializations (when the body is an `RDF::LDP::RDFSource`). # # @see http://www.rubydoc.info/github/rack/rack/master/file/SPEC#The_Response [200, {}, RDF::LDP::Resource.find(RDF::URI(env['REQUEST_URI']), repository)] end run app ``` And run your server with: ```sh $ rackup ``` Compliance ---------- Current compliance reports for Lamprey are located in [/reports](reports/). Reports are generated by the LDP test suite. To duplicate the results, use the `testsuite` branch, which contains a work-around for [w3c/ldp-testsuite#224](https://github.com/w3c/ldp-testsuite/issues/224). RDF.rb 1.x Compatibility -------------------------- As of version 0.6.0, this software depends on RDF.rb 2.0 or greater. Support for Ruby RDF version 1.99 will be maintained to the degree possible on the 0.5.x release series. Users are encouraged to upgrade their projects to 2.0 to take advantage of the latest development. License ======== This software is released under a public domain waiver (Unlicense).