sparql 3.0.2 → 3.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (91) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/VERSION +1 -1
  4. data/bin/sparql +8 -8
  5. data/lib/rack/sparql.rb +1 -1
  6. data/lib/rack/sparql/conneg.rb +1 -1
  7. data/lib/sinatra/sparql.rb +1 -1
  8. data/lib/sparql.rb +4 -4
  9. data/lib/sparql/algebra.rb +4 -4
  10. data/lib/sparql/algebra/aggregate.rb +2 -2
  11. data/lib/sparql/algebra/evaluatable.rb +2 -2
  12. data/lib/sparql/algebra/expression.rb +7 -7
  13. data/lib/sparql/algebra/extensions.rb +9 -14
  14. data/lib/sparql/algebra/operator.rb +1 -1
  15. data/lib/sparql/algebra/operator/add.rb +1 -1
  16. data/lib/sparql/algebra/operator/alt.rb +2 -2
  17. data/lib/sparql/algebra/operator/and.rb +4 -4
  18. data/lib/sparql/algebra/operator/asc.rb +2 -2
  19. data/lib/sparql/algebra/operator/ask.rb +2 -2
  20. data/lib/sparql/algebra/operator/avg.rb +5 -3
  21. data/lib/sparql/algebra/operator/base.rb +2 -2
  22. data/lib/sparql/algebra/operator/bnode.rb +3 -3
  23. data/lib/sparql/algebra/operator/bound.rb +2 -2
  24. data/lib/sparql/algebra/operator/clear.rb +1 -1
  25. data/lib/sparql/algebra/operator/coalesce.rb +2 -2
  26. data/lib/sparql/algebra/operator/concat.rb +2 -2
  27. data/lib/sparql/algebra/operator/construct.rb +2 -2
  28. data/lib/sparql/algebra/operator/copy.rb +1 -1
  29. data/lib/sparql/algebra/operator/count.rb +2 -2
  30. data/lib/sparql/algebra/operator/create.rb +1 -1
  31. data/lib/sparql/algebra/operator/dataset.rb +3 -3
  32. data/lib/sparql/algebra/operator/delete.rb +4 -2
  33. data/lib/sparql/algebra/operator/delete_data.rb +1 -1
  34. data/lib/sparql/algebra/operator/delete_where.rb +3 -3
  35. data/lib/sparql/algebra/operator/describe.rb +1 -1
  36. data/lib/sparql/algebra/operator/distinct.rb +2 -2
  37. data/lib/sparql/algebra/operator/drop.rb +1 -1
  38. data/lib/sparql/algebra/operator/encode_for_uri.rb +1 -1
  39. data/lib/sparql/algebra/operator/exists.rb +4 -4
  40. data/lib/sparql/algebra/operator/exprlist.rb +2 -2
  41. data/lib/sparql/algebra/operator/extend.rb +5 -5
  42. data/lib/sparql/algebra/operator/filter.rb +3 -3
  43. data/lib/sparql/algebra/operator/graph.rb +2 -2
  44. data/lib/sparql/algebra/operator/group.rb +11 -11
  45. data/lib/sparql/algebra/operator/group_concat.rb +5 -5
  46. data/lib/sparql/algebra/operator/if.rb +4 -4
  47. data/lib/sparql/algebra/operator/in.rb +3 -3
  48. data/lib/sparql/algebra/operator/insert.rb +4 -2
  49. data/lib/sparql/algebra/operator/insert_data.rb +1 -1
  50. data/lib/sparql/algebra/operator/join.rb +3 -3
  51. data/lib/sparql/algebra/operator/left_join.rb +3 -3
  52. data/lib/sparql/algebra/operator/load.rb +1 -1
  53. data/lib/sparql/algebra/operator/max.rb +5 -3
  54. data/lib/sparql/algebra/operator/min.rb +5 -3
  55. data/lib/sparql/algebra/operator/minus.rb +3 -3
  56. data/lib/sparql/algebra/operator/modify.rb +3 -3
  57. data/lib/sparql/algebra/operator/move.rb +1 -1
  58. data/lib/sparql/algebra/operator/notexists.rb +2 -2
  59. data/lib/sparql/algebra/operator/notin.rb +3 -3
  60. data/lib/sparql/algebra/operator/notoneof.rb +3 -4
  61. data/lib/sparql/algebra/operator/or.rb +4 -4
  62. data/lib/sparql/algebra/operator/order.rb +4 -4
  63. data/lib/sparql/algebra/operator/path.rb +4 -3
  64. data/lib/sparql/algebra/operator/path_opt.rb +14 -14
  65. data/lib/sparql/algebra/operator/path_plus.rb +6 -6
  66. data/lib/sparql/algebra/operator/path_star.rb +2 -2
  67. data/lib/sparql/algebra/operator/plus.rb +1 -1
  68. data/lib/sparql/algebra/operator/prefix.rb +2 -2
  69. data/lib/sparql/algebra/operator/project.rb +2 -2
  70. data/lib/sparql/algebra/operator/reduced.rb +2 -2
  71. data/lib/sparql/algebra/operator/regex.rb +1 -1
  72. data/lib/sparql/algebra/operator/replace.rb +1 -1
  73. data/lib/sparql/algebra/operator/reverse.rb +2 -2
  74. data/lib/sparql/algebra/operator/sample.rb +2 -2
  75. data/lib/sparql/algebra/operator/seq.rb +4 -5
  76. data/lib/sparql/algebra/operator/sequence.rb +3 -3
  77. data/lib/sparql/algebra/operator/slice.rb +2 -2
  78. data/lib/sparql/algebra/operator/substr.rb +1 -1
  79. data/lib/sparql/algebra/operator/sum.rb +5 -3
  80. data/lib/sparql/algebra/operator/table.rb +1 -1
  81. data/lib/sparql/algebra/operator/union.rb +2 -2
  82. data/lib/sparql/algebra/operator/update.rb +2 -2
  83. data/lib/sparql/algebra/operator/using.rb +2 -2
  84. data/lib/sparql/algebra/operator/with.rb +4 -4
  85. data/lib/sparql/algebra/query.rb +1 -1
  86. data/lib/sparql/algebra/update.rb +1 -1
  87. data/lib/sparql/extensions.rb +4 -4
  88. data/lib/sparql/grammar.rb +7 -7
  89. data/lib/sparql/grammar/parser11.rb +15 -17
  90. data/lib/sparql/results.rb +3 -3
  91. metadata +26 -33
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 580566c94580d213820adba65200fe89f481d405cbf27d65fe17a4c8eaf3ccd3
4
- data.tar.gz: ab7b0abec9d6bd8aba6f3dd53f79fd53f78e29e0cde8871453d7186adb6c35a0
3
+ metadata.gz: 99a1a48cccda17e81f9d49d0a53d2cdd43b1dec5111379e64291c3877c91ee97
4
+ data.tar.gz: 5c96caf41975f32d829711fddd63092deee2532e4c8612520a43e93657c0545f
5
5
  SHA512:
