sparql 3.1.4 → 3.1.5
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 +1 -1
- data/VERSION +1 -1
- data/lib/sparql/algebra/expression.rb +7 -4
- data/lib/sparql/algebra/extensions.rb +1 -1
- data/lib/sparql/algebra/operator.rb +8 -8
- data/lib/sparql/algebra/operator/avg.rb +7 -0
- data/lib/sparql/algebra/operator/bgp.rb +1 -1
- data/lib/sparql/algebra/operator/graph.rb +1 -1
- data/lib/sparql/algebra/operator/left_join.rb +4 -0
- data/lib/sparql/algebra/operator/max.rb +7 -0
- data/lib/sparql/algebra/operator/min.rb +7 -0
- data/lib/sparql/algebra/operator/sample.rb +8 -1
- data/lib/sparql/extensions.rb +6 -12
- data/lib/sparql/grammar.rb +2 -2
- data/lib/sparql/grammar/parser11.rb +1 -1
- metadata +11 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 27f805f342a0db67d53df5b59f045adbf206e846cf4100b3918e9fb7933413d0
|
4
|
+
data.tar.gz: 3afbfd95de7fb479e8d06c20a758d636ff23e699db48ed25e5906497bc2e254b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 12ce7f125ff98950f7fdd9e63e42645fc9bd23e79146971526e78413f254d979a1e202ac90cca1f83b8721ca43f7c6e8e88bf6029a5138bc8337ad2c2a85de72
|
7
|
+
data.tar.gz: 1b8bb78258345466d763a3fdfbc19b40cc759a6c2a7b8189cccd6e7cecbbbcbb2cdb1fc04869063bcdbc33ecd532292b3d4e25bc426256c63f1e804044aa8cbb
|
data/README.md
CHANGED
@@ -4,7 +4,7 @@ This is a [Ruby][] implementation of [SPARQL][] for [RDF.rb][].
|
|
4
4
|
|
5
5
|
[](https://badge.fury.io/rb/sparql)
|
6
6
|
[](https://github.com/ruby-rdf/sparql/actions?query=workflow%3ACI)
|
7
|
-
[](https://coveralls.io/r/ruby-rdf/sparql)
|
7
|
+
[](https://coveralls.io/r/ruby-rdf/sparql?branch=develop)
|
8
8
|
[](https://gitter.im/ruby-rdf/rdf)
|
9
9
|
|
10
10
|
## Features
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.1.
|
1
|
+
3.1.5
|
@@ -53,7 +53,7 @@ module SPARQL; module Algebra
|
|
53
53
|
def self.open(filename, **options, &block)
|
54
54
|
RDF::Util::File.open_file(filename, **options) do |file|
|
55
55
|
options[:base_uri] ||= filename
|
56
|
-
Expression.parse(file, options, &block)
|
56
|
+
Expression.parse(file, **options, &block)
|
57
57
|
end
|
58
58
|
end
|
59
59
|
|
@@ -114,8 +114,11 @@ module SPARQL; module Algebra
|
|
114
114
|
|
115
115
|
debug(options) {"#{operator.inspect}(#{operands.map(&:inspect).join(',')})"}
|
116
116
|
options.delete_if {|k, v| [:debug, :logger, :depth, :prefixes, :base_uri, :update, :validate].include?(k) }
|
117
|
-
|
118
|
-
|
117
|
+
begin
|
118
|
+
operator.new(*operands, **options)
|
119
|
+
rescue ArgumentError => e
|
120
|
+
error(options) {"Operator=#{operator.inspect}: #{e}"}
|
121
|
+
end
|
119
122
|
end
|
120
123
|
|
121
124
|
##
|
@@ -332,7 +335,7 @@ module SPARQL; module Algebra
|
|
332
335
|
# @param [Hash{Symbol => Object}] options ({})
|
333
336
|
# options passed from query
|
334
337
|
# @return [Expression] `self`
|
335
|
-
def evaluate(bindings, options
|
338
|
+
def evaluate(bindings, **options)
|
336
339
|
self
|
337
340
|
end
|
338
341
|
|
@@ -320,7 +320,7 @@ module RDF::Queryable
|
|
320
320
|
# @yieldreturn [void] ignored
|
321
321
|
# @return [Enumerator]
|
322
322
|
# @see RDF::Queryable#query_pattern
|
323
|
-
def query(pattern, options
|
323
|
+
def query(pattern, **options, &block)
|
324
324
|
raise TypeError, "#{self} is not queryable" if respond_to?(:queryable?) && !queryable?
|
325
325
|
|
326
326
|
if pattern.is_a?(SPARQL::Algebra::Operator) && pattern.respond_to?(:execute)
|
@@ -336,8 +336,8 @@ module SPARQL; module Algebra
|
|
336
336
|
# @option options [Boolean] :memoize (false)
|
337
337
|
# whether to memoize results for particular operands
|
338
338
|
# @raise [TypeError] if any operand is invalid
|
339
|
-
def initialize(*operands)
|
340
|
-
@options =
|
339
|
+
def initialize(*operands, **options)
|
340
|
+
@options = options.dup
|
341
341
|
@operands = operands.map! do |operand|
|
342
342
|
case operand
|
343
343
|
when Array
|
@@ -358,7 +358,7 @@ module SPARQL; module Algebra
|
|
358
358
|
##
|
359
359
|
# Deep duplicate operands
|
360
360
|
def deep_dup
|
361
|
-
self.class.new(*operands.map(&:deep_dup),
|
361
|
+
self.class.new(*operands.map(&:deep_dup), **@options)
|
362
362
|
end
|
363
363
|
|
364
364
|
##
|
@@ -745,7 +745,7 @@ module SPARQL; module Algebra
|
|
745
745
|
##
|
746
746
|
# @param [Hash{Symbol => Object}] options
|
747
747
|
# any additional options (see {Operator#initialize})
|
748
|
-
def initialize(options
|
748
|
+
def initialize(**options)
|
749
749
|
super
|
750
750
|
end
|
751
751
|
end # Nullary
|
@@ -764,7 +764,7 @@ module SPARQL; module Algebra
|
|
764
764
|
# the operand
|
765
765
|
# @param [Hash{Symbol => Object}] options
|
766
766
|
# any additional options (see {Operator#initialize})
|
767
|
-
def initialize(arg, options
|
767
|
+
def initialize(arg, **options)
|
768
768
|
super
|
769
769
|
end
|
770
770
|
end # Unary
|
@@ -785,7 +785,7 @@ module SPARQL; module Algebra
|
|
785
785
|
# the second operand
|
786
786
|
# @param [Hash{Symbol => Object}] options
|
787
787
|
# any additional options (see {Operator#initialize})
|
788
|
-
def initialize(arg1, arg2, options
|
788
|
+
def initialize(arg1, arg2, **options)
|
789
789
|
super
|
790
790
|
end
|
791
791
|
end # Binary
|
@@ -808,7 +808,7 @@ module SPARQL; module Algebra
|
|
808
808
|
# the third operand
|
809
809
|
# @param [Hash{Symbol => Object}] options
|
810
810
|
# any additional options (see {Operator#initialize})
|
811
|
-
def initialize(arg1, arg2, arg3, options
|
811
|
+
def initialize(arg1, arg2, arg3, **options)
|
812
812
|
super
|
813
813
|
end
|
814
814
|
end # Ternary
|
@@ -833,7 +833,7 @@ module SPARQL; module Algebra
|
|
833
833
|
# the forth operand
|
834
834
|
# @param [Hash{Symbol => Object}] options
|
835
835
|
# any additional options (see {Operator#initialize})
|
836
|
-
def initialize(arg1, arg2, arg3, arg4, options
|
836
|
+
def initialize(arg1, arg2, arg3, arg4, **options)
|
837
837
|
super
|
838
838
|
end
|
839
839
|
end # Ternary
|
@@ -16,6 +16,13 @@ module SPARQL; module Algebra
|
|
16
16
|
|
17
17
|
NAME = :avg
|
18
18
|
|
19
|
+
def initialize(*operands, **options)
|
20
|
+
raise ArgumentError,
|
21
|
+
"avg operator accepts at most one argument with an optional :distinct" if
|
22
|
+
(operands - %i{distinct}).length != 1
|
23
|
+
super
|
24
|
+
end
|
25
|
+
|
19
26
|
##
|
20
27
|
# The Avg set function calculates the average value for an expression over a group. It is defined in terms of Sum and Count.
|
21
28
|
#
|
@@ -22,7 +22,7 @@ module SPARQL; module Algebra
|
|
22
22
|
# @yieldparam [RDF::Query::Solution] solution
|
23
23
|
# @yieldreturn [void] ignored
|
24
24
|
# @return [RDF::Query]
|
25
|
-
def self.new(*patterns, &block)
|
25
|
+
def self.new(*patterns, **options, &block)
|
26
26
|
RDF::Query.new(*patterns, graph_name: false, &block)
|
27
27
|
end
|
28
28
|
end # BGP
|
@@ -36,7 +36,7 @@ module SPARQL; module Algebra
|
|
36
36
|
# @param [Array<RDF::Query::Pattern>] patterns
|
37
37
|
# Quads
|
38
38
|
# @return [RDF::Query]
|
39
|
-
def self.new(name, patterns, options
|
39
|
+
def self.new(name, patterns, **options, &block)
|
40
40
|
case patterns
|
41
41
|
when RDF::Query
|
42
42
|
# Record that the argument as a (bgp) for re-serialization back to SSE
|
@@ -37,6 +37,10 @@ module SPARQL; module Algebra
|
|
37
37
|
def execute(queryable, **options, &block)
|
38
38
|
filter = operand(2)
|
39
39
|
|
40
|
+
raise ArgumentError,
|
41
|
+
"leftjoin operator accepts at most two arguments with an optional filter" if
|
42
|
+
operands.length < 2 || operands.length > 3
|
43
|
+
|
40
44
|
debug(options) {"LeftJoin"}
|
41
45
|
left = queryable.query(operand(0), depth: options[:depth].to_i + 1, **options)
|
42
46
|
debug(options) {"=>(leftjoin left) #{left.inspect}"}
|
@@ -16,6 +16,13 @@ module SPARQL; module Algebra
|
|
16
16
|
|
17
17
|
NAME = :max
|
18
18
|
|
19
|
+
def initialize(*operands, **options)
|
20
|
+
raise ArgumentError,
|
21
|
+
"max operator accepts at most one argument with an optional :distinct" if
|
22
|
+
(operands - %i{distinct}).length != 1
|
23
|
+
super
|
24
|
+
end
|
25
|
+
|
19
26
|
##
|
20
27
|
# Max is a SPARQL set function that return the maximum value from a group respectively.
|
21
28
|
#
|
@@ -16,6 +16,13 @@ module SPARQL; module Algebra
|
|
16
16
|
|
17
17
|
NAME = :min
|
18
18
|
|
19
|
+
def initialize(*operands, **options)
|
20
|
+
raise ArgumentError,
|
21
|
+
"min operator accepts at most one argument with an optional :distinct" if
|
22
|
+
(operands - %i{distinct}).length != 1
|
23
|
+
super
|
24
|
+
end
|
25
|
+
|
19
26
|
##
|
20
27
|
# Min is a SPARQL set function that return the minimum value from a group respectively.
|
21
28
|
#
|
@@ -12,11 +12,18 @@ module SPARQL; module Algebra
|
|
12
12
|
# (bgp (triple ?s :dec ?o)))))))
|
13
13
|
#
|
14
14
|
# @see https://www.w3.org/TR/sparql11-query/#defn_aggSample
|
15
|
-
class Sample < Operator
|
15
|
+
class Sample < Operator
|
16
16
|
include Aggregate
|
17
17
|
|
18
18
|
NAME = :sample
|
19
19
|
|
20
|
+
def initialize(*operands, **options)
|
21
|
+
raise ArgumentError,
|
22
|
+
"sample operator accepts at most one argument with an optional :distinct" if
|
23
|
+
(operands - %i{distinct}).length != 1
|
24
|
+
super
|
25
|
+
end
|
26
|
+
|
20
27
|
##
|
21
28
|
# Sample is a set function which returns an arbitrary value from the multiset passed to it.
|
22
29
|
#
|
data/lib/sparql/extensions.rb
CHANGED
@@ -25,11 +25,7 @@ module RDF::Queryable
|
|
25
25
|
#
|
26
26
|
# Used to implement the SPARQL `DESCRIBE` operator.
|
27
27
|
#
|
28
|
-
# @overload concise_bounded_description(*terms, &block)
|
29
|
-
# @param [Array<RDF::Term>] terms
|
30
|
-
# List of terms to include in the results.
|
31
|
-
#
|
32
|
-
# @overload concise_bounded_description(*terms, options, &block)
|
28
|
+
# @overload concise_bounded_description(*terms, **options, &block)
|
33
29
|
# @param [Array<RDF::Term>] terms
|
34
30
|
# List of terms to include in the results.
|
35
31
|
# @param [Hash{Symbol => Object}] options
|
@@ -44,16 +40,14 @@ module RDF::Queryable
|
|
44
40
|
# @return [RDF::Graph]
|
45
41
|
#
|
46
42
|
# @see https://www.w3.org/Submission/CBD/
|
47
|
-
def concise_bounded_description(*terms, &block)
|
48
|
-
options = terms.last.is_a?(Hash) ? terms.pop.dup : {}
|
49
|
-
|
43
|
+
def concise_bounded_description(*terms, **options, &block)
|
50
44
|
graph = options[:graph] || RDF::Graph.new
|
51
45
|
|
52
46
|
if options[:non_subjects]
|
53
47
|
query_terms = terms.dup
|
54
48
|
|
55
49
|
# Find terms not in self as a subject and recurse with their subjects
|
56
|
-
terms.reject {|term| self.first(subject: term)}.each do |term|
|
50
|
+
terms.reject {|term| self.first({subject: term})}.each do |term|
|
57
51
|
self.query({predicate: term}) do |statement|
|
58
52
|
query_terms << statement.subject
|
59
53
|
end
|
@@ -67,7 +61,7 @@ module RDF::Queryable
|
|
67
61
|
end
|
68
62
|
|
69
63
|
# Don't consider term if already in graph
|
70
|
-
terms.reject {|term| graph.first(subject: term)}.each do |term|
|
64
|
+
terms.reject {|term| graph.first({subject: term})}.each do |term|
|
71
65
|
# Find statements from queryiable with term as a subject
|
72
66
|
self.query({subject: term}) do |statement|
|
73
67
|
yield(statement) if block_given?
|
@@ -84,13 +78,13 @@ module RDF::Queryable
|
|
84
78
|
}, **{}).execute(self).each do |solution|
|
85
79
|
# Recurse to include this subject
|
86
80
|
recurse_opts = options.merge(non_subjects: false, graph: graph)
|
87
|
-
self.concise_bounded_description(solution[:s], recurse_opts, &block)
|
81
|
+
self.concise_bounded_description(solution[:s], **recurse_opts, &block)
|
88
82
|
end
|
89
83
|
|
90
84
|
# Recurse if object is a BNode and it is not already in subjects
|
91
85
|
if statement.object.node?
|
92
86
|
recurse_opts = options.merge(non_subjects: false, graph: graph)
|
93
|
-
self.concise_bounded_description(statement.object, recurse_opts, &block)
|
87
|
+
self.concise_bounded_description(statement.object, **recurse_opts, &block)
|
94
88
|
end
|
95
89
|
end
|
96
90
|
end
|
data/lib/sparql/grammar.rb
CHANGED
@@ -292,7 +292,7 @@ module SPARQL
|
|
292
292
|
# @raise [RDF::FormatError] if no reader found for the specified format
|
293
293
|
def self.open(filename, **options, &block)
|
294
294
|
RDF::Util::File.open_file(filename, **options) do |file|
|
295
|
-
self.parse(file, options, &block)
|
295
|
+
self.parse(file, **options, &block)
|
296
296
|
end
|
297
297
|
end
|
298
298
|
|
@@ -326,7 +326,7 @@ module SPARQL
|
|
326
326
|
# @return [Lexer]
|
327
327
|
# @raise [Lexer::Error] on invalid input
|
328
328
|
def self.tokenize(query, **options, &block)
|
329
|
-
Lexer.tokenize(query, options, &block)
|
329
|
+
Lexer.tokenize(query, **options, &block)
|
330
330
|
end
|
331
331
|
end # Grammar
|
332
332
|
end # SPARQL
|
@@ -878,10 +878,10 @@ module SPARQL::Grammar
|
|
878
878
|
# [80] Object ::= GraphNode | EmbTP
|
879
879
|
production(:Object) do |input, data, callback|
|
880
880
|
object = data[:GraphNode] || data[:EmbTP]
|
881
|
+
add_prod_datum(:pattern, data[:pattern])
|
881
882
|
if object
|
882
883
|
if prod_data[:Verb]
|
883
884
|
add_pattern(:Object, subject: prod_data[:Subject], predicate: prod_data[:Verb], object: object)
|
884
|
-
add_prod_datum(:pattern, data[:pattern])
|
885
885
|
elsif prod_data[:VerbPath]
|
886
886
|
add_prod_datum(:path,
|
887
887
|
SPARQL::Algebra::Expression(:path,
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sparql
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.1.
|
4
|
+
version: 3.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gregg Kellogg
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2021-01-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rdf
|
@@ -94,6 +94,9 @@ dependencies:
|
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '3.1'
|
97
|
+
- - ">="
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: 3.1.2
|
97
100
|
type: :runtime
|
98
101
|
prerelease: false
|
99
102
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -101,6 +104,9 @@ dependencies:
|
|
101
104
|
- - "~>"
|
102
105
|
- !ruby/object:Gem::Version
|
103
106
|
version: '3.1'
|
107
|
+
- - ">="
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 3.1.2
|
104
110
|
- !ruby/object:Gem::Dependency
|
105
111
|
name: rdf-xsd
|
106
112
|
requirement: !ruby/object:Gem::Requirement
|
@@ -227,10 +233,8 @@ dependencies:
|
|
227
233
|
- - "~>"
|
228
234
|
- !ruby/object:Gem::Version
|
229
235
|
version: '0.9'
|
230
|
-
description:
|
231
|
-
|
232
|
-
Implements SPARQL grammar parsing to SPARQL Algebra, SPARQL Algebra processing
|
233
|
-
and includes SPARQL Client for accessing remote repositories.
|
236
|
+
description: SPARQL Implements SPARQL 1.1 Query, Update and result formats for the
|
237
|
+
Ruby RDF.rb library suite.
|
234
238
|
email: public-rdf-ruby@w3.org
|
235
239
|
executables:
|
236
240
|
- sparql
|
@@ -409,7 +413,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
409
413
|
- !ruby/object:Gem::Version
|
410
414
|
version: '0'
|
411
415
|
requirements: []
|
412
|
-
rubygems_version: 3.
|
416
|
+
rubygems_version: 3.0.8
|
413
417
|
signing_key:
|
414
418
|
specification_version: 4
|
415
419
|
summary: SPARQL Query and Update library for Ruby.
|