Skip to content

markwilkinson/ODRL-RUBY

Repository files navigation

ODRL::Ruby

This is a gem to build ODRL records, and serialize them. Does not cover the full ODRL model (yet!)

Installation

Add this line to your application's Gemfile:

gem 'odrl-ruby'

And then execute:

$ bundle install

Or install it yourself as:

$ gem install odrl-ruby

Usage

Two functionalities: Build ODRL Policies; Build ODRL Profiles to extend the core ODRL vocabulary

Build Policy:

require 'odrl/ruby'

# an offer to toshiaki from mark to use the polyA resource during the biohackathon

# core annotatons are:  :title, :creator, :description, :subject :baseURI, :uid, :type
policy = ODRL::Offer.new(
    title: "Offer to Toshiaki-san",
    creator: "https://orcid.org/0000-0001-6960-357X",
    description: "An offer for Toshiaki-san to use the polyA data during the hackathon",
    subject: "collaboration", # this is the CCE category - useful for EJP-RD ONLYU
)

asset = ODRL::Asset.new(uid: "http://mark.wilkinson.org/data/polyA", title: "Mark's PolyA Database")

# you indicate the type of party by assigning the predicate (either assigner or assignee)
# ODRLV is the RDF::Vocabulary for ODRL, exported to this namespace
mark = ODRL::Party.new(uid: "https://orcid.org/0000-0001-6960-357X", predicate: ODRLV.assigner, title: "Mark D Wilkinson" )
toshiaki = ODRL::Party.new(uid: "https://orcid.org/0000-0003-2391-0384", predicate: ODRLV.assignee, title: "Toshiaki Katayama")

# Rules
permission = ODRL::Permission.new(title: "Permission to use")

use = ODRL::Use.new(value: "use") # subclass of ODRL::Action

# Constraints: :uid, :rightOperand, :leftOperand, :operator, :rightOperandReference, :dataType, :unit, :status
constraint = ODRL::Constraint.new(
    title: "Only during the hackathon",
    leftOperand: "event",
    operator: "eq",
    rightOperand: "https://2023.biohackathon.org"
)
permission.addConstraint(constraint: constraint)
permission.addAsset(asset: asset)
permission.addAssigner(party: toshiaki)
permission.addAssignee(party: mark)
permission.addAction(action: use)

policy.addPermission(rule: permission)

policy.load_graph  # this brings the triples into memory, cascading down all objects conneted to "policuy"
result = policy.serialize(format: 'turtle')  # get the RDF string
puts result

Build Profile:

require 'odrl/profile/builder'

p = ODRL::Profile::Builder.new(
    uri: "https://example.org/myprofiles/grp",
    title: "ODRL Profile for Germplasm resources",
    description: "There are some properties and comparisons that only make sense in the Germplasm expert domain",
    authors: ["Mark D Wilkinson"],
    version: 0.1,
    license: "https://creativecommons.org/licenses/by/4.0/"
)

p.asset_relations << ODRL::Profile::AssetRelation.new(
    uri: "https://example.org/myprofiles/grp#nagoya_permission",
    label: "Permission under Nagoya protocol",
    definition: "Permission is a special thing in the Nagoya protocol")


p.party_functional_roles << ODRL::Profile::PartyFunction.new(
    uri: "https://example.org/myprofiles/grp#nagoya_assigner",
    label: "Assigner with Nagoya authority to assign",
    definition: "Assigners have special responsibilities in the Nagoya protocol")

p.actions << ODRL::Profile::Action.new(
    uri: "https://example.org/myprofiles/grp#nagoya_propogate",
    label: "Plant and Harvest",
    definition: "the action of planting and harvesting the seed",
    included_in: ODRLV.use,
    implies: ODRLV.distribute)


p.leftOperands << ODRL::Profile::LeftOperand.new(
    uri: "https://example.org/myprofiles/grp#at_risk_species",
    label: "At Risk Species",
    definition: "A species that has been flagged as at-risk of extinction")

p.rightOperands << ODRL::Profile::RightOperand.new(
    uri: "https://example.org/myprofiles/grp#on_watchlist",
    label: "On Watchlist",
    definition: "A species whose risk of extinction is on a watchlist")

p.operators << ODRL::Profile::Operator.new(
    uri: "https://example.org/myprofiles/grp#within_risk_boundary",
    label: "Within Bounds",
    definition: "comparison of risk boundaries")


p.build()
puts p.serialize

License

The gem is available as open source under the terms of the MIT License.

About

Code to support building ODRL records

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published