6
- metadata.gz: b66443f1a4cad8aa4691466dcfb05b42dc7c2b411b7a31dc913510d89e4e05972bee60f189ec7dc0b171734c801adc200d7f1eb13869e6636784218e6e4e1a15
7
- data.tar.gz: 873f1bb69fee25a53f992a7a42e977f44da82f7ddca9b9030e05c1be485da6b9350f8feebcd2390e76116b3596cebf112da59752e4486517f2d9e602c2b7a7c4
6
+ metadata.gz: 9a877f93200339e3265642e69d940ea527b4a1c1280660a20c072417e71cfa95a92a12131cfb4072a3f577f14da69d49a83a9cb5f04b92fbb56fc98ec6178f82
7
+ data.tar.gz: 8601d4cc7ffc9d238f815c2141eedccba1e30d12f60f0251a025329aa00e0f1f3c6775ab241c03d2d5f4cb51c1a4c30941b72e7283f75b3ba83d1ec8e0935577
data/README.md CHANGED
@@ -330,8 +330,8 @@ A copy of the [SPARQL 1.0 tests][] and [SPARQL 1.1 tests][] are also included in
330
330
  [SPARQL 1.0]: http://www.w3.org/TR/sparql11-query/
331
331
  [SPARQL 1.0 tests]:http://www.w3.org/2001/sw/DataAccess/tests/
332
332
  [SPARQL 1.1 tests]: http://www.w3.org/2009/sparql/docs/tests/
333
- [SSE]: http://openjena.org/wiki/SSE
334
- [SXP]: http://www.rubydoc.info/github/bendiken/sxp-ruby
333
+ [SSE]: https://jena.apache.org/documentation/notes/sse.html
334
+ [SXP]: http://www.rubydoc.info/github/dryruby/sxp
335
335
  [grammar]: http://www.w3.org/TR/sparql11-query/#grammar
