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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4c2fddeaf52fe437892c924831ae99758ab14b95
4
- data.tar.gz: 0e473e2c5900240e0e02e9e8831bfa41a043418e
3
+ metadata.gz: ea63f6fcf85946d6713d061c08d7413da2f35300
4
+ data.tar.gz: 884d2ad127e8a8f6b4f6ce84519eb432605c39a9
5
5
  SHA512:
6
- metadata.gz: 9913e3f53f9feec89720dac1fb43d78c2713e45b75da34a86e59d3a20f1831384ef13b1a13a2db34067e8b36bff4f7752e79d5774f48896ee3948ad7033a23d3
7
- data.tar.gz: 16f4963203ecc695f70065a3320c147a32187ae86f7779d72edf39744d47ba8eefa5b34b111b894c083878f719081073a103aad2d308ba30653c486c769f15d6
6
+ metadata.gz: d93b622bc38d63de8f7a13c77a6f871ea84635014b6ea8db6e513e65db5df11f0da8f6cb02f937e96b0a86c5377490bf676cba0c1419682f1ab5fbdf0fc97a64
7
+ data.tar.gz: 3b10d096fb15423b9419714dbec613fec3e839c930e89ebec940dc633ba1149362913450725d198edf09786bfaaf6ce3c225c7662b4ebb901ee6c1e95928b620
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.0.alpha.47
1
+ 1.0.0.alpha.48
@@ -1,4 +1,3 @@
1
- require 'bel_parser/quoting'
2
1
  require 'bel_parser/resource'
3
2
 
4
3
  module BELParser
@@ -8,8 +7,6 @@ module BELParser
8
7
  # identify parameter values like genes (e.g. _AKT1_),
9
8
  # diseases (e.g. _hypertropia_), and processes (e.g. _anaphase_).
10
9
  class Namespace
11
- include Enumerable
12
-
13
10
  attr_accessor :keyword
14
11
  attr_accessor :uri
15
12
  attr_accessor :url
@@ -23,11 +20,11 @@ module BELParser
23
20
  @url = url
24
21
 
25
22
  # configure reader for URIs (RDF).
26
- @uri_reader = options.fetch(:uri_reader, nil)
23
+ @uri_reader = options.fetch(:uri_reader, BELParser::Resource.default_uri_reader)
27
24
  BELParser::Resource::Reader.assert_reader(@uri_reader, 'uri_reader')
28
25
 
29
26
  # configure reader for URLs (Resource files).
30
- @url_reader = options.fetch(:url_reader, nil)
27
+ @url_reader = options.fetch(:url_reader, BELParser::Resource.default_url_reader)
31
28
  BELParser::Resource::Reader.assert_reader(@url_reader, 'url_reader')
32
29
  end
33
30
 
@@ -47,13 +44,33 @@ module BELParser
47
44
  !@url.nil?
48
45
  end
49
46
 
47
+ def include?(value)
48
+ resolved_value =
49
+ if uri? && @uri_reader
50
+ @uri_reader.retrieve_value_from_resource(@uri, value)
51
+ elsif url? && @url_reader
52
+ @url_reader.retrieve_value_from_resource(@url, value)
53
+ else
54
+ nil
55
+ end
56
+ !resolved_value.nil?
57
+ end
58
+
50
59
  def [](value)
51
- if uri? && @uri_reader
52
- @uri_reader.retrieve_value_from_resource(@uri, value)
53
- elsif url? && @url_reader
54
- @url_reader.retrieve_value_from_resource(@url, value)
60
+ resolved_value =
61
+ if uri? && @uri_reader
62
+ @uri_reader.retrieve_value_from_resource(@uri, value)
63
+ elsif url? && @url_reader
64
+ @url_reader.retrieve_value_from_resource(@url, value)
65
+ else
66
+ nil
67
+ end
68
+
69
+ if resolved_value
70
+ value = resolved_value.first
71
+ Parameter.new(self, value.name, value.encodings)
55
72
  else
56
- nil
73
+ Parameter.new(self, value, nil)
57
74
  end
58
75
  end
59
76
 
@@ -68,7 +85,7 @@ module BELParser
68
85
  []
69
86
  end
70
87
  values.each do |value|
71
- yield value
88
+ yield Parameter.new(self, value.name, value.encodings)
72
89
  end
73
90
  else
74
91
  to_enum(:each)
@@ -96,15 +113,38 @@ module BELParser
96
113
  end
97
114
 
98
115
  module Converters
