publisci 0.1.2

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.
Files changed (220) hide show
  1. checksums.yaml +7 -0
  2. data/.document +5 -0
  3. data/.rspec +1 -0
  4. data/.travis.yml +13 -0
  5. data/Gemfile +36 -0
  6. data/LICENSE.txt +20 -0
  7. data/README.md +51 -0
  8. data/README.rdoc +48 -0
  9. data/Rakefile +68 -0
  10. data/bin/bio-publisci +106 -0
  11. data/bin/bio-publisci-server +50 -0
  12. data/examples/bio-band_integration.rb +9 -0
  13. data/examples/no_magic.prov +58 -0
  14. data/examples/no_magic.rb +58 -0
  15. data/examples/orm.prov +48 -0
  16. data/examples/primer-full.prov +120 -0
  17. data/examples/primer.prov +66 -0
  18. data/examples/prov_dsl.prov +85 -0
  19. data/examples/safe_gen.rb +7 -0
  20. data/examples/visualization/primer.prov +66 -0
  21. data/examples/visualization/prov_viz.rb +140 -0
  22. data/examples/visualization/viz.rb +35 -0
  23. data/features/create_generator.feature +21 -0
  24. data/features/integration.feature +12 -0
  25. data/features/integration_steps.rb +10 -0
  26. data/features/metadata.feature +37 -0
  27. data/features/metadata_steps.rb +40 -0
  28. data/features/orm.feature +60 -0
  29. data/features/orm_steps.rb +74 -0
  30. data/features/prov_dsl.feature +14 -0
  31. data/features/prov_dsl_steps.rb +11 -0
  32. data/features/reader.feature +25 -0
  33. data/features/reader_steps.rb +61 -0
  34. data/features/step_definitions/bio-publisci_steps.rb +0 -0
  35. data/features/store.feature +27 -0
  36. data/features/store_steps.rb +42 -0
  37. data/features/support/env.rb +13 -0
  38. data/features/writer.feature +14 -0
  39. data/features/writer_steps.rb +24 -0
  40. data/lib/bio-publisci.rb +64 -0
  41. data/lib/bio-publisci/analyzer.rb +57 -0
  42. data/lib/bio-publisci/datacube_model.rb +111 -0
  43. data/lib/bio-publisci/dataset/ORM/data_cube_orm.rb +240 -0
  44. data/lib/bio-publisci/dataset/ORM/observation.rb +20 -0
  45. data/lib/bio-publisci/dataset/configuration.rb +31 -0
  46. data/lib/bio-publisci/dataset/data_cube.rb +418 -0
  47. data/lib/bio-publisci/dataset/dataset.rb +11 -0
  48. data/lib/bio-publisci/dataset/dataset_for.rb +186 -0
  49. data/lib/bio-publisci/dataset/interactive.rb +72 -0
  50. data/lib/bio-publisci/dsl/config.rb +34 -0
  51. data/lib/bio-publisci/dsl/dataset_dsl.rb +93 -0
  52. data/lib/bio-publisci/dsl/dsl.rb +72 -0
  53. data/lib/bio-publisci/dsl/metadata_dsl.rb +85 -0
  54. data/lib/bio-publisci/dsl/prov_dsl.rb +143 -0
  55. data/lib/bio-publisci/metadata/generator.rb +323 -0
  56. data/lib/bio-publisci/metadata/metadata.rb +5 -0
  57. data/lib/bio-publisci/metadata/metadata_model.rb +25 -0
  58. data/lib/bio-publisci/metadata/prov/activity.rb +88 -0
  59. data/lib/bio-publisci/metadata/prov/agent.rb +100 -0
  60. data/lib/bio-publisci/metadata/prov/association.rb +107 -0
  61. data/lib/bio-publisci/metadata/prov/config.rb +34 -0
  62. data/lib/bio-publisci/metadata/prov/derivation.rb +60 -0
  63. data/lib/bio-publisci/metadata/prov/element.rb +120 -0
  64. data/lib/bio-publisci/metadata/prov/entity.rb +64 -0
  65. data/lib/bio-publisci/metadata/prov/model/prov_models.rb +109 -0
  66. data/lib/bio-publisci/metadata/prov/plan.rb +32 -0
  67. data/lib/bio-publisci/metadata/prov/prov.rb +78 -0
  68. data/lib/bio-publisci/metadata/prov/role.rb +40 -0
  69. data/lib/bio-publisci/metadata/prov/usage.rb +64 -0
  70. data/lib/bio-publisci/metadata/publisher.rb +25 -0
  71. data/lib/bio-publisci/mixins/custom_predicate.rb +38 -0
  72. data/lib/bio-publisci/mixins/dereferencable.rb +34 -0
  73. data/lib/bio-publisci/mixins/registry.rb +27 -0
  74. data/lib/bio-publisci/mixins/vocabulary.rb +8 -0
  75. data/lib/bio-publisci/output.rb +27 -0
  76. data/lib/bio-publisci/parser.rb +266 -0
  77. data/lib/bio-publisci/post_processor.rb +95 -0
  78. data/lib/bio-publisci/query/query_helper.rb +123 -0
  79. data/lib/bio-publisci/r_client.rb +54 -0
  80. data/lib/bio-publisci/readers/arff.rb +49 -0
  81. data/lib/bio-publisci/readers/base.rb +57 -0
  82. data/lib/bio-publisci/readers/csv.rb +88 -0
  83. data/lib/bio-publisci/readers/dataframe.rb +67 -0
  84. data/lib/bio-publisci/readers/maf.rb +199 -0
  85. data/lib/bio-publisci/readers/r_cross.rb +112 -0
  86. data/lib/bio-publisci/readers/r_matrix.rb +176 -0
  87. data/lib/bio-publisci/store.rb +56 -0
  88. data/lib/bio-publisci/writers/arff.rb +91 -0
  89. data/lib/bio-publisci/writers/base.rb +93 -0
  90. data/lib/bio-publisci/writers/csv.rb +31 -0
  91. data/lib/bio-publisci/writers/dataframe.rb +81 -0
  92. data/lib/bio-publisci/writers/json.rb +18 -0
  93. data/lib/r2rdf.rb +226 -0
  94. data/lib/template_bak.rb +12 -0
  95. data/lib/template_bak/publisci.rb +3 -0
  96. data/lib/vocabs/cc.rb +18 -0
  97. data/lib/vocabs/cert.rb +13 -0
  98. data/lib/vocabs/dc.rb +63 -0
  99. data/lib/vocabs/dc11.rb +23 -0
  100. data/lib/vocabs/doap.rb +45 -0
  101. data/lib/vocabs/exif.rb +168 -0
  102. data/lib/vocabs/foaf.rb +69 -0
  103. data/lib/vocabs/geo.rb +13 -0
  104. data/lib/vocabs/http.rb +26 -0
  105. data/lib/vocabs/ma.rb +78 -0
  106. data/lib/vocabs/owl.rb +59 -0
  107. data/lib/vocabs/rdfs.rb +17 -0
  108. data/lib/vocabs/rsa.rb +12 -0
  109. data/lib/vocabs/rss.rb +14 -0
  110. data/lib/vocabs/sioc.rb +93 -0
  111. data/lib/vocabs/skos.rb +36 -0
  112. data/lib/vocabs/wot.rb +21 -0
  113. data/lib/vocabs/xhtml.rb +9 -0
  114. data/lib/vocabs/xsd.rb +58 -0
  115. data/resources/maf_example.maf +10 -0
  116. data/resources/maf_rdf.ttl +1173 -0
  117. data/resources/primer.ttl +38 -0
  118. data/resources/queries/code_resources.rq +10 -0
  119. data/resources/queries/codes.rq +18 -0
  120. data/resources/queries/dataset.rq +7 -0
  121. data/resources/queries/dimension_ranges.rq +8 -0
  122. data/resources/queries/dimensions.rq +12 -0
  123. data/resources/queries/gene.rq +16 -0
  124. data/resources/queries/hugo_to_ensembl.rq +7 -0
  125. data/resources/queries/maf_column.rq +26 -0
  126. data/resources/queries/measures.rq +12 -0
  127. data/resources/queries/observation_labels.rq +8 -0
  128. data/resources/queries/observations.rq +13 -0
  129. data/resources/queries/patient.rq +11 -0
  130. data/resources/queries/patient_list.rq +11 -0
  131. data/resources/queries/patients_with_mutation.rq +18 -0
  132. data/resources/queries/properties.rq +8 -0
  133. data/resources/queries/test.rq +3 -0
  134. data/resources/weather.numeric.arff +28 -0
  135. data/scripts/get_gene_lengths.rb +50 -0
  136. data/scripts/islet_mlratio.rb +6 -0
  137. data/scripts/scan_islet.rb +6 -0
  138. data/scripts/update_reference.rb +25 -0
  139. data/server/helpers.rb +215 -0
  140. data/server/public/src-min-noconflict/LICENSE +24 -0
  141. data/server/public/src-min-noconflict/ace.js +11 -0
  142. data/server/public/src-min-noconflict/ext-chromevox.js +1 -0
  143. data/server/public/src-min-noconflict/ext-elastic_tabstops_lite.js +1 -0
  144. data/server/public/src-min-noconflict/ext-emmet.js +1 -0
  145. data/server/public/src-min-noconflict/ext-keybinding_menu.js +1 -0
  146. data/server/public/src-min-noconflict/ext-language_tools.js +1 -0
  147. data/server/public/src-min-noconflict/ext-modelist.js +1 -0
  148. data/server/public/src-min-noconflict/ext-old_ie.js +1 -0
  149. data/server/public/src-min-noconflict/ext-searchbox.js +1 -0
  150. data/server/public/src-min-noconflict/ext-settings_menu.js +1 -0
  151. data/server/public/src-min-noconflict/ext-spellcheck.js +1 -0
  152. data/server/public/src-min-noconflict/ext-split.js +1 -0
  153. data/server/public/src-min-noconflict/ext-static_highlight.js +1 -0
  154. data/server/public/src-min-noconflict/ext-statusbar.js +1 -0
  155. data/server/public/src-min-noconflict/ext-textarea.js +1 -0
  156. data/server/public/src-min-noconflict/ext-themelist.js +1 -0
  157. data/server/public/src-min-noconflict/ext-whitespace.js +1 -0
  158. data/server/public/src-min-noconflict/keybinding-emacs.js +1 -0
  159. data/server/public/src-min-noconflict/keybinding-vim.js +1 -0
  160. data/server/public/src-min-noconflict/mode-ruby.js +1 -0
  161. data/server/public/src-min-noconflict/snippets/ruby.js +1 -0
  162. data/server/public/src-min-noconflict/theme-twilight.js +1 -0
  163. data/server/public/src-min-noconflict/worker-coffee.js +1 -0
  164. data/server/public/src-min-noconflict/worker-css.js +1 -0
  165. data/server/public/src-min-noconflict/worker-javascript.js +1 -0
  166. data/server/public/src-min-noconflict/worker-json.js +1 -0
  167. data/server/public/src-min-noconflict/worker-lua.js +1 -0
  168. data/server/public/src-min-noconflict/worker-php.js +1 -0
  169. data/server/public/src-min-noconflict/worker-xquery.js +1 -0
  170. data/server/routes.rb +123 -0
  171. data/server/views/dsl.haml +65 -0
  172. data/server/views/dump.haml +3 -0
  173. data/server/views/import.haml +35 -0
  174. data/server/views/new_repository.haml +25 -0
  175. data/server/views/query.haml +28 -0
  176. data/server/views/repository.haml +25 -0
  177. data/spec/ORM/data_cube_orm_spec.rb +33 -0
  178. data/spec/ORM/prov_model_spec.rb +72 -0
  179. data/spec/analyzer_spec.rb +36 -0
  180. data/spec/bnode_spec.rb +66 -0
  181. data/spec/csv/bacon.csv +4 -0
  182. data/spec/csv/moar_bacon.csv +11 -0
  183. data/spec/data_cube_spec.rb +169 -0
  184. data/spec/dataset_for_spec.rb +77 -0
  185. data/spec/dsl_spec.rb +134 -0
  186. data/spec/generators/csv_spec.rb +44 -0
  187. data/spec/generators/dataframe_spec.rb +44 -0
  188. data/spec/generators/maf_spec.rb +40 -0
  189. data/spec/generators/r_cross_spec.rb +51 -0
  190. data/spec/generators/r_matrix_spec.rb +44 -0
  191. data/spec/length_lookup_spec.rb +0 -0
  192. data/spec/maf_query_spec.rb +343 -0
  193. data/spec/metadata/metadata_dsl_spec.rb +68 -0
  194. data/spec/prov/activity_spec.rb +74 -0
  195. data/spec/prov/agent_spec.rb +54 -0
  196. data/spec/prov/association_spec.rb +55 -0
  197. data/spec/prov/config_spec.rb +28 -0
  198. data/spec/prov/derivation_spec.rb +30 -0
  199. data/spec/prov/entity_spec.rb +52 -0
  200. data/spec/prov/role_spec.rb +94 -0
  201. data/spec/prov/usage_spec.rb +98 -0
  202. data/spec/queries/integrity/1.rq +21 -0
  203. data/spec/queries/integrity/11.rq +29 -0
  204. data/spec/queries/integrity/12.rq +37 -0
  205. data/spec/queries/integrity/14.rq +25 -0
  206. data/spec/queries/integrity/19_1.rq +21 -0
  207. data/spec/queries/integrity/19_2.rq +15 -0
  208. data/spec/queries/integrity/2.rq +22 -0
  209. data/spec/queries/integrity/3.rq +19 -0
  210. data/spec/queries/integrity/4.rq +13 -0
  211. data/spec/queries/integrity/5.rq +14 -0
  212. data/spec/r_builder_spec.rb +33 -0
  213. data/spec/resource/.RData +0 -0
  214. data/spec/resource/example.Rhistory +3 -0
  215. data/spec/spec_helper.rb +17 -0
  216. data/spec/turtle/bacon +147 -0
  217. data/spec/turtle/reference +2064 -0
  218. data/spec/turtle/weather +275 -0
  219. data/spec/writer_spec.rb +75 -0
  220. metadata +589 -0
