odrl-ruby 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +46 -14
- data/examples/builder-translator-output.ttl +0 -0
- data/examples/output.ttl +47 -0
- data/lib/odrl/action.rb +29 -1
- data/lib/odrl/asset.rb +5 -0
- data/lib/odrl/base.rb +9 -6
- data/lib/odrl/odrl/version.rb +1 -1
- metadata +3 -2
- data/testme.rb +0 -28
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e96a449f1af06d063a0a7e7f60b9fe1785c150a5370774336b5967b049b98a5b
|
4
|
+
data.tar.gz: 9e4e6b649170abea6f73afe667e7f9368a713d8cfaf81b08bfa76c31ac6b2c9e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d85cc899a5b73c9a1e48d0df3b1e87eca4e7a2d711c074a6988cec7b58570d3c09b9f21dd3fe7f2b72fa432efefe25885d64e901d7bd0835f8d4176f4e025f65
|
7
|
+
data.tar.gz: 4b6538ebe4be2c357da2b5ea41d2ca4db21b3e61e7413ebba5bbdd75cd4642854d1936f2d43201e138d80906b793dc19b7bcd3ba458ee8f724428efc887fd221
|
data/README.md
CHANGED
@@ -1,10 +1,8 @@
|
|
1
|
-
# THIS IS
|
1
|
+
# THIS IS BARELY READY FOR USE! DON'T EXPECT MIRACLES
|
2
2
|
|
3
3
|
# ODRL::Ruby
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
TODO: Delete this and the text above, and describe your gem
|
5
|
+
This is a gem to build ODRL records, and serialize them
|
8
6
|
|
9
7
|
## Installation
|
10
8
|
|
@@ -24,17 +22,51 @@ Or install it yourself as:
|
|
24
22
|
|
25
23
|
## Usage
|
26
24
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
25
|
+
```
|
26
|
+
require 'odrl/ruby'
|
27
|
+
|
28
|
+
# an offer to toshiaki from mark to use the polyA resource during the biohackathon
|
29
|
+
|
30
|
+
# core annotatons are: :title, :creator, :description, :subject :baseURI, :uid, :type
|
31
|
+
policy = ODRL::Offer.new(
|
32
|
+
title: "Offer to Toshiaki-san",
|
33
|
+
creator: "https://orcid.org/0000-0001-6960-357X",
|
34
|
+
description: "An offer for Toshiaki-san to use the polyA data during the hackathon",
|
35
|
+
subject: "collaboration", # this is the CCE category - useful for EJP-RD ONLYU
|
36
|
+
)
|
37
|
+
|
38
|
+
asset = ODRL::Asset.new(uid: "http://mark.wilkinson.org/data/polyA", title: "Mark's PolyA Database")
|
39
|
+
|
40
|
+
# you indicate the type of party by assigning the predicate (either assigner or assignee)
|
41
|
+
# ODRLV is the RDF::Vocabulary for ODRL, exported to this namespace
|
42
|
+
mark = ODRL::Party.new(uid: "https://orcid.org/0000-0001-6960-357X", predicate: ODRLV.assigner, title: "Mark D Wilkinson" )
|
43
|
+
toshiaki = ODRL::Party.new(uid: "https://orcid.org/0000-0003-2391-0384", predicate: ODRLV.assignee, title: "Toshiaki Katayama")
|
44
|
+
|
45
|
+
# Rules
|
46
|
+
permission = ODRL::Permission.new(title: "Permission to use")
|
47
|
+
|
48
|
+
use = ODRL::Use.new(value: "use") # subclass of ODRL::Action
|
49
|
+
|
50
|
+
# Constraints: :uid, :rightOperand, :leftOperand, :operator, :rightOperandReference, :dataType, :unit, :status
|
51
|
+
constraint = ODRL::Constraint.new(
|
52
|
+
title: "Only during the hackathon",
|
53
|
+
leftOperand: "event",
|
54
|
+
operator: "eq",
|
55
|
+
rightOperand: "https://2023.biohackathon.org"
|
56
|
+
)
|
57
|
+
permission.addConstraint(constraint: constraint)
|
58
|
+
permission.addAsset(asset: asset)
|
59
|
+
permission.addAssigner(party: toshiaki)
|
60
|
+
permission.addAssignee(party: mark)
|
61
|
+
permission.addAction(action: use)
|
62
|
+
|
63
|
+
policy.addPermission(rule: permission)
|
64
|
+
|
65
|
+
policy.load_graph # this brings the triples into memory, cascading down all objects conneted to "policuy"
|
66
|
+
result = policy.serialize(format: 'turtle') # get the RDF string
|
67
|
+
puts result
|
68
|
+
```
|
36
69
|
|
37
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/odrl-ruby.
|
38
70
|
|
39
71
|
## License
|
40
72
|
|
File without changes
|
data/examples/output.ttl
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
|
2
|
+
|
3
|
+
<http://example.org#action_68785487525736>
|
4
|
+
<http://purl.org/dc/terms/identifier> <http://example.org#action_68785487525736> ;
|
5
|
+
a <http://www.w3.org/ns/odrl/2/Action> .
|
6
|
+
|
7
|
+
<http://example.org#constraint_68785487525880>
|
8
|
+
<http://purl.org/dc/terms/identifier> <http://example.org#constraint_68785487525880> ;
|
9
|
+
<http://purl.org/dc/terms/title> "Only during the hackathon"@en ;
|
10
|
+
a <http://www.w3.org/ns/odrl/2/Constraint> ;
|
11
|
+
<http://www.w3.org/ns/odrl/2/leftOperand> <http://www.w3.org/ns/odrl/2/event> ;
|
12
|
+
<http://www.w3.org/ns/odrl/2/operator> <http://www.w3.org/ns/odrl/2/eq> ;
|
13
|
+
<http://www.w3.org/ns/odrl/2/rightOperand> <https://2023.biohackathon.org> .
|
14
|
+
|
15
|
+
<http://example.org#policy_68785487446247>
|
16
|
+
<http://purl.org/dc/terms/creator> <https://orcid.org/0000-0001-6960-357X> ;
|
17
|
+
<http://purl.org/dc/terms/description> "An offer for Toshiaki-san to use the polyA data during the hackathon"@en ;
|
18
|
+
<http://purl.org/dc/terms/identifier> <http://example.org#policy_68785487446247> ;
|
19
|
+
<http://purl.org/dc/terms/subject> "collaboration"@en ;
|
20
|
+
<http://purl.org/dc/terms/title> "Offer to Toshiaki-san"@en ;
|
21
|
+
a <http://www.w3.org/ns/odrl/2/Offer> ;
|
22
|
+
<http://www.w3.org/ns/odrl/2/permission> <http://example.org#rule_68785487525598> .
|
23
|
+
|
24
|
+
<http://example.org#rule_68785487525598>
|
25
|
+
<http://purl.org/dc/terms/identifier> <http://example.org#rule_68785487525598> ;
|
26
|
+
<http://purl.org/dc/terms/title> "Permission to use"@en ;
|
27
|
+
a <http://www.w3.org/ns/odrl/2/Permission> ;
|
28
|
+
<http://www.w3.org/ns/odrl/2/action> <http://example.org#action_68785487525736> ;
|
29
|
+
<http://www.w3.org/ns/odrl/2/assignee> <https://orcid.org/0000-0001-6960-357X> ;
|
30
|
+
<http://www.w3.org/ns/odrl/2/assigner> <https://orcid.org/0000-0003-2391-0384> ;
|
31
|
+
<http://www.w3.org/ns/odrl/2/constraint> <http://example.org#constraint_68785487525880> ;
|
32
|
+
<http://www.w3.org/ns/odrl/2/target> <http://mark.wilkinson.org/data/polyA> .
|
33
|
+
|
34
|
+
<http://mark.wilkinson.org/data/polyA>
|
35
|
+
<http://purl.org/dc/terms/identifier> <http://mark.wilkinson.org/data/polyA> ;
|
36
|
+
<http://purl.org/dc/terms/title> "Mark's PolyA Database"@en ;
|
37
|
+
a <http://www.w3.org/ns/odrl/2/Asset> .
|
38
|
+
|
39
|
+
<https://orcid.org/0000-0001-6960-357X>
|
40
|
+
<http://purl.org/dc/terms/identifier> <https://orcid.org/0000-0001-6960-357X> ;
|
41
|
+
<http://purl.org/dc/terms/title> "Mark D Wilkinson"@en ;
|
42
|
+
a <http://www.w3.org/ns/odrl/2/Party> .
|
43
|
+
|
44
|
+
<https://orcid.org/0000-0003-2391-0384>
|
45
|
+
<http://purl.org/dc/terms/identifier> <https://orcid.org/0000-0003-2391-0384> ;
|
46
|
+
<http://purl.org/dc/terms/title> "Toshiaki Katayama"@en ;
|
47
|
+
a <http://www.w3.org/ns/odrl/2/Party> .
|
data/lib/odrl/action.rb
CHANGED
@@ -3,7 +3,24 @@
|
|
3
3
|
module ODRL
|
4
4
|
|
5
5
|
class Action < Base
|
6
|
+
# ODRL::Action
|
7
|
+
# Describes an action like "use"
|
8
|
+
#
|
9
|
+
# @author Mark D Wilkinson
|
10
|
+
# @attr [URI] (optional) uid the URI of the Action node
|
11
|
+
# @attr [[ODRL::Refinement]] (optional) ODRL Refinement objects
|
12
|
+
# @attr [URI] predicate (optional) the predicate you wish to use with this action
|
13
|
+
# @attr [string] value (required) a string like "use"
|
14
|
+
# @attr [string] vallabel (optional) a string like "use"
|
15
|
+
|
6
16
|
attr_accessor :uid, :refinements, :predicate, :type, :value, :vallabel
|
17
|
+
|
18
|
+
|
19
|
+
# constructor
|
20
|
+
# @param [Hash] opts the options to create a message with.
|
21
|
+
# @option :value the string value of rthe action, like "use"
|
22
|
+
# @option :vallabel the string for the label, like "use"
|
23
|
+
#
|
7
24
|
def initialize(args)
|
8
25
|
@value = args[:value]
|
9
26
|
@vallabel = args[:value]
|
@@ -31,6 +48,10 @@ module ODRL
|
|
31
48
|
|
32
49
|
end
|
33
50
|
|
51
|
+
# Adds an ODRL Refinement
|
52
|
+
#
|
53
|
+
# @param refinement [ODRL::Refinement] the refinement to the action
|
54
|
+
#
|
34
55
|
def addRefinement(refinement: args)
|
35
56
|
unless refinement.is_a?(Constraint)
|
36
57
|
raise "Refinement is not an ODRL Constraint"
|
@@ -40,6 +61,9 @@ module ODRL
|
|
40
61
|
end
|
41
62
|
|
42
63
|
|
64
|
+
# Causes the triples of this object to be formed in the in-memory store
|
65
|
+
# This includes any "cascading" objects for which this is the subject of the triple
|
66
|
+
#
|
43
67
|
def load_graph
|
44
68
|
super
|
45
69
|
# TODO This is bad DRY!! Put the bulk of this method into the base object
|
@@ -65,7 +89,11 @@ module ODRL
|
|
65
89
|
triplify(subject, predicate, object, repo)
|
66
90
|
end
|
67
91
|
|
68
|
-
|
92
|
+
# Returns the serialized RDF for this object and cascading related objects
|
93
|
+
#
|
94
|
+
# @param format [Symbol] a valid RDF::Writer format (e.g. :turtle)
|
95
|
+
#
|
96
|
+
def serialize(format:)
|
69
97
|
super
|
70
98
|
end
|
71
99
|
|
data/lib/odrl/asset.rb
CHANGED
data/lib/odrl/base.rb
CHANGED
@@ -49,10 +49,11 @@ PROPERTIES = {
|
|
49
49
|
title: DCT.title,
|
50
50
|
creator: DCT.creator,
|
51
51
|
description: DCT.description,
|
52
|
-
|
52
|
+
id: DCT.identifier,
|
53
53
|
type: RDF.type,
|
54
|
-
subject: DCT.subject
|
55
|
-
|
54
|
+
subject: DCT.subject,
|
55
|
+
uid: ODRLV.uid,
|
56
|
+
label: RDFS.label,
|
56
57
|
}
|
57
58
|
|
58
59
|
module ODRL
|
@@ -60,7 +61,7 @@ module ODRL
|
|
60
61
|
|
61
62
|
@@repository = RDF::Repository.new()
|
62
63
|
|
63
|
-
attr_accessor :title, :creator, :description, :subject, :baseURI, :uid, :type
|
64
|
+
attr_accessor :title, :creator, :description, :subject, :baseURI, :uid, :id, :type, :label
|
64
65
|
|
65
66
|
def self.baseURI
|
66
67
|
return ENV['ODRL_BASEURI'] || "http://example.org"
|
@@ -88,6 +89,8 @@ module ODRL
|
|
88
89
|
@baseURI = args[:baseURI] || self.baseURI
|
89
90
|
@uid = args[:uid]
|
90
91
|
@type = args[:type]
|
92
|
+
@label = args[:label] || @title
|
93
|
+
@id = args[:uid] || nil
|
91
94
|
#@repository = RDF::Repository.new() unless self.repository
|
92
95
|
|
93
96
|
raise "Every object must have a uid - attempt to create #{@type}" unless @uid
|
@@ -171,12 +174,12 @@ module ODRL
|
|
171
174
|
end
|
172
175
|
|
173
176
|
def load_graph
|
174
|
-
[:title, :creator, :description, :subject, :uid, :type].each do |method|
|
177
|
+
[:title, :label, :creator, :description, :subject, :uid, :type].each do |method|
|
175
178
|
next unless self.send(method)
|
176
179
|
next if self.send(method).empty?
|
177
180
|
subject = self.uid
|
178
181
|
predicate = PROPERTIES[method]
|
179
|
-
#warn "prediate #{predicate} for method #{method}"
|
182
|
+
# warn "prediate #{predicate} for method #{method}"
|
180
183
|
object = self.send(method)
|
181
184
|
repo = self.repository
|
182
185
|
triplify(subject, predicate, object, repo)
|
data/lib/odrl/odrl/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: odrl-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mark Wilkinson
|
@@ -26,7 +26,9 @@ files:
|
|
26
26
|
- Rakefile
|
27
27
|
- bin/console
|
28
28
|
- bin/setup
|
29
|
+
- examples/builder-translator-output.ttl
|
29
30
|
- examples/create-biohackathon-offer.rb
|
31
|
+
- examples/output.ttl
|
30
32
|
- launch.json
|
31
33
|
- lib/odrl/action.rb
|
32
34
|
- lib/odrl/asset.rb
|
@@ -37,7 +39,6 @@ files:
|
|
37
39
|
- lib/odrl/policy.rb
|
38
40
|
- lib/odrl/ruby.rb
|
39
41
|
- lib/odrl/rule.rb
|
40
|
-
- testme.rb
|
41
42
|
homepage: https://example.org
|
42
43
|
licenses:
|
43
44
|
- MIT
|
data/testme.rb
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
require_relative "./lib/odrl/policy.rb"
|
2
|
-
require_relative "./lib/odrl/rule.rb"
|
3
|
-
require_relative "./lib/odrl/base.rb"
|
4
|
-
require_relative "./lib/odrl/asset.rb"
|
5
|
-
require_relative "./lib/odrl/constraint.rb"
|
6
|
-
|
7
|
-
|
8
|
-
t = ODRL::Policy.new(
|
9
|
-
title: "this",
|
10
|
-
author: "mark",
|
11
|
-
baseURI: "http://adsjfhalsdjfasdh",
|
12
|
-
|
13
|
-
)
|
14
|
-
|
15
|
-
pro = ODRL::Prohibition.new({})
|
16
|
-
# puts t.methods
|
17
|
-
# abort
|
18
|
-
# t.addProhibition(rule: pro)
|
19
|
-
# puts t.rules.length
|
20
|
-
# puts t.rules[t.rules.keys.first][1].inspect
|
21
|
-
# puts t.rules[t.rules.keys.first][1].class.to_s == "ODRL::Prohibition"
|
22
|
-
|
23
|
-
#p t.inspect
|
24
|
-
c1 = ODRL::Constraint.new({})
|
25
|
-
#p c1.inspect
|
26
|
-
c2 = ODRL::Constraint.new({})
|
27
|
-
d = ODRL::Duty.new({constraints: c1})
|
28
|
-
puts d.inspect
|