bio-publisci 0.0.4 → 0.0.5
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/Rakefile +1 -1
- data/examples/no_magic.prov +31 -13
- data/examples/primer.prov +45 -7
- data/examples/prov_dsl.prov +41 -10
- data/features/prov_dsl.feature +2 -2
- data/lib/bio-publisci/metadata/prov/agent.rb +8 -7
- data/lib/bio-publisci/metadata/prov/dsl.rb +4 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 017f15f45cc8f40401aebe96aaf5dd886ba602e7
|
4
|
+
data.tar.gz: f59abde75019333ff918968a8717f51f419946ee
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7c80715a4e5354b330c93591b812f5a6c5105fbf6be2fe3d3028721796246e8a13cd1410af29411ba46d396cb82e494319f7137cd1aa2985e0e5d6cf08ce2422
|
7
|
+
data.tar.gz: 96dd7d0f7fb252837524640f21ec6513197366c2455ce3691b8c2a36ba9dd7acfa438eb87cb2b0c3b6560a54fc87e3ab972fd7ae9e5ebec515f74869ac87334c
|
data/Rakefile
CHANGED
@@ -21,7 +21,7 @@ Jeweler::Tasks.new do |gem|
|
|
21
21
|
gem.description = %Q{A toolkit for publishing scientific results and datasets using RDF, OWL, and related technologies }
|
22
22
|
gem.email = "wstrinz@gmail.com"
|
23
23
|
gem.authors = ["Will Strinz"]
|
24
|
-
gem.version = "0.0.
|
24
|
+
gem.version = "0.0.5"
|
25
25
|
|
26
26
|
# dependencies defined in Gemfile
|
27
27
|
end
|
data/examples/no_magic.prov
CHANGED
@@ -1,16 +1,29 @@
|
|
1
|
+
# Example using as little generation "magic" as possible, for execution
|
2
|
+
# as plain Ruby script.
|
3
|
+
#
|
4
|
+
# Run using "ruby no_magic.prov"
|
5
|
+
|
6
|
+
require 'bio-publisci'
|
7
|
+
include PubliSci::Prov::DSL
|
8
|
+
|
9
|
+
|
10
|
+
# Subject and type for most elements can be set manually
|
1
11
|
agent :publisci, subject: 'http://gsocsemantic.wordpress.com/publisci', type: "software"
|
2
12
|
agent :R, subject: "http://r-project.org"
|
3
13
|
agent :sciruby, subject: "http://sciruby.com", type: "organization"
|
4
14
|
|
5
|
-
plan :R_steps, steps: "spec/resource/example.Rhistory"
|
15
|
+
plan :R_steps, subject: "http://example.org/plan/R_steps", steps: "spec/resource/example.Rhistory"
|
6
16
|
|
7
17
|
agent :Will do
|
18
|
+
# subject can be called within a block as well
|
8
19
|
subject "http://gsocsemantic.wordpress.com/me"
|
9
20
|
type "person"
|
10
21
|
name "Will Strinz"
|
11
22
|
on_behalf_of "http://sciruby.com"
|
12
23
|
end
|
13
24
|
|
25
|
+
# The wasGeneratedBy relationship is usually created automatically when an activitiy
|
26
|
+
# is associated with an entity, but it can be specified manually
|
14
27
|
entity :triplified_example, subject: "http://example.org/dataset/ex", generated_by: :triplify
|
15
28
|
|
16
29
|
entity :original do
|
@@ -18,23 +31,28 @@ entity :original do
|
|
18
31
|
subject "http://example.org/R/ex"
|
19
32
|
source "./example.RData"
|
20
33
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
activity :use_R do
|
25
|
-
generated :original
|
26
|
-
|
27
|
-
associated_with {
|
28
|
-
agent :R
|
29
|
-
}
|
30
|
-
|
31
|
-
associated_with :Will
|
34
|
+
# Custom predicates and objects can be used for flexibility and extensibility
|
35
|
+
has "http://purl.org/dc/terms/title", "original data object"
|
32
36
|
end
|
33
37
|
|
34
38
|
activity :triplify do
|
39
|
+
# Most methods will take either Symbols or Strings, and correctly handle
|
40
|
+
# resources vs literals
|
41
|
+
subject "http://example.org/activity/triplify"
|
35
42
|
generated "http://example.org/dataset/ex"
|
36
43
|
associated_with :publisci
|
37
44
|
used :original
|
38
45
|
end
|
39
46
|
|
40
|
-
|
47
|
+
activity :use_R do
|
48
|
+
subject "http://example.org/activity/use_R"
|
49
|
+
generated "http://example.org/R/ex"
|
50
|
+
|
51
|
+
associated_with :R
|
52
|
+
associated_with :Will
|
53
|
+
end
|
54
|
+
|
55
|
+
# Running a prov script using the gem executable will print the result, but
|
56
|
+
# if you use the DSL you'll have to do it manually. You also read out to a file
|
57
|
+
# or other method/object of course (eg "open('out.ttl','w'){|file| file.write generate_n3}")
|
58
|
+
puts generate_n3
|
data/examples/primer.prov
CHANGED
@@ -1,28 +1,66 @@
|
|
1
|
-
#
|
1
|
+
# Provenance generation code for primer example at
|
2
|
+
# http://www.w3.org/TR/prov-primer/images/agents.png
|
2
3
|
|
3
|
-
|
4
|
+
# Set the base url
|
5
|
+
base_url "http://example.org"
|
6
|
+
|
7
|
+
# Elements can be created with an options hash
|
8
|
+
entity :chart1, attributed_to: :derek
|
9
|
+
|
10
|
+
# entity => http://www.w3.org/TR/prov-o/#Entity
|
11
|
+
entity :composition1
|
12
|
+
entity :regionList1
|
4
13
|
|
14
|
+
# Elements can also be defined using a block
|
15
|
+
#
|
16
|
+
# agent => http://www.w3.org/TR/prov-o/#Agent
|
5
17
|
agent :derek do
|
18
|
+
|
19
|
+
# name => foaf:name
|
6
20
|
name "Derek"
|
21
|
+
|
22
|
+
# on_behalf_of => http://www.w3.org/TR/prov-o/#actedOnBehalfOf
|
7
23
|
on_behalf_of :chartgen
|
8
24
|
end
|
9
25
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
26
|
+
# Some methods are just wrappers with argument generation
|
27
|
+
# "organization" is short for agent :chartgen, type: "organization"
|
28
|
+
#
|
29
|
+
# organization => http://www.w3.org/TR/prov-o/#Organization
|
30
|
+
organization :chartgen
|
31
|
+
|
14
32
|
|
33
|
+
# An element of the correct type will be looked up for any
|
34
|
+
# method whose argument is a symbol
|
15
35
|
activity :illustrate do
|
36
|
+
|
37
|
+
# generated => http://www.w3.org/TR/prov-o/#generated
|
16
38
|
generated :chart1
|
39
|
+
|
40
|
+
# associated_with => http://www.w3.org/TR/prov-o/#wasAssociatedWith
|
17
41
|
associated_with :derek
|
42
|
+
|
43
|
+
# used => http://www.w3.org/TR/prov-o/#used
|
18
44
|
used :composition1
|
45
|
+
|
19
46
|
end
|
20
47
|
|
21
48
|
activity :compose1 do
|
22
49
|
generated :composition1
|
23
50
|
associated_with :derek
|
24
51
|
used :regionList1
|
52
|
+
|
53
|
+
# Since symbols are lazy loaded (only when looked up by generate_n3)
|
54
|
+
# you can call used here before declaring dataSet1
|
25
55
|
used :dataSet1
|
26
56
|
end
|
27
57
|
|
28
|
-
|
58
|
+
# data is aliased to entity
|
59
|
+
data :dataSet1
|
60
|
+
|
61
|
+
# Returns the turtle form of each element
|
62
|
+
generate_n3
|
63
|
+
|
64
|
+
# Can return abbreviated form by passing true
|
65
|
+
# (easier to read, some prefixes not yet included so may not work w/ triple stores)
|
66
|
+
# generate_n3(true)
|
data/examples/prov_dsl.prov
CHANGED
@@ -1,10 +1,19 @@
|
|
1
|
-
|
1
|
+
# Made up example to show generation and customization features
|
2
|
+
|
3
|
+
# Set subject manually (prevents automatic generation)
|
2
4
|
agent :R, subject: "http://r-project.org"
|
3
5
|
|
6
|
+
agent :publisci, type: "software"
|
7
|
+
|
8
|
+
# Define plan, load step list from file if available
|
4
9
|
plan :R_steps, steps: "spec/resource/example.Rhistory"
|
5
10
|
|
6
11
|
organization :sciruby, subject: "http://sciruby.com"
|
7
12
|
|
13
|
+
# The DSL is built on top Ruby, so you can assign variables if you need to
|
14
|
+
# or do any other ruby thing you might like.
|
15
|
+
#
|
16
|
+
# The vocabulary(url) method is short for RDF::Vocabulary.new(url)
|
8
17
|
foaf = vocabulary "http://xmlns.com/foaf/0.1/"
|
9
18
|
|
10
19
|
agent :Will do
|
@@ -12,12 +21,39 @@ agent :Will do
|
|
12
21
|
name "Will Strinz"
|
13
22
|
on_behalf_of :sciruby
|
14
23
|
|
24
|
+
# Custom predicates can be added using the has(predicate, object) method.
|
15
25
|
has foaf.mailbox, "wstrinz@gmail.com"
|
16
|
-
|
26
|
+
|
27
|
+
# Predicates must but either a vocabulary object or a valid RDF resource,
|
28
|
+
# but objects can be a resource or a literal.
|
29
|
+
#
|
30
|
+
# RDF.rb is used to assign the right type to each object (resource or literal)
|
31
|
+
has "http://xmlns.com/foaf/0.1/", "http://gsocsemantic.wordpress.com/"
|
32
|
+
end
|
33
|
+
|
34
|
+
data :field_work
|
35
|
+
|
36
|
+
data :original do
|
37
|
+
# Derivations and attributions can be generated automatically
|
38
|
+
# if their corresponding methods are called with a symbol
|
39
|
+
attributed_to :R
|
40
|
+
|
41
|
+
# derived_from will add a prov:wasDerivedFrom predicate to this entity
|
42
|
+
# with the subject for the entity represented by :field_work
|
43
|
+
# as its object.
|
44
|
+
derived_from :field_work
|
17
45
|
end
|
18
46
|
|
19
47
|
data :triplified_example do
|
20
48
|
attributed_to :Will
|
49
|
+
|
50
|
+
# Derivations can be qualified by passing a block.
|
51
|
+
# This will add a prov:qualifiedDerivation relation
|
52
|
+
# to the resource for :triplified_example.
|
53
|
+
# (see http://www.w3.org/TR/prov-o/#Derivation)
|
54
|
+
#
|
55
|
+
# A new Derivation resource and object will also be
|
56
|
+
# created with the information in the block.
|
21
57
|
derived_from do
|
22
58
|
entity :original
|
23
59
|
activity :triplify
|
@@ -30,20 +66,15 @@ activity :triplify do
|
|
30
66
|
used :original
|
31
67
|
end
|
32
68
|
|
33
|
-
data :original do
|
34
|
-
derived_from :field_work
|
35
|
-
attributed_to :R
|
36
|
-
end
|
37
|
-
|
38
|
-
data :field_work
|
39
69
|
|
40
70
|
activity :use_R do
|
41
71
|
generated :original
|
42
72
|
|
43
|
-
|
73
|
+
# Qualified associations for activities can also be created using blocks
|
74
|
+
associated_with do
|
44
75
|
agent :R
|
45
76
|
plan :R_steps
|
46
|
-
|
77
|
+
end
|
47
78
|
|
48
79
|
associated_with :Will
|
49
80
|
end
|
data/features/prov_dsl.feature
CHANGED
@@ -3,8 +3,8 @@ Feature: Receive metadata as user input or extract from data sources
|
|
3
3
|
To generate clean provenance strings through a friendly interface
|
4
4
|
I want to use a DSL for the PROV ontology
|
5
5
|
|
6
|
-
Scenario: Generate
|
7
|
-
Given the prov DSL string from file examples/
|
6
|
+
Scenario: Generate based on example for w3.org
|
7
|
+
Given the prov DSL string from file examples/primer.prov
|
8
8
|
When I call Prov.run on it
|
9
9
|
Then I should receive a provenance string
|
10
10
|
|
@@ -41,16 +41,17 @@ module Prov
|
|
41
41
|
@organization = organization
|
42
42
|
end
|
43
43
|
|
44
|
-
def on_behalf_of(
|
45
|
-
if
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
@on_behalf_of = agent
|
44
|
+
def on_behalf_of(other_agent=nil)
|
45
|
+
if other_agent
|
46
|
+
@on_behalf_of = other_agent
|
47
|
+
elsif @on_behalf_of.is_a? Symbol
|
48
|
+
raise "UnknownAgent: #{@on_behalf_of}" unless Prov.agents.has_key?(@on_behalf_of)
|
49
|
+
@on_behalf_of = Prov.agents[@on_behalf_of]
|
51
50
|
else
|
52
51
|
@on_behalf_of
|
53
52
|
end
|
53
|
+
|
54
|
+
@on_behalf_of
|
54
55
|
end
|
55
56
|
alias_method :worked_for, :on_behalf_of
|
56
57
|
|