publisci 0.1.3 → 0.1.4
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 +2 -2
- data/LICENSE.txt +19 -17
- data/README.md +41 -8
- data/README.rdoc +3 -5
- data/Rakefile +2 -2
- data/bin/publisci +9 -7
- data/examples/visualization/prov_viz.rb +1 -1
- data/lib/publisci.rb +19 -11
- data/lib/publisci/datacube_model.rb +2 -2
- data/lib/publisci/dataset/ORM/data_cube_orm.rb +2 -2
- data/lib/publisci/dataset/data_cube.rb +1 -1
- data/lib/publisci/dataset/dataset_for.rb +6 -1
- data/lib/publisci/dataset/interactive.rb +1 -46
- data/lib/publisci/generators/base.rb +22 -0
- data/lib/publisci/generators/maf.rb +172 -0
- data/lib/publisci/metadata/generator.rb +1 -1
- data/lib/publisci/parser.rb +62 -62
- data/lib/publisci/parsers/base.rb +29 -0
- data/lib/publisci/parsers/maf.rb +20 -0
- data/lib/publisci/readers/arff.rb +43 -43
- data/lib/publisci/readers/base.rb +2 -2
- data/lib/publisci/readers/csv.rb +2 -1
- data/lib/publisci/readers/maf.rb +15 -181
- data/lib/publisci/readers/r_matrix.rb +143 -143
- data/lib/publisci/writers/arff.rb +1 -1
- data/lib/publisci/writers/base.rb +1 -1
- data/resources/maf_rdf.ttl +98 -22
- data/spec/ORM/data_cube_orm_spec.rb +1 -1
- data/spec/ORM/prov_model_spec.rb +3 -3
- data/spec/dataset_for_spec.rb +1 -1
- data/spec/generators/maf_spec.rb +2 -1
- data/spec/maf_query_spec.rb +1 -1
- metadata +25 -23
- data/lib/r2rdf.rb +0 -226
- data/lib/template_bak.rb +0 -12
data/spec/ORM/prov_model_spec.rb
CHANGED
@@ -13,7 +13,7 @@ describe PubliSci::Prov::Model do
|
|
13
13
|
to_repository
|
14
14
|
end
|
15
15
|
|
16
|
-
Spira.
|
16
|
+
Spira.repository = r
|
17
17
|
PubliSci::Prov::Model::Entity.first.should_not be nil
|
18
18
|
end
|
19
19
|
|
@@ -40,7 +40,7 @@ describe PubliSci::Prov::Model do
|
|
40
40
|
# generate_n3
|
41
41
|
# end
|
42
42
|
|
43
|
-
Spira.
|
43
|
+
Spira.repository = r
|
44
44
|
model_agent = PubliSci::Prov::Model::Agent.first
|
45
45
|
ag.subject.should == model_agent.subject
|
46
46
|
acts = model_agent.activities
|
@@ -64,7 +64,7 @@ describe PubliSci::Prov::Model do
|
|
64
64
|
to_repository
|
65
65
|
end
|
66
66
|
|
67
|
-
Spira.
|
67
|
+
Spira.repository = r
|
68
68
|
PubliSci::Prov::Model::Entity.first.all_types.should == %w{http://www.w3.org/ns/prov#Entity http://purl.org/linked-data/cube#DataSet}
|
69
69
|
PubliSci::Prov::Model::Entity.first.has_data?.should == true
|
70
70
|
end
|
data/spec/dataset_for_spec.rb
CHANGED
@@ -29,7 +29,7 @@ describe PubliSci::Dataset do
|
|
29
29
|
PubliSci::Dataset.register_reader('.maf',PubliSci::Readers::MAF)
|
30
30
|
file = PubliSci::Dataset.for('resources/maf_example.maf')
|
31
31
|
str = IO.read(file)
|
32
|
-
File.delete(file
|
32
|
+
File.delete(file)
|
33
33
|
str.size.should > 0
|
34
34
|
(str =~ /qb:Observation/).should_not be nil
|
35
35
|
end
|
data/spec/generators/maf_spec.rb
CHANGED
@@ -7,12 +7,13 @@ require 'tempfile'
|
|
7
7
|
|
8
8
|
describe PubliSci::Readers::MAF do
|
9
9
|
before(:each) do
|
10
|
-
@generator = PubliSci::Readers::MAF
|
10
|
+
@generator = PubliSci::Readers::MAF
|
11
11
|
@in_file = 'resources/maf_example.maf'
|
12
12
|
end
|
13
13
|
|
14
14
|
describe ".generate_n3" do
|
15
15
|
def is_cube(str)
|
16
|
+
|
16
17
|
str[/a qb:Observation/].should_not be nil
|
17
18
|
str[/a rdf:Property, qb:DimensionProperty/].should_not be nil
|
18
19
|
str[/a rdf:Property, qb:MeasureProperty/].should_not be nil
|
data/spec/maf_query_spec.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: publisci
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Will Strinz
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-11-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rest-client
|
@@ -150,20 +150,6 @@ dependencies:
|
|
150
150
|
- - ~>
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: 2.8.0
|
153
|
-
- !ruby/object:Gem::Dependency
|
154
|
-
name: rdoc
|
155
|
-
requirement: !ruby/object:Gem::Requirement
|
156
|
-
requirements:
|
157
|
-
- - ~>
|
158
|
-
- !ruby/object:Gem::Version
|
159
|
-
version: '3.12'
|
160
|
-
type: :development
|
161
|
-
prerelease: false
|
162
|
-
version_requirements: !ruby/object:Gem::Requirement
|
163
|
-
requirements:
|
164
|
-
- - ~>
|
165
|
-
- !ruby/object:Gem::Version
|
166
|
-
version: '3.12'
|
167
153
|
- !ruby/object:Gem::Dependency
|
168
154
|
name: cucumber
|
169
155
|
requirement: !ruby/object:Gem::Requirement
|
@@ -224,16 +210,30 @@ dependencies:
|
|
224
210
|
name: rdoc
|
225
211
|
requirement: !ruby/object:Gem::Requirement
|
226
212
|
requirements:
|
227
|
-
- -
|
213
|
+
- - '>='
|
228
214
|
- !ruby/object:Gem::Version
|
229
|
-
version: '
|
215
|
+
version: '0'
|
230
216
|
type: :development
|
231
217
|
prerelease: false
|
232
218
|
version_requirements: !ruby/object:Gem::Requirement
|
233
219
|
requirements:
|
234
|
-
- -
|
220
|
+
- - '>='
|
221
|
+
- !ruby/object:Gem::Version
|
222
|
+
version: '0'
|
223
|
+
- !ruby/object:Gem::Dependency
|
224
|
+
name: pry
|
225
|
+
requirement: !ruby/object:Gem::Requirement
|
226
|
+
requirements:
|
227
|
+
- - '>='
|
235
228
|
- !ruby/object:Gem::Version
|
236
|
-
version: '
|
229
|
+
version: '0'
|
230
|
+
type: :development
|
231
|
+
prerelease: false
|
232
|
+
version_requirements: !ruby/object:Gem::Requirement
|
233
|
+
requirements:
|
234
|
+
- - '>='
|
235
|
+
- !ruby/object:Gem::Version
|
236
|
+
version: '0'
|
237
237
|
- !ruby/object:Gem::Dependency
|
238
238
|
name: spoon
|
239
239
|
requirement: !ruby/object:Gem::Requirement
|
@@ -311,6 +311,8 @@ files:
|
|
311
311
|
- lib/publisci/dsl/dsl.rb
|
312
312
|
- lib/publisci/dsl/metadata_dsl.rb
|
313
313
|
- lib/publisci/dsl/prov_dsl.rb
|
314
|
+
- lib/publisci/generators/base.rb
|
315
|
+
- lib/publisci/generators/maf.rb
|
314
316
|
- lib/publisci/metadata/generator.rb
|
315
317
|
- lib/publisci/metadata/metadata.rb
|
316
318
|
- lib/publisci/metadata/metadata_model.rb
|
@@ -333,6 +335,8 @@ files:
|
|
333
335
|
- lib/publisci/mixins/vocabulary.rb
|
334
336
|
- lib/publisci/output.rb
|
335
337
|
- lib/publisci/parser.rb
|
338
|
+
- lib/publisci/parsers/base.rb
|
339
|
+
- lib/publisci/parsers/maf.rb
|
336
340
|
- lib/publisci/post_processor.rb
|
337
341
|
- lib/publisci/query/query_helper.rb
|
338
342
|
- lib/publisci/readers/arff.rb
|
@@ -347,8 +351,6 @@ files:
|
|
347
351
|
- lib/publisci/writers/base.rb
|
348
352
|
- lib/publisci/writers/csv.rb
|
349
353
|
- lib/publisci/writers/dataframe.rb
|
350
|
-
- lib/r2rdf.rb
|
351
|
-
- lib/template_bak.rb
|
352
354
|
- lib/template_bak/publisci.rb
|
353
355
|
- lib/vocabs/cc.rb
|
354
356
|
- lib/vocabs/cert.rb
|
@@ -438,7 +440,7 @@ files:
|
|
438
440
|
- spec/writer_spec.rb
|
439
441
|
homepage: http://github.com/wstrinz/publisci
|
440
442
|
licenses:
|
441
|
-
-
|
443
|
+
- BSD 2-Clause
|
442
444
|
metadata: {}
|
443
445
|
post_install_message:
|
444
446
|
rdoc_options: []
|
data/lib/r2rdf.rb
DELETED
@@ -1,226 +0,0 @@
|
|
1
|
-
require 'rserve'
|
2
|
-
require 'rdf/4store'
|
3
|
-
Dir[File.dirname(__FILE__) + '/vocabs/*.rb'].each {|file| require file }
|
4
|
-
|
5
|
-
class QTL2RDF
|
6
|
-
|
7
|
-
attr_accessor :port_4s
|
8
|
-
|
9
|
-
def initialize(dir='.')
|
10
|
-
@dir = File.absolute_path(dir)
|
11
|
-
@R = Rserve::Connection.new()
|
12
|
-
if File.exist?(dir + "/.RData")
|
13
|
-
# puts "loading workspace #{dir}/.RData"
|
14
|
-
@R.eval("load('#{dir}/.RData')")
|
15
|
-
end
|
16
|
-
|
17
|
-
if File.exist?(dir + "/.Rhistory")
|
18
|
-
# puts "loading history #{dir}/.Rhistory"
|
19
|
-
@R.eval("loadhistory('#{dir}/.Rhistory')")
|
20
|
-
end
|
21
|
-
|
22
|
-
@port_4s = 8080
|
23
|
-
end
|
24
|
-
|
25
|
-
def load_workspace(dir=@dir,file='.RData')
|
26
|
-
path = File.join(File.absolute_path(dir),file)
|
27
|
-
if File.exist?(path)
|
28
|
-
# puts "loading workspace #{dir}/.RData"
|
29
|
-
@R.eval("load('#{path}')")
|
30
|
-
else
|
31
|
-
puts "Couldn't find #{path}"
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
def load_history(dir=@dir,file='.Rhistory')
|
36
|
-
path = File.join(File.absolute_path(dir),file)
|
37
|
-
if File.exist?(path)
|
38
|
-
# puts "loading history #{dir}/.Rhistory"
|
39
|
-
@R.eval("loadhistory('#{path}')")
|
40
|
-
else
|
41
|
-
puts "Couldn't find #{path}"
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
def dump_dataframe(var)
|
46
|
-
h = {}
|
47
|
-
h[var] = {"attr" => {}, "rows"=>{}}
|
48
|
-
|
49
|
-
x = @R.eval(var)
|
50
|
-
|
51
|
-
x.attr.payload.keys.map{ |a|
|
52
|
-
h[var]["attr"][a] = x.attr.payload[a].to_ruby
|
53
|
-
}
|
54
|
-
|
55
|
-
rownames = x.attr.payload["row.names"].to_ruby
|
56
|
-
colnames = x.payload.keys
|
57
|
-
rownames.each_with_index.map{ |row,i|
|
58
|
-
rh = {}
|
59
|
-
colnames.map{ |col|
|
60
|
-
rh[col] = x.payload[col].to_a[i].to_f
|
61
|
-
}
|
62
|
-
h[var]["rows"][row] = rh
|
63
|
-
}
|
64
|
-
|
65
|
-
h
|
66
|
-
end
|
67
|
-
|
68
|
-
def dump(var)
|
69
|
-
x = @R.eval(var)
|
70
|
-
if x.attr
|
71
|
-
# if x.attr.payload["class"].to_a.include? 'data.frame'
|
72
|
-
dump_dataframe var
|
73
|
-
# end
|
74
|
-
else
|
75
|
-
if x.list?
|
76
|
-
type = x.payload.class.to_s.split("::").last # seems hacky, but probably only temporary
|
77
|
-
value = x.payload.map(&:payload).flatten
|
78
|
-
elsif x.payload.size == 1
|
79
|
-
type = x.class.to_s.split("::").last
|
80
|
-
value = x.payload.first
|
81
|
-
else
|
82
|
-
type = x.class.to_s.split("::").last
|
83
|
-
value = x.payload
|
84
|
-
end
|
85
|
-
{var => {"attr"=>{"class" => type}, :value => value}}
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
def triples_for(h)
|
90
|
-
statements = []
|
91
|
-
base_n = RDF::Node.new
|
92
|
-
attr_n = RDF::Node.new
|
93
|
-
vocab = RDF::Vocabulary.new('http://www.placeholder.com/rqtl#')
|
94
|
-
base_uri = RDF::URI.new('http://www.placeholder.com/')
|
95
|
-
var = h.keys.first
|
96
|
-
|
97
|
-
statements << RDF::Statement.new(base_n, RDF::DC.title, RDF::Literal.new(var))
|
98
|
-
|
99
|
-
if h[var].is_a? Hash
|
100
|
-
if(h[var]["attr"])
|
101
|
-
statements << RDF::Statement.new(base_n, vocab.attributes, attr_n)
|
102
|
-
h[var]["attr"].map{ |k,v| statements << RDF::Statement.new(attr_n, vocab[k], RDF::Literal.new(v)) }
|
103
|
-
end
|
104
|
-
|
105
|
-
if h[var]["rows"]
|
106
|
-
h[var]["rows"].map{ |k,v|
|
107
|
-
row_uri = base_uri.join("row#{k}")
|
108
|
-
statements << RDF::Statement.new(row_uri, vocab.row_of, base_n)
|
109
|
-
statements << RDF::Statement.new(row_uri, RDF::DC.title, k)
|
110
|
-
num = 1 # maybe container support exists in RDF.rb?
|
111
|
-
v.map { |j,u|
|
112
|
-
n = RDF::Node.new
|
113
|
-
statements << RDF::Statement.new(n, vocab.entry_of, row_uri)
|
114
|
-
statements << RDF::Statement.new(n, RDF::DC.title, j)
|
115
|
-
statements << RDF::Statement.new(n, RDF::DC.title, j)
|
116
|
-
statements << RDF::Statement.new(n, vocab["_#{num}"], RDF::Literal.new(u))
|
117
|
-
num += 1
|
118
|
-
}
|
119
|
-
}
|
120
|
-
end
|
121
|
-
|
122
|
-
if h[var].has_key? :value
|
123
|
-
statements << RDF::Statement.new(base_n, vocab.has_value, RDF::Literal.new(h[var][:value]))
|
124
|
-
end
|
125
|
-
else
|
126
|
-
statements << RDF::Statement.new(base_n, vocab.has_value, RDF::Literal.new(h[var]))
|
127
|
-
end
|
128
|
-
statements
|
129
|
-
end
|
130
|
-
|
131
|
-
#get n3 for a dataframe using datacube vocabulary
|
132
|
-
#still needs range for measures and dimensions, sdmx-dimension equivalent for rows
|
133
|
-
def n3_for(h)
|
134
|
-
str = <<-EOF
|
135
|
-
@prefix : <http://www.rqtl.org/ns/#> .
|
136
|
-
@prefix qb: <http://purl.org/linked-data/cube#> .
|
137
|
-
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
|
138
|
-
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
|
139
|
-
@prefix prop: <http://www.rqtl.org/dc/properties/> .
|
140
|
-
@prefix cs: <http://www.rqtl.org/dc/cs/> .
|
141
|
-
|
142
|
-
EOF
|
143
|
-
#@prefix sdmx-measure: <http://purl.org/linked-data/sdmx/2009/measure#>
|
144
|
-
var = h.keys.first
|
145
|
-
names = h[var]["attr"]["names"]
|
146
|
-
|
147
|
-
#generate data structure definition
|
148
|
-
str << ":dsd-#{var} a qb:DataStructureDefinition ;\n"
|
149
|
-
str << "\tqb:component cs:refRow ,\n"
|
150
|
-
names.map{ |n|
|
151
|
-
str << "\t\tcs:#{n} ,\n\n"
|
152
|
-
}
|
153
|
-
str[-3]="."
|
154
|
-
|
155
|
-
#generate component specifications
|
156
|
-
str << "cs:refRow a qb:ComponentSpecification ;\n\trdfs:label \"Component Specification for Row\" ;\n\tqb:dimension prop:refRow .\n\n"
|
157
|
-
names.map{ |n|
|
158
|
-
str << "cs:#{n} a qb:ComponentSpecification ;\n\trdfs:label \"Component Specification for #{n}\" ;\n\tqb:measure prop:#{n} .\n\n"
|
159
|
-
}
|
160
|
-
|
161
|
-
#generate dataset definition
|
162
|
-
str << ":dataset-#{var} a qb:DataSet ;\n\trdfs:label \"#{var}\"@en ;\n\tqb:structure :dsd-#{var} .\n\n"
|
163
|
-
|
164
|
-
#add DimensionProperty for row
|
165
|
-
str << <<-EOF
|
166
|
-
:refRow a rdf:Property, qb:DimensionProperty ;
|
167
|
-
\trdfs:label "Row"@en .
|
168
|
-
|
169
|
-
EOF
|
170
|
-
|
171
|
-
#generate MeasureProperties
|
172
|
-
names.map{ |n|
|
173
|
-
str << ":#{n} a rdf:Property, qb:MeasureProperty ;\n\trdfs:label \"#{n}\"@en .\n\n"
|
174
|
-
}
|
175
|
-
|
176
|
-
#add observations
|
177
|
-
h[var]["rows"].map{|k,v|
|
178
|
-
str << ":obs#{k} a qb:Observation ;\n\tqb:dataSet :dataset-#{var} ;\n\tprop:refRow :#{k} ;\n"
|
179
|
-
v.map{|l,w|
|
180
|
-
str << "\tprop:#{l} #{w} ;\n"
|
181
|
-
}
|
182
|
-
str << "\t.\n\n"
|
183
|
-
}
|
184
|
-
|
185
|
-
#add row property definitions
|
186
|
-
h[var]["rows"].map{|k,v|
|
187
|
-
str << ":#{k} a prop:refRow ;\n\trdfs:label \"#{k}\" .\n\n"
|
188
|
-
}
|
189
|
-
|
190
|
-
str
|
191
|
-
end
|
192
|
-
|
193
|
-
def statements_for(string,type=:turtle)
|
194
|
-
statements = []
|
195
|
-
RDF::Reader.for(:turtle).new(string) do |reader|
|
196
|
-
reader.each_statement do |statement|
|
197
|
-
# puts statement.inspect
|
198
|
-
statements << statement
|
199
|
-
end
|
200
|
-
end
|
201
|
-
statements
|
202
|
-
end
|
203
|
-
|
204
|
-
def turtletype_for(value)
|
205
|
-
#use for providing ranges to better define data (later)
|
206
|
-
end
|
207
|
-
|
208
|
-
def load_statements(statements)
|
209
|
-
#maybe a better way than inserting statements one at a time?
|
210
|
-
repo = RDF::FourStore::Repository.new("http://localhost:#{@port_4s}")
|
211
|
-
statements.each{|s| repo.insert(s)}
|
212
|
-
end
|
213
|
-
|
214
|
-
def to_store(var, parse_type=:turtle)
|
215
|
-
load_statements(triples_for(dump(var))) if parse_type==:ntriples
|
216
|
-
|
217
|
-
#TODO: this doesn't work (needs to be converted to statments or
|
218
|
-
# a way of inserting raw strings needs to be figured out.
|
219
|
-
load_statements(n3_for(dump(var))) if parse_type==:turtle
|
220
|
-
end
|
221
|
-
|
222
|
-
def vars
|
223
|
-
@R.eval("ls()").payload
|
224
|
-
end
|
225
|
-
|
226
|
-
end
|
data/lib/template_bak.rb
DELETED
@@ -1,12 +0,0 @@
|
|
1
|
-
# Please require your code below, respecting the naming conventions in the
|
2
|
-
# bioruby directory tree.
|
3
|
-
#
|
4
|
-
# For example, say you have a plugin named bio-plugin, the only uncommented
|
5
|
-
# line in this file would be
|
6
|
-
#
|
7
|
-
# require 'bio/bio-plugin/plugin'
|
8
|
-
#
|
9
|
-
# In this file only require other files. Avoid other source code.
|
10
|
-
|
11
|
-
require 'publisci/publisci.rb'
|
12
|
-
|