ActiveFedora library supporting RELS-INT datastreams
Ruby
Pull request Compare This branch is even with cul:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
config
doc
fixtures
lib
spec
.gitignore
.travis.yml
CONTRIBUTING.md
Gemfile
LICENSE.txt
README.textile
Rakefile
active_fedora_relsint.gemspec

README.textile

ActiveFedora::RelsInt

A mixin for ActiveFedora to allow use and updating of the RELS-INT datastream.

RELS-INT is similar to RELS-EXT: A shallow (depth = 1) XML serialization of a RDF graph.
However, the subjects of triples in the RELS-INT graph are an object’s datastreams.

For example, consider a Fedora object with a PID of ‘test:1’ that hold a TIFF image in a datastream called ‘content’.
You may add various derivative images in additional datastreams, but feel that relying on encoded
datastream IDs is too fragile an approach to indicating their relationship to ‘content’. You may
indicate these relationships in a RELS-INT like the below:

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
  <rdf:Description rdf:about="info:fedora/test:1/content">
    <pixelXDimension xmlns="http://www.kanzaki.com/ns/exif#">2400</pixelXDimension>
    <pixelYDimension xmlns="http://www.kanzaki.com/ns/exif#">1600</pixelYDimension>
    <thumbnail xmlns="http://xmlns.com/foaf/0.1/" rdf:resource="info:fedora/test:1/ds1" />
  </rdf:Description>
  <rdf:Description rdf:about="info:fedora/test:1/ds1">
  <pixelXDimension xmlns="http://www.kanzaki.com/ns/exif#">150</pixelXDimension>
  <pixelYDimension xmlns="http://www.kanzaki.com/ns/exif#">100</pixelYDimension>
  </rdf:Description>
  <rdf:Description rdf:about="info:fedora/test:1/ds2">
  <pixelXDimension xmlns="http://www.kanzaki.com/ns/exif#">1500</pixelXDimension>
  <pixelYDimension xmlns="http://www.kanzaki.com/ns/exif#">1000</pixelYDimension>
  </rdf:Description>
</rdf:RDF>

Then with a supporting ActiveFedora model:

class GenericImage < ActiveFedora::Base
  include ActiveFedora::RelsInt
end

You can identify the thumbnail image by querying the RELS-INT graph:

my_obj = GenericImage.find('test:1')
statement = my_obj.rels_int.relationships(my_obj.datastreams['content'],"http://xmlns.com/foaf/0.1/thumbnail").first
unless statement.nil?
  dsid = statement.object.to_s.split('/')[-1] # this will be a RDF::Statement
  thumb_ds = my_obj.datastreams[dsid]
end

You can also add or delete statements to the RELS-INT graph as tested in spec/unit/relsint_spec.rb

Note that the RELS-INT datastream is not able to monitor the object, so datastream deletions would require a seperate removal of the deleted datastreams subgraph in RELS-INT.