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/base.rb
CHANGED
@@ -1,41 +1,42 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative "odrl/version"
|
4
|
+
require "linkeddata"
|
4
5
|
|
6
|
+
CPOLICY = ODRLV.Policy.to_s
|
5
7
|
|
6
|
-
|
8
|
+
PPROFILE = ODRLV.profile.to_s
|
7
9
|
|
8
|
-
CSET= ODRLV.Set.to_s
|
9
|
-
COFFER= ODRLV.Offer.to_s
|
10
|
-
CREQUEST= ODRLV.Request.to_s
|
11
|
-
CAGREEMENT= ODRLV.Agreement.to_s
|
12
|
-
CPRIVACY= ODRLV.Privacy.to_s
|
10
|
+
CSET = ODRLV.Set.to_s
|
11
|
+
COFFER = ODRLV.Offer.to_s
|
12
|
+
CREQUEST = ODRLV.Request.to_s
|
13
|
+
CAGREEMENT = ODRLV.Agreement.to_s
|
14
|
+
CPRIVACY = ODRLV.Privacy.to_s
|
13
15
|
PASSET = ODRLV.target.to_s
|
14
|
-
CASSET= ODRLV.Asset.to_s
|
15
|
-
CASSETCOLLECTION= ODRLV.Asset.to_s
|
16
|
+
CASSET = ODRLV.Asset.to_s
|
17
|
+
CASSETCOLLECTION = ODRLV.Asset.to_s
|
16
18
|
|
17
|
-
CRULE= ODRLV.Rule.to_s
|
18
|
-
CPERMISSION= ODRLV.Permission.to_s
|
19
|
+
CRULE = ODRLV.Rule.to_s
|
20
|
+
CPERMISSION = ODRLV.Permission.to_s
|
19
21
|
PPERMISSION = ODRLV.permission.to_s
|
20
|
-
CPROHIBITION= ODRLV.Prohibition.to_s
|
22
|
+
CPROHIBITION = ODRLV.Prohibition.to_s
|
21
23
|
PPROHIBITION = ODRLV.prohibition.to_s
|
22
|
-
PDUTY= ODRLV.obligation.to_s
|
24
|
+
PDUTY = ODRLV.obligation.to_s
|
23
25
|
CDUTY = ODRLV.Duty.to_s
|
24
26
|
|
25
27
|
PRULE = ODRLV.Rule.to_s
|
26
28
|
|
27
|
-
|
28
29
|
PACTION = ODRLV.action.to_s
|
29
|
-
VUSE = ODRLV.use.to_s
|
30
|
-
VTRANSFER = ODRLV.transfer.to_s # this is goofy ODRL stuff...
|
31
|
-
CACTION= ODRLV.Action.to_s
|
30
|
+
VUSE = ODRLV.use.to_s # this is goofy ODRL stuff...
|
31
|
+
VTRANSFER = ODRLV.transfer.to_s # this is goofy ODRL stuff...
|
32
|
+
CACTION = ODRLV.Action.to_s
|
32
33
|
|
33
34
|
PREFINEMENT = ODRLV.refinement.to_s
|
34
35
|
|
35
|
-
PASSIGNER = ODRLV.assigner.to_s
|
36
|
-
PASSIGNEE =
|
37
|
-
CPARTY= ODRLV.Party.to_s
|
38
|
-
CPARTYCOLLECTION= ODRLV.Party.to_s
|
36
|
+
PASSIGNER = ODRLV.assigner.to_s # now in PARTYFUNCTIONS
|
37
|
+
PASSIGNEE = ODRLV.assignee.to_s
|
38
|
+
CPARTY = ODRLV.Party.to_s
|
39
|
+
CPARTYCOLLECTION = ODRLV.Party.to_s
|
39
40
|
|
40
41
|
PCONSTRAINT = ODRLV.constraint.to_s
|
41
42
|
CCONSTRAINT = ODRLV.Constraint.to_s
|
@@ -49,168 +50,181 @@ PSTATUS = ODRLV.status.to_s
|
|
49
50
|
|
50
51
|
PPARTOF = ODRLV.partOf.to_s
|
51
52
|
|
52
|
-
|
53
53
|
PROPERTIES = {
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
54
|
+
title: DCT.title,
|
55
|
+
creator: DCT.creator,
|
56
|
+
description: DCT.description,
|
57
|
+
id: DCT.identifier,
|
58
|
+
type: RDF.type,
|
59
|
+
subject: DCT.subject,
|
60
|
+
uid: ODRLV.uid,
|
61
|
+
label: RDFS.label,
|
62
|
+
issued: DCT.issued
|
62
63
|
}
|
63
64
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
def initialize(
|
88
|
-
title: nil,
|
89
|
-
creator: nil,
|
90
|
-
description: nil,
|
91
|
-
subject: nil,
|
92
|
-
baseURI: "http://example.org",
|
93
|
-
uid:,
|
94
|
-
id: nil,
|
95
|
-
type:,
|
96
|
-
label: nil,
|
97
|
-
**_)
|
98
|
-
|
99
|
-
@title = title
|
100
|
-
@creator = creator
|
101
|
-
@description = description
|
102
|
-
@subject = subject
|
103
|
-
@baseURI = baseURI || ODRL::Base.baseURI
|
104
|
-
@uid = uid
|
105
|
-
@type = type
|
106
|
-
@label = label || @title
|
107
|
-
@id = @uid
|
108
|
-
|
109
|
-
raise "Every object must have a uid - attempt to create #{@type}" unless @uid
|
110
|
-
raise "Every object must have a type - " unless @type
|
111
|
-
|
112
|
-
|
113
|
-
$g = RDF::Graph.new()
|
114
|
-
if ENV["TRIPLES_FORMAT"]
|
115
|
-
$format = ENV["TRIPLES_FORMAT"].to_sym
|
116
|
-
else
|
117
|
-
$format = :jsonld
|
118
|
-
end
|
65
|
+
OPERATORS = %w[eq gt gteq hasPart isA isAllOf isAnyOf isNoneOf isPartOf lt lteq neq]
|
66
|
+
LEFTOPERANDS = %w[absolutePosition absoluteSize absoluteSpatialPosition absoluteTemporalPosition
|
67
|
+
count dateTime delayPeriod deliveryChannel device elapsedTime event
|
68
|
+
fileFormat industry language media meteredTime payAmount percentage
|
69
|
+
product purpose recipient relativePosition relativeSize relativeSpatialPosition
|
70
|
+
relativeTemporalPosition resolution spatial spatialCoordinates system
|
71
|
+
systemDevice timeInterval unitOfCount version virtualLocation]
|
72
|
+
|
73
|
+
PARTYFUNCTIONS = %w[assignee assigner attributedParty attributingParty compensatedParty
|
74
|
+
compensatingParty consentedParty consentingParty contractedParty contractingParty informedParty
|
75
|
+
informingParty trackedParty trackingParty]
|
76
|
+
|
77
|
+
# INTERESTING>>>> THIS COULD BE USED IF THERE IS A PROFILE...
|
78
|
+
# module RemovableConstants
|
79
|
+
# def def_if_not_defined(const, value)
|
80
|
+
# self.class.const_set(const, value) unless self.class.const_defined?(const)
|
81
|
+
# end
|
82
|
+
|
83
|
+
# def redef_without_warning(const, value)
|
84
|
+
# self.class.send(:remove_const, const) if self.class.const_defined?(const)
|
85
|
+
# self.class.const_set(const, value)
|
86
|
+
# end
|
87
|
+
# end
|
119
88
|
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
o = RDF::Literal.new(o.to_s, :datatype => RDF::XSD.float)
|
176
|
-
elsif o.to_s =~ /^[0-9]+$/
|
177
|
-
o = RDF::Literal.new(o.to_s, :datatype => RDF::XSD.int)
|
89
|
+
module ODRL
|
90
|
+
class Base
|
91
|
+
@@repository = RDF::Repository.new
|
92
|
+
|
93
|
+
# If you add an attribute, you mustr also add it to the constructor,
|
94
|
+
# and to the @attribute list
|
95
|
+
# andn to the .load_graph
|
96
|
+
attr_accessor :title, :creator, :description, :subject, :baseURI, :uid, :id, :type, :label, :issued
|
97
|
+
|
98
|
+
def self.baseURI
|
99
|
+
ENV["ODRL_BASEURI"] || "http://example.org"
|
100
|
+
end
|
101
|
+
|
102
|
+
def self.repository
|
103
|
+
@@repository
|
104
|
+
end
|
105
|
+
|
106
|
+
def repository
|
107
|
+
@@repository
|
108
|
+
end
|
109
|
+
|
110
|
+
def self.clear_repository
|
111
|
+
@@repository.clear!
|
112
|
+
true
|
113
|
+
end
|
114
|
+
|
115
|
+
def initialize(
|
116
|
+
uid:, type:, title: nil,
|
117
|
+
creator: nil,
|
118
|
+
description: nil,
|
119
|
+
issued: nil,
|
120
|
+
subject: nil,
|
121
|
+
baseURI: "http://example.org",
|
122
|
+
id: nil,
|
123
|
+
label: nil,
|
124
|
+
**_
|
125
|
+
)
|
126
|
+
|
127
|
+
@title = title
|
128
|
+
@creator = creator
|
129
|
+
@issued = issued
|
130
|
+
@description = description
|
131
|
+
@subject = subject
|
132
|
+
@baseURI = baseURI || ODRL::Base.baseURI
|
133
|
+
@uid = uid
|
134
|
+
@type = type
|
135
|
+
@label = label || @title
|
136
|
+
@id = @uid
|
137
|
+
|
138
|
+
raise "Every object must have a uid - attempt to create #{@type}" unless @uid
|
139
|
+
raise "Every object must have a type - " unless @type
|
140
|
+
|
141
|
+
$g = RDF::Graph.new
|
142
|
+
$format = if ENV["TRIPLES_FORMAT"]
|
143
|
+
ENV["TRIPLES_FORMAT"].to_sym
|
178
144
|
else
|
179
|
-
|
180
|
-
end
|
181
|
-
end
|
182
|
-
|
183
|
-
triple = RDF::Statement(s, p, o)
|
184
|
-
repo.insert(triple)
|
185
|
-
|
186
|
-
return true
|
187
|
-
end
|
188
|
-
|
189
|
-
def self.getuuid
|
190
|
-
return Time.now.to_f.to_s.gsub("\.", "")[1..14]
|
191
|
-
end
|
192
|
-
|
193
|
-
def load_graph
|
194
|
-
[:title, :label, :creator, :description, :subject, :uid, :id, :type].each do |method|
|
195
|
-
next unless self.send(method)
|
196
|
-
next if self.send(method).empty?
|
197
|
-
subject = self.uid
|
198
|
-
predicate = PROPERTIES[method]
|
199
|
-
# warn "prediate #{predicate} for method #{method}"
|
200
|
-
object = self.send(method)
|
201
|
-
repo = self.repository
|
202
|
-
triplify(subject, predicate, object, repo)
|
145
|
+
:jsonld
|
203
146
|
end
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
147
|
+
end
|
148
|
+
|
149
|
+
def get_writer(type:)
|
150
|
+
RDF::Writer.for(type)
|
151
|
+
# w.prefix(:foaf, RDF::URI.new("http://xmlns.com/foaf/0.1/"))
|
152
|
+
# w.prefix(:dc, RDF::URI.new("http://purl.org/dc/terms/"))
|
153
|
+
# w.prefix(:rdf, RDF::URI.new("http://www.w3.org/1999/02/22-rdf-syntax-ns#"))
|
154
|
+
# w.prefix(:rdfs, RDF::URI.new("http://www.w3.org/2000/01/rdf-schema#"))
|
155
|
+
# w.prefix(:vcard, RDF::URI.new("http://www.w3.org/2006/vcard/ns#"))
|
156
|
+
# w.prefix(:odrl, RDF::URI.new("http://www.w3.org/ns/odrl/2/"))
|
157
|
+
# w.prefix(:this, RDF::URI.new("http://w3id.org/FAIR_Training_LDP/DAV/home/LDP/DUC-CCE/IPGB#"))
|
158
|
+
# w.prefix(:obo, RDF::URI.new("http://purl.obolibrary.org/obo/"))
|
159
|
+
# w.prefix(:xsd, RDF::URI.new("http://www.w3.org/2001/XMLSchema#"))
|
160
|
+
# w.prefix(:orcid, RDF::URI.new("https://orcid.org/"))
|
161
|
+
# warn "W"
|
162
|
+
# warn w.prefixes.inspect
|
163
|
+
end
|
164
|
+
|
165
|
+
def triplify(s, p, o, repo)
|
166
|
+
s = s.strip if s.instance_of?(String)
|
167
|
+
p = p.strip if p.instance_of?(String)
|
168
|
+
o = o.strip if o.instance_of?(String)
|
169
|
+
|
170
|
+
unless s.respond_to?("uri")
|
171
|
+
|
172
|
+
raise "Subject #{s} must be a URI-compatible thingy #{s}, #{p}, #{o}" unless s.to_s =~ %r{^\w+:/?/?[^\s]+}
|
173
|
+
|
174
|
+
s = RDF::URI.new(s.to_s)
|
175
|
+
|
176
|
+
end
|
177
|
+
|
178
|
+
unless p.respond_to?("uri")
|
179
|
+
|
180
|
+
raise "Predicate #{p} must be a URI-compatible thingy #{s}, #{p}, #{o}" unless p.to_s =~ %r{^\w+:/?/?[^\s]+}
|
181
|
+
|
182
|
+
p = RDF::URI.new(p.to_s)
|
183
|
+
|
184
|
+
end
|
185
|
+
unless o.respond_to?("uri")
|
186
|
+
o = if o.to_s =~ %r{^\w+:/?/?[^\s]+}
|
187
|
+
RDF::URI.new(o.to_s)
|
188
|
+
elsif o.to_s =~ /^\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d/
|
189
|
+
RDF::Literal.new(o.to_s, datatype: RDF::XSD.date)
|
190
|
+
elsif o.to_s =~ /^\d\.\d/
|
191
|
+
RDF::Literal.new(o.to_s, datatype: RDF::XSD.float)
|
192
|
+
elsif o.to_s =~ /^[0-9]+$/
|
193
|
+
RDF::Literal.new(o.to_s, datatype: RDF::XSD.int)
|
194
|
+
else
|
195
|
+
RDF::Literal.new(o.to_s, language: :en)
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
triple = RDF::Statement(s, p, o)
|
200
|
+
repo.insert(triple)
|
201
|
+
|
202
|
+
true
|
203
|
+
end
|
204
|
+
|
205
|
+
def self.getuuid
|
206
|
+
Time.now.to_f.to_s.gsub(".", "")[1..14]
|
207
|
+
end
|
208
|
+
|
209
|
+
def load_graph
|
210
|
+
%i[title label issued creator description subject uid id type].each do |method|
|
211
|
+
next unless send(method)
|
212
|
+
next if send(method).empty?
|
213
|
+
|
214
|
+
subject = uid # me!
|
215
|
+
predicate = PROPERTIES[method] # look up the predicate for this property
|
216
|
+
# warn "prediate #{predicate} for method #{method}"
|
217
|
+
object = send(method) # get the value of this property from self
|
218
|
+
# warn "value #{object.to_s}"
|
219
|
+
repo = repository
|
220
|
+
triplify(subject, predicate, object, repo)
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
224
|
+
def serialize(format: $format)
|
225
|
+
format = format.to_sym
|
226
|
+
w = get_writer(type: format)
|
227
|
+
w.dump(repository)
|
228
|
+
end
|
229
|
+
end
|
216
230
|
end
|
data/lib/odrl/constraint.rb
CHANGED
@@ -1,104 +1,110 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module ODRL
|
4
|
+
class Constraint < Base
|
5
|
+
attr_accessor :uid, :rightOperand, :leftOperand, :operator, :rightOperandReference, :dataType, :unit, :status
|
4
6
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
dataType: nil,
|
15
|
-
unit: nil,
|
16
|
-
status: nil,
|
17
|
-
type: CCONSTRAINT,
|
18
|
-
**args)
|
7
|
+
def initialize(
|
8
|
+
rightOperand:, operator:, leftOperand:, uid: nil,
|
9
|
+
rightOPerandReference: nil,
|
10
|
+
dataType: nil,
|
11
|
+
unit: nil,
|
12
|
+
status: nil,
|
13
|
+
type: CCONSTRAINT,
|
14
|
+
**args
|
15
|
+
)
|
19
16
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
end
|
24
|
-
super(uid: @uid, type: type, **args)
|
17
|
+
@uid = uid
|
18
|
+
@uid ||= Base.baseURI + "#constraint_" + Base.getuuid
|
19
|
+
super(uid: @uid, type: type, **args)
|
25
20
|
|
26
|
-
|
27
|
-
|
28
|
-
@rightOperand = "http://www.w3.org/ns/odrl/2/#{@rightOperand}" unless @rightOperand =~ /https?:\/\// # if it is already a URI, then let it go
|
21
|
+
@rightOperand = rightOperand
|
22
|
+
raise "Constraints must haves a Right operand such as 'event' - I'm dead!" unless @rightOperand
|
29
23
|
|
30
|
-
|
31
|
-
|
32
|
-
@leftOperand = "http://www.w3.org/ns/odrl/2/#{@leftOperand}" unless @leftOperand =~ /https?:\/\// # if it is already a URI, then let it go
|
24
|
+
# if it is already a URI, then let it go
|
25
|
+
# @rightOperand = "http://www.w3.org/ns/odrl/2/#{@rightOperand}" unless @rightOperand =~ %r{https?://}
|
33
26
|
|
34
|
-
|
35
|
-
|
36
|
-
|
27
|
+
@leftOperand = leftOperand
|
28
|
+
unless LEFTOPERANDS.include?(@leftOperand)
|
29
|
+
warn "The selected leftOperand is not part of the default set... just sayin'"
|
30
|
+
end
|
31
|
+
unless @leftOperand
|
32
|
+
raise "Constraints must haves a Left Operand such as 'http://some.event.org/on-now' - I'm dead!"
|
33
|
+
end
|
37
34
|
|
38
|
-
|
39
|
-
|
40
|
-
@unit = unit
|
41
|
-
@status = status
|
42
|
-
end
|
35
|
+
# if it is already a URI, then let it go
|
36
|
+
@leftOperand = "http://www.w3.org/ns/odrl/2/#{@leftOperand}" unless @leftOperand =~ %r{https?://}
|
43
37
|
|
44
|
-
|
45
|
-
|
46
|
-
# TODO This is bad DRY!! Put the bulk of this method into the base object
|
47
|
-
if self.rightOperand
|
48
|
-
predicate = PRIGHT
|
49
|
-
object = self.rightOperand
|
50
|
-
subject = self.uid
|
51
|
-
repo = self.repository
|
52
|
-
triplify(subject, predicate, object, repo)
|
53
|
-
end
|
54
|
-
if self.leftOperand
|
55
|
-
predicate = PLEFT
|
56
|
-
object = self.leftOperand
|
57
|
-
subject = self.uid
|
58
|
-
repo = self.repository
|
59
|
-
triplify(subject, predicate, object, repo)
|
60
|
-
end
|
61
|
-
if self.operator
|
62
|
-
predicate = POPERATOR
|
63
|
-
object = self.operator
|
64
|
-
subject = self.uid
|
65
|
-
repo = self.repository
|
66
|
-
triplify(subject, predicate, object, repo)
|
67
|
-
end
|
68
|
-
if self.rightOperandReference
|
69
|
-
predicate = POPERANDREFERENCE
|
70
|
-
object = self.rightOperandReference
|
71
|
-
subject = self.uid
|
72
|
-
repo = self.repository
|
73
|
-
triplify(subject, predicate, object, repo)
|
74
|
-
end
|
75
|
-
if self.dataType
|
76
|
-
predicate = PDATATYPE
|
77
|
-
object = self.dataType
|
78
|
-
subject = self.uid
|
79
|
-
repo = self.repository
|
80
|
-
triplify(subject, predicate, object, repo)
|
81
|
-
end
|
82
|
-
if self.unit
|
83
|
-
predicate = PUNIT
|
84
|
-
object = self.unit
|
85
|
-
subject = self.uid
|
86
|
-
repo = self.repository
|
87
|
-
triplify(subject, predicate, object, repo)
|
88
|
-
end
|
89
|
-
if self.status
|
90
|
-
predicate = PSTATUS
|
91
|
-
object = self.status
|
92
|
-
subject = self.uid
|
93
|
-
repo = self.repository
|
94
|
-
triplify(subject, predicate, object, repo)
|
95
|
-
end
|
96
|
-
end
|
38
|
+
@operator = operator
|
39
|
+
raise "Constraints must haves an operator such as 'eq' - I'm dead!" unless @operator
|
97
40
|
|
98
|
-
|
99
|
-
super
|
100
|
-
end
|
41
|
+
warn "The selected operator is not part of the default set... just sayin'" unless OPERATORS.include?(@operator)
|
101
42
|
|
43
|
+
# if it is already a URI, then let it go
|
44
|
+
@operator = "http://www.w3.org/ns/odrl/2/#{@operator}" unless @operator =~ %r{https?://}
|
45
|
+
|
46
|
+
@rightOperandReference = rightOperandReference
|
47
|
+
@dataType = dataType
|
48
|
+
@unit = unit
|
49
|
+
@status = status
|
102
50
|
end
|
103
51
|
|
52
|
+
def load_graph
|
53
|
+
super
|
54
|
+
# TODO: This is bad DRY!! Put the bulk of this method into the base object
|
55
|
+
if rightOperand
|
56
|
+
predicate = PRIGHT
|
57
|
+
object = rightOperand
|
58
|
+
subject = uid
|
59
|
+
repo = repository
|
60
|
+
triplify(subject, predicate, object, repo)
|
61
|
+
end
|
62
|
+
if leftOperand
|
63
|
+
predicate = PLEFT
|
64
|
+
object = leftOperand
|
65
|
+
subject = uid
|
66
|
+
repo = repository
|
67
|
+
triplify(subject, predicate, object, repo)
|
68
|
+
end
|
69
|
+
if operator
|
70
|
+
predicate = POPERATOR
|
71
|
+
object = operator
|
72
|
+
subject = uid
|
73
|
+
repo = repository
|
74
|
+
triplify(subject, predicate, object, repo)
|
75
|
+
end
|
76
|
+
if rightOperandReference
|
77
|
+
predicate = POPERANDREFERENCE
|
78
|
+
object = rightOperandReference
|
79
|
+
subject = uid
|
80
|
+
repo = repository
|
81
|
+
triplify(subject, predicate, object, repo)
|
82
|
+
end
|
83
|
+
if dataType
|
84
|
+
predicate = PDATATYPE
|
85
|
+
object = dataType
|
86
|
+
subject = uid
|
87
|
+
repo = repository
|
88
|
+
triplify(subject, predicate, object, repo)
|
89
|
+
end
|
90
|
+
if unit
|
91
|
+
predicate = PUNIT
|
92
|
+
object = unit
|
93
|
+
subject = uid
|
94
|
+
repo = repository
|
95
|
+
triplify(subject, predicate, object, repo)
|
96
|
+
end
|
97
|
+
return unless status
|
98
|
+
|
99
|
+
predicate = PSTATUS
|
100
|
+
object = status
|
101
|
+
subject = uid
|
102
|
+
repo = repository
|
103
|
+
triplify(subject, predicate, object, repo)
|
104
|
+
end
|
105
|
+
|
106
|
+
def serialize(format:)
|
107
|
+
super
|
108
|
+
end
|
109
|
+
end
|
104
110
|
end
|