odrl-ruby 0.2.0 → 0.2.1
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/Gemfile.lock +1 -1
- data/README.md +56 -0
- data/examples/biohackathon-output.ttl +34 -18
- data/examples/build_profile.rb +1 -1
- data/lib/odrl/odrl/version.rb +1 -1
- data/lib/odrl/party.rb +15 -9
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 63cb1e71b635624b49a5ed95f438db8c1dbd93210f454be4d88f1227b487874f
|
4
|
+
data.tar.gz: 40fa678545058fca0b73de3a89d4c379ae6487c0f7a8a4e778f4642b7250723e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: adc87311982d35fafffc09e54afcadf88ec41e89f5acf6c2925cf346f3f871293b5fcff62c8928a64fdbaec240ee5279336eaacafedfc50c52cea965f65ff0c1
|
7
|
+
data.tar.gz: 4438e55d750c5792de355aedd3c991506b6446419c031c492dd2eec7c819af81dce00075524b7400af504469248e095e6b2378d44380f4e92f76786ee046407f
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -20,6 +20,10 @@ Or install it yourself as:
|
|
20
20
|
|
21
21
|
## Usage
|
22
22
|
|
23
|
+
# Two functionalities: Build ODRL Policies; Build ODRL Profiles to extend the core ODRL vocabulary
|
24
|
+
|
25
|
+
# Build Policy:
|
26
|
+
|
23
27
|
```
|
24
28
|
require 'odrl/ruby'
|
25
29
|
|
@@ -65,6 +69,58 @@ result = policy.serialize(format: 'turtle') # get the RDF string
|
|
65
69
|
puts result
|
66
70
|
```
|
67
71
|
|
72
|
+
# Build Profile:
|
73
|
+
|
74
|
+
```
|
75
|
+
require 'odrl/profile/builder'
|
76
|
+
|
77
|
+
p = ODRL::Profile::Builder.new(
|
78
|
+
uri: 'https://example.org/myprofiles/germplasm_odrl_profile.ttl',
|
79
|
+
title: "ODRL Profile for Germplasm resources",
|
80
|
+
description: "There are some properties and comparisons that only make sense in the Germplasm expert domain",
|
81
|
+
author: "Mark D Wilkinson",
|
82
|
+
profile_class: "https://example.org/myprofiles/ontology#SeedOffer"
|
83
|
+
)
|
84
|
+
|
85
|
+
p.asset_relations << ODRL::Profile::AssetRelation.new(
|
86
|
+
uri: "https://example.org/myprofiles/ontology#nagoya_permission",
|
87
|
+
label: "Permission under Nagoya protocol",
|
88
|
+
definition: "Permission is a special thing in the Nagoya protocol")
|
89
|
+
|
90
|
+
|
91
|
+
p.party_functional_roles << ODRL::Profile::AssetRelation.new(
|
92
|
+
uri: "https://example.org/myprofiles/ontology#nagoya_assigner",
|
93
|
+
label: "Assigner with Nagoya authority to assign",
|
94
|
+
definition: "Assigners have special responsibilities in the Nagoya protocol")
|
95
|
+
|
96
|
+
p.actions << ODRL::Profile::Rule.new(
|
97
|
+
uri: "https://example.org/myprofiles/ontology#nagoya_propogate",
|
98
|
+
label: "Plant and Harvest",
|
99
|
+
definition: "the action of planting and harvesting the seed",
|
100
|
+
included_in: ODRLV.use,
|
101
|
+
implies: ODRLV.distribute)
|
102
|
+
|
103
|
+
|
104
|
+
p.leftOperands << ODRL::Profile::LeftOperand.new(
|
105
|
+
uri: "https://example.org/myprofiles/ontology#at_risk_species",
|
106
|
+
label: "At Risk Species",
|
107
|
+
definition: "A species that has been flagged as at-risk of extinction")
|
108
|
+
|
109
|
+
p.rightOperands << ODRL::Profile::RightOperand.new(
|
110
|
+
uri: "https://example.org/myprofiles/ontology#on_watchlist",
|
111
|
+
label: "On Watchlist",
|
112
|
+
definition: "A species whose risk of extinction is on a watchlist")
|
113
|
+
|
114
|
+
p.rightOperands << ODRL::Profile::Relation.new(
|
115
|
+
uri: "https://example.org/myprofiles/ontology#within_risk_boundary",
|
116
|
+
label: "Within Bounds",
|
117
|
+
definition: "comparison of risk boundaries")
|
118
|
+
|
119
|
+
|
120
|
+
p.build()
|
121
|
+
puts p.serialize
|
122
|
+
```
|
123
|
+
|
68
124
|
|
69
125
|
## License
|
70
126
|
|
@@ -1,47 +1,63 @@
|
|
1
1
|
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
|
2
2
|
|
3
|
-
<http://example.org#
|
4
|
-
<http://purl.org/dc/terms/identifier> <http://example.org#
|
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> ;
|
3
|
+
<http://example.org#constraint_68811358965684>
|
4
|
+
<http://purl.org/dc/terms/identifier> <http://example.org#constraint_68811358965684> ;
|
9
5
|
<http://purl.org/dc/terms/title> "Only during the hackathon"@en ;
|
10
6
|
a <http://www.w3.org/ns/odrl/2/Constraint> ;
|
7
|
+
<http://www.w3.org/2000/01/rdf-schema#label> "Only during the hackathon"@en ;
|
11
8
|
<http://www.w3.org/ns/odrl/2/leftOperand> <http://www.w3.org/ns/odrl/2/event> ;
|
12
9
|
<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>
|
10
|
+
<http://www.w3.org/ns/odrl/2/rightOperand> <https://2023.biohackathon.org> ;
|
11
|
+
<http://www.w3.org/ns/odrl/2/uid> <http://example.org#constraint_68811358965684> .
|
14
12
|
|
15
|
-
<http://example.org#
|
13
|
+
<http://example.org#policy_68811358965627>
|
16
14
|
<http://purl.org/dc/terms/creator> <https://orcid.org/0000-0001-6960-357X> ;
|
17
15
|
<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#
|
16
|
+
<http://purl.org/dc/terms/identifier> <http://example.org#policy_68811358965627> ;
|
19
17
|
<http://purl.org/dc/terms/subject> "collaboration"@en ;
|
20
18
|
<http://purl.org/dc/terms/title> "Offer to Toshiaki-san"@en ;
|
21
19
|
a <http://www.w3.org/ns/odrl/2/Offer> ;
|
22
|
-
<http://www.w3.org/
|
20
|
+
<http://www.w3.org/2000/01/rdf-schema#label> "Offer to Toshiaki-san"@en ;
|
21
|
+
<http://www.w3.org/ns/odrl/2/permission> <http://example.org#rule_68811358965667> ;
|
22
|
+
<http://www.w3.org/ns/odrl/2/uid> <http://example.org#policy_68811358965627> .
|
23
23
|
|
24
|
-
<http://example.org#
|
25
|
-
<http://purl.org/dc/terms/identifier> <http://example.org#
|
24
|
+
<http://example.org#rule_68811358965667>
|
25
|
+
<http://purl.org/dc/terms/identifier> <http://example.org#rule_68811358965667> ;
|
26
26
|
<http://purl.org/dc/terms/title> "Permission to use"@en ;
|
27
27
|
a <http://www.w3.org/ns/odrl/2/Permission> ;
|
28
|
-
<http://www.w3.org/
|
28
|
+
<http://www.w3.org/2000/01/rdf-schema#label> "Permission to use"@en ;
|
29
|
+
<http://www.w3.org/ns/odrl/2/action> <http://www.w3.org/ns/odrl/2/use> ;
|
29
30
|
<http://www.w3.org/ns/odrl/2/assignee> <https://orcid.org/0000-0001-6960-357X> ;
|
30
31
|
<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#
|
32
|
-
<http://www.w3.org/ns/odrl/2/target> <http://mark.wilkinson.org/data/polyA>
|
32
|
+
<http://www.w3.org/ns/odrl/2/constraint> <http://example.org#constraint_68811358965684> ;
|
33
|
+
<http://www.w3.org/ns/odrl/2/target> <http://mark.wilkinson.org/data/polyA> ;
|
34
|
+
<http://www.w3.org/ns/odrl/2/uid> <http://example.org#rule_68811358965667> .
|
33
35
|
|
34
36
|
<http://mark.wilkinson.org/data/polyA>
|
35
37
|
<http://purl.org/dc/terms/identifier> <http://mark.wilkinson.org/data/polyA> ;
|
36
38
|
<http://purl.org/dc/terms/title> "Mark's PolyA Database"@en ;
|
37
|
-
a <http://www.w3.org/ns/odrl/2/Asset>
|
39
|
+
a <http://www.w3.org/ns/odrl/2/Asset> ;
|
40
|
+
<http://www.w3.org/2000/01/rdf-schema#label> "Mark's PolyA Database"@en ;
|
41
|
+
<http://www.w3.org/ns/odrl/2/uid> <http://mark.wilkinson.org/data/polyA> .
|
42
|
+
|
43
|
+
<http://www.w3.org/ns/odrl/2/use>
|
44
|
+
<http://purl.org/dc/terms/identifier> <http://www.w3.org/ns/odrl/2/use> ;
|
45
|
+
a "type"@en ;
|
46
|
+
<http://www.w3.org/2000/01/rdf-schema#label> ""@en ;
|
47
|
+
<http://www.w3.org/ns/odrl/2/uid> <http://www.w3.org/ns/odrl/2/use> ;
|
48
|
+
<https://schema.org/name> ""@en .
|
38
49
|
|
39
50
|
<https://orcid.org/0000-0001-6960-357X>
|
40
51
|
<http://purl.org/dc/terms/identifier> <https://orcid.org/0000-0001-6960-357X> ;
|
41
52
|
<http://purl.org/dc/terms/title> "Mark D Wilkinson"@en ;
|
42
|
-
a <http://www.w3.org/ns/odrl/2/Party>
|
53
|
+
a <http://www.w3.org/ns/odrl/2/Party> ;
|
54
|
+
<http://www.w3.org/2000/01/rdf-schema#label> "Mark D Wilkinson"@en ;
|
55
|
+
<http://www.w3.org/ns/odrl/2/uid> <https://orcid.org/0000-0001-6960-357X> .
|
43
56
|
|
44
57
|
<https://orcid.org/0000-0003-2391-0384>
|
45
58
|
<http://purl.org/dc/terms/identifier> <https://orcid.org/0000-0003-2391-0384> ;
|
46
59
|
<http://purl.org/dc/terms/title> "Toshiaki Katayama"@en ;
|
47
|
-
a <http://www.w3.org/ns/odrl/2/Party>
|
60
|
+
a <http://www.w3.org/ns/odrl/2/Party> ;
|
61
|
+
<http://www.w3.org/2000/01/rdf-schema#label> "Toshiaki Katayama"@en ;
|
62
|
+
<http://www.w3.org/ns/odrl/2/uid> <https://orcid.org/0000-0003-2391-0384> .
|
63
|
+
|
data/examples/build_profile.rb
CHANGED
data/lib/odrl/odrl/version.rb
CHANGED
data/lib/odrl/party.rb
CHANGED
@@ -18,8 +18,8 @@ module ODRL
|
|
18
18
|
super(uid: @uid, type: type, **args)
|
19
19
|
|
20
20
|
@refinements = {}
|
21
|
-
@partOf =
|
22
|
-
@predicate = predicate
|
21
|
+
@partOf = {}
|
22
|
+
@predicate = predicate.to_s
|
23
23
|
|
24
24
|
if @predicate&.match(/https?:/)
|
25
25
|
# do nothing! It's their choice to send a full predicate!
|
@@ -42,10 +42,17 @@ module ODRL
|
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
|
-
|
45
|
+
partOf = [partOf] unless partOf.is_a? Array
|
46
|
+
unless partOf.first.nil?
|
47
|
+
partOf.each do |p|
|
48
|
+
p.addPart(part: self)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
unless @partOf and !(@partOf.is_a? PartyCollection) # if it exists and is the wrong type
|
53
|
+
raise "The parent collection of a Party must be of type ODRL::PaertyCollection."
|
54
|
+
end
|
46
55
|
|
47
|
-
raise "The parent collection of a Party must be of type ODRL::PaertyCollection."
|
48
|
-
# @partOf = nil
|
49
56
|
end
|
50
57
|
|
51
58
|
def addRefinement(refinement: args)
|
@@ -55,16 +62,15 @@ module ODRL
|
|
55
62
|
end
|
56
63
|
|
57
64
|
def addPart(part: args)
|
58
|
-
raise "Party cannot be added as part of something that is not an PartyCollection" unless is_a?(PartyCollection)
|
59
|
-
raise "Only Parties can be added as part of PartyCollections" unless part.is_a?(Asset)
|
60
|
-
|
65
|
+
raise "Party cannot be added as part of something that is not an PartyCollection" unless self.is_a?(PartyCollection)
|
61
66
|
part.partOf[uid] = [PPARTOF, self]
|
62
67
|
end
|
63
68
|
|
64
69
|
def load_graph
|
65
70
|
super
|
66
71
|
# TODO: This is bad DRY!! Put the bulk of this method into the base object
|
67
|
-
|
72
|
+
# TODO: Currently we don't support partOf
|
73
|
+
%i[refinements].each do |connected_object_type|
|
68
74
|
next unless send(connected_object_type)
|
69
75
|
|
70
76
|
send(connected_object_type).each do |_uid, typedconnection|
|