publisci 0.1.3 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
-
|