sparql 3.0.2 → 3.1.0

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 (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
  ##