# IqRdf - RDF Renderering for Ruby and Rails IqRdf is a RDF renderer for Ruby and Rails. You can use it in any Ruby environment to render Trurtle-, N-Triple- (not implemented jet) or XML-RDF. IqRdf underlays a [Builder](http://builder.rubyforge.org/)-like approach to specify the RDF-Data by using a internal Ruby DSL. The basic Idea for specifing a triple (subject, predicate, object) is that the predicate is a method call on the subject with the object as parameters: ```ruby IqRdf::some_subject.some_predicate(IqRdf::some_object) ``` The IqRdf namespaces are needed not to mess up the rest of your project due to the heavy use of method_missing in the IqRdf-Library. See the IqRdf::use method for Ruby 1.9 to omit the `IqRdf::` prefix. ## Ruby example You can use IqRdf in pure Ruby to produce Strings in a certain RDF Syntax like Turtle or XML: ```ruby require 'IqRdf' document = IqRdf::Document.new('http://www.test.de/') document.namespaces :skos => 'http://www.w3.org/2008/05/skos#', :foaf => 'http://xmlns.com/foaf/0.1/' # A :rdf namespace is added automatically document << IqRdf::john_doe.myCustomNote("This is an example", :lang => :en) # Turtle: :john_doe :myCustomNote "This is an example"@en. document << IqRdf::john_doe(IqRdf::Foaf::build_uri("Person")).Foaf::name("John Doe") # Turtle: :john_doe a foaf:Person; foaf:name "John Doe". document << IqRdf::john_doe.Foaf::knows(IqRdf::jane_doe) # Turtle: :john_doe foaf:knows :jane_doe. document.to_turtle # => "@prefix : <http://www.test.de/>. ..." ``` ## Rails example Include IqRdf to your Ruby on Rails project by adding the following line to your Gemfile (or with Rails 2.x in your config/environment.rb): ```ruby gem "iq_rdf" ``` Add the mime types you want to support to your config/initializers/mime_types.rb file: ```ruby Mime::Type.register "application/rdf+xml", :rdf Mime::Type.register "text/turtle", :ttl Mime::Type.register "application/n-triples", :nt ``` Now you can define views in you application. Use the extension *.iqrdf* for the view files. You can use the extensions *.ttl* or *.rdf* in the URL of your request, to force the output to be in Turtle or XML/RDF. ### Views In your views IqRdf gives you a *document* object you can add your triples to. But first you will have to define your namespaces and the global language if you want to label all String literals in a certain language (as long as there is no other language or `:none` given). ```ruby document.namespaces :default => 'http://data.example.com/', :foaf => 'http://xmlns.com/foaf/0.1/' document.lang = :en document << IqRdf::test_subject.test_predicate("test") # Turtle: :test_subject :test_predicate "test"@en. document << IqRdf::test_subject.test_predicate("test", :lang => :de) # Turtle: :test_subject :test_predicate "test"@de. document << IqRdf::test_subject.test_predicate("test", :lang => :none) # Turtle: :test_subject :test_predicate "test". # ... ``` Use the namespace token `:default` to mark the default namespace. This has the same effect as specifing the default namespace in `IqRdf::Document.new`. ## Complex RDF definitions TODO Copyright (c) 2011 innoQ Deutschland GmbH, released under the Apache License 2.0