bel_parser 1.0.0.alpha.47-java → 1.0.0.alpha.48-java

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 (39) hide show
  1. checksums.yaml +4 -4
  2. data/VERSION +1 -1
  3. data/lib/bel_parser/expression/model/namespace.rb +60 -20
  4. data/lib/bel_parser/expression/model/parameter.rb +30 -36
  5. data/lib/bel_parser/expression/model/statement.rb +28 -3
  6. data/lib/bel_parser/expression/model/term.rb +46 -7
  7. data/lib/bel_parser/expression/parser.rb +15 -3
  8. data/lib/bel_parser/expression/validator.rb +13 -15
  9. data/lib/bel_parser/language/apply_namespace_encoding.rb +14 -18
  10. data/lib/bel_parser/language/expression_validator.rb +398 -23
  11. data/lib/bel_parser/language/semantics_ast_warnings.rb +1 -1
  12. data/lib/bel_parser/language/specification.rb +4 -0
  13. data/lib/bel_parser/language/syntax/undefined_namespace.rb +1 -1
  14. data/lib/bel_parser/language/syntax/undefined_namespace_value.rb +2 -1
  15. data/lib/bel_parser/language/version2_0/functions/activity.rb +2 -2
  16. data/lib/bel_parser/language/version2_0/functions/biological_process.rb +1 -2
  17. data/lib/bel_parser/language/version2_0/functions/cell_secretion.rb +2 -2
  18. data/lib/bel_parser/language/version2_0/functions/cell_surface_expression.rb +2 -2
  19. data/lib/bel_parser/language/version2_0/functions/complex_abundance.rb +1 -1
  20. data/lib/bel_parser/language/version2_0/functions/composite_abundance.rb +1 -1
  21. data/lib/bel_parser/language/version2_0/functions/degradation.rb +2 -2
  22. data/lib/bel_parser/language/version2_0/functions/fragment.rb +1 -1
  23. data/lib/bel_parser/language/version2_0/functions/from_location.rb +1 -1
  24. data/lib/bel_parser/language/version2_0/functions/fusion.rb +1 -1
  25. data/lib/bel_parser/language/version2_0/functions/micro_rna_abundance.rb +1 -1
  26. data/lib/bel_parser/language/version2_0/functions/molecular_activity.rb +1 -1
  27. data/lib/bel_parser/language/version2_0/functions/protein_modification.rb +1 -1
  28. data/lib/bel_parser/language/version2_0/functions/reaction.rb +1 -1
  29. data/lib/bel_parser/language/version2_0/functions/to_location.rb +1 -1
  30. data/lib/bel_parser/language/version2_0/functions/translocation.rb +1 -1
  31. data/lib/bel_parser/language/version2_0/functions/variant.rb +1 -1
  32. data/lib/bel_parser/resource.rb +8 -6
  33. data/lib/bel_parser/resource/concept_scheme.rb +8 -0
  34. data/lib/bel_parser/resource/dataset.rb +24 -0
  35. data/lib/bel_parser/resource/file_resource.rb +8 -0
  36. data/lib/bel_parser/resource/file_resource_value.rb +1 -0
  37. data/lib/bel_parser/resource/sparql_reader.rb +3 -1
  38. data/lib/bel_parser/resource/value.rb +20 -0
  39. metadata +1 -1
@@ -24,10 +24,38 @@ module BELParser
24
24
  # @return [BELParser::Language::Syntax::SyntaxResult] syntax results
25
25
  def validate(expression_node)
26
26
  @transform.process(expression_node)
27
- results = syntax(expression_node)
28
- results << Syntax::Valid.new(expression_node, @spec) if results.empty?
29
- results.concat(semantics(expression_node))
30
- results
27
+
28
+ case expression_node
29
+ when BELParser::Parsers::AST::SimpleStatement
30
+ SimpleStatementResult.new(
31
+ validate(expression_node.statement.subject.term),
32
+ validate(expression_node.statement.object.child),
33
+ syntax(expression_node),
34
+ semantics(expression_node))
35
+ when BELParser::Parsers::AST::ObservedTerm
36
+ ObservedTermResult.new(
37
+ validate(expression_node.statement.subject.term),
38
+ syntax(expression_node),
39
+ semantics(expression_node))
40
+ when BELParser::Parsers::AST::NestedStatement
41
+ NestedStatementResult.new(
42
+ validate(expression_node.statement.subject.term),
43
+ validate(expression_node.statement.object.child),
44
+ syntax(expression_node),
45
+ semantics(expression_node))
46
+ when BELParser::Parsers::AST::Statement
47
+ SimpleStatementResult.new(
48
+ validate(expression_node.subject.term),
49
+ validate(expression_node.object.child),
50
+ syntax(expression_node),
51
+ semantics(expression_node))
52
+ when BELParser::Parsers::AST::Term
53
+ TermResult.new(syntax(expression_node), semantics(expression_node))
54
+ when BELParser::Parsers::AST::Parameter
55
+ ParameterResult.new(syntax(expression_node), semantics(expression_node))
56
+ else
57
+ nil
58
+ end
31
59
  end
