bel_parser 1.0.0.alpha.13 → 1.0.0.alpha.14
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 +4 -4
- data/VERSION +1 -1
- data/lib/bel_parser/language/apply_namespace_encoding.rb +5 -2
- data/lib/bel_parser/language/expression_validator.rb +25 -7
- data/lib/bel_parser/language/syntax/undefined_namespace_value.rb +5 -6
- data/lib/bel_parser/language.rb +8 -0
- data/lib/bel_parser/parsers/ast/node.rb +30 -3
- data/lib/bel_parser/parsers/bel_script/define_annotation.rb +1732 -1288
- data/lib/bel_parser/parsers/bel_script/set.rb +1424 -972
- data/lib/bel_parser/parsers/bel_script/set_document.rb +2735 -2100
- data/lib/bel_parser/parsers/common/list.rb +708 -462
- data/lib/bel_parser/parsers/common/list.rl +6 -4
- data/lib/bel_parser/resource/eager_reader.rb +9 -9
- data/lib/bel_parser/resource/http_cache.rb +26 -8
- data/lib/bel_parser/resource/resource_file_reader.rb +1 -0
- data/lib/bel_parser/resource/sparql_reader.rb +1 -0
- data/lib/bel_parser/script/state/annotation_definition.rb +62 -0
- data/lib/bel_parser/script/state/bel_version.rb +35 -0
- data/lib/bel_parser/script/state/document_property.rb +29 -0
- data/lib/bel_parser/script/state/namespace_definition.rb +32 -0
- data/lib/bel_parser/script/state/set.rb +57 -0
- data/lib/bel_parser/script/state/unset.rb +43 -0
- data/lib/bel_parser/script/state_function.rb +10 -0
- data/lib/bel_parser/script/syntax/expression_validation.rb +46 -0
- data/lib/bel_parser/script/syntax/invalid_regex_pattern.rb +49 -0
- data/lib/bel_parser/script/syntax/undefined_annotation.rb +60 -0
- data/lib/bel_parser/script/syntax/undefined_annotation_value.rb +83 -0
- data/lib/bel_parser/script/syntax/unresolvable_namespace.rb +55 -0
- data/lib/bel_parser/script/syntax/unsupported_bel_version.rb +58 -0
- data/lib/bel_parser/script/validator.rb +153 -0
- metadata +15 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a93a3b8baa29469eeee1329e06bbc82a886d7d59
|
4
|
+
data.tar.gz: 07332e2aff2a9b3ba75e7570c13dd4b5be14d340
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 810411e5492af6670af3ba4a1674d1bf72f1543e4bd432befecd528f466b9f35e03e321861faba4d25a9efe000c0d8b3b0ed9cd809b4df2e4d56256d742a6200
|
7
|
+
data.tar.gz: 29cfd9031739f4108975fb8dd618c8051c2ad95cd46ccbdee6840d1768bb7f90d9776e687dc8f816825b7c7aa7a83bf47f9b98f8cf15907c9ac180f6ec0b99f3
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.0.0.alpha.
|
1
|
+
1.0.0.alpha.14
|
@@ -52,15 +52,16 @@ module BELParser
|
|
52
52
|
|
53
53
|
def on_parameter(parameter_node)
|
54
54
|
@resolved_dataset = nil
|
55
|
+
@prefix = nil
|
55
56
|
process(parameter_node.prefix)
|
56
57
|
process(parameter_node.value)
|
57
58
|
end
|
58
59
|
|
59
60
|
def on_prefix(prefix_node)
|
60
61
|
return prefix_node unless prefix_node.identifier
|
61
|
-
prefix = prefix_node.identifier.string_literal
|
62
62
|
|
63
|
-
|
63
|
+
@prefix = prefix_node.identifier.string_literal
|
64
|
+
identifier = @identifier_hash[@prefix].identifier
|
64
65
|
return prefix_node unless identifier
|
65
66
|
|
66
67
|
dataset = @resource_reader.retrieve_resource(identifier)
|
@@ -80,6 +81,7 @@ module BELParser
|
|
80
81
|
@resource_reader
|
81
82
|
.retrieve_value_from_resource(identifier, value_literal)
|
82
83
|
|
84
|
+
value_node.prefix = @prefix
|
83
85
|
if value
|
84
86
|
value_node.encoding =
|
85
87
|
value
|
@@ -90,6 +92,7 @@ module BELParser
|
|
90
92
|
value_node.encoding = nil
|
91
93
|
value_node.namespace_value = nil
|
92
94
|
end
|
95
|
+
value_node
|
93
96
|
end
|
94
97
|
end
|
95
98
|
end
|
@@ -25,10 +25,8 @@ module BELParser
|
|
25
25
|
def validate(expression_node)
|
26
26
|
@transform.process(expression_node)
|
27
27
|
results = syntax(expression_node)
|
28
|
-
if results.empty?
|
29
|
-
|
30
|
-
results.concat(semantics(expression_node))
|
31
|
-
end
|
28
|
+
results << Syntax::Valid.new(expression_node, @spec) if results.empty?
|
29
|
+
results.concat(semantics(expression_node))
|
32
30
|
results
|
33
31
|
end
|
34
32
|
|
@@ -41,9 +39,29 @@ module BELParser
|
|
41
39
|
end
|
42
40
|
|
43
41
|
def semantics(expression_node)
|
44
|
-
|
45
|
-
|
46
|
-
|
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)
|
50
|
+
end
|
51
|
+
expression_node
|
52
|
+
.traverse
|
53
|
+
.select do |node|
|
54
|
+
node.is_a?(BELParser::Parsers::AST::Term)
|
55
|
+
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)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
other_results
|
47
65
|
end
|
48
66
|
end
|
49
67
|
end
|
@@ -27,15 +27,14 @@ module BELParser
|
|
27
27
|
# Gets the undefined value.
|
28
28
|
attr_reader :undefined_value
|
29
29
|
|
30
|
-
def initialize(
|
31
|
-
super(
|
32
|
-
@
|
30
|
+
def initialize(value_node, spec, value)
|
31
|
+
super(value_node, spec)
|
32
|
+
@value = value
|
33
33
|
end
|
34
34
|
|
35
35
|
def msg
|
36
|
-
|
37
|
-
|
38
|
-
MSG
|
36
|
+
prefix = @expression_node.prefix
|
37
|
+
%(Undefined namespace value "#@value" for namespace "#{prefix}".)
|
39
38
|
end
|
40
39
|
end
|
41
40
|
end
|
data/lib/bel_parser/language.rb
CHANGED
@@ -52,6 +52,14 @@ module BELParser
|
|
52
52
|
end.sort
|
53
53
|
end
|
54
54
|
|
55
|
+
# Returns the latest supported version string according to the
|
56
|
+
# _MAJOR.MINOR_ pattern.
|
57
|
+
#
|
58
|
+
# @return [String] latest supported version
|
59
|
+
def self.latest_supported_version
|
60
|
+
versions.max_by { |version| version.to_f }
|
61
|
+
end
|
62
|
+
|
55
63
|
# Returns all language {Specification specifications}.
|
56
64
|
#
|
57
65
|
# @return [Array<Specification>] BEL specifications
|
@@ -209,6 +209,16 @@ module BELParser
|
|
209
209
|
def initialize(children = [], properties = {})
|
210
210
|
super(AnnotationDefinition.ast_type, children, properties)
|
211
211
|
end
|
212
|
+
|
213
|
+
# Get the annotation definition's keyword.
|
214
|
+
def keyword
|
215
|
+
children[0]
|
216
|
+
end
|
217
|
+
|
218
|
+
# Get the annotation definition's domain.
|
219
|
+
def domain
|
220
|
+
children[1]
|
221
|
+
end
|
212
222
|
end
|
213
223
|
|
214
224
|
# AST node representing the function of a BEL term.
|
@@ -296,14 +306,24 @@ module BELParser
|
|
296
306
|
super(Domain.ast_type, children, properties)
|
297
307
|
end
|
298
308
|
|
309
|
+
# Determine if this is a LIST domain.
|
310
|
+
def list?
|
311
|
+
children[0] && children[0].is_a?(List)
|
312
|
+
end
|
313
|
+
|
314
|
+
# Determine if this is a PATTERN domain.
|
315
|
+
def pattern?
|
316
|
+
children[0] && children[0].is_a?(Pattern)
|
317
|
+
end
|
318
|
+
|
299
319
|
# Determine if this is a URL domain.
|
300
320
|
def url?
|
301
321
|
children[0] && children[0].is_a?(Url)
|
302
322
|
end
|
303
323
|
|
304
324
|
# Get the domain's Url.
|
305
|
-
def
|
306
|
-
|
325
|
+
def child
|
326
|
+
children[0]
|
307
327
|
end
|
308
328
|
end
|
309
329
|
|
@@ -380,6 +400,10 @@ module BELParser
|
|
380
400
|
def initialize(children = [], properties = {})
|
381
401
|
super(List.ast_type, children, properties)
|
382
402
|
end
|
403
|
+
|
404
|
+
def list_items
|
405
|
+
children
|
406
|
+
end
|
383
407
|
end
|
384
408
|
|
385
409
|
# AST node representing a list item.
|
@@ -780,7 +804,7 @@ module BELParser
|
|
780
804
|
|
781
805
|
# Get what is being unset.
|
782
806
|
def name
|
783
|
-
|
807
|
+
children[0]
|
784
808
|
end
|
785
809
|
end
|
786
810
|
|
@@ -820,6 +844,9 @@ module BELParser
|
|
820
844
|
super(Value.ast_type, children, properties)
|
821
845
|
end
|
822
846
|
|
847
|
+
# Get/Set the namespace prefix.
|
848
|
+
attr_accessor :prefix
|
849
|
+
|
823
850
|
# Get/Set the value's encoding.
|
824
851
|
attr_accessor :encoding
|
825
852
|
|