bel 0.6.0 → 0.7.0

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 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