336
336
  [RDF 1.1]: http://www.w3.org/TR/rdf11-concepts
337
337
  [RDF.rb]: http://rubydoc.info/github/ruby-rdf/rdf
data/VERSION CHANGED
@@ -1 +1 @@
1
- 3.0.2
1
+ 3.1.0
data/bin/sparql CHANGED
@@ -9,7 +9,7 @@ rescue LoadError
9
9
  end
10
10
  require 'getoptlong'
11
11
 
12
- def display_results(res, options)
12
+ def display_results(res, **options)
13
13
  puts res.inspect if options[:verbose]
14
14
  puts case res
15
15
  when RDF::Graph then res.dump(:ttl, base_uri: query.base_uri, prefixes: query.prefixes, standard_prefixes: true)
@@ -18,7 +18,7 @@ def display_results(res, options)
18
18
  end
19
19
  end
20
20
 
21
- def run(input, options = {})
21
+ def run(input, **options)
22
22
  if options[:debug]
23
23
  puts "input graph:\n#{options[:dataset].dump(:trig, standard_prefixes: true)}\n" if options[:dataset]
24
24
  puts "query:\n#{input}\n"
@@ -30,17 +30,17 @@ def run(input, options = {})
30
30
  end
31
31
 
32
32
  query = if options[:sse]
33
- SPARQL::Algebra.parse(input, {debug: options[:debug], update: options[:update]})
33
+ SPARQL::Algebra.parse(input, debug: options[:debug], update: options[:update])
34
34
  else
35
35
  # Only do grammar debugging if we're generating SSE
36
- SPARQL::Grammar.parse(input, options)
36
+ SPARQL::Grammar.parse(input, **options)
37
37
  end
38
38
 
39
39
  puts ("\nSSE:\n" + query.to_sse) if options[:debug] || options[:to_sse]
40
40
 
41
41
  unless options[:to_sse]
42
42
  res = query.execute(options[:dataset], debug: options[:debug])
43
- display_results(res, options)
43
+ display_results(res, **options)
44
44
  end
45
45
  end
46
46
 
@@ -54,7 +54,7 @@ def server(options)
54
54
 
55
55
  get '/' do
56
56
  if params["query"]
57
- query = params["query"].to_s.match(/^http:/) ? RDF::Util::File.open_file(params["query"]) : ::URI.decode(params["query"].to_s)
57
+ query = params["query"].to_s.match(/^http:/) ? RDF::Util::File.open_file(params["query"]) : ::CGI.unescape(params["query"].to_s)
58
58
  SPARQL.execute(query, settings.repository)
59
59
  else
60
60
  settings.sparql_options.replace(standard_prefixes: true)
@@ -132,7 +132,7 @@ case cmd
132
132
  when 'execute', 'parse'
133
133
  options[:to_sse] = true if cmd == 'parse'
134
134
  input ||= ARGV.empty? ? $stdin.read : RDF::Util::File.open_file(ARGV.first).read
135
- run(input, options)
135
+ run(input, **options)
136
136
  when 'query'
137
137
  endpoint = ARGV.shift
138
138
  unless endpoint
@@ -142,7 +142,7 @@ when 'query'
142
142
  input ||= ARGV.empty? ? $stdin.read : RDF::Util::File.open_file(ARGV.first).read
143
143
  SPARQL::Client.new(endpoint) do |client|
144
144
  res = client.query(input)
145
- display_results(res, options)
145
+ display_results(res, **options)
146
146
  end
147
147
  when 'server'
148
148
  if data_file = ARGV.shift
@@ -18,7 +18,7 @@ module Rack
18
18
  # @param [Hash{Symbol => Object}] options
19
19
  # @option options [Boolean] :overwrite (false)
20
20
  # @return [void]
21
- def self.register_mime_types!(options = {})
21
+ def self.register_mime_types!(**options)
22
22
  if defined?(Rack::Mime::MIME_TYPES)
23
23
  RDF::Format.each do |format|
24
24
  if !Rack::Mime::MIME_TYPES.has_key?(file_ext = ".#{format.to_sym}") || options[:overwrite]
@@ -71,7 +71,7 @@ module Rack; module SPARQL
71
71
  serialize_options = {}