32
60
 
33
61
  private
@@ -39,29 +67,376 @@ module BELParser
39
67
  end
40
68
 
41
69
  def semantics(expression_node)
42
- semantic_results =
43
- expression_node.traverse.flat_map do |node|
44
- @semantics_functions.flat_map { |func| func.map(node, @spec, @namespaces) }
45
- end.compact
46
- sigmap_results, other_results =
47
- semantic_results.partition do |result|
48
- result.is_a?(Semantics::SignatureMappingSuccess) ||
49
- result.is_a?(Semantics::SignatureMappingWarning)
70
+ expression_node.traverse.flat_map do |node|
71
+ @semantics_functions.flat_map { |func| func.map(node, @spec, @namespaces) }
72
+ end.compact
73
+ end
74
+
75
+ module Result
76
+ def valid?
77
+ valid_syntax? && valid_semantics?
78
+ end
79
+
80
+ def valid_syntax?
81
+ @syntax_results.empty?
82
+ end
83
+
84
+ def valid_semantics?
85
+ @semantics_results.empty?
86
+ end
87
+
88
+ def valid_signature_mappings
89
+ @semantics_results
90
+ .select do |res|
91
+ res.is_a?(Semantics::SignatureMappingSuccess)
92
+ end.uniq
93
+ end
94
+
95
+ def invalid_signature_mappings
96
+ @semantics_results
97
+ .select do |res|
98
+ res.is_a?(Semantics::SignatureMappingWarning)
99
+ end
100
+ end
101
+
102
+ def detail
103
+ ''
104
+ end
105
+
106
+ def to_s
107
+ <<-HEADER.gsub(/^ {12}/, '')
108
+ Syntax: #{valid_syntax? ? 'Valid' : 'Invalid'}
109
+ Semantics: #{valid_semantics? ? 'Valid' : 'Invalid'}
110
+
111
+ #{syntax_errors_s}#{semantics_errors_s}#{detail}
112
+ HEADER
113
+ end
114
+
115
+ private
116
+
117
+ def syntax_errors_s
118
+ return nil if @syntax_results.empty?
119
+
120
+ report = "Syntax errors\n"
121
+ @syntax_results.each { |res| report += "#{res}\n" }
122
+ report
123
+ end
124
+
125
+ def semantics_errors_s
126
+ return nil if @semantics_results.empty?
127
+
128
+ report = "Semantic errors\n"
129
+ @semantics_results.each { |res| report += "#{res}\n" }
130
+ report
131
+ end
132
+ end
133
+
134
+ class ParameterResult
135
+ attr_reader :syntax_results, :semantics_results
136
+ include Result
137
+
138
+ def initialize(syntax_results, semantics_results)
139
+ @syntax_results = syntax_results
140
+ @semantics_results = semantics_results
141
+ end
142
+
143
+ def valid_signature_mappings
144
+ nil
145
+ end
146
+
147
+ def invalid_signature_mappings
148
+ nil
149
+ end
150
+ end
151
+
152
+ class TermResult
153
+ attr_reader :syntax_results, :semantics_results
154
+ include Result
155
+
156
+ def initialize(syntax_results, semantics_results)
157
+ @syntax_results = syntax_results
158
+ @semantics_results = semantics_results
159
+ end
160
+
161
+ def valid_semantics?
162
+ @semantics_results.any? do |res|
163
+ res.is_a?(Semantics::SignatureMappingSuccess)
164
+ end
165
+ end
166
+
167
+ def detail
168
+ report = "Valid signatures\n"
169
+ valid_signature_mappings.each do |mapping|
170
+ report += " #{mapping.signature}\n"
171
+ mapping.results.each do |reason|
172
+ report += " #{reason}\n"
173
+ end
174
+ end
175
+ report += "\n"
176
+
177
+ report += "Invalid signatures\n"
178
+ invalid_signature_mappings.each do |mapping|
179
+ report += " #{mapping.signature}\n"
180
+ mapping.results.each do |reason|
181
+ report += " #{reason}\n"
182
+ end
183
+ end
184
+ report
185
+ end
186
+ end
187
+
188
+ class ObservedTermResult
189
+ attr_reader :syntax_results, :semantics_results
190
+ include Result
191
+
192
+ def initialize(subject_result, syntax, semantics)
193
+ @subject_result = subject_result
194
+ @syntax_results = syntax
195
+ @semantics_results =
196
+ semantics.reject! do |res|
197
+ res.is_a?(Semantics::SignatureMappingWarning) ||
198
+ res.is_a?(Semantics::SignatureMappingSuccess)
199
+ end
200
+ end
201
+
202
+ def valid_syntax?
203
+ @subject_result.valid_syntax? && @syntax_results.empty?
204
+ end
205
+
206
+ def valid_semantics?
207
+ @subject_result.valid_semantics? && @semantics_results.empty?
208
+ end
209
+
210
+ def subject_valid?
211
+ valid?
212
+ end
213
+
214
+ def detail
215
+ report = "Subject term - Valid signatures\n"
216
+ @subject_result.valid_signature_mappings.each do |mapping|
217
+ report += " #{mapping.signature}\n"
218
+ mapping.results.each do |reason|
219
+ report += " #{reason}\n"
220
+ end
221
+ end
222
+ report += "\n"
223
+
224
+ report += "Subject term - Invalid signatures\n"
225
+ @subject_result.invalid_signature_mappings.each do |mapping|
226
+ report += " #{mapping.signature}\n"
227
+ mapping.results.each do |reason|
228
+ report += " #{reason}\n"
229
+ end
230
+ end
231
+ report
232
+ end
233
+ end
234
+
235
+ class SimpleStatementResult
236
+ attr_reader :syntax_results, :semantics_results
237
+ include Result
238
+
239
+ def initialize(subject_result, object_result, syntax, semantics)
240
+ @subject_result = subject_result
241
+ @object_result = object_result
242
+ @syntax_results = syntax
243
+ @semantics_results =
244
+ semantics.reject! do |res|
245
+ res.is_a?(Semantics::SignatureMappingWarning) ||
246
+ res.is_a?(Semantics::SignatureMappingSuccess)
247
+ end
248
+ end
249
+
250
+ def valid?
251
+ valid_syntax? && valid_semantics?
252
+ end
253
+
254
+ def valid_syntax?
255
+ @subject_result.valid_syntax? &&
256
+ @object_result.valid_syntax? &&
257
+ @syntax_results.empty?
258
+ end
259
+
260
+ def valid_semantics?
261
+ @subject_result.valid_semantics? &&
262
+ @object_result.valid_semantics? &&
263
+ @semantics_results.empty?
264
+ end
265
+
266
+ def subject_valid?
267
+ @subject_result.valid?
268
+ end
269
+
270
+ def object_valid?
271
+ @object_result.valid?
272
+ end
273
+
274
+ def valid_subject_signatures
275
+ @subject_result.semantics_results
276
+ .select do |res|
277
+ res.is_a?(Semantics::SignatureMappingSuccess)
278
+ end.uniq
279
+ end
280
+
281
+ def invalid_subject_signatures
282
+ @subject_result.semantics_results
283
+ .select do |res|
284
+ res.is_a?(Semantics::SignatureMappingWarning)
285
+ end
286
+ end
287
+
288
+ def valid_object_signatures
289
+ @object_result.semantics_results
290
+ .select do |res|
291
+ res.is_a?(Semantics::SignatureMappingSuccess)
292
+ end.uniq
293
+ end
294
+
295
+ def invalid_object_signatures
296
+ @object_result.semantics_results
297
+ .select do |res|
298
+ res.is_a?(Semantics::SignatureMappingWarning)
299
+ end
300
+ end
301
+
302
+ def detail
303
+ report = "Subject term - Valid signatures\n"
304
+ @subject_result.valid_signature_mappings.each do |mapping|
305
+ report += " #{mapping.signature}\n"
306
+ mapping.results.each do |reason|
307
+ report += " #{reason}\n"
308
+ end
309
+ end
310
+ report += "\n"
311
+
312
+ report += "Subject term - Invalid signatures\n"
313
+ @subject_result.invalid_signature_mappings.each do |mapping|
314
+ report += " #{mapping.signature}\n"
315
+ mapping.results.each do |reason|
316
+ report += " #{reason}\n"
317
+ end
50
318
  end
