bio-publisci 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.travis.yml +1 -1
- data/Gemfile +1 -1
- data/Rakefile +4 -6
- data/features/integration_steps.rb +1 -1
- data/features/metadata.feature +24 -0
- data/features/metadata_steps.rb +21 -0
- data/lib/bio-publisci/dataset/ORM/data_cube_orm.rb +36 -14
- data/lib/bio-publisci/dataset/ORM/observation.rb +1 -1
- data/lib/bio-publisci/dataset/data_cube.rb +192 -131
- data/lib/bio-publisci/dataset/dataset_for.rb +150 -0
- data/lib/bio-publisci/dataset/interactive.rb +70 -55
- data/lib/bio-publisci/metadata/metadata.rb +81 -8
- data/lib/bio-publisci/parser.rb +76 -1
- data/lib/bio-publisci/readers/big_cross.rb +118 -117
- data/lib/bio-publisci/readers/csv.rb +37 -2
- data/lib/bio-publisci/readers/r_matrix.rb +1 -1
- data/lib/bio-publisci/store.rb +31 -31
- data/lib/bio-publisci/writers/arff.rb +48 -49
- data/lib/bio-publisci.rb +3 -0
- data/resources/queries/code_resources.rq +10 -0
- data/resources/queries/dimension_ranges.rq +3 -3
- data/resources/queries/dimensions.rq +3 -3
- data/resources/queries/measures.rq +3 -3
- data/resources/queries/observation_labels.rq +8 -0
- data/resources/queries/properties.rq +8 -0
- data/scripts/islet_mlratio.rb +6 -0
- data/scripts/scan_islet.rb +6 -0
- data/scripts/update_reference.rb +20 -0
- data/spec/ORM/data_cube_orm_spec.rb +12 -0
- data/spec/data_cube_spec.rb +1 -1
- data/spec/generators/dataframe_spec.rb +1 -1
- data/spec/generators/r_matrix_spec.rb +1 -1
- data/spec/r_builder_spec.rb +6 -6
- data/spec/resource/.RData +0 -0
- data/spec/resource/example.Rhistory +3 -0
- data/spec/turtle/bacon +4 -22
- data/spec/turtle/reference +9 -27
- metadata +37 -56
- data/lib/bio-publisci/loader.rb +0 -36
- data/spec/bio-publisci_spec.rb +0 -7
@@ -1,119 +1,120 @@
|
|
1
1
|
module R2RDF
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
2
|
+
module Reader
|
3
|
+
class BigCross
|
4
|
+
include R2RDF::Dataset::DataCube
|
5
|
+
|
6
|
+
def generate_n3(client, var, outfile_base, options={})
|
7
|
+
meas = measures(client,var,options)
|
8
|
+
dim = dimensions(client,var,options)
|
9
|
+
codes = codes(client,var,options)
|
10
|
+
|
11
|
+
|
12
|
+
#write structure
|
13
|
+
open(outfile_base+'_structure.ttl','w'){|f| f.write structure(client,var,options)}
|
14
|
+
|
15
|
+
n_individuals = client.eval("length(#{var}$pheno[[1]])").payload.first
|
16
|
+
chromosome_list = (1..19).to_a.map(&:to_s) + ["X"]
|
17
|
+
chromosome_list.map{|chrom|
|
18
|
+
open(outfile_base+"_#{chrom}.ttl",'w'){|f| f.write prefixes(var,options)}
|
19
|
+
entries_per_individual = client.eval("length(#{var}$geno$'#{chrom}'$map)").to_ruby
|
20
|
+
|
21
|
+
#get genotype data (currently only for chromosome 1)
|
22
|
+
# => puts "#{var}$geno$'#{chrom}'"
|
23
|
+
geno_chr = client.eval("#{var}$geno$'#{chrom}'")
|
24
|
+
|
25
|
+
#get number of markers per individual
|
26
|
+
|
27
|
+
#write observations
|
28
|
+
n_individuals.times{|indi|
|
29
|
+
#time ||= Time.now
|
30
|
+
obs_data = observation_data(client,var,chrom.to_s,indi,geno_chr,entries_per_individual,options)
|
31
|
+
labels = labels_for(obs_data,chrom.to_s,indi)
|
32
|
+
open(outfile_base+"_#{chrom}.ttl",'a'){|f| observations(meas,dim,codes,obs_data,labels,var,options).map{|obs| f.write obs}}
|
33
|
+
puts "(#{chrom}) #{indi}/#{n_individuals}" #(#{Time.now - time})
|
34
|
+
#time = Time.now
|
35
|
+
}
|
36
|
+
}
|
37
|
+
|
38
|
+
#generate(measures, dimensions, codes, observation_data, observation_labels, var, options)
|
39
|
+
end
|
40
|
+
|
41
|
+
def structure(client,var,options={})
|
42
|
+
meas = measures(client,var,options)
|
43
|
+
dim = dimensions(client,var,options)
|
44
|
+
codes = codes(client,var,options)
|
45
|
+
|
46
|
+
str = prefixes(var,options)
|
47
|
+
str << data_structure_definition(meas,dim,codes,var,options)
|
48
|
+
str << dataset(var,options)
|
49
|
+
component_specifications(meas, dim, var, options).map{ |c| str << c }
|
50
|
+
measure_properties(meas,var,options).map{|m| str << m}
|
51
|
+
|
52
|
+
str
|
53
|
+
end
|
54
|
+
|
55
|
+
def measures(client, var, options={})
|
56
|
+
pheno_names = client.eval("names(#{var}$pheno)").to_ruby
|
57
|
+
if options[:measures]
|
58
|
+
(pheno_names & options[:measures]) | ["genotype","markerpos","marker"]
|
59
|
+
else
|
60
|
+
pheno_names | ["genotype","markerpos","marker"]
|
61
|
+
end
|
62
|
+
# measure_properties(measures,var,options)
|
63
|
+
end
|
64
|
+
|
65
|
+
def dimensions(client, var, options={})
|
66
|
+
# dimension_properties([""],var)
|
67
|
+
[]
|
68
|
+
end
|
69
|
+
|
70
|
+
def codes(client, var, options={})
|
71
|
+
[]
|
72
|
+
end
|
73
|
+
|
74
|
+
def labels_for(data,chr,individual,options={})
|
75
|
+
labels=(((data.first.last.size*individual)+1)..(data.first.last.size*(individual+1))).to_a.map(&:to_s)
|
76
|
+
labels.map{|l| l.insert(0,"#{chr}_")}
|
77
|
+
labels
|
78
|
+
end
|
79
|
+
|
80
|
+
def observation_data(client, var, chr, row_individ, geno_chr, entries_per_individual, options={})
|
81
|
+
data = {}
|
82
|
+
# geno_chr = client.eval("#{var}$geno$'#{chr}'")
|
83
|
+
# n_individuals = client.eval("#{var}$pheno[[1]]").to_ruby.size
|
84
|
+
# entries_per_individual = @rexp.payload["geno"].payload[row_individ].payload["map"].payload.size * @rexp.payload["geno"].payload.names.size
|
85
|
+
data["chr"] = []
|
86
|
+
data["genotype"] = []
|
87
|
+
data["individual"] = []
|
88
|
+
data["marker"] = []
|
89
|
+
data["markerpos"] = []
|
90
|
+
pheno_names = client.eval("names(#{var}$pheno)").to_ruby
|
91
|
+
pheno_names.map{|name|
|
92
|
+
data[name] = []
|
93
|
+
}
|
94
|
+
# n_individuals.times{|row_individ|
|
95
|
+
# puts "#{row_individ}/#{n_individuals}"
|
96
|
+
data["individual"] << (1..entries_per_individual).to_a.fill(row_individ)
|
97
|
+
|
98
|
+
pheno_names.map{|name|
|
99
|
+
data[name] << (1..entries_per_individual).to_a.fill(client.eval("#{var}$pheno$#{name}").to_ruby[row_individ])
|
100
|
+
}
|
101
|
+
# @rexp.payload["geno"].payload.names.map { |chr|
|
102
|
+
num_markers = geno_chr.payload.first.to_ruby.column_size
|
103
|
+
data["chr"] << (1..num_markers).to_a.fill(chr)
|
104
|
+
data["genotype"] << geno_chr.payload["data"].to_ruby.row(row_individ).to_a
|
105
|
+
data["marker"] << client.eval("names(#{var}$geno$'#{chr}'$map)").payload
|
106
|
+
data["markerpos"] << geno_chr.payload["map"].to_a
|
107
|
+
# }
|
108
|
+
# }
|
109
|
+
data.map{|k,v| v.flatten!}
|
110
|
+
data
|
111
|
+
end
|
112
|
+
|
113
|
+
def num_individuals(client, var, options={})
|
114
|
+
client.eval("#{var}$pheno").payload.first.to_ruby.size
|
115
|
+
end
|
116
|
+
|
117
|
+
|
118
|
+
end
|
119
|
+
end
|
119
120
|
end
|
@@ -1,7 +1,43 @@
|
|
1
1
|
module R2RDF
|
2
2
|
module Reader
|
3
3
|
class CSV
|
4
|
-
|
4
|
+
include R2RDF::Dataset::DataCube
|
5
|
+
include R2RDF::Interactive
|
6
|
+
|
7
|
+
def automatic(file=nil,dataset_name=nil,options={},interactive=true)
|
8
|
+
#to do
|
9
|
+
unless file || !interactive
|
10
|
+
puts "Input file?"
|
11
|
+
file = gets.chomp
|
12
|
+
end
|
13
|
+
|
14
|
+
raise "CSV reader needs an input file" unless file && file.size > 0
|
15
|
+
|
16
|
+
|
17
|
+
unless dataset_name
|
18
|
+
if interactive
|
19
|
+
dataset_name = interact("Dataset name?","#{File.basename(file).split('.').first}"){|sel| File.basename(file).split('.').first }
|
20
|
+
else
|
21
|
+
dataset_name = File.basename(file).split('.').first
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
categories = ::CSV.read(file)[0]
|
27
|
+
|
28
|
+
|
29
|
+
unless options[:dimensions] || !interactive
|
30
|
+
options[:dimensions] = Array(interact("Dimensions?",categories[0],categories))
|
31
|
+
end
|
32
|
+
|
33
|
+
unless options[:measures] || !interactive
|
34
|
+
meas = categories - ((options[:dimensions] || []) | [categories[0]])
|
35
|
+
selection = interact("Measures?",meas,meas){|s| nil}
|
36
|
+
options[:measures] = Array(selection) unless options[:measures] == nil
|
37
|
+
end
|
38
|
+
|
39
|
+
generate_n3(file,dataset_name,options)
|
40
|
+
end
|
5
41
|
|
6
42
|
def generate_n3(file, dataset_name, options={})
|
7
43
|
@data = ::CSV.read(file)
|
@@ -34,7 +70,6 @@ module R2RDF
|
|
34
70
|
end
|
35
71
|
|
36
72
|
def observation_data
|
37
|
-
|
38
73
|
obs = {}
|
39
74
|
@data[0].map{|label|
|
40
75
|
obs[label] = []
|
@@ -50,7 +50,7 @@ module R2RDF
|
|
50
50
|
codes = codes(client,var,options)
|
51
51
|
|
52
52
|
str = prefixes(var, options)
|
53
|
-
str << data_structure_definition(meas,outvar,options)
|
53
|
+
str << data_structure_definition(meas,[],codes,outvar,options)
|
54
54
|
str << dataset(outvar,options)
|
55
55
|
component_specifications(meas, dim, var, options).map{ |c| str << c }
|
56
56
|
measure_properties(meas,var,options).map{|m| str << m}
|
data/lib/bio-publisci/store.rb
CHANGED
@@ -1,56 +1,56 @@
|
|
1
1
|
module R2RDF
|
2
2
|
# handles connection and messaging to/from the triple store
|
3
3
|
class Store
|
4
|
-
|
4
|
+
include R2RDF::Query
|
5
5
|
|
6
6
|
def defaults
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
{
|
8
|
+
type: :fourstore,
|
9
|
+
url: "http://localhost:8080", #TODO port etc should eventually be extracted from URI if given
|
10
10
|
replace: false
|
11
|
-
|
12
|
-
|
11
|
+
}
|
12
|
+
end
|
13
13
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
14
|
+
def add(file,graph)
|
15
|
+
if @options[:type] == :graph
|
16
|
+
throw "please provide an RDF::Repository" unless graph.is_a? RDF::Repository
|
17
|
+
graph.load(file)
|
18
|
+
@store = graph
|
19
|
+
@store
|
20
|
+
elsif @options[:type] == :fourstore
|
21
|
+
if @options[:replace]
|
22
22
|
`curl -T #{file} -H 'Content-Type: application/x-turtle' #{@options[:url]}/data/http%3A%2F%2Frqtl.org%2F#{graph}`
|
23
23
|
else
|
24
24
|
`curl --data-urlencode data@#{file} -d 'graph=http%3A%2F%2Frqtl.org%2F#{graph}' -d 'mime-type=application/x-turtle' #{@options[:url]}/data/`
|
25
25
|
end
|
26
|
-
|
27
|
-
|
26
|
+
end
|
27
|
+
end
|
28
28
|
|
29
|
-
|
30
|
-
|
29
|
+
def add_all(dir, graph, pattern=nil)
|
30
|
+
pattern = /.+\.ttl/ if pattern == :turtle || pattern == :ttl
|
31
31
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
32
|
+
files = Dir.entries(dir) - %w(. ..)
|
33
|
+
files = files.grep(pattern) if pattern.is_a? Regexp
|
34
|
+
nfiles = files.size
|
35
|
+
n = 0
|
36
|
+
files.each{|file| puts file + " #{n+=1}/#{nfiles} files"; puts add(file,graph)}
|
37
|
+
end
|
38
38
|
|
39
39
|
def initialize(options={})
|
40
40
|
@options = defaults.merge(options)
|
41
41
|
end
|
42
42
|
|
43
43
|
def query(string)
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
44
|
+
# execute(string, )
|
45
|
+
if @options[:type] == :graph
|
46
|
+
execute(string, @store, :graph)
|
47
|
+
elsif @options[:type] == :fourstore
|
48
|
+
execute(string, @options[:url], :fourstore)
|
49
|
+
end
|
50
50
|
end
|
51
51
|
|
52
52
|
def url
|
53
|
-
|
53
|
+
@options[:url]
|
54
54
|
end
|
55
55
|
end
|
56
56
|
end
|
@@ -1,12 +1,12 @@
|
|
1
1
|
module R2RDF
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
2
|
+
module Writer
|
3
|
+
class ARFF
|
4
|
+
include R2RDF::Query
|
5
|
+
include R2RDF::Parser
|
6
|
+
include R2RDF::Analyzer
|
7
7
|
|
8
|
-
|
9
|
-
|
8
|
+
def build_arff(relation, attributes, data, source)
|
9
|
+
str = <<-EOS
|
10
10
|
% 1. Title: #{relation.capitalize} Database
|
11
11
|
%
|
12
12
|
% 2. Sources:
|
@@ -16,51 +16,50 @@ module R2RDF
|
|
16
16
|
|
17
17
|
EOS
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
|
19
|
+
Hash[attributes.sort].map{|attribute,type|
|
20
|
+
str << "@ATTRIBUTE #{attribute} #{type}\n"
|
21
|
+
}
|
22
22
|
|
23
|
-
|
24
|
-
|
23
|
+
str << "\n@DATA\n"
|
24
|
+
data.map { |d| str << Hash[d[1].sort].values.join(',') + "\n" }
|
25
25
|
|
26
|
-
|
27
|
-
|
26
|
+
str
|
27
|
+
end
|
28
28
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
29
|
+
def from_turtle(turtle_file, verbose=false)
|
30
|
+
puts "loading #{turtle_file}" if verbose
|
31
|
+
repo = RDF::Repository.load(turtle_file)
|
32
|
+
puts "loaded #{repo.size} statements into temporary repo" if verbose
|
33
|
+
|
34
|
+
dims = execute_from_file("dimensions.rq",repo,:graph).to_h.map{|d| [d[:dimension].to_s, d[:label].to_s]}
|
35
|
+
meas = execute_from_file("measures.rq",repo,:graph).to_h.map{|m| [m[:measure].to_s, m[:label].to_s]}
|
36
|
+
relation = execute_from_file("dataset.rq",repo,:graph).to_h.first[:label].to_s
|
37
|
+
codes = execute_from_file("codes.rq",repo,:graph).to_h.map{|e| e.values.map(&:to_s)}.inject({}){|h,el|
|
38
|
+
(h[el.first]||=[]) << el.last; h
|
39
|
+
}
|
40
40
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
41
|
+
data = observation_hash(execute_from_file("observations.rq",repo,:graph), true)
|
42
|
+
attributes = {}
|
43
|
+
(dims | meas).map{|component|
|
44
|
+
attributes[component[1]] = case recommend_range(data.map{|o| o[1][component[1]]})
|
45
|
+
when "xsd:int"
|
46
|
+
"integer"
|
47
|
+
when "xsd:double"
|
48
|
+
"real"
|
49
|
+
when :coded
|
50
|
+
if dims.include? component
|
51
|
+
"{#{codes[component[1]].join(',')}}"
|
52
|
+
else
|
53
|
+
"string"
|
54
|
+
end
|
55
|
+
end
|
56
|
+
}
|
57
|
+
build_arff(relation, attributes, data, turtle_file)
|
58
|
+
end
|
57
59
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
60
|
+
def from_store(endpoint_url,variable_in=nil, variable_out=nil, verbose=false)
|
61
|
+
raise "not implemented yet"
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
66
65
|
end
|
data/lib/bio-publisci.rb
CHANGED
@@ -8,6 +8,8 @@ require 'sparql'
|
|
8
8
|
require 'sparql/client'
|
9
9
|
require 'rdf/turtle'
|
10
10
|
|
11
|
+
# require 'bio-band'
|
12
|
+
|
11
13
|
def load_folder(folder)
|
12
14
|
Dir.foreach(File.dirname(__FILE__) + "/#{folder}") do |file|
|
13
15
|
unless file == "." or file == ".."
|
@@ -23,6 +25,7 @@ load File.dirname(__FILE__) + '/bio-publisci/r_client.rb'
|
|
23
25
|
load File.dirname(__FILE__) + '/bio-publisci/analyzer.rb'
|
24
26
|
load File.dirname(__FILE__) + '/bio-publisci/store.rb'
|
25
27
|
load File.dirname(__FILE__) + '/bio-publisci/dataset/data_cube.rb'
|
28
|
+
load File.dirname(__FILE__) + '/bio-publisci/dataset/dataset_for.rb'
|
26
29
|
|
27
30
|
|
28
31
|
load_folder('bio-publisci/metadata')
|
@@ -0,0 +1,10 @@
|
|
1
|
+
PREFIX qb: <http://purl.org/linked-data/cube#>
|
2
|
+
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
|
3
|
+
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
|
4
|
+
|
5
|
+
SELECT DISTINCT ?dimension ?dimLabel ?codeList ?class WHERE{
|
6
|
+
?dimension a qb:DimensionProperty;
|
7
|
+
rdfs:label ?dimLabel;
|
8
|
+
qb:codeList ?codeList;
|
9
|
+
rdfs:range ?class.
|
10
|
+
}
|
@@ -1,8 +1,8 @@
|
|
1
1
|
PREFIX qb: <http://purl.org/linked-data/cube#>
|
2
2
|
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
|
3
3
|
|
4
|
-
SELECT DISTINCT ?dimension ?range WHERE {
|
5
|
-
?
|
6
|
-
rdfs:label ?
|
4
|
+
SELECT DISTINCT ?dimension ?range ?label WHERE {
|
5
|
+
?dimension a qb:DimensionProperty;
|
6
|
+
rdfs:label ?label;
|
7
7
|
rdfs:range ?range.
|
8
8
|
}
|
@@ -1,7 +1,7 @@
|
|
1
1
|
PREFIX qb: <http://purl.org/linked-data/cube#>
|
2
2
|
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
|
3
3
|
|
4
|
-
SELECT DISTINCT ?dimension WHERE{
|
5
|
-
?
|
6
|
-
rdfs:label ?
|
4
|
+
SELECT DISTINCT ?dimension ?label WHERE{
|
5
|
+
?dimension a qb:DimensionProperty;
|
6
|
+
rdfs:label ?label.
|
7
7
|
}
|
@@ -1,7 +1,7 @@
|
|
1
1
|
PREFIX qb: <http://purl.org/linked-data/cube#>
|
2
2
|
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
|
3
3
|
|
4
|
-
SELECT DISTINCT ?measure WHERE{
|
5
|
-
?
|
6
|
-
rdfs:label ?
|
4
|
+
SELECT DISTINCT ?measure ?label WHERE{
|
5
|
+
?measure a qb:MeasureProperty;
|
6
|
+
rdfs:label ?label.
|
7
7
|
}
|
@@ -0,0 +1,6 @@
|
|
1
|
+
load File.dirname(__FILE__) + '/../lib/bio-publisci.rb'
|
2
|
+
|
3
|
+
gen = R2RDF::Reader::RMatrix.new
|
4
|
+
con = Rserve::Connection.new
|
5
|
+
con.eval("load('#{ARGV[0] || './.RData'}')")
|
6
|
+
gen.generate_n3(con, "islet.mlratio", "pheno", {measures: ["probe","individual","pheno"], no_labels: true})
|
@@ -0,0 +1,6 @@
|
|
1
|
+
load File.dirname(__FILE__) + '/../lib/bio-publisci.rb'
|
2
|
+
|
3
|
+
gen = R2RDF::Reader::RMatrix.new
|
4
|
+
con = Rserve::Connection.new
|
5
|
+
con.eval("load('#{ARGV[0] || './.RData'}')")
|
6
|
+
gen.generate_n3(con, "scan.islet", "scan", {measures: ["probe","marker","lod"], no_labels: true})
|
@@ -0,0 +1,20 @@
|
|
1
|
+
puts "Really rewrite reference files? This could mess up the tests... [y/N]"
|
2
|
+
exit unless gets.chomp == 'y'
|
3
|
+
|
4
|
+
puts "overwriting #{File.absolute_path(File.dirname(__FILE__) + '/../spec/turtle/bacon')}"
|
5
|
+
load File.dirname(__FILE__) + '/../lib/bio-publisci.rb'
|
6
|
+
|
7
|
+
gen = R2RDF::Reader::CSV.new
|
8
|
+
turtle_string = gen.generate_n3(File.dirname(__FILE__) + '/../spec/csv/bacon.csv','bacon',{dimensions:["producer","pricerange"], label_column:0})
|
9
|
+
open(File.dirname(__FILE__) + '/../spec/turtle/bacon', 'w'){|f| f.write turtle_string}
|
10
|
+
|
11
|
+
rcon = Rserve::Connection.new
|
12
|
+
gen = R2RDF::Reader::Dataframe.new
|
13
|
+
rcon.void_eval <<-EOF
|
14
|
+
library(qtl)
|
15
|
+
data(listeria)
|
16
|
+
mr = scanone(listeria,method="mr")
|
17
|
+
EOF
|
18
|
+
rexp = rcon.eval 'mr'
|
19
|
+
turtle_string = gen.generate_n3(rexp,'mr')
|
20
|
+
open(File.dirname(__FILE__) + '/../spec/turtle/reference', 'w'){|f| f.write turtle_string}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require_relative '../../lib/bio-publisci.rb'
|
2
|
+
|
3
|
+
describe R2RDF::Dataset::ORM::DataCube do
|
4
|
+
|
5
|
+
it "should load and save a turtle file without loss of information" do
|
6
|
+
ref = IO.read(File.dirname(__FILE__) + '/../turtle/bacon')
|
7
|
+
cube = R2RDF::Dataset::ORM::DataCube.load(ref, {skip_metadata: true, generator_options: {label_column: 0}})
|
8
|
+
cube.abbreviate_known(cube.to_n3).should == ref
|
9
|
+
# cube.to_n3.should == ref
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
data/spec/data_cube_spec.rb
CHANGED
@@ -68,7 +68,7 @@ describe R2RDF::Dataset::DataCube do
|
|
68
68
|
end
|
69
69
|
|
70
70
|
it 'generates data structure definition' do
|
71
|
-
dsd = @generator.data_structure_definition(@measures
|
71
|
+
dsd = @generator.data_structure_definition(@measures, @dimensions, @codes, "bacon")
|
72
72
|
dsd.is_a?(String).should == true
|
73
73
|
end
|
74
74
|
|