72
72
  serialize_options[:content_types] = env['ORDERED_CONTENT_TYPES'] if env['ORDERED_CONTENT_TYPES']
73
73
  serialize_options.merge!(@options)
74
- results = ::SPARQL.serialize_results(body, serialize_options)
74
+ results = ::SPARQL.serialize_results(body, **serialize_options)
75
75
  raise RDF::WriterError, "can't serialize results" unless results
76
76
  headers = headers.merge(VARY).merge('Content-Type' => results.content_type) # FIXME: don't overwrite existing Vary headers
77
77
  [status, headers, [results]]
@@ -27,7 +27,7 @@ module Sinatra
27
27
  #
28
28
  # @see http://www.w3.org/TR/sparql11-service-description
29
29
  # @see http://www.w3.org/TR/void/
30
- def service_description(options = {})
30
+ def service_description(**options)
31
31
  repository = options[:repository]
32
32
 
33
33
  g = RDF::Graph.new
@@ -28,8 +28,8 @@ module SPARQL
28
28
  # a `queryable` object such as an RDF::Graph
29
29
  # or RDF::Repository.
30
30
  # @raise [Parser::Error] on invalid input
31
- def self.parse(query, options = {})
32
- query = Grammar::Parser.new(query, options).parse(options[:update] ? :UpdateUnit : :QueryUnit)
31
+ def self.parse(query, **options)
32
+ query = Grammar::Parser.new(query, **options).parse(options[:update] ? :UpdateUnit : :QueryUnit)
33
33
  end
34
34
 
35
35
  ##
@@ -67,8 +67,8 @@ module SPARQL
67
67
  # @return [RDF::Graph, Boolean, RDF::Query::Solutions::Enumerator]
68
68
  # Note, results may be used with {SPARQL.serialize_results} to obtain appropriate output encoding.
69
69
  # @raise [SPARQL::MalformedQuery] on invalid input
70
- def self.execute(query, queryable, options = {}, &block)
71
- query = self.parse(query, options)
70
+ def self.execute(query, queryable, **options, &block)
71
+ query = self.parse(query, **options)
72
72
  queryable = queryable || RDF::Repository.new
73
73
 
74
74
  case options.fetch(:debug, nil)
@@ -372,8 +372,8 @@ module SPARQL
372
372
  # @param [Hash{Symbol => Object}] options
373
373
  # any additional options (see {Operator#initialize})
374
374
  # @return [SPARQL::Algebra::Operator]
375
- def parse(sse, options = {})
376
- Expression.parse(sse, options)
375
+ def parse(sse, **options)
376
+ Expression.parse(sse, **options)
377
377
  end
378
378
  module_function :parse
379
379
 
@@ -390,8 +390,8 @@ module SPARQL
390
390
  # @yieldparam [SPARQL::Algebra::Expression] expression
391
391
  # @yieldreturn [void] ignored
392
392
  # @return [Expression]
393
- def open(sse, options = {})
394
- Expression.open(sse, options)
393
+ def open(sse, **options)
394
+ Expression.open(sse, **options)
395
395
  end
396
396
  module_function :open
397
397
 
@@ -24,12 +24,12 @@ module SPARQL; module Algebra
24
24
  # @return [RDF::Term]
25
25
  # @raise [TypeError]
26
26
  # @abstract
27
- def aggregate(solutions = [], options = {})
27
+ def aggregate(solutions = [], **options)
28
28
  operands.shift if distinct = (operands.first == :distinct)
29
29
  args_enum = solutions.map do |solution|
30
30
  operands.map do |operand|
31
31
  begin
32
- operand.evaluate(solution, options.merge(depth: options[:depth].to_i + 1))
32
+ operand.evaluate(solution, depth: options[:depth].to_i + 1, **options)
33
33
  rescue TypeError
34
34
  # Ignore errors
35
35
  nil
@@ -13,8 +13,8 @@ module SPARQL; module Algebra
13
13
  # options passed from query
14
14
  # @return [RDF::Term]
15
15
  # @abstract
16
- def evaluate(bindings, options = {})
17
- args = operands.map { |operand| operand.evaluate(bindings, options.merge(depth: options[:depth].to_i + 1)) }
16
+ def evaluate(bindings, **options)
17
+ args = operands.map { |operand| operand.evaluate(bindings, depth: options[:depth].to_i + 1, **options) }
18
18
  options[:memoize] ? memoize(*args) : apply(*args)
