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.
- checksums.yaml +4 -4
- data/README.md +2 -2
- data/VERSION +1 -1
- data/bin/sparql +8 -8
- data/lib/rack/sparql.rb +1 -1
- data/lib/rack/sparql/conneg.rb +1 -1
- data/lib/sinatra/sparql.rb +1 -1
- data/lib/sparql.rb +4 -4
- data/lib/sparql/algebra.rb +4 -4
- data/lib/sparql/algebra/aggregate.rb +2 -2
- data/lib/sparql/algebra/evaluatable.rb +2 -2
- data/lib/sparql/algebra/expression.rb +7 -7
- data/lib/sparql/algebra/extensions.rb +9 -14
- data/lib/sparql/algebra/operator.rb +1 -1
- data/lib/sparql/algebra/operator/add.rb +1 -1
- data/lib/sparql/algebra/operator/alt.rb +2 -2
- data/lib/sparql/algebra/operator/and.rb +4 -4
- data/lib/sparql/algebra/operator/asc.rb +2 -2
- data/lib/sparql/algebra/operator/ask.rb +2 -2
- data/lib/sparql/algebra/operator/avg.rb +5 -3
- data/lib/sparql/algebra/operator/base.rb +2 -2
- data/lib/sparql/algebra/operator/bnode.rb +3 -3
- data/lib/sparql/algebra/operator/bound.rb +2 -2
- data/lib/sparql/algebra/operator/clear.rb +1 -1
- data/lib/sparql/algebra/operator/coalesce.rb +2 -2
- data/lib/sparql/algebra/operator/concat.rb +2 -2
- data/lib/sparql/algebra/operator/construct.rb +2 -2
- data/lib/sparql/algebra/operator/copy.rb +1 -1
- data/lib/sparql/algebra/operator/count.rb +2 -2
- data/lib/sparql/algebra/operator/create.rb +1 -1
- data/lib/sparql/algebra/operator/dataset.rb +3 -3
- data/lib/sparql/algebra/operator/delete.rb +4 -2
- data/lib/sparql/algebra/operator/delete_data.rb +1 -1
- data/lib/sparql/algebra/operator/delete_where.rb +3 -3
- data/lib/sparql/algebra/operator/describe.rb +1 -1
- data/lib/sparql/algebra/operator/distinct.rb +2 -2
- data/lib/sparql/algebra/operator/drop.rb +1 -1
- data/lib/sparql/algebra/operator/encode_for_uri.rb +1 -1
- data/lib/sparql/algebra/operator/exists.rb +4 -4
- data/lib/sparql/algebra/operator/exprlist.rb +2 -2
- data/lib/sparql/algebra/operator/extend.rb +5 -5
- data/lib/sparql/algebra/operator/filter.rb +3 -3
- data/lib/sparql/algebra/operator/graph.rb +2 -2
- data/lib/sparql/algebra/operator/group.rb +11 -11
- data/lib/sparql/algebra/operator/group_concat.rb +5 -5
- data/lib/sparql/algebra/operator/if.rb +4 -4
- data/lib/sparql/algebra/operator/in.rb +3 -3
- data/lib/sparql/algebra/operator/insert.rb +4 -2
- data/lib/sparql/algebra/operator/insert_data.rb +1 -1
- data/lib/sparql/algebra/operator/join.rb +3 -3
- data/lib/sparql/algebra/operator/left_join.rb +3 -3
- data/lib/sparql/algebra/operator/load.rb +1 -1
- data/lib/sparql/algebra/operator/max.rb +5 -3
- data/lib/sparql/algebra/operator/min.rb +5 -3
- data/lib/sparql/algebra/operator/minus.rb +3 -3
- data/lib/sparql/algebra/operator/modify.rb +3 -3
- data/lib/sparql/algebra/operator/move.rb +1 -1
- data/lib/sparql/algebra/operator/notexists.rb +2 -2
- data/lib/sparql/algebra/operator/notin.rb +3 -3
- data/lib/sparql/algebra/operator/notoneof.rb +3 -4
- data/lib/sparql/algebra/operator/or.rb +4 -4
- data/lib/sparql/algebra/operator/order.rb +4 -4
- data/lib/sparql/algebra/operator/path.rb +4 -3
- data/lib/sparql/algebra/operator/path_opt.rb +14 -14
- data/lib/sparql/algebra/operator/path_plus.rb +6 -6
- data/lib/sparql/algebra/operator/path_star.rb +2 -2
- data/lib/sparql/algebra/operator/plus.rb +1 -1
- data/lib/sparql/algebra/operator/prefix.rb +2 -2
- data/lib/sparql/algebra/operator/project.rb +2 -2
- data/lib/sparql/algebra/operator/reduced.rb +2 -2
- data/lib/sparql/algebra/operator/regex.rb +1 -1
- data/lib/sparql/algebra/operator/replace.rb +1 -1
- data/lib/sparql/algebra/operator/reverse.rb +2 -2
- data/lib/sparql/algebra/operator/sample.rb +2 -2
- data/lib/sparql/algebra/operator/seq.rb +4 -5
- data/lib/sparql/algebra/operator/sequence.rb +3 -3
- data/lib/sparql/algebra/operator/slice.rb +2 -2
- data/lib/sparql/algebra/operator/substr.rb +1 -1
- data/lib/sparql/algebra/operator/sum.rb +5 -3
- data/lib/sparql/algebra/operator/table.rb +1 -1
- data/lib/sparql/algebra/operator/union.rb +2 -2
- data/lib/sparql/algebra/operator/update.rb +2 -2
- data/lib/sparql/algebra/operator/using.rb +2 -2
- data/lib/sparql/algebra/operator/with.rb +4 -4
- data/lib/sparql/algebra/query.rb +1 -1
- data/lib/sparql/algebra/update.rb +1 -1
- data/lib/sparql/extensions.rb +4 -4
- data/lib/sparql/grammar.rb +7 -7
- data/lib/sparql/grammar/parser11.rb +15 -17
- data/lib/sparql/results.rb +3 -3
- metadata +26 -33
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 99a1a48cccda17e81f9d49d0a53d2cdd43b1dec5111379e64291c3877c91ee97
|
4
|
+
data.tar.gz: 5c96caf41975f32d829711fddd63092deee2532e4c8612520a43e93657c0545f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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]:
|
334
|
-
[SXP]: http://www.rubydoc.info/github/
|
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
|
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,
|
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"]) : ::
|
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
|
data/lib/rack/sparql.rb
CHANGED
@@ -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]
|
data/lib/rack/sparql/conneg.rb
CHANGED
@@ -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]]
|
data/lib/sinatra/sparql.rb
CHANGED
data/lib/sparql.rb
CHANGED
@@ -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
|
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)
|
data/lib/sparql/algebra.rb
CHANGED
@@ -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,
|
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,
|
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
|
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
|
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,
|
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,
|
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
|
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,
|
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,
|
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,
|
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,
|
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,
|
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
|
10
|
-
# (group () ((
|
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
|
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
|
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,
|
35
|
+
queryable.query(operands.last, depth: options[:depth].to_i + 1, **options, &block)
|
36
36
|
end
|
37
37
|
|
38
38
|
##
|