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

Sign up to get free protection for your applications and to get access to all the features.
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)