@@ -0,0 +1,11 @@
1
+ Given(/^the prov DSL string from file (.+)$/) do |file|
2
+ @dsl_string = file
3
+ end
4
+
5
+ When(/^I call Prov\.run on it$/) do
6
+ @turtle_string = PubliSci::Prov.run(@dsl_string)
7
+ end
8
+
9
+ Then(/^I should receive a provenance string$/) do
10
+ puts @turtle_string
11
+ end
@@ -0,0 +1,25 @@
1
+ Feature: generate RDF
2
+
3
+ In order to test the generators
4
+ I want to be able to create turtle strings from various objects
5
+
6
+ Scenario: generate turtle RDF from a Dataframe
7
+ Given a Dataframe generator
8
+ When I provide an R dataframe and the label "mr"
9
+ And generate a turtle string from it
10
+ Then the result should contain a "qb:dataSet"
11
+ And the result should contain some "qb:Observation"s
12
+
13
+ Scenario: generate turtle RDF from a CSV
14
+ Given a CSV generator
15
+ When I provide the reference file spec/csv/bacon.csv and the label "bacon"
16
+ And generate a turtle string from it
17
+ Then the result should contain a "qb:dataSet"
18
+ And the result should contain some "qb:Observation"s
19
+
20
+ Scenario: generate turtle RDF from an ARFF file
21
+ Given a ARFF generator
22
+ When I provide the file resources/weather.numeric.arff
23
+ And generate a turtle string from it
24
+ Then the result should contain a "qb:dataSet"
25
+ And the result should contain some "qb:Observation"s
@@ -0,0 +1,61 @@
1
+ require_relative '../lib/bio-publisci.rb'
2
+
3
+ Given /^a (.*) generator$/ do |generator|
4
+ @generator = PubliSci::Readers.const_get(generator).new
5
+ end
6
+
7
+ When /^I ask for its methods$/ do
8
+ @methods = @generator.methods
9
+ end
10
+
11
+ When /^I provide an R (.*) and the label "(.*?)"$/ do |type, label|
12
+ if type == "dataframe"
13
+ r = Rserve::Connection.new
14
+ r.eval <<-EOF
15
+ library(qtl)
16
+ data(listeria)
17
+ mr = scanone(listeria,method="mr")
18
+ EOF
19
+ rexp = r.eval 'mr'
20
+ @attr = rexp,label
21
+ else
22
+ raise "Unknown object #{type}"
23
+ end
24
+
25
+ end
26
+
27
+ When /^I provide the.* file (.*) and the label "(.*?)"$/ do |file, label|
28
+ raise "Cant find #{file}" unless File.exist? file
29
+ @attr = file,label
30
+ end
31
+
32
+ When /^I provide the.* file (.*) and the label "(.*?)" and the options (.*)$/ do |file, label, opts|
33
+ raise "Cant find #{file}" unless File.exist? file
34
+ @attr = file,label,eval(opts)
35
+ end
36
+
37
+ When /^I provide the.* file (\S+)$/ do |file|
38
+ raise "Cant find #{file}" unless File.exist? file
39
+ @attr = file
40
+ end
41
+
42
+ When /^generate a turtle string from it$/ do
43
+ @turtle_string = @generator.send :generate_n3, *@attr
44
+ # open('weather.ttl','w'){|f| f.write @turtle_string}
45
+ end
46
+
47
+ Then /^I should have access to a (.*) method$/ do |method|
48
+ @methods.include?(method).should == true
49
+ end
50
+
51
+ Then /^I should be able to call its (.*) method$/ do |method|
52
+ @generator.methods.include?(:"#{method}").should == true
53
+ end
54
+
55
+ Then /^the result should contain a "(.*?)"$/ do |search|
56
+ @turtle_string[search].should_not be nil
57
+ end
58
+
59
+ Then /^the result should contain some "(.*?)"s$/ do |search|
60
+ @turtle_string[search].size.should > 1
61
+ end
File without changes
@@ -0,0 +1,27 @@
1
+ Feature: load triples into a store
2
+
3
+ In order to query and share data
4
+ I want to be able load the output into a variety of store
5
+
6
+ Scenario: Use an RDF::Graph to store data
7
+ Given a store of type graph
8
+ When I call the stores add method with the turtle file spec/turtle/bacon and an RDF::Repository
9
+ Then I should recieve a non-empty graph
10
+
11
+ Scenario: Use 4store to store data
12
+ Given a store of type fourstore
13
+ When I call the stores add method with the turtle file spec/turtle/bacon and the graph name "test"
14
+ Then I should receive an info string
15
+
16
+ Scenario: Run queries on store
17
+ Given a store of type fourstore
18
+ When I call the query method using the text in file spec/queries/integrity/1.rq
19
+ Then I should receive 0 results
20
+ When I call the query method using the text in file resources/queries/test.rq
21
+ Then I should receive 10 results
22
+
23
+ Scenario: Run queries on graph based store
24
+ Given a store of type graph
25
+ When I call the stores add method with the turtle file spec/turtle/bacon and an RDF::Repository
26
+ Then calling the query method using the text in file spec/queries/integrity/1.rq should return 0 results
27
+ And calling the query method using the text in file resources/queries/test.rq should return 10 results
@@ -0,0 +1,42 @@
1
+ require_relative '../lib/bio-publisci.rb'
2
+
3
+ Given /a store of type (.*?)$/ do |type|
4
+ @store = PubliSci::Store.new(type: :"#{type}")
5
+ end
6
+
7
+ When /^I call the stores add method with the turtle file (.*?) and an RDF::(.*?)$/ do |file,graph|
8
+ graph = RDF.const_get(graph).new #rescue graph
9
+ @graph = @store.add(file,graph)
10
+ end
11
+
12
+ When /^I call the stores add method with the turtle file (.*?) and the graph name "(.*?)"$/ do |file,graph|
13
+ @graph = @store.add(file,graph)
14
+ end
15
+
16
+
17
+ When /^I call the query method using the text in file (.*)$/ do |file|
18
+ query_string = IO.read(file)
19
+ @query_result = @store.query(query_string)
20
+ end
21
+
22
+ Then /^calling the query method using the text in file (.*) should return (.*) results$/ do |file, num|
23
+ query_string = IO.read(file)
24
+ @store.query(query_string) #.size.should == num
25
+ end
26
+
27
+ Then /^I should recieve a non-empty graph$/ do
28
+ @graph.is_a?(RDF::Repository).should be true
29
+ @graph.size.should > 0
30
+ end
31
+
32
+ Then /^I should receive an info string$/ do
33
+ @graph.is_a?(String).should be true
34
+ end
35
+
36
+ Then /^I should receive (.*) results$/ do |num|
37
+ @query_result.size.should == num.to_i
38
+ end
39
+
40
+ # Then /^raise the result$/ do
41
+ # raise "got @graph"
42
+ # end
@@ -0,0 +1,13 @@
1
+ require 'bundler'
2
+ begin
3
+ Bundler.setup(:default, :development)
4
+ rescue Bundler::BundlerError => e
5
+ $stderr.puts e.message
6
+ $stderr.puts "Run `bundle install` to install missing gems"
7
+ exit e.status_code
8
+ end
9
+
10
+ $LOAD_PATH.unshift(File.dirname(__FILE__) + '/../../lib')
11
+ require 'bio-publisci'
12
+
13
+ require 'rspec/expectations'
@@ -0,0 +1,14 @@
1
+ Feature: export to various formats using writers
2
+
3
+ In order to use RDF encoded data in other applications
4
+ I want to export domain objects using an PubliSci::Writers object
5
+
6
+ Scenario: write to ARFF format
7
+ Given a ARFF writer
8
+ When I call its from_turtle method on the file spec/turtle/bacon
9
+ Then I should receive a .arff file as a string
10
+
11
+ Scenario: write to CSV
12
+ Given a CSV writer
13
+ When I call its from_turtle method on the file spec/turtle/bacon
14
+ Then I should receive a .csv file as a string
@@ -0,0 +1,24 @@
1
+ Given(/^a (.*) writer$/) do |type|
2
+ @writer = PubliSci::Writers.const_get(type).new
3
+ end
4
+
5
+ When(/^I call its from_turtle method on the file (.*)$/) do |file|
6
+ @result = @writer.from_turtle(file)
7
+ end
8
+
9
+ When(/^I call its from_turtle method on the turtle string$/) do
10
+ f=Tempfile.open('writerttl'); f.write @turtle_string; f.close
11
+ @result = @writer.from_turtle(f.path)
12
+ f.unlink
13
+ end
14
+
15
+ Then(/^I should receive a \.arff file as a string$/) do
16
+ puts @result
17
+ @result.is_a?(String).should be true
18
+ end
19
+
20
+ Then(/^I should receive a \.csv file as a string$/) do
21
+ puts @result
22
+ @result.is_a?(String).should be true
23
+ end
24
+
@@ -0,0 +1,64 @@
1
+ # This is temporary, just to help w/ development so I don't have to rewrite r2rdf.rb to be
2
+ # a standard gem base yet. Also load s the files instead of require for easy reloading
3
+ require 'tempfile'
4
+ require 'fileutils'
5
+ require 'csv'
6
+
7
+ require 'rdf'
8
+ require 'sparql'
9
+ require 'sparql/client'
10
+ require 'rdf/turtle'
11
+ require 'rdf/rdfxml'
12
+ require 'json/ld'
13
+
14
+ require 'rserve'
15
+ require 'rest-client'
16
+
17
+ begin
18
+ require 'spira'
19
+ rescue LoadError
20
+ puts "can't load spira; orm unavailable"
21
+ end
22
+
23
+ def load_folder(folder)
24
+ Dir.foreach(File.dirname(__FILE__) + "/#{folder}") do |file|
25
+ unless file == "." or file == ".."
26
+ f = File.dirname(__FILE__) + "/#{folder}/" + file
27
+ load f unless File.directory?(f)
28
+ end
29
+ end
30
+ end
31
+
32
+ load_folder('bio-publisci/mixins')
33
+
34
+ load File.dirname(__FILE__) + '/bio-publisci/dataset/interactive.rb'
35
+ load File.dirname(__FILE__) + '/bio-publisci/query/query_helper.rb'
36
+ load File.dirname(__FILE__) + '/bio-publisci/parser.rb'
37
+ load File.dirname(__FILE__) + '/bio-publisci/post_processor.rb'
38
+ load File.dirname(__FILE__) + '/bio-publisci/r_client.rb'
39
+ load File.dirname(__FILE__) + '/bio-publisci/analyzer.rb'
40
+ load File.dirname(__FILE__) + '/bio-publisci/store.rb'
41
+ load File.dirname(__FILE__) + '/bio-publisci/dataset/data_cube.rb'
42
+ load File.dirname(__FILE__) + '/bio-publisci/dataset/dataset_for.rb'
43
+ load File.dirname(__FILE__) + '/bio-publisci/dataset/configuration.rb'
44
+ load File.dirname(__FILE__) + '/bio-publisci/dataset/dataset.rb'
45
+ load File.dirname(__FILE__) + '/bio-publisci/datacube_model.rb'
46
+ load File.dirname(__FILE__) + '/bio-publisci/output.rb'
47
+ load File.dirname(__FILE__) + '/bio-publisci/metadata/prov/element.rb'
48
+ load File.dirname(__FILE__) + '/bio-publisci/metadata/prov/prov.rb'
49
+ load File.dirname(__FILE__) + '/bio-publisci/writers/base.rb'
50
+ load File.dirname(__FILE__) + '/bio-publisci/readers/base.rb'
51
+
52
+
53
+ load_folder('bio-publisci/dsl')
54
+ load_folder('bio-publisci/metadata')
55
+ load_folder('bio-publisci/metadata/prov')
56
+ load_folder('bio-publisci/metadata/prov/model')
57
+ load_folder('bio-publisci/readers')
58
+ load_folder('bio-publisci/writers')
59
+ load_folder('bio-publisci/dataset/ORM')
60
+ # Dir.foreach(File.dirname(__FILE__) + '/generators') do |file|
61
+ # unless file == "." or file == ".."
62
+ # load File.dirname(__FILE__) + '/generators/' + file
63
+ # end
64
+ # end
@@ -0,0 +1,57 @@
1
+ module PubliSci
2
+
3
+ #handles analysis of R expression to extract properties and recognize potential
4
+ #ambiguity
5
+ module Analyzer
6
+ def dirty?(data)
7
+ if data.is_a? Hash
8
+ data.map{|k,v|
9
+ return true if dirty?(k) || dirty?(v)
10
+ }
11
+ false
12
+ elsif data.is_a? Array
13
+ data.map{|datum|
14
+ return true if dirty?(datum)
15
+ }
16
+ else
17
+ dirty_characters = [".",' ']
18
+ if data.to_s.scan(/./) & dirty_characters
19
+ true
20
+ else
21
+ false
22
+ end
23
+ end
24
+ end
25
+
26
+ def recommend_range(data)
27
+ classes = data.map{|d| d.class}
28
+ homogenous = classes.uniq.size == 1
29
+ if homogenous
30
+ if classes[0] == Fixnum
31
+ "xsd:int"
32
+ elsif classes[0] == Float
33
+ "xsd:double"
34
+ elsif classes[0] == String
35
+ recommend_range_strings(data)
36
+ else
37
+ :coded
38
+ end
39
+ else
40
+ :coded
41
+ end
42
+ end
43
+
44
+ def recommend_range_strings(data)
45
+ return "xsd:int" if data.all?{|d| Integer(d) rescue nil}
46
+ return "xsd:int" if data.all?{|d| Float(d) rescue nil}
47
+ :coded
48
+ end
49
+
50
+ def check_integrity(obs, dimensions, measures)
51
+ obs.map{|o|
52
+ raise "MissingValues for #{(dimensions | measures) - o.keys}" unless ((dimensions | measures) - o.keys).empty?
53
+ raise "UnknownProperty #{o.keys - (dimensions | measures)}" unless (o.keys - (dimensions | measures)).empty?
54
+ }
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,111 @@
1
+ require 'rdf/4store'
2
+ begin
3
+ require 'spira'
4
+ module PubliSci
5
+ module ORM
6
+ # class Observation < Spira::Base
7
+ # type RDF::URI.new('http://purl.org/linked-data/cube#Observation')
8
+ # property :label, predicate: RDFS.label
9
+
10
+ # end
11
+ QB ||= RDF::Vocabulary.new(RDF::URI.new('http://purl.org/linked-data/cube#'))
12
+
13
+ class Component < Spira::Base
14
+ type QB.ComponentSpecification
15
+ property :dimension, predicate: QB.dimension # RDF::URI.new('http://purl.org/linked-data/cube#dimension')
16
+ property :measure, predicate: QB.measure # RDF::URI.new('http://purl.org/linked-data/cube#measure')
17
+ end
18
+
19
+ class DataStructureDefinition < Spira::Base
20
+ type QB.DataStructureDefinition
21
+ property :label, predicate: RDFS.label
22
+ has_many :component, predicate: QB.component
23
+ end
24
+
25
+ class DataSet < Spira::Base
26
+ type QB.DataSet
27
+ property :label, predicate: RDFS.label
28
+ property :structure, predicate: QB.structure
29
+ end
30
+
31
+ class Dimension < Spira::Base
32
+ type QB.DimensionProperty
33
+ property :range, predicate: RDFS.range
34
+ property :label, predicate: RDFS.label
35
+ end
36
+
37
+ class Measure < Spira::Base
38
+ type QB.MeasureProperty
39
+ property :label, predicate: RDFS.label
40
+ end
41
+
42
+
43
+ def load_repo(repo)
44
+ raise "Not an RDF::Repository - #{repo}" unless repo.is_a? RDF::Repository
45
+ Spira.add_repository :default, repo
46
+ end
47
+
48
+ # def observation
49
+ # unless PubliSci::ORM.const_defined?("Observation")
50
+ # obs = Class.new(Spira::Base) do
51
+ # type RDF::URI.new('http://purl.org/linked-data/cube#Observation')
52
+
53
+ # property :structure, predicate: QB.dataSet
54
+
55
+ # ((Dimension.each.to_a | Measure.each.to_a) || []).each{|component|
56
+ # property strip_uri(component.subject.to_s), predicate: component.subject
57
+ # }
58
+ # end
59
+ # PubliSci::ORM.const_set("Observation",obs)
60
+ # end
61
+ # Observation
62
+ # end
63
+
64
+ class Observation < Spira::Base
65
+ type QB.Observation
66
+ property :label, predicate: RDFS.label
67
+ property :dataset, predicate: QB.dataSet
68
+
69
+ def load_properties
70
+ comps = dataset.as(DataSet).structure.as(DataStructureDefinition).component.map{|comp| comp.as(Component)}
71
+ props = comps.map{|comp| comp.dimension ? comp.dimension.as(Dimension) : comp.measure.as(Measure) }
72
+ props.each{|prop|
73
+ ss = strip_uri(prop.subject.to_s)
74
+
75
+ self.class.property ss.to_sym, predicate: prop.subject
76
+ }
77
+ end
78
+
79
+ # for testing; DRY up eventually
80
+ def strip_uri(uri)
81
+ uri = uri.to_s.dup
82
+ uri[-1] = '' if uri[-1] == '>'
83
+ uri.to_s.split('/').last.split('#').last
84
+ end
85
+
86
+ # def method_missing(meth, *args, &block)
87
+ # if meth.to_s =~ /^find_by_(.+)$/
88
+ # run_find_by_method($1, *args, &block)
89
+ # else
90
+ # super # You *must* call super if you don't handle the
91
+ # # method, otherwise you'll mess up Ruby's method
92
+ # # lookup.
93
+ # end
94
+ # end
95
+ end
96
+
97
+ def reload_observation
98
+ PubliSci::ORM.send(:remove_const, "Observation")
99
+ observation
100
+ end
101
+
102
+ def strip_uri(uri)
103
+ uri = uri.to_s.dup
104
+ uri[-1] = '' if uri[-1] == '>'
105
+ uri.to_s.split('/').last.split('#').last
106
+ end
107
+ end
108
+ end
109
+ rescue LoadError
110
+ # puts "Skipping ORM load"
111
+ end