bel 0.6.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f162658eee7622744bcf1334c246b34b9178c70f
4
- data.tar.gz: e13d38c9a6775f28b83bd6803f076dec155feb30
3
+ metadata.gz: f60c8d511672752ce1913092b9c8f11bce1afcf7
4
+ data.tar.gz: 7af3edc1edfb6d481168297a4799af8c7c9e0128
5
5
  SHA512:
6
- metadata.gz: f40dca2bb377aec1d86066648a0ac51a61f60bc7f12f76cc583b46e5e54367baf018bebe5832451433382ee9bf21eb3e4ce6e7d7deddb0070ec09b7cf15f49ba
7
- data.tar.gz: 81b35ae4c5c6fcaf6ac81c37731fe5783004ee67b0dd8e5b6253204687eb5db0d63754d1902137223ade06379dea40b403353e176c95b9dc1164c96f6e5cda9e
6
+ metadata.gz: ea8b5f5950c41e93faae0dc4e22868e6234703bfbd8721f278653b4eb47e62815a034b5baa1d74f08908c80cd335aeeb91f3e6394fbdccfcf2ad9ba7f4ca93bc
7
+ data.tar.gz: f10f81d5c54a55d2c359c30b62af642de45ff3b479db9b81f096def42c881abd76271efe5b00dfbbfec862805fea34111ffb22634a6a337703076eba729008eb
@@ -3,6 +3,14 @@ All notable changes to bel.rb will be documented in this file. The curated log b
3
3
 