19
19
  end
20
20
 
@@ -19,7 +19,7 @@ module SPARQL; module Algebra
19
19
  # @yieldparam [SPARQL::Algebra::Expression] expression
20
20
  # @yieldreturn [void] ignored
21
21
  # @return [Expression]
22
- def self.parse(sse, options = {}, &block)
22
+ def self.parse(sse, **options, &block)
23
23
  begin
24
24
  require 'sxp' # @see http://rubygems.org/gems/sxp
25
25
  rescue LoadError
@@ -38,7 +38,7 @@ module SPARQL; module Algebra
38
38
  Operator.base_uri = options.delete(:base_uri) if options.has_key?(:base_uri)
39
39
  Operator.prefixes = sxp.prefixes || {}
40
40
 
41
- expression = self.new(sxp_result, options)
41
+ expression = self.new(sxp_result, **options)
42
42
 
43
43
  yield(expression) if block_given?
44
44
  expression
@@ -57,8 +57,8 @@ module SPARQL; module Algebra
57
57
  # @yieldparam [SPARQL::Algebra::Expression] expression
58
58
  # @yieldreturn [void] ignored
59
59
  # @return [Expression]
60
- def self.open(filename, options = {}, &block)
61
- RDF::Util::File.open_file(filename, options) do |file|
60
+ def self.open(filename, **options, &block)
61
+ RDF::Util::File.open_file(filename, **options) do |file|
62
62
  options[:base_uri] ||= filename
63
63
  Expression.parse(file, options, &block)
64
64
  end
@@ -87,7 +87,7 @@ module SPARQL; module Algebra
87
87
  # any additional options (see {Operator#initialize})
88
88
  # @return [Expression]
89
89
  # @raise [TypeError] if any of the operands is invalid
90
- def self.new(sse, options = {})
90
+ def self.new(sse, **options)
91
91
  raise ArgumentError, "invalid SPARQL::Algebra::Expression form: #{sse.inspect}" unless sse.is_a?(Array)
92
92
 
93
93
  operator = Operator.for(sse.first, sse.length - 1)
@@ -95,7 +95,7 @@ module SPARQL; module Algebra
95
95
  return case sse.first
96
96
  when Array
97
97
  debug(options) {"Map array elements #{sse}"}
98
- sse.map {|s| self.new(s, options.merge(depth: options[:depth].to_i + 1))}
98
+ sse.map {|s| self.new(s, depth: options[:depth].to_i + 1, **options)}
99
99
  else
100
100
  debug(options) {"No operator found for #{sse.first}"}
101
101
  sse.map do |s|
@@ -110,7 +110,7 @@ module SPARQL; module Algebra
110
110
  debug(options) {"Operator=#{operator.inspect}, Operand=#{operand.inspect}"}
111
111
  case operand
112
112
  when Array
113
- self.new(operand, options.merge(depth: options[:depth].to_i + 1))
113
+ self.new(operand, depth: options[:depth].to_i + 1, **options)
114
114
  when Operator, Variable, RDF::Term, RDF::Query, Symbol
115
115
  operand
116
116
  when TrueClass, FalseClass, Numeric, String, DateTime, Date, Time
@@ -4,7 +4,7 @@ require 'json'
4
4
  # Extensions for Ruby's `NilClass` class.
5
5
  class NilClass
6
6
 
7
- def evaluate(bindings, options = {})
7
+ def evaluate(bindings, **options)
8
8
  self
9
9
  end
10
10
 
@@ -53,8 +53,8 @@ class Array
53
53
  # options passed from query
54
54
  # @return [RDF::Term]
55
55
  # @see SPARQL::Algebra::Expression.evaluate
56
- def evaluate(bindings, options = {})
57
- SPARQL::Algebra::Expression.extension(*self.map {|o| o.evaluate(bindings, options)})
56
+ def evaluate(bindings, **options)
57
+ SPARQL::Algebra::Expression.extension(*self.map {|o| o.evaluate(bindings, **options)})
58
58
  end
59
59
 
60
60
  ##
@@ -67,7 +67,7 @@ class Array
67
67
  # @raise [NotImplementedError]
68
68
  # If an attempt is made to perform an unsupported operation
69
69
  # @see http://www.w3.org/TR/sparql11-query/#sparqlAlgebra