99
- include BELParser::Quoting
100
-
101
- def ast_to_namespace(ast)
102
- return nil if ast.nil? ||
103
- !ast.is_a?(BELParser::Parsers::AST::NamespaceDefinition)
104
- keyword, domain = ast.children
105
- # TODO Support URI when it's an available domain.
106
- url = domain.child.string.string_literal
107
- Namespace.new(keyword, nil, unquote(url))
116
+ def ast_to_namespace(ast, namespace_hash = {})
117
+ return nil if ast.nil?
118
+
119
+ case ast
120
+ when BELParser::Parsers::AST::Prefix
121
+ if ast.namespace
122
+ dataset = ast.namespace
123
+ case
124
+ when dataset.uri?
125
+ Namespace.new(dataset.keyword, dataset.identifier, nil)
126
+ when dataset.url?
127
+ Namespace.new(dataset.keyword, nil, dataset.identifier)
128
+ else
129
+ Namespace.new(dataset.keyword, nil, nil)
130
+ end
131
+ else
132
+ return nil unless ast.identifier
133
+ prefix_s = ast.identifier.string_literal
134
+ namespace_hash[prefix_s]
135
+ end
136
+ when BELParser::Parsers::AST::NamespaceDefinition
137
+ keyword, domain = ast.children
138
+ keyword_s = keyword.identifier.string_literal
139
+ case
140
+ when domain.uri?
141
+ uri = domain.child.string_literal
142
+ Namespace.new(keyword_s, uri, nil)
143
+ when domain.url?
144
+ url = domain.child.string_literal
145
+ Namespace.new(keyword_s, ast.uri, url)
146
+ end
147
+ end
108
148
  end
109
149
  end
110
150
  end
@@ -8,45 +8,33 @@ module BELParser
8
8
  include BELParser::Quoting
9
9
  include Comparable
10
10
 
11
- attr_reader :namespace, :value
11
+ attr_reader :namespace, :value, :encoding
12
12
 
13
- def initialize(namespace, value)
14
- raise(ArgumentError, 'value is nil') unless value
15
- unless namespace.nil? || namespace.is_a?(Namespace)
16
- raise(
17
- ArgumentError,
18
- "namespace: expected nil or Namespace, actual #{namespace.class}")
19
- end
13
+ def initialize(namespace, value, encoding = nil)
14
+ assert_namespace_type(namespace)
15
+ assert_value_type(value)
20
16
  @namespace = namespace
21
17
  @value = value
18
+ @encoding = encoding
22
19
  end
23
20
 
24
21
  def namespace=(namespace)
25
- unless namespace.nil? || namespace.is_a?(Namespace)
26
- raise(
27
- ArgumentError,
28
- "namespace: expected nil or Namespace, actual #{namespace.class}")
29
- end
30
-
22
+ assert_namespace_type(namespace)
31
23
  @namespace = namespace
32
24
  end
33
25
 
34
26
  def value=(value)
35
- raise(ArgumentError, 'value is nil') unless value
36
-
27
+ assert_value_type(value)
37
28
  @value = value
38
29
  end
39
30
 
40
- def encoding
41
- nsv = @namespace[@value]
42
- return nil unless nsv
43
- nsv.first.encodings
31
+ def valid?
32
+ return true if @namespace.nil?
33
+ @namespace.include?(@value)
44
34
  end
45
35
 
46
- def valid?
47
- return false unless @value
48
- return true unless @namespace
49
- !@namespace[@value].nil?
36
+ def invalid?
37
+ !valid?
50
38
  end
51
39
 
52
40
  def <=>(other)
@@ -76,24 +64,30 @@ module BELParser
76
64
  end
77
65
  %Q{#{prefix}#{quote_if_needed(@value)}}
78
66
  end
67
+
68
+ private
69
+
70
+ def assert_namespace_type(namespace)
71
+ unless namespace.nil? || namespace.is_a?(Namespace)
72
+ msg = "namespace: expected nil or Namespace, actual #{namespace.class}"
73
+ raise(ArgumentError, msg)
74
+ end
75
+ end
76
+
77
+ def assert_value_type(value)
78
+ unless value.is_a?(String)
79
+ msg = "value: expected String, actual #{value.class}"
80
+ raise(ArgumentError, msg)
81
+ end
82
+ end
79
83
  end
80
84
 
81
85
  module Converters
82
- include BELParser::Quoting
83
-
84
86
  def ast_to_parameter(ast, namespace_hash = {})
85
87
  return nil if ast.nil? ||
86
88
  !ast.is_a?(BELParser::Parsers::AST::Parameter)
87
- prefix, value = ast.children
88
- namespace =
89
- if prefix.identifier
90
- namespace_hash[prefix.identifier.string_literal]
91
- else
92
- nil
93
- end
94
- Parameter.new(
95
- namespace,
96
- value.children[0].string_literal)
89
+ namespace = ast_to_namespace(ast.prefix, namespace_hash)
90
+ namespace[ast.value.children[0].string_literal]
97
91
  end
98
92
  end
99
93
  end
@@ -25,8 +25,12 @@ module BELParser
25
25
  # @param [Term, Statement] object
26
26
  # @param [String] comment
27
27
  def initialize(subject, relationship = nil, object = nil, comment = nil)
28
- raise(ArgumentError, 'subject is nil') unless subject
29
- @subject = subject
28
+ if subject.nil? || !subject.is_a?(Term)
29
+ raise(
30
+ ArgumentError,
31
+ "subject: expected Term, actual #{subject.class}")
32
+ end
33
+ @subject = subject
30
34
 
31
35
  unless relationship.nil? || relationship.is_a?(BELParser::Language::Relationship)
32
36
  raise(
@@ -68,8 +72,29 @@ module BELParser
68
72
  @object && @object.is_a?(Statement)
69
73
  end
70
74
 
75
+ def namespaces
76
+ ns = @subject.namespaces
77
+ ns.concat(@object.namespaces) unless @object.nil?
78
+ ns
79
+ end
80
+
81
+ def validation(
82
+ spec = BELParser::Language.latest_supported_specification,
83
+ uri_reader = BELParser::Resource.default_uri_reader,
84
+ url_reader = BELParser::Resource.default_url_reader)
85
+
86
+ validator =
87
+ BELParser::Expression::Validator.new(
88
+ spec,
89
+ Hash[namespaces.map { |ns| [ns.keyword, ns] }],
90
+ uri_reader,
91
+ url_reader)
92
+ _, _, _, result = validator.each(StringIO.new("#{to_s}\n")).first
93
+ result
94
+ end
95
+
71
96
  def valid?
72
- # TODO Use expression validator.
97
+ @subject.valid? && @object.valid?
73
98
  end
74
99
 
75
100
  def hash
@@ -1,3 +1,5 @@
1
+ require_relative '../validator'
2
+
1
3
  module BELParser
2
4
  module Expression
3
5
  module Model
@@ -17,7 +19,7 @@ module BELParser
17
19
  ArgumentError,
18
20
  %(function: expected Function, actual #{function.class}))
19
21
  end
20
- @function = function
22
+ @function = function
21
23
  end
22
24
 
23
25
  def arguments=(*args)
@@ -25,7 +27,7 @@ module BELParser
25
27
  invalid = args.any?(&method(:invalid_argument?))
26
28
  raise(
27
29
  ArgumentError,
28
- 'args must be Parameter or Term objects') if invalid
30
+ "args: expected Parameter or Term objects") if invalid
29
31
 
30
32
  @arguments = args
31
33
  end
@@ -33,12 +35,50 @@ module BELParser
33
35
  def <<(arg)
34
36
  raise(
35
37
  ArgumentError,
36
- 'argument must be Parameter or Term') if invalid_argument?(arg)
38
+ 'arg: expected Parameter or Term') if invalid_argument?(arg)
37
39
  @arguments << item
38
40
  end
39
41
 
40
- def valid?
41
- # TODO Use expression validator.
42
+ def namespaces
43
+ @arguments.flat_map do |arg|
44
+ case arg
45
+ when Term
46
+ arg.namespaces
47
+ when Parameter
48
+ arg.namespace
49
+ end
50
+ end
51
+ end
52
+
53
+ def validation(
54
+ spec = BELParser::Language.latest_supported_specification,
55
+ uri_reader = BELParser::Resource.default_uri_reader,
56
+ url_reader = BELParser::Resource.default_url_reader)
57
+
58
+ validator =
59
+ BELParser::Expression::Validator.new(
60
+ spec,
61
+ Hash[namespaces.map { |ns| [ns.keyword, ns] }],
62
+ uri_reader,
63
+ url_reader)
64
+ _, _, _, result = validator.each(StringIO.new("#{to_s}\n")).first
65
+ result
66
+ end
67
+
68
+ def valid?(
69
+ spec = BELParser::Language.latest_supported_specification,
70
+ uri_reader = BELParser::Resource.default_uri_reader,
71
+ url_reader = BELParser::Resource.default_url_reader)
72
+
73
+ validation(spec, uri_reader, url_reader).valid?
74
+ end
75
+
76
+ def invalid?(
77
+ spec = BELParser::Language.latest_supported_specification,
78
+ uri_reader = BELParser::Resource.default_uri_reader,
79
+ url_reader = BELParser::Resource.default_url_reader)
80
+
81
+ !validation(spec, uri_reader, url_reader).valid?
42
82
  end
43
83
 
44
84
  def hash
@@ -66,8 +106,7 @@ module BELParser
66
106
  private
67
107
 
68
108
  def invalid_argument?(arg)
69
- !arg.is_a?(BELParser::Expression::Model::Parameter) &&
70
- !arg.is_a?(BELParser::Expression::Model::Term)
109
+ arg.nil? || [Parameter, Term].none? { |type| arg.is_a?(type) }
71
110
  end
72
111
  end
73
112
 
@@ -165,7 +165,19 @@ module BELParser
165
165
  end
166
166
 
167
167
  if __FILE__ == $PROGRAM_NAME
168
- BELParser::Expression.parse($stdin).each do |obj|
169
- puts " #{obj.class.name.split('::')[-1]}: #{obj}"
170
- end
168
+ namespaces =
169
+ Hash[
170
+ ARGV.map do |ns|
171
+ keyword, uri = ns.split('=')
172
+ [keyword, BELParser::Expression::Model::Namespace.new(keyword, uri, nil)]
173
+ end.compact
174
+ ]
175
+
176
+ BELParser::Expression.parse(
177
+ $stdin,
178
+ BELParser::Language.latest_supported_specification,
179
+ namespaces
180
+ ).each do |obj|
181
+ puts " #{obj.class.name.split('::')[-1]}: #{obj}"
182
+ end
171
183
  end
@@ -3,6 +3,7 @@ require_relative '../ast_generator'
3
3
  require_relative '../parsers/expression'
4
4
  require_relative '../language'
5
5
  require_relative '../language/expression_validator'
6
+ require_relative 'model'
6
7
 
7
8
  module BELParser
8
9
  module Expression
@@ -52,27 +53,24 @@ if __FILE__ == $PROGRAM_NAME
52
53
  exit 1
53
54
  end
54
55
 
55
- uri_reader = BELParser::Resource.default_uri_reader
56
- url_reader = BELParser::Resource.default_url_reader
57
- namespaces =
56
+ namespaces =
58
57
  Hash[
59
58
  ARGV[1..-1]
60
59
  .map do |ns|
61
- prefix, identifier = ns.split('=')
62
- [prefix, uri_reader.retrieve_resource(identifier)]
60
+ keyword, identifier = ns.split('=')
61
+ [keyword, BELParser::Expression::Model::Namespace.new(keyword, identifier, nil)]
63
62
  end
64
63
  ]
64
+
65
65
  BELParser::Expression::Validator
66
- .new(ARGV.first, namespaces, uri_reader, url_reader)
67
- .each($stdin) do |(line_number, line, ast, results)|
68
- results.select { |res| res.is_a? BELParser::Language::Syntax::SyntaxError }
66
+ .new(
67
+ BELParser::Language.specification(ARGV.first),
68
+ namespaces,
69
+ BELParser::Resource.default_uri_reader,
70
+ BELParser::Resource.default_url_reader)
71
+ .each($stdin) do |(line_number, line, ast, result)|
69
72
  puts "#{line_number}: #{line}"
70
- puts " AST Type: #{ast.type}"
71
- puts results
72
- .map { |r| "#{r}\n" }
73
- .join
74
- .each_line
75
- .map { |l| " #{l}" }
76
- .join
73
+ puts "AST Type: #{ast.type}"
74
+ puts result
77
75
  end
78
76
  end
@@ -49,9 +49,9 @@ module BELParser
49
49
  end
50
50
 
51
51
  def on_parameter(parameter_node)
52
- @type = nil
53
- @dataset = nil
54
- @prefix = nil
52
+ @type = nil
53
+ @namespace = nil
54
+ @prefix = nil
55
55
  process(parameter_node.prefix)
56
56
  process(parameter_node.value)
57
57
  end
@@ -60,29 +60,25 @@ module BELParser
60
60
  return prefix_node unless prefix_node.identifier
61
61
 
62
62
  @prefix = prefix_node.identifier.string_literal
63
- @type, @dataset = @namespace_hash[@prefix.downcase]
64
- return prefix_node unless @dataset
63
+ @namespace = @namespace_hash[@prefix]
64
+ return prefix_node unless @namespace
65
65
 
66
- prefix_node.namespace = @dataset
66
+ prefix_node.namespace = @namespace
67
67
  prefix_node
68
68
  end
69
69
 
70
70
  def on_value(value_node)
71
- return value_node unless @dataset
72
- value_node.namespace = @dataset
73
- identifier = @dataset.identifier
74
- value_literal = value_node.children[0].string_literal
71
+ return value_node unless @namespace
72
+ value_node.prefix = @prefix
73
+ value_node.namespace = @namespace
75
74
 
76
- reader = @type == :uri ? @uri_reader : @url_reader
77
- values = reader.retrieve_value_from_resource(identifier, value_literal)
75
+ value_literal = value_node.children[0].string_literal
76
+ value = @namespace[value_literal]
78
77
 
79
- value_node.prefix = @prefix
80
- if values
81
- value = values.first
78
+ if value
82
79
  value_node.encoding =
83
- value
84
- .encodings
85
- .map(&@language_spec.method(:value_encoding))
80
+ value.encoding &&
81
+ value.encoding.map(&@language_spec.method(:value_encoding))
86
82
  value_node.namespace_value = value
87
83
  else
88
84
  value_node.encoding = nil