sparql 3.0.2 → 3.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
##
|