70
- def execute(queryable, options = {})
70
+ def execute(queryable, **options)
71
71
  raise NotImplementedError, "SPARQL::Algebra '#{first}' operator not implemented"
72
72
  end
73
73
 
@@ -191,7 +191,7 @@ module RDF::Term
191
191
  # @param [Hash{Symbol => Object}] options ({})
192
192
  # options passed from query
193
193
  # @return [RDF::Term]
194
- def evaluate(bindings, options = {})
194
+ def evaluate(bindings, **options)
195
195
  self
196
196
  end
197
197
 
@@ -243,7 +243,7 @@ module RDF::Queryable
243
243
  solutions = if method(:query_execute).arity == 1
244
244
  query_execute(pattern, &block)
245
245
  else
246
- query_execute(pattern, options, &block)
246
+ query_execute(pattern, **options, &block)
247
247
  end
248
248
  after_query(pattern) if respond_to?(:after_query)
249
249
 
@@ -252,10 +252,10 @@ module RDF::Queryable
252
252
  solutions
253
253
  else
254
254
  # Return an enumerator
255
- enum_for(:query, pattern, options)
255
+ enum_for(:query, pattern, **options)
256
256
  end
257
257
  else
258
- query_without_sparql(pattern, options, &block)
258
+ query_without_sparql(pattern, **options, &block)
259
259
  end
260
260
  end
261
261
 
@@ -386,15 +386,10 @@ class RDF::Query::Variable
386
386
  # options passed from query
387
387
  # @return [RDF::Term] the value of this variable
388
388
  # @raise [TypeError] if the variable is not bound
389
- def evaluate(bindings, options = {})
389
+ def evaluate(bindings, **options)
390
390
  raise TypeError if bindings.respond_to?(:bound?) && !bindings.bound?(self)
391
391
  bindings[name.to_sym]
392
392
  end
393
-
394
- def to_s
395
- prefix = distinguished? || name.to_s[0,1] == '.' ? '?' : "??"
396
- unbound? ? "#{prefix}#{name}" : "#{prefix}#{name}=#{value}"
397
- end
398
393
  end # RDF::Query::Variable
399
394
 
400
395
  ##
@@ -331,7 +331,7 @@ module SPARQL; module Algebra
331
331
  # @overload initialize(*operands)
332
332
  # @param [Array<RDF::Term>] operands
333
333
  #
334
- # @overload initialize(*operands, options)
334
+ # @overload initialize(*operands, **options)
335
335
  # @param [Array<RDF::Term>] operands
336
336
  # @param [Hash{Symbol => Object}] options
337
337
  # any additional options
@@ -29,7 +29,7 @@ module SPARQL; module Algebra
29
29
  # @raise [IOError]
30
30
  # If `from` does not exist, unless the `silent` operator is present
31
31
  # @see http://www.w3.org/TR/sparql11-update/
32
- def execute(queryable, options = {})
32
+ def execute(queryable, **options)
33
33
  debug(options) {"Add"}
34
34
  silent = operands.first == :silent
35
35
  operands.shift if silent
@@ -33,7 +33,7 @@ module SPARQL; module Algebra
33
33
  # @yieldparam [RDF::Query::Solution] solution
34
34
  # @yieldreturn [void] ignored
35
35
  # @see http://www.w3.org/TR/sparql11-query/#sparqlAlgebra
36
- def execute(queryable, options = {}, &block)
36
+ def execute(queryable, **options, &block)
37
37
  subject, object = options[:subject], options[:object]
38
38
  debug(options) {"Alt #{[subject, operands, object].to_sse}"}
39
39
 
@@ -55,7 +55,7 @@ module SPARQL; module Algebra
55
55
  end
56
56
 
57
57
  query = Union.new(qa, qb)
58
- queryable.query(query, options.merge(depth: options[:depth].to_i + 1), &block)
58
+ queryable.query(query, depth: options[:depth].to_i + 1, **options, &block)
59
59
  end
60
60
  end # Alt
61
61
  end # Operator
@@ -24,7 +24,7 @@ module SPARQL; module Algebra
24
24
  # @param [Hash{Symbol => Object}] options
25
25
  # any additional options (see {Operator#initialize})
26
26
  # @raise [TypeError] if any operand is invalid
27
- def initialize(left, right, options = {})
27
+ def initialize(left, right, **options)
28
28
  super
