odrl-ruby 0.1.4 → 0.2.0
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/.rubocop.yml +5 -2
- data/Gemfile +1 -2
- data/Gemfile.lock +98 -84
- data/README.md +1 -3
- data/examples/build_profile.rb +47 -0
- data/examples/create-nagoya-es-offer.rb +54 -0
- data/examples/nagoya-output.ttl +66 -0
- data/lib/odrl/action.rb +91 -99
- data/lib/odrl/asset.rb +63 -76
- data/lib/odrl/base.rb +192 -178
- data/lib/odrl/constraint.rb +95 -89
- data/lib/odrl/odrl/version.rb +1 -1
- data/lib/odrl/party.rb +75 -84
- data/lib/odrl/policy.rb +80 -68
- data/lib/odrl/profile/builder.rb +185 -0
- data/lib/odrl/ruby.rb +12 -13
- data/lib/odrl/rule.rb +89 -101
- metadata +11 -5
- data/examples/builder-translator-output.ttl +0 -0
- /data/examples/{output.ttl → biohackathon-output.ttl} +0 -0
data/lib/odrl/action.rb
CHANGED
@@ -1,114 +1,106 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module ODRL
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
args[:refinements].each do |c|
|
42
|
-
self.addRefinement(refinement: c)
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
self.predicate = PACTION unless self.predicate
|
47
|
-
|
4
|
+
# ODRL::Action
|
5
|
+
# Describes an action like "use"
|
6
|
+
#
|
7
|
+
# @author Mark D Wilkinson
|
8
|
+
# @attr [URI] (optional) uid the URI of the Action node
|
9
|
+
# @attr [[ODRL::Refinement]] (optional) ODRL Refinement objects
|
10
|
+
# @attr [URI] predicate (optional) the predicate you wish to use with this action
|
11
|
+
# @attr [string] value (required) a string like "use"
|
12
|
+
# @attr [string] vallabel (optional) a string like "use"
|
13
|
+
class Action < Base
|
14
|
+
attr_accessor :uid, :refinements, :predicate, :type, :value, :vallabel
|
15
|
+
|
16
|
+
# constructor
|
17
|
+
# @param [Hash] opts the options to create a message with.
|
18
|
+
# @option opts [String] :value the string value of rthe action, like "use"
|
19
|
+
# @option opts [String] :vallabel the string for the label, like "use"
|
20
|
+
#
|
21
|
+
def initialize(value:, vallabel: "", type: CACTION, **args)
|
22
|
+
@value = value
|
23
|
+
@vallabel = vallabel || @value
|
24
|
+
raise "Actions must haves a value such as 'use' - I'm dead!" unless @value
|
25
|
+
|
26
|
+
# if it is already a URI, then let it go
|
27
|
+
@value = "http://www.w3.org/ns/odrl/2/#{@value}" unless @value =~ %r{http://}
|
28
|
+
|
29
|
+
@uid = @value
|
30
|
+
# unless @uid
|
31
|
+
# self.uid = Base.baseURI + "#action_" + Base.getuuid
|
32
|
+
# end
|
33
|
+
super(uid: @uid, type: type, **args)
|
34
|
+
|
35
|
+
@refinements = {}
|
36
|
+
|
37
|
+
args[:refinements] = [args[:refinements]] unless args[:refinements].is_a? Array
|
38
|
+
unless args[:refinements].first.nil?
|
39
|
+
args[:refinements].each do |c|
|
40
|
+
addRefinement(refinement: c)
|
48
41
|
end
|
42
|
+
end
|
49
43
|
|
50
|
-
|
51
|
-
|
52
|
-
# @param refinement [ODRL::Refinement] the refinement to the action
|
53
|
-
#
|
54
|
-
def addRefinement(refinement: args)
|
55
|
-
unless refinement.is_a?(Constraint)
|
56
|
-
raise "Refinement is not an ODRL Constraint"
|
57
|
-
else
|
58
|
-
self.refinements[refinement.uid] = [PREFINEMENT, refinement]
|
59
|
-
end
|
60
|
-
end
|
44
|
+
self.predicate = PACTION unless predicate
|
45
|
+
end
|
61
46
|
|
47
|
+
# Adds an ODRL Refinement
|
48
|
+
#
|
49
|
+
# @param refinement [ODRL::Refinement] the refinement to the action
|
50
|
+
#
|
51
|
+
def addRefinement(refinement: args)
|
52
|
+
raise "Refinement is not an ODRL Constraint" unless refinement.is_a?(Constraint)
|
62
53
|
|
63
|
-
|
64
|
-
|
65
|
-
#
|
66
|
-
def load_graph
|
67
|
-
super
|
68
|
-
# TODO This is bad DRY!! Put the bulk of this method into the base object
|
69
|
-
[:refinements].each do |connected_object_type|
|
70
|
-
next unless self.send(connected_object_type)
|
71
|
-
self.send(connected_object_type).each do |uid, typedconnection|
|
72
|
-
predicate, odrlobject = typedconnection # e.g. "refinement", RefinementObject
|
73
|
-
object = odrlobject.uid
|
74
|
-
subject = self.uid
|
75
|
-
repo = self.repository
|
76
|
-
triplify(subject, predicate, object, repo)
|
77
|
-
odrlobject.load_graph # start the cascade
|
78
|
-
end
|
79
|
-
end
|
80
|
-
subject = self.uid
|
81
|
-
object = self.vallabel
|
82
|
-
predicate = SCHEMA.name
|
83
|
-
repo = self.repository
|
84
|
-
triplify(subject, predicate, object, repo)
|
85
|
-
object = self.vallabel
|
86
|
-
predicate = RDFS.label
|
87
|
-
repo = self.repository
|
88
|
-
triplify(subject, predicate, object, repo)
|
89
|
-
end
|
54
|
+
refinements[refinement.uid] = [PREFINEMENT, refinement]
|
55
|
+
end
|
90
56
|
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
57
|
+
# Causes the triples of this object to be formed in the in-memory store
|
58
|
+
# This includes any "cascading" objects for which this is the subject of the triple
|
59
|
+
#
|
60
|
+
def load_graph
|
61
|
+
super
|
62
|
+
# TODO: This is bad DRY!! Put the bulk of this method into the base object
|
63
|
+
[:refinements].each do |connected_object_type|
|
64
|
+
next unless send(connected_object_type)
|
65
|
+
|
66
|
+
send(connected_object_type).each do |_uid, typedconnection|
|
67
|
+
predicate, odrlobject = typedconnection # e.g. "refinement", RefinementObject
|
68
|
+
object = odrlobject.uid
|
69
|
+
subject = uid
|
70
|
+
repo = repository
|
71
|
+
triplify(subject, predicate, object, repo)
|
72
|
+
odrlobject.load_graph # start the cascade
|
97
73
|
end
|
98
|
-
|
74
|
+
end
|
75
|
+
subject = uid
|
76
|
+
object = vallabel
|
77
|
+
predicate = SCHEMA.name
|
78
|
+
repo = repository
|
79
|
+
triplify(subject, predicate, object, repo)
|
80
|
+
object = vallabel
|
81
|
+
predicate = RDFS.label
|
82
|
+
repo = repository
|
83
|
+
triplify(subject, predicate, object, repo)
|
99
84
|
end
|
100
85
|
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
86
|
+
# Returns the serialized RDF for this object and cascading related objects
|
87
|
+
#
|
88
|
+
# @param format [Symbol] a valid RDF::Writer format (e.g. :turtle)
|
89
|
+
#
|
90
|
+
def serialize(format:)
|
91
|
+
super
|
107
92
|
end
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
93
|
+
end
|
94
|
+
|
95
|
+
class Use < Action
|
96
|
+
def initialize(type: CACTION, **args)
|
97
|
+
super(type: :type, **args)
|
112
98
|
end
|
99
|
+
end
|
113
100
|
|
101
|
+
class Transfer < Action
|
102
|
+
def initialize(type: CACTION, **args)
|
103
|
+
super(type: :type, **args)
|
104
|
+
end
|
105
|
+
end
|
114
106
|
end
|
data/lib/odrl/asset.rb
CHANGED
@@ -1,90 +1,77 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module ODRL
|
4
|
+
# ODRL::Action
|
5
|
+
# Describes an action like "use"
|
6
|
+
#
|
7
|
+
# @author Mark D Wilkinson
|
8
|
+
class Asset < Base
|
9
|
+
attr_accessor :uid, :hasPolicy, :refinements, :partOf
|
10
|
+
|
11
|
+
def initialize(type: CASSET, hasPolicy: nil, refinements: nil, partOf: nil, **args)
|
12
|
+
@uid = uid
|
13
|
+
self.uid = Base.baseURI + "#asset_" + Base.getuuid unless @uid
|
14
|
+
super(type: type, uid: @uid, **args)
|
15
|
+
|
16
|
+
@partOf = partOf
|
17
|
+
@hasPolicy = hasPolicy
|
18
|
+
|
19
|
+
if @hasPolicy and !(@hasPolicy.is_a? Policy) # if it exists and is the wrong type
|
20
|
+
raise "The policy of an Asset must be of type ODRL::Policy. The provided value will be discarded"
|
21
|
+
@hasPolicy = nil
|
22
|
+
end
|
23
|
+
if @partOf and !(@partOf.is_a? AssetCollection) # if it exists and is the wrong type
|
24
|
+
raise "The parent collection of an Asset must be of type ODRL::AssetCollection. The provided value will be discarded"
|
25
|
+
@partOf = nil
|
26
|
+
end
|
27
|
+
|
28
|
+
@refinements = {}
|
29
|
+
refinements = [refinements] unless refinements.is_a? Array
|
30
|
+
return if refinements.first.nil?
|
31
|
+
|
32
|
+
refinements.each do |c|
|
33
|
+
addRefinement(refinement: c)
|
34
|
+
end
|
35
|
+
end
|
4
36
|
|
37
|
+
def addPart(part: args)
|
38
|
+
raise "Asset cannot be added as part of something that is not an asset collection" unless is_a?(AssetCollection)
|
39
|
+
raise "Only Assets can be added as part of asset collections" unless part.is_a?(Asset)
|
5
40
|
|
6
|
-
|
7
|
-
|
8
|
-
#
|
9
|
-
# @author Mark D Wilkinson
|
10
|
-
class Asset < Base
|
11
|
-
attr_accessor :uid, :hasPolicy, :refinements, :partOf
|
12
|
-
|
13
|
-
def initialize(type: CASSET, hasPolicy: nil, refinements: nil, partOf: nil, **args)
|
14
|
-
@uid = uid
|
15
|
-
unless @uid
|
16
|
-
self.uid = Base.baseURI + "#asset_" + Base.getuuid
|
17
|
-
end
|
18
|
-
super(type: type, uid: @uid, **args)
|
19
|
-
|
20
|
-
@partOf = partOf
|
21
|
-
@hasPolicy = hasPolicy
|
22
|
-
|
23
|
-
if @hasPolicy and !(@hasPolicy.is_a? Policy) # if it exists and is the wrong type
|
24
|
-
raise "The policy of an Asset must be of type ODRL::Policy. The provided value will be discarded"
|
25
|
-
@hasPolicy = nil
|
26
|
-
end
|
27
|
-
if @partOf and !(@partOf.is_a? AssetCollection) # if it exists and is the wrong type
|
28
|
-
raise "The parent collection of an Asset must be of type ODRL::AssetCollection. The provided value will be discarded"
|
29
|
-
@partOf = nil
|
30
|
-
end
|
31
|
-
|
32
|
-
@refinements = Hash.new
|
33
|
-
refinements = [refinements] unless refinements.is_a? Array
|
34
|
-
if !(refinements.first.nil?)
|
35
|
-
refinements.each do |c|
|
36
|
-
self.addRefinement(refinement: c)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
|
42
|
-
def addPart(part: args)
|
43
|
-
unless self.is_a?(AssetCollection)
|
44
|
-
raise "Asset cannot be added as part of something that is not an asset collection"
|
45
|
-
end
|
46
|
-
unless part.is_a?(Asset)
|
47
|
-
raise "Only Assets can be added as part of asset collections"
|
48
|
-
end
|
49
|
-
part.partOf[self.uid] = [PPARTOF, self]
|
50
|
-
end
|
51
|
-
|
52
|
-
def addRefinement(refinement: args)
|
53
|
-
unless refinement.is_a?(Constraint)
|
54
|
-
raise "Refinement is not an ODRL Constraint"
|
55
|
-
else
|
56
|
-
self.refinements[refinement.uid] = [PREFINEMENT, refinement]
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
def load_graph
|
61
|
-
super
|
62
|
-
# TODO This is bad DRY!! Put the bulk of this method into the base object
|
63
|
-
[:refinements, :partOf, :hasPolicy].each do |connected_object_type|
|
64
|
-
next unless self.send(connected_object_type)
|
65
|
-
self.send(connected_object_type).each do |uid, typedconnection|
|
66
|
-
predicate, odrlobject = typedconnection # e.g. "refinement", RefinementObject
|
67
|
-
object = odrlobject.uid
|
68
|
-
subject = self.uid
|
69
|
-
repo = self.repository
|
70
|
-
triplify(subject, predicate, object, repo)
|
71
|
-
odrlobject.load_graph # start the cascade
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
41
|
+
part.partOf[uid] = [PPARTOF, self]
|
42
|
+
end
|
75
43
|
|
76
|
-
|
77
|
-
|
78
|
-
end
|
44
|
+
def addRefinement(refinement: args)
|
45
|
+
raise "Refinement is not an ODRL Constraint" unless refinement.is_a?(Constraint)
|
79
46
|
|
47
|
+
refinements[refinement.uid] = [PREFINEMENT, refinement]
|
80
48
|
end
|
81
49
|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
50
|
+
def load_graph
|
51
|
+
super
|
52
|
+
# TODO: This is bad DRY!! Put the bulk of this method into the base object
|
53
|
+
%i[refinements partOf hasPolicy].each do |connected_object_type|
|
54
|
+
next unless send(connected_object_type)
|
55
|
+
|
56
|
+
send(connected_object_type).each do |_uid, typedconnection|
|
57
|
+
predicate, odrlobject = typedconnection # e.g. "refinement", RefinementObject
|
58
|
+
object = odrlobject.uid
|
59
|
+
subject = uid
|
60
|
+
repo = repository
|
61
|
+
triplify(subject, predicate, object, repo)
|
62
|
+
odrlobject.load_graph # start the cascade
|
86
63
|
end
|
64
|
+
end
|
87
65
|
end
|
88
66
|
|
67
|
+
def serialize(format:)
|
68
|
+
super
|
69
|
+
end
|
70
|
+
end
|
89
71
|
|
72
|
+
class AssetCollection < Asset
|
73
|
+
def initialize(type: CASSETCOLLECTION, **args)
|
74
|
+
super(type: type, **args)
|
75
|
+
end
|
76
|
+
end
|
90
77
|
end
|