bel_parser 1.0.0.alpha.27-java → 1.0.0.alpha.28-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/.gemspec-java +2 -1
- data/VERSION +1 -1
- data/lib/bel_parser/expression/model/annotation.rb +87 -0
- data/lib/bel_parser/expression/model/namespace.rb +91 -0
- data/lib/bel_parser/expression/model/parameter.rb +60 -0
- data/lib/bel_parser/expression/model/statement.rb +114 -0
- data/lib/bel_parser/expression/model/term.rb +52 -0
- data/lib/bel_parser/expression/model.rb +5 -0
- data/lib/bel_parser/expression.rb +1 -0
- data/lib/bel_parser/resource/reader.rb +13 -0
- data/lib/bel_parser/resource/sparql_reader.rb +2 -1
- data/lib/bel_parser/resource.rb +37 -0
- data/lib/bel_parser.rb +1 -1
- metadata +22 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 13215ac795faa5077028725921572827bb24953b
|
4
|
+
data.tar.gz: 94c3c72300afd58322ff396a0ddcb30a8d71109f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 68c9dba99dad0c8a19c00dfe78b99d8c882a54c55754f87b421e2353495f42e591e167c0473570ec6df12e76c034f7498c4d4216693e560b9442d1abe61b204d
|
7
|
+
data.tar.gz: c490a891dd8cc5bfc2c2abee8d16d49807d19abebb9695ab486059fff6c5b4bd4022c2c489ce0759a1d3c1deb86c10bafa26b14380729dc06527a52ff44ff77d
|
data/.gemspec-java
CHANGED
@@ -27,6 +27,7 @@ Gem::Specification.new do |spec|
|
|
27
27
|
spec.required_ruby_version = '>= 2.0.0'
|
28
28
|
|
29
29
|
spec.platform = 'java'
|
30
|
-
spec.add_runtime_dependency '
|
30
|
+
spec.add_runtime_dependency 'sparql-client', '~> 2.0.0'
|
31
|
+
spec.add_runtime_dependency 'dbm-mapdb3', '~> 0.6.0.beta'
|
31
32
|
end
|
32
33
|
# vim: ft=ruby
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.0.0.alpha.
|
1
|
+
1.0.0.alpha.28
|
@@ -0,0 +1,87 @@
|
|
1
|
+
module BELParser
|
2
|
+
module Expression
|
3
|
+
module Model
|
4
|
+
# Annotation represents a catalog of biological annotation values.
|
5
|
+
class Annotation
|
6
|
+
include Enumerable
|
7
|
+
|
8
|
+
attr_reader :keyword
|
9
|
+
attr_reader :uri
|
10
|
+
attr_reader :url
|
11
|
+
|
12
|
+
def initialize(keyword, uri = nil, url = nil, options = {})
|
13
|
+
raise(ArgumentError, 'keyword is nil') unless keyword
|
14
|
+
@keyword = keyword
|
15
|
+
@uri = uri
|
16
|
+
@url = url
|
17
|
+
|
18
|
+
# configure reader for URIs (RDF).
|
19
|
+
@uri_reader =
|
20
|
+
options.fetch(:uri_reader) {
|
21
|
+
BELParser::Resource.default_uri_reader
|
22
|
+
}
|
23
|
+
BELParser::Resource::Reader.assert_reader(@uri_reader, 'uri_reader')
|
24
|
+
|
25
|
+
# configure reader for URLs (Resource files).
|
26
|
+
@url_reader =
|
27
|
+
options.fetch(:url_reader) {
|
28
|
+
BELParser::Resource.default_url_reader
|
29
|
+
}
|
30
|
+
BELParser::Resource::Reader.assert_reader(@url_reader, 'url_reader')
|
31
|
+
end
|
32
|
+
|
33
|
+
def uri?
|
34
|
+
!@uri.nil?
|
35
|
+
end
|
36
|
+
|
37
|
+
def url?
|
38
|
+
!@url.nil?
|
39
|
+
end
|
40
|
+
|
41
|
+
def [](value)
|
42
|
+
if uri?
|
43
|
+
@uri_reader.retrieve_value_from_resource(@uri, value)
|
44
|
+
elsif url?
|
45
|
+
@url_reader.retrieve_value_from_resource(@url, value)
|
46
|
+
else
|
47
|
+
nil
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def each
|
52
|
+
if block_given?
|
53
|
+
values =
|
54
|
+
if uri?
|
55
|
+
@uri_reader.retrieve_values_from_resource(@uri)
|
56
|
+
elsif url?
|
57
|
+
@url_reader.retrieve_values_from_resource(@url)
|
58
|
+
else
|
59
|
+
[]
|
60
|
+
end
|
61
|
+
values.each do |value|
|
62
|
+
yield value
|
63
|
+
end
|
64
|
+
else
|
65
|
+
to_enum(:each)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def hash
|
70
|
+
[@keyword, @uri, @url].hash
|
71
|
+
end
|
72
|
+
|
73
|
+
def ==(other)
|
74
|
+
return false if other.nil?
|
75
|
+
@keyword == other.keyword && @uri == other.uri && @url == other.url
|
76
|
+
end
|
77
|
+
alias :eql? :'=='
|
78
|
+
|
79
|
+
def to_s
|
80
|
+
@keyword.to_s
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
# vim: ts=2 sw=2:
|
87
|
+
# encoding: utf-8
|
@@ -0,0 +1,91 @@
|
|
1
|
+
require 'bel_parser/resource'
|
2
|
+
|
3
|
+
module BELParser
|
4
|
+
module Expression
|
5
|
+
module Model
|
6
|
+
# Namespace represents a catalog of biological identifiers that are to
|
7
|
+
# identify parameter values like genes (e.g. _AKT1_),
|
8
|
+
# diseases (e.g. _hypertropia_), and processes (e.g. _anaphase_).
|
9
|
+
class Namespace
|
10
|
+
include Enumerable
|
11
|
+
|
12
|
+
attr_accessor :keyword
|
13
|
+
attr_accessor :uri
|
14
|
+
attr_accessor :url
|
15
|
+
|
16
|
+
def initialize(keyword, uri = nil, url = nil, options = {})
|
17
|
+
raise(ArgumentError, 'keyword is nil') unless keyword
|
18
|
+
@keyword = keyword
|
19
|
+
@uri = uri
|
20
|
+
@url = url
|
21
|
+
|
22
|
+
# configure reader for URIs (RDF).
|
23
|
+
@uri_reader =
|
24
|
+
options.fetch(:uri_reader) {
|
25
|
+
BELParser::Resource.default_uri_reader
|
26
|
+
}
|
27
|
+
BELParser::Resource::Reader.assert_reader(@uri_reader, 'uri_reader')
|
28
|
+
|
29
|
+
# configure reader for URLs (Resource files).
|
30
|
+
@url_reader =
|
31
|
+
options.fetch(:url_reader) {
|
32
|
+
BELParser::Resource.default_url_reader
|
33
|
+
}
|
34
|
+
BELParser::Resource::Reader.assert_reader(@url_reader, 'url_reader')
|
35
|
+
end
|
36
|
+
|
37
|
+
def uri?
|
38
|
+
!@uri.nil?
|
39
|
+
end
|
40
|
+
|
41
|
+
def url?
|
42
|
+
!@url.nil?
|
43
|
+
end
|
44
|
+
|
45
|
+
def [](value)
|
46
|
+
if uri?
|
47
|
+
@uri_reader.retrieve_value_from_resource(@uri, value)
|
48
|
+
elsif url?
|
49
|
+
@url_reader.retrieve_value_from_resource(@url, value)
|
50
|
+
else
|
51
|
+
nil
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def each
|
56
|
+
if block_given?
|
57
|
+
values =
|
58
|
+
if uri?
|
59
|
+
@uri_reader.retrieve_values_from_resource(@uri)
|
60
|
+
elsif url?
|
61
|
+
@url_reader.retrieve_values_from_resource(@url)
|
62
|
+
else
|
63
|
+
[]
|
64
|
+
end
|
65
|
+
values.each do |value|
|
66
|
+
yield value
|
67
|
+
end
|
68
|
+
else
|
69
|
+
to_enum(:each)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def hash
|
74
|
+
[@keyword, @uri, @url].hash
|
75
|
+
end
|
76
|
+
|
77
|
+
def ==(other)
|
78
|
+
return false if other.nil?
|
79
|
+
@keyword == other.keyword && @uri == other.uri && @url == other.url
|
80
|
+
end
|
81
|
+
alias :eql? :'=='
|
82
|
+
|
83
|
+
def to_s
|
84
|
+
@keyword.to_s
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
# vim: ts=2 sw=2:
|
91
|
+
# encoding: utf-8
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'bel_parser/quoting'
|
2
|
+
|
3
|
+
module BELParser
|
4
|
+
module Expression
|
5
|
+
module Model
|
6
|
+
|
7
|
+
class Parameter
|
8
|
+
include BELParser::Quoting
|
9
|
+
include Comparable
|
10
|
+
|
11
|
+
attr_accessor :namespace, :value
|
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
|
20
|
+
@namespace = namespace
|
21
|
+
@value = value
|
22
|
+
end
|
23
|
+
|
24
|
+
def valid?
|
25
|
+
return false unless @value
|
26
|
+
return true unless @namespace
|
27
|
+
!@namespace[@value].nil?
|
28
|
+
end
|
29
|
+
|
30
|
+
def <=>(other)
|
31
|
+
namespace_compare = @namespace <=> other.namespace
|
32
|
+
if namespace_compare == 0
|
33
|
+
@value <=> other.value
|
34
|
+
else
|
35
|
+
namespace_compare
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def hash
|
40
|
+
[@namespace, @value].hash
|
41
|
+
end
|
42
|
+
|
43
|
+
def ==(other)
|
44
|
+
return false if other == nil
|
45
|
+
@namespace == other.namespace && @value == other.value
|
46
|
+
end
|
47
|
+
alias_method :eql?, :'=='
|
48
|
+
|
49
|
+
def to_s(_)
|
50
|
+
if @namespace
|
51
|
+
prefix = "#{@namespace.keyword}:"
|
52
|
+
else
|
53
|
+
prefix = ''
|
54
|
+
end
|
55
|
+
%Q{#{prefix}#{quote_if_needed(@value)}}
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,114 @@
|
|
1
|
+
module BELParser
|
2
|
+
module Expression
|
3
|
+
module Model
|
4
|
+
|
5
|
+
# A {Statement} captures a BEL statement composed of a subject {Term},
|
6
|
+
# +relationship+, and object {Term}. A {Statement} may be one of the
|
7
|
+
# following common forms:
|
8
|
+
#
|
9
|
+
# - SUBJECT
|
10
|
+
# - +complex(p(HGNC:F3),p(HGNC:F7))+
|
11
|
+
# - SUBJECT RELATIONSHIP OBJECT(Term)
|
12
|
+
# - +pep(complex(p(HGNC:F3),p(HGNC:F7))) => pep(p(HGNC:F9))+
|
13
|
+
# - SUBJECT RELATIONSHIP OBJECT(Statement)
|
14
|
+
# - +p(HGNC:VHL) -> (p(HGNC:TNF) -> bp(GOBP:"cell death"))+
|
15
|
+
class Statement
|
16
|
+
attr_accessor :subject, :relationship, :object, :comment
|
17
|
+
|
18
|
+
# Creates a {Statement} with +subject+, +relationship+, +object+, and
|
19
|
+
# +comment+.
|
20
|
+
#
|
21
|
+
# @param [Term] subject
|
22
|
+
# @param [BELParser::Language::Relationship] relationship
|
23
|
+
# @param [Term, Statement] object
|
24
|
+
# @param [String] comment
|
25
|
+
def initialize(subject, relationship = nil, object = nil, comment = nil)
|
26
|
+
raise(ArgumentError, 'subject is nil') unless subject
|
27
|
+
@subject = subject
|
28
|
+
|
29
|
+
unless relationship.nil? || relationship.is_a?(BELParser::Language::Relationship)
|
30
|
+
raise(
|
31
|
+
ArgumentError,
|
32
|
+
"relationship: expected nil or Relationship, actual #{@relationship.class}")
|
33
|
+
end
|
34
|
+
@relationship = relationship
|
35
|
+
|
36
|
+
unless object.nil? || [Term, Statement].any?(&object.method(:is_a?))
|
37
|
+
raise(
|
38
|
+
ArgumentError,
|
39
|
+
"object: expected nil, Term, or Statement, actual #{@object.class}")
|
40
|
+
end
|
41
|
+
@object = object
|
42
|
+
@comment = comment
|
43
|
+
|
44
|
+
if @relationship && !@object
|
45
|
+
raise(
|
46
|
+
ArgumentError,
|
47
|
+
"object must be set when specifying a relationship")
|
48
|
+
end
|
49
|
+
|
50
|
+
if @object && !@relationship
|
51
|
+
raise(
|
52
|
+
ArgumentError,
|
53
|
+
"relationsihp must be set when specifying an object")
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def subject_only?
|
58
|
+
!@relationship
|
59
|
+
end
|
60
|
+
|
61
|
+
def simple?
|
62
|
+
@object && @object.is_a?(Term)
|
63
|
+
end
|
64
|
+
|
65
|
+
def nested?
|
66
|
+
@object && @object.is_a?(Statement)
|
67
|
+
end
|
68
|
+
|
69
|
+
def valid?
|
70
|
+
# TODO Use expression validator.
|
71
|
+
end
|
72
|
+
|
73
|
+
def hash
|
74
|
+
[@subject, @relationship, @object, @comment].hash
|
75
|
+
end
|
76
|
+
|
77
|
+
def ==(other)
|
78
|
+
return false if other == nil
|
79
|
+
@subject == other.subject &&
|
80
|
+
@relationship == other.relationship &&
|
81
|
+
@object == other.object &&
|
82
|
+
@comment == other.comment
|
83
|
+
end
|
84
|
+
alias :eql? :'=='
|
85
|
+
|
86
|
+
def to_s(form = :short)
|
87
|
+
rel =
|
88
|
+
case form
|
89
|
+
when :short
|
90
|
+
@relationship && @relationship.short
|
91
|
+
when :long
|
92
|
+
@relationship && @relationship.long
|
93
|
+
else
|
94
|
+
nil
|
95
|
+
end
|
96
|
+
|
97
|
+
lbl =
|
98
|
+
case
|
99
|
+
when subject_only?
|
100
|
+
@subject.to_s(form)
|
101
|
+
when simple?
|
102
|
+
"#{@subject.to_s(form)} #{rel} #{@object.to_s(form)}"
|
103
|
+
when nested?
|
104
|
+
"#{@subject.to_s(form)} #{rel} (#{@object.to_s(form)})"
|
105
|
+
else
|
106
|
+
''
|
107
|
+
end
|
108
|
+
|
109
|
+
comment ? lbl + ' //' + comment : lbl
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module BELParser
|
2
|
+
module Expression
|
3
|
+
module Model
|
4
|
+
class Term
|
5
|
+
include Comparable
|
6
|
+
|
7
|
+
attr_accessor :function, :arguments
|
8
|
+
|
9
|
+
def initialize(function, *arguments)
|
10
|
+
unless function && function.is_a?(BELParser::Language::Function)
|
11
|
+
raise(
|
12
|
+
ArgumentError,
|
13
|
+
%(function: expected Function, actual #{function.class}))
|
14
|
+
end
|
15
|
+
@function = function
|
16
|
+
@arguments = (arguments ||= []).flatten
|
17
|
+
end
|
18
|
+
|
19
|
+
def <<(item)
|
20
|
+
@arguments << item
|
21
|
+
end
|
22
|
+
|
23
|
+
def valid?
|
24
|
+
# TODO Use expression validator.
|
25
|
+
end
|
26
|
+
|
27
|
+
def hash
|
28
|
+
[@function, @arguments].hash
|
29
|
+
end
|
30
|
+
|
31
|
+
def ==(other)
|
32
|
+
return false if other == nil
|
33
|
+
@function == other.function && @arguments == other.arguments
|
34
|
+
end
|
35
|
+
alias :eql? :'=='
|
36
|
+
|
37
|
+
def to_s(form = :short)
|
38
|
+
args = [@arguments].flatten.map { |arg| arg.to_s(form) }.join(',')
|
39
|
+
case form
|
40
|
+
when :short
|
41
|
+
"#{@function.short}(#{args})"
|
42
|
+
when :long
|
43
|
+
"#{@function.long}(#{args})"
|
44
|
+
else
|
45
|
+
nil
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
@@ -2,6 +2,19 @@ module BELParser
|
|
2
2
|
module Resource
|
3
3
|
# Reader represents the API for a reader of resource data.
|
4
4
|
module Reader
|
5
|
+
def self.assert_reader(reader, var_name)
|
6
|
+
raise ArgumentError, "#{var_name} is nil" unless reader
|
7
|
+
not_impl_methods =
|
8
|
+
Reader.instance_methods.reject do |method|
|
9
|
+
reader.respond_to?(method)
|
10
|
+
end
|
11
|
+
unless not_impl_methods.empty?
|
12
|
+
raise(
|
13
|
+
ArgumentError,
|
14
|
+
"#{var_name} does not respond to #{not_impl_methods.join(', ')}.")
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
5
18
|
def retrieve_resource(resource_identifier)
|
6
19
|
raise NotImplementedError, "#{__method__} is not implemented."
|
7
20
|
end
|
@@ -60,12 +60,13 @@ module BELParser
|
|
60
60
|
end
|
61
61
|
|
62
62
|
def hash_to_concept_scheme(resource_identifier, hash)
|
63
|
-
return nil if hash[:types].value.empty?
|
63
|
+
return nil if hash.empty? or hash[:types].value.empty?
|
64
64
|
ConceptScheme.new(resource_identifier,
|
65
65
|
*hash.values_at(:domain, :prefix, :prefLabel, :types))
|
66
66
|
end
|
67
67
|
|
68
68
|
def hash_to_concept(concept_scheme, hash)
|
69
|
+
return nil if hash.empty?
|
69
70
|
Concept.new(concept_scheme,
|
70
71
|
*hash.values_at(:concept, :prefLabel, :identifier, :title,
|
71
72
|
:altLabels, :types))
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require_relative 'resource/sparql_reader'
|
2
|
+
require_relative 'resource/resource_url_reader'
|
3
|
+
|
4
|
+
module BELParser
|
5
|
+
module Resource
|
6
|
+
|
7
|
+
# DEFAULT_SPARQL_ENDPOINT = 'http://sparql.openbel.org/identifiers/sparql'
|
8
|
+
DEFAULT_SPARQL_ENDPOINT = 'http://localhost:3030/identifiers/sparql'
|
9
|
+
|
10
|
+
READER_LOCK = Mutex.new
|
11
|
+
private_constant :READER_LOCK
|
12
|
+
|
13
|
+
def self.default_uri_reader
|
14
|
+
READER_LOCK.synchronize do
|
15
|
+
@default_uri_reader ||= SPARQLReader.new(DEFAULT_SPARQL_ENDPOINT)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.default_uri_reader=(uri_reader)
|
20
|
+
READER_LOCK.synchronize do
|
21
|
+
@default_uri_reader ||= uri_reader
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.default_url_reader
|
26
|
+
READER_LOCK.synchronize do
|
27
|
+
@default_url_reader ||= ResourceURLReader.new
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.default_url_reader=(url_reader)
|
32
|
+
READER_LOCK.synchronize do
|
33
|
+
@default_url_reader ||= url_reader
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
data/lib/bel_parser.rb
CHANGED
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.28
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- Anthony Bargnesi
|
@@ -11,6 +11,20 @@ bindir: bin
|
|
11
11
|
cert_chain: []
|
12
12
|
date: 2016-05-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 2.0.0
|
20
|
+
name: sparql-client
|
21
|
+
prerelease: false
|
22
|
+
type: :runtime
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - "~>"
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: 2.0.0
|
14
28
|
- !ruby/object:Gem::Dependency
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
16
30
|
requirements:
|
@@ -53,6 +67,12 @@ files:
|
|
53
67
|
- lib/bel_parser/ast_generator.rb
|
54
68
|
- lib/bel_parser/expression.rb
|
55
69
|
- lib/bel_parser/expression/filter.rb
|
70
|
+
- lib/bel_parser/expression/model.rb
|
71
|
+
- lib/bel_parser/expression/model/annotation.rb
|
72
|
+
- lib/bel_parser/expression/model/namespace.rb
|
73
|
+
- lib/bel_parser/expression/model/parameter.rb
|
74
|
+
- lib/bel_parser/expression/model/statement.rb
|
75
|
+
- lib/bel_parser/expression/model/term.rb
|
56
76
|
- lib/bel_parser/expression/parser.rb
|
57
77
|
- lib/bel_parser/expression/validator.rb
|
58
78
|
- lib/bel_parser/language.rb
|
@@ -323,6 +343,7 @@ files:
|
|
323
343
|
- lib/bel_parser/parsers/nonblocking_io_wrapper.rb
|
324
344
|
- lib/bel_parser/parsers/serializer.rb
|
325
345
|
- lib/bel_parser/quoting.rb
|
346
|
+
- lib/bel_parser/resource.rb
|
326
347
|
- lib/bel_parser/resource/concept.rb
|
327
348
|
- lib/bel_parser/resource/concept_scheme.rb
|
328
349
|
- lib/bel_parser/resource/dataset.rb
|