29
29
  end
30
30
 
@@ -37,15 +37,15 @@ module SPARQL; module Algebra
37
37
  # options passed from query
38
38
  # @return [RDF::Literal::Boolean] `true` or `false`
39
39
  # @raise [TypeError] if the operands could not be coerced to boolean literals
40
- def evaluate(bindings, options = {})
40
+ def evaluate(bindings, **options)
41
41
  begin
42
- left = boolean(operand(0).evaluate(bindings, options.merge(depth: options[:depth].to_i + 1))).true?
42
+ left = boolean(operand(0).evaluate(bindings, depth: options[:depth].to_i + 1, **options)).true?
43
43
  rescue TypeError
44
44
  left = nil
45
45
  end
46
46
 
47
47
  begin
48
- right = boolean(operand(1).evaluate(bindings, options.merge(depth: options[:depth].to_i + 1))).true?
48
+ right = boolean(operand(1).evaluate(bindings, depth: options[:depth].to_i + 1, **options)).true?
49
49
  rescue TypeError
50
50
  right = nil
51
51
  end
@@ -24,8 +24,8 @@ module SPARQL; module Algebra
24
24
  # @param [Hash{Symbol => Object}] options ({})
25
25
  # options passed from query
26
26
  # @return [RDF::Term]
27
- def evaluate(bindings, options = {})
28
- operand(0).evaluate(bindings, options.merge(depth: options[:depth].to_i + 1))
27
+ def evaluate(bindings, **options)
28
+ operand(0).evaluate(bindings, depth: options[:depth].to_i + 1, **options)
29
29
  end
30
30
  end # Asc
31
31
  end # Operator
@@ -29,9 +29,9 @@ module SPARQL; module Algebra
29
29
  # @yieldreturn [void] ignored
30
30
  # @return [RDF::Literal::Boolean]\
31
31
  # @see http://www.w3.org/TR/sparql11-query/#sparqlAlgebra
32
- def execute(queryable, options = {})
32
+ def execute(queryable, **options)
33
33
  debug(options) {"Ask #{operands.first}"}
34
- res = boolean(!queryable.query(operands.last, options.merge(depth: options[:depth].to_i + 1)).empty?)
34
+ res = boolean(!queryable.query(operands.last, depth: options[:depth].to_i + 1, **options).empty?)
35
35
  yield res if block_given?
36
36
  res
37
37
  end
@@ -6,12 +6,12 @@ module SPARQL; module Algebra
6
6
  # @example
7
7
  # (prefix ((: <http://www.example.org/>))
8
8
  # (project (?avg)
9
- # (extend ((?avg ?.0))
10
- # (group () ((?.0 (avg ?o)))
9
+ # (extend ((?avg ??.0))
10
+ # (group () ((??.0 (avg ?o)))
11
11
  # (bgp (triple ?s :dec ?o))))))
12
12
  #
13
13
  # @see http://www.w3.org/TR/sparql11-query/#defn_aggAvg
14
- class Avg < Operator::Unary
14
+ class Avg < Operator
15
15
  include Aggregate
16
16
 
17
17
  NAME = :avg
@@ -23,6 +23,8 @@ module SPARQL; module Algebra
23
23
  # enum of evaluated operand
24
24
  # @return [RDF::Literal::Numeric] The numeric average of the terms
25
25
  def apply(enum)
26
+ # FIXME: we don't actually do anything with distinct
27
+ operands.shift if distinct = (operands.first == :distinct)
26
28
  if enum.empty?
27
29
  RDF::Literal(0)
28
30
  elsif enum.flatten.all? {|n| n.is_a?(RDF::Literal::Numeric)}
@@ -29,10 +29,10 @@ module SPARQL; module Algebra
29
29
  # @return [RDF::Queryable, RDF::Query::Solutions]
30
30
  # the resulting solution sequence
31
31
  # @see http://www.w3.org/TR/sparql11-query/#sparqlAlgebra
32
- def execute(queryable, options = {}, &block)
32
+ def execute(queryable, **options, &block)
33
33
  debug(options) {"Base #{operands.first}"}
34
34
  Operator.base_uri = operands.first
35
- queryable.query(operands.last, options.merge(depth: options[:depth].to_i + 1), &block)
35
+ queryable.query(operands.last, depth: options[:depth].to_i + 1, **options, &block)
36
36
  end
37
37
 
38
38
  ##