51
- expression_node
52
- .traverse
53
- .select do |node|
54
- node.is_a?(BELParser::Parsers::AST::Term)
319
+ report += "\n"
320
+
321
+ report += "Object term - Valid signatures\n"
322
+ @object_result.valid_signature_mappings.each do |mapping|
323
+ report += " #{mapping.signature}\n"
324
+ mapping.results.each do |reason|
325
+ report += " #{reason}\n"
326
+ end
55
327
  end
56
- .map do |term_node|
57
- sigmap_term =
58
- sigmap_results
59
- .select { |res| res.expression_node == term_node }
60
- unless sigmap_term.any?(&:success?)
61
- other_results.concat(sigmap_term)
328
+ report += "\n"
329
+
330
+ report += "Object term - Invalid signatures\n"
331
+ @object_result.invalid_signature_mappings.each do |mapping|
332
+ report += " #{mapping.signature}\n"
333
+ mapping.results.each do |reason|
334
+ report += " #{reason}\n"
62
335
  end
63
336
  end
64
- other_results
337
+ report
338
+ end
339
+ end
340
+
341
+ class NestedStatementResult
342
+ attr_reader :syntax_results, :semantics_results
343
+ include Result
344
+
345
+ def initialize(subject_result, object_result, syntax, semantics)
346
+ @subject_result = subject_result
347
+ @object_result = object_result
348
+ @syntax_results = syntax
349
+ @semantics_results =
350
+ semantics.reject! do |res|
351
+ res.is_a?(Semantics::SignatureMappingWarning) ||
352
+ res.is_a?(Semantics::SignatureMappingSuccess)
353
+ end
354
+ end
355
+
356
+ def valid?
357
+ valid_syntax? && valid_semantics?
358
+ end
359
+
360
+ def valid_syntax?
361
+ @subject_result.valid_syntax? &&
362
+ @object_result.valid_syntax? &&
363
+ @syntax_results.empty?
364
+ end
365
+
366
+ def valid_semantics?
367
+ @subject_result.valid_semantics? &&
368
+ @object_result.valid_semantics? &&
369
+ @semantics_results.empty?
370
+ end
371
+
372
+ def subject_valid?
373
+ @subject_result.valid?
374
+ end
375
+
376
+ def object_valid?
377
+ @object_result.valid?
378
+ end
379
+
380
+ def valid_subject_signatures
381
+ @subject_result.semantics_results
382
+ .select do |res|
383
+ res.is_a?(Semantics::SignatureMappingSuccess)
384
+ end.uniq
385
+ end
386
+
387
+ def invalid_subject_signatures
388
+ @subject_result.semantics_results
389
+ .select do |res|
390
+ res.is_a?(Semantics::SignatureMappingWarning)
391
+ end
392
+ end
393
+
394
+ def valid_object_signatures
395
+ @object_result.semantics_results
396
+ .select do |res|
397
+ res.is_a?(Semantics::SignatureMappingSuccess)
398
+ end.uniq
399
+ end
400
+
401
+ def invalid_object_signatures
402
+ @object_result.semantics_results
403
+ .select do |res|
404
+ res.is_a?(Semantics::SignatureMappingWarning)
405
+ end
406
+ end
407
+
408
+ def to_s
409
+ report = @object_result.to_s
410
+ <<-HEADER.gsub(/^ {12}/, '')
411
+ Syntax: #{valid_syntax? ? 'Valid' : 'Invalid'}
412
+ Semantics: #{valid_semantics? ? 'Valid' : 'Invalid'}
413
+
414
+ #{syntax_errors_s}#{semantics_errors_s}#{detail}
415
+ HEADER
416
+ end
417
+
418
+ def detail
419
+ report = "Subject term - Valid signatures\n"
420
+ @subject_result.valid_signature_mappings.each do |mapping|
421
+ report += " #{mapping.signature}\n"
422
+ mapping.results.each do |reason|
423
+ report += " #{reason}\n"
424
+ end
425
+ end
426
+ report += "\n"
427
+
428
+ report += "Subject term - Invalid signatures\n"
429
+ @subject_result.invalid_signature_mappings.each do |mapping|
430
+ report += " #{mapping.signature}\n"
431
+ mapping.results.each do |reason|
432
+ report += " #{reason}\n"
433
+ end
434
+ end
435
+ report += "\n"
436
+
437
+ report += @object_result.detail
438
+ report
439
+ end
65
440
  end
66
441
  end
67
442
  end
@@ -126,7 +126,7 @@ module BELParser
126
126
 
127
127
  def to_s
128
128
  function = @expression_node.string_literal
129
- %(Function of "#{function}" does not match return types: #{@expected_return_types.join(', ')})
129
+ %(Function of "#{function}" does not match return types: #{@expected_return_types.map(&:to_sym).join(', ')})
130
130
  end
131
131
  end
132
132
 
@@ -61,6 +61,10 @@ module BELParser
61
61
  end
62
62
  end
63
63
 
64
+ def inspect
65
+ "BEL specification, version #@version"
66
+ end
67
+
64
68
  # @param [Array<#long,#short>] language_objects to be indexed by
65
69
  # +long+ and +short+ method return
66
70
  def index_long_short(language_objects)