Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

odrl-ruby

Package Overview
Dependencies
Maintainers
2
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

odrl-ruby

  • 0.2.4
  • Rubygems
  • Socket score

Version published
Maintainers
2
Created
Source

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.

FAQs

Package last updated on 13 Jun 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc