bel_parser 1.0.0.alpha.44-java → 1.0.0.alpha.45-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.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/bin/bel2_validator +68 -12
- data/bin/bel_script_reader +56 -25
- data/lib/bel/translator/plugins/bel_script/reader.rb +2 -1
- data/lib/bel_parser/expression/validator.rb +7 -8
- data/lib/bel_parser/language/apply_namespace_encoding.rb +20 -23
- data/lib/bel_parser/language/expression_validator.rb +2 -2
- data/lib/bel_parser/parsers/ast/node.rb +35 -0
- data/lib/bel_parser/parsers/bel_script/define_annotation.rb +964 -808
- data/lib/bel_parser/parsers/bel_script/define_annotation.rl +24 -4
- data/lib/bel_parser/parsers/bel_script/define_namespace.rb +336 -300
- data/lib/bel_parser/parsers/bel_script/define_namespace.rl +15 -3
- data/lib/bel_parser/parsers/common/common.rl +1 -0
- data/lib/bel_parser/resource/resource_url_reader.rb +2 -2
- data/lib/bel_parser/resource.rb +50 -3
- data/lib/bel_parser/script/apply_resource_uri.rb +30 -0
- data/lib/bel_parser/script/nanopub_mapper.rb +9 -5
- data/lib/bel_parser/script/state/annotation_definition.rb +24 -9
- data/lib/bel_parser/script/state/namespace_definition.rb +22 -8
- data/lib/bel_parser/script/syntax/expression_validation.rb +6 -5
- data/lib/bel_parser/script/syntax/undefined_annotation_value.rb +14 -9
- data/lib/bel_parser/script/syntax/unresolvable_namespace.rb +14 -7
- metadata +2 -1
| @@ -16,14 +16,21 @@ | |
| 16 16 | 
             
              action add_string_value {
         | 
| 17 17 | 
             
                trace('DEFINE_NAMESPACE add_string_value')
         | 
| 18 18 | 
             
                string_node = @buffers.delete(:string)
         | 
| 19 | 
            -
                 | 
| 19 | 
            +
                domain   = @buffers.delete(:namespace_definition_domain)
         | 
| 20 | 
            +
                domain <<= string_node
         | 
| 21 | 
            +
                leaf = domain(domain)
         | 
| 20 22 | 
             
                leaf.complete = string_node.complete
         | 
| 21 23 | 
             
                @buffers[:namespace_definition_domain] = leaf
         | 
| 22 24 | 
             
              }
         | 
| 23 25 |  | 
| 26 | 
            +
              action add_uri_domain {
         | 
| 27 | 
            +
                trace('DEFINE_NAMESPACE add_uri_domain')
         | 
| 28 | 
            +
                @buffers[:namespace_definition_domain] = uri()
         | 
| 29 | 
            +
              }
         | 
| 30 | 
            +
             | 
| 24 31 | 
             
              action add_url_domain {
         | 
| 25 32 | 
             
                trace('DEFINE_NAMESPACE add_url_domain')
         | 
| 26 | 
            -
                @ | 
| 33 | 
            +
                @buffers[:namespace_definition_domain] = url()
         | 
| 27 34 | 
             
              }
         | 
| 28 35 |  | 
| 29 36 | 
             
              action define_namespace_end {
         | 
| @@ -66,6 +73,11 @@ | |
| 66 73 | 
             
                %add_string_value
         | 
| 67 74 | 
             
                ;
         | 
| 68 75 |  | 
| 76 | 
            +
              uri_domain =
         | 
| 77 | 
            +
                KW_URI
         | 
| 78 | 
            +
                %add_uri_domain
         | 
| 79 | 
            +
                ;
         | 
| 80 | 
            +
             | 
| 69 81 | 
             
              url_domain =
         | 
| 70 82 | 
             
                KW_URL
         | 
| 71 83 | 
             
                %add_url_domain
         | 
| @@ -79,7 +91,7 @@ | |
| 79 91 | 
             
                SP+
         | 
| 80 92 | 
             
                KW_AS
         | 
| 81 93 | 
             
                SP+
         | 
| 82 | 
            -
                url_domain
         | 
| 94 | 
            +
                (url_domain | uri_domain)
         | 
| 83 95 | 
             
                SP+
         | 
| 84 96 | 
             
                string_value
         | 
| 85 97 | 
             
                @eof(define_namespace_node_eof)
         | 
| @@ -30,7 +30,7 @@ module BELParser | |
| 30 30 | 
             
                  #
         | 
| 31 31 | 
             
                  # @param [Boolean] reuse_database_files specify +true+ to reuse database
         | 
| 32 32 | 
             
                  #        files; +false+ to create new database files (default)
         | 
| 33 | 
            -
                  def initialize(reuse_database_files =  | 
| 33 | 
            +
                  def initialize(reuse_database_files = true)
         | 
| 34 34 | 
             
                    @resources = {}
         | 
| 35 35 | 
             
                    @datasets  = ResourceURLReader.open_datasets_file
         | 
| 36 36 | 
             
                    @reuse     = reuse_database_files
         | 
| @@ -50,7 +50,7 @@ module BELParser | |
| 50 50 | 
             
                    resource = read_resource(resource_identifier)
         | 
| 51 51 | 
             
                    encoding = resource[:values][value]
         | 
| 52 52 | 
             
                    return nil unless encoding
         | 
| 53 | 
            -
                    FileResourceValue.new(resource[:dataset], value, encoding)
         | 
| 53 | 
            +
                    [FileResourceValue.new(resource[:dataset], value, encoding)]
         | 
| 54 54 | 
             
                  end
         | 
| 55 55 |  | 
| 56 56 | 
             
                  def retrieve_values_from_resource(resource_identifier)
         | 
    
        data/lib/bel_parser/resource.rb
    CHANGED
    
    | @@ -1,14 +1,19 @@ | |
| 1 | 
            +
            require          'net/http'
         | 
| 1 2 | 
             
            require_relative 'resource/sparql_reader'
         | 
| 2 3 | 
             
            require_relative 'resource/resource_url_reader'
         | 
| 3 4 |  | 
| 4 5 | 
             
            module BELParser
         | 
| 5 6 | 
             
              module Resource
         | 
| 6 7 |  | 
| 7 | 
            -
                 | 
| 8 | 
            -
                DEFAULT_SPARQL_ENDPOINT = 'http://localhost:3030/identifiers/sparql'
         | 
| 8 | 
            +
                DEFAULT_SPARQL_ENDPOINT = 'http://build.openbel.org/sparql'
         | 
| 9 | 
            +
                #DEFAULT_SPARQL_ENDPOINT = 'http://localhost:3030/identifiers/sparql'
         | 
| 9 10 |  | 
| 10 | 
            -
                READER_LOCK | 
| 11 | 
            +
                READER_LOCK       = Mutex.new
         | 
| 11 12 | 
             
                private_constant :READER_LOCK
         | 
| 13 | 
            +
                RESOLVE_URI_LOCK  = Mutex.new
         | 
| 14 | 
            +
                private_constant :RESOLVE_URI_LOCK
         | 
| 15 | 
            +
                URISTRING_PATTERN = /^URIString *= *(.*)$/
         | 
| 16 | 
            +
                private_constant :URISTRING_PATTERN
         | 
| 12 17 |  | 
| 13 18 | 
             
                def self.default_uri_reader
         | 
| 14 19 | 
             
                  READER_LOCK.synchronize do
         | 
| @@ -33,5 +38,47 @@ module BELParser | |
| 33 38 | 
             
                    @default_url_reader ||= url_reader
         | 
| 34 39 | 
             
                  end
         | 
| 35 40 | 
             
                end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                # Resolves the URI String from the annotation or namespace resource.
         | 
| 43 | 
            +
                #
         | 
| 44 | 
            +
                # The resource must contain a _URIString=..._ property.
         | 
| 45 | 
            +
                #
         | 
| 46 | 
            +
                # @param  [#to_s] resource_url the resource URL to resolve the URI from
         | 
| 47 | 
            +
                # @return [String] the resource URI specified in the resource
         | 
| 48 | 
            +
                def self.resolve_uri(resource_url)
         | 
| 49 | 
            +
                  resource_url = resource_url.to_s
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                  RESOLVE_URI_LOCK.synchronize do
         | 
| 52 | 
            +
                    @uri_hash ||= {}
         | 
| 53 | 
            +
                    return @uri_hash[resource_url] if @uri_hash.key?(resource_url)
         | 
| 54 | 
            +
                  end
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                  uri              = URI(resource_url)
         | 
| 57 | 
            +
                  request          = Net::HTTP::Get.new(uri)
         | 
| 58 | 
            +
                  request['Range'] = 'bytes=0-5000'
         | 
| 59 | 
            +
                  resource_uri     = nil
         | 
| 60 | 
            +
             | 
| 61 | 
            +
                  Net::HTTP.start(
         | 
| 62 | 
            +
                    uri.hostname,
         | 
| 63 | 
            +
                    uri.port) { |http|
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                    http.request(request) do |response|
         | 
| 66 | 
            +
                      response.read_body do |chunk|
         | 
| 67 | 
            +
                        uristring    = chunk.lines.detect { |l| l =~ URISTRING_PATTERN }
         | 
| 68 | 
            +
                        if uristring
         | 
| 69 | 
            +
                          resource_uri = uristring.match(URISTRING_PATTERN)[1]
         | 
| 70 | 
            +
                          break
         | 
| 71 | 
            +
                        end
         | 
| 72 | 
            +
                      end
         | 
| 73 | 
            +
                    end
         | 
| 74 | 
            +
                  }
         | 
| 75 | 
            +
             | 
| 76 | 
            +
                  RESOLVE_URI_LOCK.synchronize do
         | 
| 77 | 
            +
                    @uri_hash ||= {}
         | 
| 78 | 
            +
                    @uri_hash[resource_url] = resource_uri
         | 
| 79 | 
            +
                  end
         | 
| 80 | 
            +
             | 
| 81 | 
            +
                  resource_uri
         | 
| 82 | 
            +
                end
         | 
| 36 83 | 
             
              end
         | 
| 37 84 | 
             
            end
         | 
| @@ -0,0 +1,30 @@ | |
| 1 | 
            +
            module BELParser
         | 
| 2 | 
            +
              module Script
         | 
| 3 | 
            +
                # ApplyResourceURI applies the _uri_ property to
         | 
| 4 | 
            +
                # {BELParser::Parsers::AST::AnnotationDefinition} and
         | 
| 5 | 
            +
                # {BELParser::Parsers::AST::NamespaceDefinition} child nodes.
         | 
| 6 | 
            +
                class ApplyResourceURI
         | 
| 7 | 
            +
                  include AST::Processor::Mixin
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                  def on_annotation_definition(node)
         | 
| 10 | 
            +
                    update_uri_property(node)
         | 
| 11 | 
            +
                  end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                  def on_namespace_definition(node)
         | 
| 14 | 
            +
                    update_uri_property(node)
         | 
| 15 | 
            +
                  end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                  private
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                  def update_uri_property(node)
         | 
| 20 | 
            +
                    domain = node.domain
         | 
| 21 | 
            +
                    if domain.url?
         | 
| 22 | 
            +
                      resource_url = domain.child.string.string_literal
         | 
| 23 | 
            +
                      node.uri     = BELParser::Resource.resolve_uri(resource_url)
         | 
| 24 | 
            +
                    end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                    node
         | 
| 27 | 
            +
                  end
         | 
| 28 | 
            +
                end
         | 
| 29 | 
            +
              end
         | 
| 30 | 
            +
            end
         | 
| @@ -116,10 +116,11 @@ module BELParser | |
| 116 116 | 
             
                          domain:  domain_value(type, domain)
         | 
| 117 117 | 
             
                        }
         | 
| 118 118 | 
             
                      end,
         | 
| 119 | 
            -
                      namespaces: (ns_defs || []).map do |keyword,  | 
| 119 | 
            +
                      namespaces: (ns_defs || []).map do |keyword, (type, domain)|
         | 
| 120 120 | 
             
                        {
         | 
| 121 121 | 
             
                          keyword: keyword,
         | 
| 122 | 
            -
                           | 
| 122 | 
            +
                          type:    type,
         | 
| 123 | 
            +
                          domain:  domain_value(type, domain)
         | 
| 123 124 | 
             
                        }
         | 
| 124 125 | 
             
                      end
         | 
| 125 126 | 
             
                    }
         | 
| @@ -151,17 +152,20 @@ if __FILE__ == $PROGRAM_NAME | |
| 151 152 | 
             
              require 'bel_parser/resource/resource_url_reader'
         | 
| 152 153 | 
             
              include BELParser::Script
         | 
| 153 154 |  | 
| 154 | 
            -
               | 
| 155 | 
            +
              uri_reader = BELParser::Resource.default_uri_reader
         | 
| 156 | 
            +
              url_reader = BELParser::Resource::ResourceURLReader.new(true)
         | 
| 157 | 
            +
             | 
| 155 158 | 
             
              namespaces = Hash[
         | 
| 156 159 | 
             
                ARGV.map do |ns|
         | 
| 157 160 | 
             
                  prefix, identifier = ns.split('=')
         | 
| 158 | 
            -
                  dataset            =  | 
| 161 | 
            +
                  dataset            = uri_reader.retrieve_resource(identifier)
         | 
| 159 162 | 
             
                  dataset ? [prefix, dataset] : nil
         | 
| 160 163 | 
             
                end.compact
         | 
| 161 164 | 
             
              ]
         | 
| 162 165 |  | 
| 163 166 | 
             
              initial_state = {
         | 
| 164 | 
            -
                 | 
| 167 | 
            +
                uri_reader:            uri_reader,
         | 
| 168 | 
            +
                url_reader:            url_reader,
         | 
| 165 169 | 
             
                specification:         BELParser::Language.specification('2.0'),
         | 
| 166 170 | 
             
                namespace_definitions: namespaces
         | 
| 167 171 | 
             
              }
         | 
| @@ -1,29 +1,38 @@ | |
| 1 1 | 
             
            require 'bel_parser/language'
         | 
| 2 | 
            -
            require 'bel_parser/quoting'
         | 
| 3 2 | 
             
            require 'bel_parser/parsers/ast/node'
         | 
| 4 3 | 
             
            require 'concurrent/hash'
         | 
| 5 4 | 
             
            require_relative '../state_function'
         | 
| 5 | 
            +
            require_relative '../apply_resource_uri'
         | 
| 6 6 |  | 
| 7 7 | 
             
            module BELParser
         | 
| 8 8 | 
             
              module Script
         | 
| 9 9 | 
             
                module State
         | 
| 10 10 | 
             
                  class AnnotationDefinition
         | 
| 11 11 | 
             
                    extend StateFunction
         | 
| 12 | 
            -
                    extend BELParser::Quoting
         | 
| 13 12 |  | 
| 14 13 | 
             
                    TARGET_NODE = BELParser::Parsers::AST::AnnotationDefinition
         | 
| 15 14 |  | 
| 16 15 | 
             
                    def self.consume(ast_node, script_context)
         | 
| 17 16 | 
             
                      return nil unless ast_node.is_a?(TARGET_NODE)
         | 
| 18 | 
            -
                       | 
| 17 | 
            +
                      uri_reader = script_context[:uri_reader]
         | 
| 18 | 
            +
                      url_reader = script_context[:url_reader]
         | 
| 19 19 |  | 
| 20 20 | 
             
                      keyword, domain = ast_node.children
         | 
| 21 21 | 
             
                      prefix          = keyword.identifier.string_literal
         | 
| 22 22 | 
             
                      case
         | 
| 23 23 | 
             
                      when domain.list?
         | 
| 24 24 | 
             
                        handle_list(prefix, domain.child, script_context)
         | 
| 25 | 
            +
                      when domain.uri?
         | 
| 26 | 
            +
                        uri = domain.child.string.string_literal
         | 
| 27 | 
            +
                        handle_uri(prefix, uri, script_context)
         | 
| 25 28 | 
             
                      when domain.url?
         | 
| 26 | 
            -
                         | 
| 29 | 
            +
                        ApplyResourceURI.new.process(ast_node)
         | 
| 30 | 
            +
                        if ast_node.uri
         | 
| 31 | 
            +
                          handle_uri(prefix, ast_node.uri, script_context)
         | 
| 32 | 
            +
                        else
         | 
| 33 | 
            +
                          url = domain.child.string.string_literal
         | 
| 34 | 
            +
                          handle_url(prefix, url, script_context)
         | 
| 35 | 
            +
                        end
         | 
| 27 36 | 
             
                      when domain.pattern?
         | 
| 28 37 | 
             
                        handle_pattern(prefix, domain.child, script_context)
         | 
| 29 38 | 
             
                      end
         | 
| @@ -34,7 +43,7 @@ module BELParser | |
| 34 43 | 
             
                      script_context[:annotation_definitions][prefix] = [
         | 
| 35 44 | 
             
                        :list,
         | 
| 36 45 | 
             
                        list_node.list_items.map do |li|
         | 
| 37 | 
            -
                           | 
| 46 | 
            +
                          li.children[0].string_literal
         | 
| 38 47 | 
             
                        end
         | 
| 39 48 | 
             
                      ]
         | 
| 40 49 | 
             
                    end
         | 
| @@ -44,14 +53,20 @@ module BELParser | |
| 44 53 | 
             
                      script_context[:annotation_definitions] ||= Concurrent::Hash.new
         | 
| 45 54 | 
             
                      script_context[:annotation_definitions][prefix] = [
         | 
| 46 55 | 
             
                        :pattern,
         | 
| 47 | 
            -
                         | 
| 56 | 
            +
                        pattern_node.string
         | 
| 48 57 | 
             
                      ]
         | 
| 49 58 | 
             
                    end
         | 
| 50 59 | 
             
                    private_class_method :handle_pattern
         | 
| 51 60 |  | 
| 52 | 
            -
                    def self. | 
| 53 | 
            -
                       | 
| 54 | 
            -
                       | 
| 61 | 
            +
                    def self.handle_uri(prefix, uri, script_context)
         | 
| 62 | 
            +
                      dataset = script_context[:uri_reader].retrieve_resource(uri)
         | 
| 63 | 
            +
                      script_context[:annotation_definitions] ||= Concurrent::Hash.new
         | 
| 64 | 
            +
                      script_context[:annotation_definitions][prefix] = [:uri, dataset]
         | 
| 65 | 
            +
                    end
         | 
| 66 | 
            +
                    private_class_method :handle_uri
         | 
| 67 | 
            +
             | 
| 68 | 
            +
                    def self.handle_url(prefix, url, script_context)
         | 
| 69 | 
            +
                      dataset = script_context[:url_reader].retrieve_resource(url)
         | 
| 55 70 | 
             
                      script_context[:annotation_definitions] ||= Concurrent::Hash.new
         | 
| 56 71 | 
             
                      script_context[:annotation_definitions][prefix] = [:url, dataset]
         | 
| 57 72 | 
             
                    end
         | 
| @@ -1,29 +1,43 @@ | |
| 1 1 | 
             
            require 'bel_parser/language'
         | 
| 2 | 
            -
            require 'bel_parser/quoting'
         | 
| 3 2 | 
             
            require 'bel_parser/parsers/ast/node'
         | 
| 4 3 | 
             
            require 'concurrent/hash'
         | 
| 5 4 | 
             
            require_relative '../state_function'
         | 
| 5 | 
            +
            require_relative '../apply_resource_uri'
         | 
| 6 6 |  | 
| 7 7 | 
             
            module BELParser
         | 
| 8 8 | 
             
              module Script
         | 
| 9 9 | 
             
                module State
         | 
| 10 10 | 
             
                  class NamespaceDefinition
         | 
| 11 11 | 
             
                    extend StateFunction
         | 
| 12 | 
            -
                    extend BELParser::Quoting
         | 
| 13 12 |  | 
| 14 13 | 
             
                    TARGET_NODE = BELParser::Parsers::AST::NamespaceDefinition
         | 
| 15 14 |  | 
| 16 15 | 
             
                    def self.consume(ast_node, script_context)
         | 
| 17 16 | 
             
                      return nil unless ast_node.is_a?(TARGET_NODE)
         | 
| 18 | 
            -
                       | 
| 17 | 
            +
                      uri_reader = script_context[:uri_reader]
         | 
| 18 | 
            +
                      url_reader = script_context[:url_reader]
         | 
| 19 19 |  | 
| 20 20 | 
             
                      keyword, domain = ast_node.children
         | 
| 21 | 
            -
                       | 
| 22 | 
            -
             | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 21 | 
            +
                      prefix          = keyword.identifier.string_literal
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                      case
         | 
| 24 | 
            +
                      when domain.uri?
         | 
| 25 | 
            +
                        uri     = domain.child.string.string_literal
         | 
| 26 | 
            +
                        dataset = uri_reader.retrieve_resource(uri)
         | 
| 25 27 | 
             
                        script_context[:namespace_definitions] ||= Concurrent::Hash.new
         | 
| 26 | 
            -
                        script_context[:namespace_definitions][prefix] = dataset
         | 
| 28 | 
            +
                        script_context[:namespace_definitions][prefix] = [:uri, dataset]
         | 
| 29 | 
            +
                      when domain.url?
         | 
| 30 | 
            +
                        ApplyResourceURI.new.process(ast_node)
         | 
| 31 | 
            +
                        if ast_node.uri
         | 
| 32 | 
            +
                          dataset = uri_reader.retrieve_resource(ast_node.uri)
         | 
| 33 | 
            +
                          script_context[:namespace_definitions] ||= Concurrent::Hash.new
         | 
| 34 | 
            +
                          script_context[:namespace_definitions][prefix] = [:uri, dataset]
         | 
| 35 | 
            +
                        else
         | 
| 36 | 
            +
                          url     = domain.child.string.string_literal
         | 
| 37 | 
            +
                          dataset = url_reader.retrieve_resource(url)
         | 
| 38 | 
            +
                          script_context[:namespace_definitions] ||= Concurrent::Hash.new
         | 
| 39 | 
            +
                          script_context[:namespace_definitions][prefix] = [:url, dataset]
         | 
| 40 | 
            +
                        end
         | 
| 27 41 | 
             
                      end
         | 
| 28 42 | 
             
                    end
         | 
| 29 43 | 
             
                  end
         | 
| @@ -30,13 +30,14 @@ module BELParser | |
| 30 30 |  | 
| 31 31 | 
             
                    def self.expression_validator(script_context)
         | 
| 32 32 | 
             
                      unless defined? @expression_validator
         | 
| 33 | 
            -
                        spec, namespaces,  | 
| 34 | 
            -
                          script_context
         | 
| 35 | 
            -
                          .values_at(
         | 
| 33 | 
            +
                        spec, namespaces, uri_reader, url_reader =
         | 
| 34 | 
            +
                          script_context.values_at(
         | 
| 36 35 | 
             
                            :specification,
         | 
| 37 36 | 
             
                            :namespace_definitions,
         | 
| 38 | 
            -
                            : | 
| 39 | 
            -
             | 
| 37 | 
            +
                            :uri_reader,
         | 
| 38 | 
            +
                            :url_reader)
         | 
| 39 | 
            +
                        @expression_validator = EXP_VALIDATOR.new(
         | 
| 40 | 
            +
                          spec, namespaces, uri_reader, url_reader)
         | 
| 40 41 | 
             
                      end
         | 
| 41 42 | 
             
                      @expression_validator
         | 
| 42 43 | 
             
                    end
         | 
| @@ -23,16 +23,22 @@ module BELParser | |
| 23 23 | 
             
                      name_string  = ast_node.name.identifier.string_literal
         | 
| 24 24 |  | 
| 25 25 | 
             
                      return nil if is_implicit_annotation?(name_string)
         | 
| 26 | 
            -
                      dataset = annotation(name_string, script_context)
         | 
| 27 | 
            -
                      return nil unless  | 
| 26 | 
            +
                      type, dataset = annotation(name_string, script_context)
         | 
| 27 | 
            +
                      return nil unless type == :uri || type == :url
         | 
| 28 28 |  | 
| 29 | 
            -
                       | 
| 29 | 
            +
                      reader =
         | 
| 30 | 
            +
                        case type
         | 
| 31 | 
            +
                        when :uri
         | 
| 32 | 
            +
                          script_context[:uri_reader]
         | 
| 33 | 
            +
                        when :url
         | 
| 34 | 
            +
                          script_context[:url_reader]
         | 
| 35 | 
            +
                        end
         | 
| 30 36 | 
             
                      value_node = ast_node.value.children[0]
         | 
| 31 37 | 
             
                      if value_node.is_a?(LIST_NODE)
         | 
| 32 38 | 
             
                        value_node
         | 
| 33 39 | 
             
                          .list_items.map { |li| li.children[0].string_literal }
         | 
| 34 40 | 
             
                          .map do |string|
         | 
| 35 | 
            -
                            map_value(ast_node, name_string, string, dataset.identifier,  | 
| 41 | 
            +
                            map_value(ast_node, name_string, string, dataset.identifier, reader)
         | 
| 36 42 | 
             
                          end
         | 
| 37 43 | 
             
                      else
         | 
| 38 44 | 
             
                        map_value(
         | 
| @@ -40,20 +46,19 @@ module BELParser | |
| 40 46 | 
             
                          name_string,
         | 
| 41 47 | 
             
                          value_node.string_literal,
         | 
| 42 48 | 
             
                          dataset.identifier,
         | 
| 43 | 
            -
                           | 
| 49 | 
            +
                          reader)
         | 
| 44 50 | 
             
                      end
         | 
| 45 51 | 
             
                    end
         | 
| 46 52 |  | 
| 47 53 | 
             
                    def self.annotation(name_string, script_context)
         | 
| 48 54 | 
             
                      hash =
         | 
| 49 55 | 
             
                        script_context[:annotation_definitions] ||= Concurrent::Hash.new
         | 
| 50 | 
            -
                       | 
| 51 | 
            -
                      type == :url ? definition : nil
         | 
| 56 | 
            +
                      hash[name_string]
         | 
| 52 57 | 
             
                    end
         | 
| 53 58 |  | 
| 54 | 
            -
                    def self.map_value(ast_node, name_string, value_string, identifier,  | 
| 59 | 
            +
                    def self.map_value(ast_node, name_string, value_string, identifier, reader)
         | 
| 55 60 | 
             
                      value_string = unquote(value_string)
         | 
| 56 | 
            -
                      value =  | 
| 61 | 
            +
                      value = reader.retrieve_value_from_resource(identifier, value_string)
         | 
| 57 62 | 
             
                      UndefinedAnnotationValueWarning.new(
         | 
| 58 63 | 
             
                        ast_node,
         | 
| 59 64 | 
             
                        name_string,
         | 
| @@ -1,7 +1,6 @@ | |
| 1 1 | 
             
            require 'bel_parser/language'
         | 
| 2 2 | 
             
            require 'bel_parser/language/syntax_function'
         | 
| 3 3 | 
             
            require 'bel_parser/language/syntax_error'
         | 
| 4 | 
            -
            require 'bel_parser/quoting'
         | 
| 5 4 | 
             
            require 'bel_parser/parsers/ast/node'
         | 
| 6 5 | 
             
            require 'concurrent/hash'
         | 
| 7 6 |  | 
| @@ -10,20 +9,28 @@ module BELParser | |
| 10 9 | 
             
                module Syntax
         | 
| 11 10 | 
             
                  class UnresolvableNamespace
         | 
| 12 11 | 
             
                    extend BELParser::Language::Syntax::SyntaxFunction
         | 
| 13 | 
            -
                    extend BELParser::Quoting
         | 
| 14 12 |  | 
| 15 13 | 
             
                    TARGET_NODE = BELParser::Parsers::AST::NamespaceDefinition
         | 
| 16 14 |  | 
| 17 15 | 
             
                    def self.map(ast_node, script_context)
         | 
| 18 16 | 
             
                      return nil unless ast_node.is_a?(TARGET_NODE)
         | 
| 19 | 
            -
                       | 
| 17 | 
            +
                      uri_reader, url_reader = script_context.values_at(:uri_reader, :url_reader)
         | 
| 20 18 |  | 
| 21 19 | 
             
                      keyword, domain = ast_node.children
         | 
| 22 20 | 
             
                      if domain.url?
         | 
| 23 | 
            -
                         | 
| 24 | 
            -
                         | 
| 25 | 
            -
                           | 
| 26 | 
            -
                           | 
| 21 | 
            +
                        ApplyResourceURI.new.process(ast_node)
         | 
| 22 | 
            +
                        if ast_node.uri
         | 
| 23 | 
            +
                          uri = ast_node.uri
         | 
| 24 | 
            +
                          unless uri_reader.retrieve_resource(uri)
         | 
| 25 | 
            +
                            prefix = keyword.identifier.string_literal
         | 
| 26 | 
            +
                            return UnresolvableNamespaceError.new(ast_node, prefix, uri)
         | 
| 27 | 
            +
                          end
         | 
| 28 | 
            +
                        else
         | 
| 29 | 
            +
                          url = domain.child.string.string_literal
         | 
| 30 | 
            +
                          unless url_reader.retrieve_resource(url)
         | 
| 31 | 
            +
                            prefix = keyword.identifier.string_literal
         | 
| 32 | 
            +
                            return UnresolvableNamespaceError.new(ast_node, prefix, url)
         | 
| 33 | 
            +
                          end
         | 
| 27 34 | 
             
                        end
         | 
| 28 35 | 
             
                      end
         | 
| 29 36 |  | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: bel_parser
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1.0.0.alpha. | 
| 4 | 
            +
              version: 1.0.0.alpha.45
         | 
| 5 5 | 
             
            platform: java
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Anthony Bargnesi
         | 
| @@ -364,6 +364,7 @@ files: | |
| 364 364 | 
             
            - lib/bel_parser/resource/sparql_reader.rb
         | 
| 365 365 | 
             
            - lib/bel_parser/resource/value.rb
         | 
| 366 366 | 
             
            - lib/bel_parser/script.rb
         | 
| 367 | 
            +
            - lib/bel_parser/script/apply_resource_uri.rb
         | 
| 367 368 | 
             
            - lib/bel_parser/script/filter.rb
         | 
| 368 369 | 
             
            - lib/bel_parser/script/first_node.rb
         | 
| 369 370 | 
             
            - lib/bel_parser/script/keywords.rb
         |