4
4
  This project adheres to [Semantic Versioning](http://semver.org/).
5
5
 
6
+ ## [0.7.0][0.7.0] - 2016-04-12
7
+ ### Fixed
8
+ - RDF translation allows for RDF prefixes to be used. Default RDF prefixes are provided ([Issue #69][69]).
9
+
10
+ ### Added
11
+ - Annotation and Namespace definitions can now be remapped using a YAML file ([Issue #92][92]).
12
+ - An example remap file can be obtained from the command `bel remapfile` ([Issue #92][92]).
13
+
6
14
  ## [0.6.0][0.6.0] - 2016-03-15
7
15
  ### Fixed
8
16
  - Serialization of BEL Script / XBEL can produce incorrect annotation and namespaces references ([Issue #111][111]).
@@ -91,6 +99,7 @@ This project adheres to [Semantic Versioning](http://semver.org/).
91
99
  ### Added
92
100
  - Development gem dependencies (i.e. byebug, pry, pry-byebug) for debugging.
93
101
 
102
+ [0.7.0]: https://github.com/OpenBEL/bel.rb/compare/0.6.0...0.7.0
94
103
  [0.6.0]: https://github.com/OpenBEL/bel.rb/compare/0.5.0...0.6.0
95
104
  [0.5.0]: https://github.com/OpenBEL/bel.rb/compare/0.4.2...0.5.0
96
105
  [0.4.2]: https://github.com/OpenBEL/bel.rb/compare/0.4.1...0.4.2
@@ -108,12 +117,14 @@ This project adheres to [Semantic Versioning](http://semver.org/).
108
117
  [64]: https://github.com/OpenBEL/bel.rb/issues/64
109
118
  [66]: https://github.com/OpenBEL/bel.rb/issues/66
110
119
  [68]: https://github.com/OpenBEL/bel.rb/issues/68
120
+ [69]: https://github.com/OpenBEL/bel.rb/issues/69
111
121
  [71]: https://github.com/OpenBEL/bel.rb/issues/71
112
122
  [82]: https://github.com/OpenBEL/bel.rb/issues/82
113
123
  [85]: https://github.com/OpenBEL/bel.rb/issues/85
114
124
  [86]: https://github.com/OpenBEL/bel.rb/pull/86
115
125
  [90]: https://github.com/OpenBEL/bel.rb/issues/90
116
126
  [91]: https://github.com/OpenBEL/bel.rb/issues/91
127
+ [92]: https://github.com/OpenBEL/bel.rb/issues/92
117
128
  [93]: https://github.com/OpenBEL/bel.rb/issues/93
118
129
  [94]: https://github.com/OpenBEL/bel.rb/issues/94
119
130
  [95]: https://github.com/OpenBEL/bel.rb/issues/95
data/README.md CHANGED
@@ -71,7 +71,6 @@ the root of the bel.rb tree:
71
71
  export BR_ISOLATE="yes"
72
72
  ```
73
73
 
74
-
75
74
  ## branches
76
75
 
77
76
  - master branch
@@ -108,10 +107,12 @@ the root of the bel.rb tree:
108
107
  translate
109
108
  upgrade
110
109
  plugins
110
+ generate
111
+ remapfile
111
112
 
112
113
 
113
114
  bel
114
- Copyright (C) 2015 OpenBEL
115
+ Copyright (C) 2016 OpenBEL
115
116
  Apache License, Version 2.0, January 2004
116
117
  http://www.apache.org/licenses/
117
118
 
@@ -121,7 +122,6 @@ the root of the bel.rb tree:
121
122
  -h, --help Show this message
122
123
  ```
123
124
 
124
-
125
125
  **bel2rdf.rb**: Converts BEL to RDF.
126
126
 
127
127
  ```bash
@@ -26,6 +26,7 @@ Gem::Specification.new do |spec|
26
26
  ]
27
27
  spec.files = [
28
28
  Dir.glob('lib/**/*.rb'),
29
+ Dir.glob('lib/**/*.yml'),
29
30
  Dir.glob('ext/**/*.{c,h,def}'),
30
31
  Dir.glob('lib/bel/libbel/ext/{java,mingw}/**/*.{so,bundle}'),
31
32
  __FILE__,
data/bin/bel CHANGED
@@ -7,7 +7,7 @@ require 'bel/vendor/trollop'
7
7
 
8
8
  VERSION_BANNER = <<-VERSION
9
9
  bel #{BEL::VERSION}
10
- Copyright (C) 2015 OpenBEL
10
+ Copyright (C) #{Time.now.year} OpenBEL
11
11
  Apache License, Version 2.0, January 2004
12
12
  http://www.apache.org/licenses/
13
13
  VERSION
@@ -64,27 +64,41 @@ Subcommands:
64
64
  synopsis "Converts BEL to RDF."
65
65
  usage "[OPTIONS]... bel2rdf [OPTIONS]"
66
66
 
67
- opt :bel, 'The BEL script to parse and output (Defaults to STDIN).',
68
- :type => String,
69
- :long => :bel,
70
- :short => :b,
71
- :default => nil
72
-
73
- opt :format, 'The RDF format to output.',
74
- :type => String,
75
- :long => :format,
76
- :short => :f,
77
- :default => 'ntriples'
78
-
79
- opt :schema, 'Includes the BEL RDFS schema in RDF output.',
80
- :long => :schema,
81
- :short => :s,
82
- :default => false
67
+ opt :bel, 'The BEL script to parse and output (Defaults to STDIN).',
68
+ :type => String,
69
+ :long => :bel,
70
+ :short => :b,
71
+ :default => nil
72
+
73
+ opt :format, 'The RDF format to output.',
74
+ :type => String,
75
+ :long => :format,
76
+ :short => :f,
77
+ :default => 'ntriples'
78
+
79
+ opt :schema, 'Includes the BEL RDFS schema in RDF output.',
80
+ :long => :schema,
81
+ :short => :s,
82
+ :default => false
83
+
84
+ opt :'rdf-prefix-file', "A YAML file mapping prefix containing key/value pairs. The key is an RDF prefix to use in the RDF output; the value is the RDF URI for that prefix. For example, belv: 'http://www.openbel.org/vocabulary/'",
85
+ :type => String,
86
+ :long => :'rdf-prefix-file',
87
+ :short => :p,
88
+ :default => nil
89
+
90
+ opt :'remap-file', 'A YAML file that remaps annotation and namespace definitions. Run "bel remapfile" to get an example of the YAML format.',
91
+ :type => String,
92
+ :long => :'remap-file',
93
+ :short => :r,
94
+ :default => nil
83
95
  end
84
96
 
85
- ARGV.concat(['--bel', parsed_options[:bel]]) if parsed_options[:bel]
86
- ARGV.concat(['--format', parsed_options[:format]]) if parsed_options[:format]
87
- ARGV.concat(['--schema', parsed_options[:schema]]) if parsed_options[:schema]
97
+ ARGV.concat(['--bel', parsed_options[:bel]]) if parsed_options[:bel]
98
+ ARGV.concat(['--format', parsed_options[:format]]) if parsed_options[:format]
99
+ ARGV.concat(['--schema', parsed_options[:schema]]) if parsed_options[:schema]
100
+ ARGV.concat(['--rdf-prefix-file', parsed_options[:'rdf-prefix-file']]) if parsed_options[:'rdf-prefix-file']
101
+ ARGV.concat(['--remap-file', parsed_options[:'remap-file']]) if parsed_options[:'remap-file']
88
102
 
89
103
  require_relative 'bel2rdf'
90
104
  end
@@ -234,7 +248,32 @@ Subcommands:
234
248
  parsed_options =
235
249
  Trollop::options do
236
250
  synopsis "Translates BEL evidence between formats using translator plugins."
237
- usage "[OPTIONS]... translate [OPTIONS] FROM_TRANSLATOR TO_TRANSLATOR"
251
+ usage <<-DOC.gsub(/^ {14}/, '')
252
+ [OPTIONS]... translate [OPTIONS] FROM_TRANSLATOR TO_TRANSLATOR
253
+
254
+ From options:
255
+ None
256
+ To options:
257
+ streaming=true|false
258
+ Set to "true" to enable streaming writes for translators that support it.
259
+ Set to "false" to disable streaming.
260
+ serialization=discrete|topdown|citation [BEL Script translator]
261
+ Set to "discrete" to render each statement with its annotations.
262
+ Set to "topdown" to set/unset annotations as needed.
263
+ Set to "citation" to use statement groups for each citation.
264
+ write_schema=true|false
265
+ Set to "true" to write RDFS schema for RDF-based translators.
266
+ Set to "false" to omit RDFS schema for RDF-based translators.
267
+ void_dataset_uri=URI
268
+ The VoID dataset URI to use for the dataset of an RDF-based translation.
269
+ rdf_prefix_file=FILE
270
+ A YAML file mapping prefix containing key/value pairs. The key is an
271
+ RDF prefix to use in the RDF output; the value is the RDF URI for that
272
+ prefix. For example, belv: 'http://www.openbel.org/vocabulary/'.
273
+ remap_file=FILE
274
+ A YAML file that remaps annotation and namespace definitions.
275
+ Run "bel remapfile" to get an example of the YAML format.
276
+ DOC
238
277
 
239
278
  opt :'input-file', 'The file containing evidence data to translate. If not specified the default is to read from STDIN.',
240
279
  :type => String,
@@ -297,8 +336,10 @@ Subcommands:
297
336
  Trollop::educate
298
337
  end
299
338
 
300
- from_options = map_kv_options(parsed_options, :'from-option')
301
- to_options = map_kv_options(parsed_options, :'to-option')
339
+ # XXX Merge conflicts.
340
+ options = {}.
341
+ merge(map_kv_options(parsed_options, :'from-option')).
342
+ merge(map_kv_options(parsed_options, :'to-option'))
302
343
 
303
344
  begin
304
345
  BEL.translate(
@@ -306,7 +347,7 @@ Subcommands:
306
347
  from_format,
307
348
  to_format,
308
349
  $stdout,
309
- from_options.merge(to_options) # XXX Merge conflicts.
350
+ options
310
351
  )
311
352
  ensure
312
353
  $stdout.close
@@ -490,6 +531,32 @@ Subcommands:
490
531
  translator.write(random_data, $stdout)
491
532
  end
492
533
  end
534
+
535
+ class RemapfileCommand
536
+
537
+ def initialize(global_options)
538
+ @global_options = global_options
539
+ end
540
+
541
+ def run
542
+ options = Trollop::options do
543
+ synopsis "Writes an example resource remap YAML file."
544
+ usage "[OPTIONS]... remapfile [OPTIONS]"
545
+ end
546
+
547
+ example_file_path =
548
+ File.join(
549
+ File.expand_path(File.dirname(__FILE__)),
550
+ '..',
551
+ 'lib',
552
+ 'bel',
553
+ 'examples',
554
+ 'remap-file-example.yml')
555
+ File.open(example_file_path) do |f|
556
+ $stdout.write(f.read)
557
+ end
558
+ end
559
+ end
493
560
  end
494
561
  end
495
562
 
@@ -46,15 +46,35 @@ OptionParser.new do |opts|
46
46
  options[:format] = format.downcase
47
47
  end
48
48
 
49
+
50
+ opts.on('-p', '--rdf-prefix-file FILE', "A YAML file mapping prefix containing key/value pairs. The key is an RDF prefix to use in the RDF output; the value is the RDF URI for that prefix. For example, belv: 'http://www.openbel.org/vocabulary/'.") do |prefix_file|
51
+ options[:rdf_prefix_file] = prefix_file
52
+ end
53
+
49
54
  opts.on('-s', '--[no-]schema', 'Write BEL RDF schema? The default is to include the schema in the output.') do |schema|
50
55
  options[:schema] = schema
51
56
  end
57
+
58
+ opts.on('-r', '--remap-file FILE', 'A YAML file that remaps annotation and namespace definitions. Run "bel remapfile" to get an example of the YAML format.') do |remap_file|
59
+ options[:remap_file] = remap_file
60
+ end
52
61
  end.parse!
53
62
 
54
63
  if options[:bel] and not File.exists? options[:bel]
55
64
  $stderr.puts "No file for bel, #{options[:bel]}"
56
65
  exit 1
57
66
  end
67
+
68
+ if options[:rdf_prefix_file] and not File.exists? options[:rdf_prefix_file]
69
+ $stderr.puts "No file for rdf_prefix_file, #{options[:rdf_prefix_file]}"
70
+ exit 1
71
+ end
72
+
73
+ if options[:remap_file] and not File.exist? options[:remap_file]
74
+ $stderr.puts "No file for remap_file, #{options[:remap_file]}"
75
+ exit 1
76
+ end
77
+
58
78
  unless RDF_TRANSLATORS.include? options[:format]
59
79
  $stderr.puts "Format must be one of: #{RDF_TRANSLATORS.join(', ')}"
60
80
  exit 1
@@ -77,7 +97,7 @@ end
77
97
  # read bel content
78
98
  input_io =
79
99
  if options[:bel]
80
- File.open(options[:bel], :external_encoding => 'UTF-8')
100
+ File.open(options[:bel], external_encoding: 'UTF-8')
81
101
  else
82
102
  $stdin
83
103
  end
@@ -87,7 +107,9 @@ validate_translator!(options[:format])
87
107
  begin
88
108
  BEL.translate(input_io, :bel, options[:format], $stdout,
89
109
  {
90
- :write_schema => options[:schema]
110
+ write_schema: options[:schema],
111
+ rdf_prefix_file: options[:rdf_prefix_file],
112
+ remap_file: options[:remap_file]
91
113
  }
92
114
  )
93
115
  ensure
@@ -0,0 +1,50 @@
1
+ namespaces:
2
+ - remap:
3
+ from:
4
+ prefix: "CHEBI"
5
+ url: "http://resource.belframework.org/belframework/20131211/namespace/chebi.belns"
6
+ to:
7
+ prefix: "HGNC"
8
+ url: "http://resource.belframework.org/belframework/20150611/namespace/hgnc-human-genes.belns"
9
+ rdf_uri: "http://identifiers.org/hgnc/"
10
+ - remap:
11
+ from:
12
+ prefix: "EGID"
13
+ url: "http://resource.belframework.org/belframework/20150611/namespace/entrez-gene-ids.belns"
14
+ to:
15
+ prefix: "EGID"
16
+ url: "http://resource.belframework.org/belframework/20150611/namespace/entrez-gene-ids.belns"
17
+ rdf_uri: "http://identifiers.org/ncbigene/"
18
+ - remap:
19
+ from:
20
+ prefix: "MESHD"
21
+ url: "http://resource.belframework.org/belframework/20131211/namespace/mesh-diseases.belns"
22
+ to:
23
+ prefix: "MESHD"
24
+ url: "http://resource.belframework.org/belframework/20131211/namespace/mesh-diseases.belns"
25
+ rdf_uri: "http://identifiers.org/meshd/"
26
+ annotations:
27
+ - remap:
28
+ from:
29
+ keyword: "Anatomy"
30
+ type: "url"
31
+ domain: "http://resource.belframework.org/belframework/20131211/annotation/anatomy.belanno"
32
+ to:
33
+ keyword: "Anatomy"
34
+ type: "url"
35
+ domain: "http://resource.belframework.org/belframework/20131211/annotation/anatomy.belanno"
36
+ rdf_uri: "http://identifiers.org/anatomy/"
37
+ - remap:
38
+ from:
39
+ keyword: "TextLocation"
40
+ type: "list"
41
+ domain:
42
+ - Abstract
43
+ - Results
44
+ - Legend
45
+ - Review
46
+ to:
47
+ keyword: "TextLocation"
48
+ type: "pattern"
49
+ domain: "Value[0-9]+"
50
+ rdf_uri: "http://identifiers.org/text-location/"
@@ -176,8 +176,6 @@ module BEL
176
176
  }
177
177
  end
178
178
 
179
- ## Deprecated, remove in [0.6.0].
180
-
181
179
  # @deprecated Use {#quote_if_needed} instead. Will be removed in a
182
180
  # future release.
183
181
  def ensure_quotes identifier
@@ -42,14 +42,20 @@ module BEL::Translator::Plugins::BelScript::BelCitationSerialization
42
42
  current_annotations[:Citation] = citation if citation
43
43
  current_annotations[:Evidence] = summary_text if summary_text
44
44
 
45
+ if !evidence.citation.id || evidence.citation.id.empty?
46
+ citation_id = quote('')
47
+ else
48
+ citation_id = quote_if_needed(evidence.citation.id)
49
+ end
50
+
45
51
  # Reset cumulative annotations if new citation.
46
52
  if cumulative_citation == nil
47
- bel << %Q{SET STATEMENT_GROUP = #{quote_if_needed(evidence.citation.id)}\n}
53
+ bel << %Q{SET STATEMENT_GROUP = #{citation_id}\n}
48
54
  cumulative_annotations.clear
49
55
  elsif evidence.citation != cumulative_citation
50
56
  bel << %Q{UNSET STATEMENT_GROUP\n}
51
57
  bel << "\n\n"
52
- bel << %Q{SET STATEMENT_GROUP = #{quote_if_needed(evidence.citation.id)}\n}
58
+ bel << %Q{SET STATEMENT_GROUP = #{citation_id}\n}
53
59
  cumulative_annotations.clear
54
60
  end
55
61
 
@@ -0,0 +1,6 @@
1
+ belr: 'http://www.openbel.org/bel/'
2
+ belv: 'http://www.openbel.org/vocabulary/'
3
+ bele: 'http://www.openbel.org/evidence/'
4
+ pubmed: 'http://bio2rdf.org/pubmed:'
5
+ rdfs: 'http://www.w3.org/2000/01/rdf-schema#'
6
+ rdf: 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'
@@ -12,7 +12,9 @@ module BELRDF
12
12
  end
13
13
 
14
14
  def to_rdf_vocabulary
15
- ::RDF::Vocabulary.new("#{@rdf_uri}/")
15
+ uri = @rdf_uri
16
+ uri << '/' unless uri.end_with?('/')
17
+ ::RDF::Vocabulary.new(uri)
16
18
  end
17
19
  end
18
20
 
@@ -33,11 +35,27 @@ module BELRDF
33
35
  @ns.to_rdf_vocabulary[URI::encode(@value)]
34
36
  end
35
37
 
36
- def to_rdf(graph_name = nil)
38
+ def to_rdf(graph_name = nil, remap = nil)
37
39
  # resolve encoding to make rdf:type assertions
38
40
  if !@enc && @ns.is_a?(BEL::Namespace::NamespaceDefinition)
39
41
  @enc = @ns[@value].enc
40
42
  end
43
+
44
+ # update namespace resource
45
+ if remap && remap['namespaces']
46
+ ro_ind = remap['namespaces'].index { |mapping|
47
+ mapping['remap'] && mapping['remap'].is_a?(Hash) &&
48
+ mapping['remap']['from'] && mapping['remap']['from'].is_a?(Hash) &&
49
+ mapping['remap']['from']['prefix'] == @ns.prefix.to_s &&
50
+ mapping['remap']['from']['url'] == @ns.url
51
+ }
52
+ if ro_ind
53
+ @ns.prefix = remap['namespaces'][ro_ind]['remap']['to']['prefix']
54
+ @ns.url = remap['namespaces'][ro_ind]['remap']['to']['url']
55
+ @ns.rdf_uri = remap['namespaces'][ro_ind]['remap']['to']['rdf_uri']
56
+ end
57
+ end
58
+
41
59
  uri = to_uri
42
60
  encodings = ['A'].concat(@enc.to_s.each_char.to_a).uniq
43
61
  encodings.map! { |enc| concept_statement(enc, uri, graph_name)}
@@ -94,7 +112,7 @@ module BELRDF
94
112
  end
95
113
  end
96
114
 
97
- def to_rdf(graph_name = nil)
115
+ def to_rdf(graph_name = nil, remap = nil)
98
116
  uri = to_uri
99
117
  statements = []
100
118
 
@@ -133,14 +151,14 @@ module BELRDF
133
151
  end
134
152
  # link root protein abundance as hasChild
135
153
  root_param = @arguments.find{|x| x.is_a? ::BEL::Model::Parameter}
136
- (root_id, root_statements) = ::BEL::Model::Term.new(:p, [root_param]).to_rdf(graph_name)
154
+ (root_id, root_statements) = ::BEL::Model::Term.new(:p, [root_param]).to_rdf(graph_name, remap)
137
155
  statements << ::RDF::Statement.new(uri, BELRDF::BELV.hasChild, root_id, :graph_name => graph_name)
138
156
  statements.concat(root_statements)
139
157
  return [uri, statements]
140
158
  elsif @arguments.find{|x| x.is_a? ::BEL::Model::Term and BELRDF::PROTEIN_VARIANT.include? x.fx}
141
159
  # link root protein abundance as hasChild
142
160
  root_param = @arguments.find{|x| x.is_a? ::BEL::Model::Parameter}
143
- (root_id, root_statements) = ::BEL::Model::Term.new(:p, [root_param]).to_rdf(graph_name)
161
+ (root_id, root_statements) = ::BEL::Model::Term.new(:p, [root_param]).to_rdf(graph_name, remap)
144
162
  statements << ::RDF::Statement.new(uri, BELRDF::BELV.hasChild, root_id, :graph_name => graph_name)
145
163
  statements.concat(root_statements)
146
164
  return [uri, statements]
@@ -151,14 +169,14 @@ module BELRDF
151
169
  @arguments.find_all{ |x|
152
170
  x.is_a? ::BEL::Model::Parameter and x.ns != nil
153
171
  }.each do |param|
154
- param_uri, encoding_statements = param.to_rdf(graph_name)
172
+ param_uri, encoding_statements = param.to_rdf(graph_name, remap)
155
173
  statements.concat(encoding_statements)
156
174
  statements << ::RDF::Statement.new(uri, BELRDF::BELV.hasConcept, param_uri, :graph_name => graph_name)
157
175
  end
158
176
 
159
177
  # BELRDF::BELV.hasChild]
160
178
  @arguments.find_all{|x| x.is_a? ::BEL::Model::Term}.each do |child|
161
- (child_id, child_statements) = child.to_rdf(graph_name)
179
+ (child_id, child_statements) = child.to_rdf(graph_name, remap)
162
180
  statements << ::RDF::Statement.new(uri, BELRDF::BELV.hasChild, child_id, :graph_name => graph_name)
163
181
  statements.concat(child_statements)
164
182
  end
@@ -205,20 +223,20 @@ module BELRDF
205
223
  end
206
224
  end
207
225
 
208
- def to_rdf(graph_name = nil)
226
+ def to_rdf(graph_name = nil, remap = nil)
209
227
  uri = to_uri
210
228
  statements = []
211
229
 
212
230
  case
213
231
  when subject_only?
214
- (sub_uri, sub_statements) = @subject.to_rdf(graph_name)
232
+ (sub_uri, sub_statements) = @subject.to_rdf(graph_name, remap)
215
233
  statements << ::RDF::Statement(uri, BELRDF::BELV.hasSubject, sub_uri, :graph_name => graph_name)
216
234
  statements.concat(sub_statements)
217
235
  when simple?
218
- (sub_uri, sub_statements) = @subject.to_rdf(graph_name)
236
+ (sub_uri, sub_statements) = @subject.to_rdf(graph_name, remap)
219
237
  statements.concat(sub_statements)
220
238
 
221
- (obj_uri, obj_statements) = @object.to_rdf(graph_name)
239
+ (obj_uri, obj_statements) = @object.to_rdf(graph_name, remap)
222
240
  statements.concat(obj_statements)
223
241
 
224
242
  rel = BELRDF::RELATIONSHIP_TYPE[@relationship.to_s]
@@ -226,9 +244,9 @@ module BELRDF
226
244
  statements << ::RDF::Statement(uri, BELRDF::BELV.hasObject, obj_uri, :graph_name => graph_name)
227
245
  statements << ::RDF::Statement(uri, BELRDF::BELV.hasRelationship, rel, :graph_name => graph_name)
228
246
  when nested?
229
- (sub_uri, sub_statements) = @subject.to_rdf(graph_name)
230
- (nsub_uri, nsub_statements) = @object.subject.to_rdf(graph_name)
231
- (nobj_uri, nobj_statements) = @object.object.to_rdf(graph_name)
247
+ (sub_uri, sub_statements) = @subject.to_rdf(graph_name, remap)
248
+ (nsub_uri, nsub_statements) = @object.subject.to_rdf(graph_name, remap)
249
+ (nobj_uri, nobj_statements) = @object.object.to_rdf(graph_name, remap)
232
250
  statements.concat(sub_statements)
233
251
  statements.concat(nsub_statements)
234
252
  statements.concat(nobj_statements)
@@ -278,8 +296,25 @@ module BELRDF
278
296
  @annotations.each do |_, anno|
279
297
  name = anno.name.gsub('"', '')
280
298
 
281
- if BELRDF::const_defined? name
282
- annotation_scheme = BELRDF::const_get name
299
+ # update annotations resource
300
+ anno_rdf_uri = nil
301
+ if remap && remap['annotations']
302
+ ro_ind = remap['annotations'].index { |mapping|
303
+ mapping['remap'] && mapping['remap'].is_a?(Hash) &&
304
+ mapping['remap']['from'] && mapping['remap']['from'].is_a?(Hash) &&
305
+ mapping['remap']['from']['keyword'] == name && (mapping['remap']['from']['type'] == 'url' ||
306
+ mapping['remap']['from']['type'] == 'list' &&
307
+ mapping['remap']['from']['domain'] && mapping['remap']['from']['domain'].is_a?(Array) &&
308
+ mapping['remap']['from']['domain'].include?(anno.value))
309
+ }
310
+ if ro_ind
311
+ anno_rdf_uri = remap['annotations'][ro_ind]['remap']['to']['rdf_uri']
312
+ anno_rdf_uri << '/' unless anno_rdf_uri.end_with?('/')
313
+ end
314
+ end
315
+
316
+ if anno_rdf_uri or BELRDF::const_defined? name
317
+ annotation_scheme = anno_rdf_uri ? anno_rdf_uri : BELRDF::const_get(name)
283
318
  [anno.value].flatten.map{|x| x.gsub('"', '')}.each do |val|
284
319
  value_uri = BELRDF::RDF::URI(URI.encode(annotation_scheme + val.to_s))
285
320
  statements << ::RDF::Statement.new(evidence, BELRDF::BELV.hasAnnotation, value_uri, :graph_name => graph_name)
@@ -307,7 +342,7 @@ module BELRDF
307
342
  BELRDF::BELE[BELRDF.generate_uuid]
308
343
  end
309
344
 
310
- def to_rdf
345
+ def to_rdf(remap = nil)
311
346
  uri = to_uri
312
347
 
313
348
  # parse BEL statement if necessary
@@ -316,7 +351,7 @@ module BELRDF
316
351
  end
317
352
 
318
353
  # convert BEL statement to RDF
319
- statement_uri, statements = bel_statement.to_rdf(uri)
354
+ statement_uri, statements = bel_statement.to_rdf(uri, remap)
320
355
 
321
356
  statements << ::RDF::Statement.new(uri, BELRDF::RDF.type, BELRDF::BELV.Evidence, :graph_name => uri)
322
357
  statements << ::RDF::Statement.new(statement_uri, BELRDF::BELV.hasEvidence, uri, :graph_name => uri)
@@ -1,4 +1,6 @@
1
1
  require 'rdf'
2
+ require 'pathname'
3
+ require 'yaml'
2
4
 
3
5
  require_relative 'uuid'
4
6
  require_relative 'bel_schema'
@@ -55,6 +57,11 @@ module BELRDF
55
57
 
56
58
  wrote_dataset = false
57
59
 
60
+ # read remap file
61
+ if options[:remap_file]
62
+ remap = YAML::load_file(options[:remap_file])
63
+ end
64
+
58
65
  rdf_statement_enum = Enumerator.new do |yielder|
59
66
  # enumerate BEL schema
60
67
  @rdf_schema.each do |schema_statement|
@@ -73,7 +80,7 @@ module BELRDF
73
80
  wrote_dataset = true
74
81
  end
75
82
 
76
- evidence_uri, statements = evidence.to_rdf
83
+ evidence_uri, statements = evidence.to_rdf(remap)
77
84
  statements.each do |statement|
78
85
  yielder << statement
79
86
  end
@@ -94,6 +101,12 @@ module BELRDF
94
101
  :stream => true
95
102
  )
96
103
 
104
+ # load RDF prefixes
105
+ prefixes = load_prefixes(options)
106
+ prefixes.each do |prefix, uri|
107
+ rdf_writer.prefix prefix.to_sym, RDF::URI(uri)
108
+ end
109
+
97
110
  rdf_writer.write_prologue
98
111
  rdf_statement_enum.each do |statement|
99
112
  rdf_writer << statement
@@ -103,5 +116,18 @@ module BELRDF
103
116
 
104
117
  io
105
118
  end
119
+
120
+ def load_prefixes(options)
121
+ prefix_file = options[:rdf_prefix_file] || default_prefix_file
122
+ YAML::load_file(prefix_file)
123
+ end
124
+
125
+ def default_prefix_file
126
+ File.join(
127
+ File.expand_path(File.dirname(__FILE__)),
128
+ 'config',
129
+ 'default_prefixes.yml'
130
+ )
131
+ end
106
132
  end
107
133
  end
@@ -11,6 +11,7 @@ module BEL::Translator::Plugins
11
11
 
12
12
  def initialize(data, options = {})
13
13
  @data = data
14
+ @streaming = options.fetch(:streaming, false)
14
15
  @annotation_reference_map = options.fetch(:annotation_reference_map, nil)
15
16
  @namespace_reference_map = options.fetch(:namespace_reference_map, nil)
16
17
  end
@@ -1,3 +1,3 @@
1
1
  module BEL
2
- VERSION = '0.6.0'
2
+ VERSION = '0.7.0'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bel
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anthony Bargnesi
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2016-03-16 00:00:00.000000000 Z
14
+ date: 2016-04-12 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: ffi
@@ -94,6 +94,7 @@ files:
94
94
  - lib/bel/evidence_model/streaming_evidence_combiner.rb
95
95
  - lib/bel/evidence_model/summary_text.rb
96
96
  - lib/bel/evidence_model/util.rb
97
+ - lib/bel/examples/remap-file-example.yml
97
98
  - lib/bel/gen.rb
98
99
  - lib/bel/gen/annotation.rb
99
100
  - lib/bel/gen/citation.rb
@@ -172,6 +173,7 @@ files:
172
173
  - lib/bel/translator/plugins/nquads.rb
173
174
  - lib/bel/translator/plugins/ntriples.rb
174
175
  - lib/bel/translator/plugins/rdf/bel_schema.rb
176
+ - lib/bel/translator/plugins/rdf/config/default_prefixes.yml
175
177
  - lib/bel/translator/plugins/rdf/graph_translator.rb
176
178
  - lib/bel/translator/plugins/rdf/monkey_patch.rb
177
179
  - lib/bel/translator/plugins/rdf/reader.rb