sparql 3.0.0 → 3.1.3

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 (151) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +184 -70
  3. data/UNLICENSE +1 -1
  4. data/VERSION +1 -1
  5. data/bin/sparql +28 -17
  6. data/lib/rack/sparql.rb +1 -1
  7. data/lib/rack/sparql/conneg.rb +3 -3
  8. data/lib/sinatra/sparql.rb +5 -5
  9. data/lib/sparql.rb +14 -10
  10. data/lib/sparql/algebra.rb +15 -23
  11. data/lib/sparql/algebra/aggregate.rb +4 -4
  12. data/lib/sparql/algebra/evaluatable.rb +2 -2
  13. data/lib/sparql/algebra/expression.rb +28 -21
  14. data/lib/sparql/algebra/extensions.rb +142 -16
  15. data/lib/sparql/algebra/operator.rb +37 -16
  16. data/lib/sparql/algebra/operator/abs.rb +2 -2
  17. data/lib/sparql/algebra/operator/add.rb +3 -3
  18. data/lib/sparql/algebra/operator/alt.rb +4 -4
  19. data/lib/sparql/algebra/operator/and.rb +7 -7
  20. data/lib/sparql/algebra/operator/asc.rb +3 -3
  21. data/lib/sparql/algebra/operator/ask.rb +4 -14
  22. data/lib/sparql/algebra/operator/avg.rb +6 -4
  23. data/lib/sparql/algebra/operator/base.rb +10 -10
  24. data/lib/sparql/algebra/operator/bgp.rb +1 -1
  25. data/lib/sparql/algebra/operator/bnode.rb +5 -5
  26. data/lib/sparql/algebra/operator/bound.rb +3 -3
  27. data/lib/sparql/algebra/operator/ceil.rb +2 -2
  28. data/lib/sparql/algebra/operator/clear.rb +3 -3
  29. data/lib/sparql/algebra/operator/coalesce.rb +3 -13
  30. data/lib/sparql/algebra/operator/compare.rb +8 -8
  31. data/lib/sparql/algebra/operator/concat.rb +4 -4
  32. data/lib/sparql/algebra/operator/construct.rb +4 -14
  33. data/lib/sparql/algebra/operator/contains.rb +2 -2
  34. data/lib/sparql/algebra/operator/copy.rb +3 -3
  35. data/lib/sparql/algebra/operator/count.rb +3 -3
  36. data/lib/sparql/algebra/operator/create.rb +3 -3
  37. data/lib/sparql/algebra/operator/dataset.rb +5 -16
  38. data/lib/sparql/algebra/operator/datatype.rb +1 -1
  39. data/lib/sparql/algebra/operator/day.rb +1 -1
  40. data/lib/sparql/algebra/operator/delete.rb +7 -5
  41. data/lib/sparql/algebra/operator/delete_data.rb +3 -3
  42. data/lib/sparql/algebra/operator/delete_where.rb +5 -5
  43. data/lib/sparql/algebra/operator/desc.rb +1 -1
  44. data/lib/sparql/algebra/operator/describe.rb +3 -13
  45. data/lib/sparql/algebra/operator/distinct.rb +4 -14
  46. data/lib/sparql/algebra/operator/divide.rb +1 -1
  47. data/lib/sparql/algebra/operator/drop.rb +3 -3
  48. data/lib/sparql/algebra/operator/encode_for_uri.rb +3 -3
  49. data/lib/sparql/algebra/operator/equal.rb +3 -3
  50. data/lib/sparql/algebra/operator/exists.rb +5 -5
  51. data/lib/sparql/algebra/operator/exprlist.rb +3 -13
  52. data/lib/sparql/algebra/operator/extend.rb +21 -20
  53. data/lib/sparql/algebra/operator/filter.rb +6 -16
  54. data/lib/sparql/algebra/operator/floor.rb +2 -2
  55. data/lib/sparql/algebra/operator/graph.rb +5 -16
  56. data/lib/sparql/algebra/operator/greater_than.rb +5 -5
  57. data/lib/sparql/algebra/operator/greater_than_or_equal.rb +5 -5
  58. data/lib/sparql/algebra/operator/group.rb +25 -25
  59. data/lib/sparql/algebra/operator/group_concat.rb +6 -6
  60. data/lib/sparql/algebra/operator/hours.rb +1 -1
  61. data/lib/sparql/algebra/operator/if.rb +5 -15
  62. data/lib/sparql/algebra/operator/in.rb +4 -14
  63. data/lib/sparql/algebra/operator/insert.rb +6 -4
  64. data/lib/sparql/algebra/operator/insert_data.rb +3 -3
  65. data/lib/sparql/algebra/operator/iri.rb +1 -1
  66. data/lib/sparql/algebra/operator/is_blank.rb +1 -1
  67. data/lib/sparql/algebra/operator/is_iri.rb +1 -1
  68. data/lib/sparql/algebra/operator/is_literal.rb +1 -1
  69. data/lib/sparql/algebra/operator/is_numeric.rb +1 -1
  70. data/lib/sparql/algebra/operator/join.rb +12 -10
  71. data/lib/sparql/algebra/operator/lang.rb +1 -1
  72. data/lib/sparql/algebra/operator/lang_matches.rb +3 -3
  73. data/lib/sparql/algebra/operator/lcase.rb +2 -2
  74. data/lib/sparql/algebra/operator/left_join.rb +15 -12
  75. data/lib/sparql/algebra/operator/less_than.rb +5 -5
  76. data/lib/sparql/algebra/operator/less_than_or_equal.rb +5 -5
  77. data/lib/sparql/algebra/operator/load.rb +3 -3
  78. data/lib/sparql/algebra/operator/max.rb +6 -4
  79. data/lib/sparql/algebra/operator/md5.rb +1 -1
  80. data/lib/sparql/algebra/operator/min.rb +6 -4
  81. data/lib/sparql/algebra/operator/minus.rb +12 -11
  82. data/lib/sparql/algebra/operator/minutes.rb +1 -1
  83. data/lib/sparql/algebra/operator/modify.rb +4 -4
  84. data/lib/sparql/algebra/operator/month.rb +1 -1
  85. data/lib/sparql/algebra/operator/move.rb +3 -3
  86. data/lib/sparql/algebra/operator/multiply.rb +1 -1
  87. data/lib/sparql/algebra/operator/negate.rb +1 -1
  88. data/lib/sparql/algebra/operator/not.rb +1 -1
  89. data/lib/sparql/algebra/operator/not_equal.rb +2 -2
  90. data/lib/sparql/algebra/operator/notexists.rb +4 -4
  91. data/lib/sparql/algebra/operator/notin.rb +4 -14
  92. data/lib/sparql/algebra/operator/notoneof.rb +5 -6
  93. data/lib/sparql/algebra/operator/now.rb +1 -1
  94. data/lib/sparql/algebra/operator/or.rb +7 -7
  95. data/lib/sparql/algebra/operator/order.rb +6 -16
  96. data/lib/sparql/algebra/operator/path.rb +6 -5
  97. data/lib/sparql/algebra/operator/path_opt.rb +16 -16
  98. data/lib/sparql/algebra/operator/path_plus.rb +8 -8
  99. data/lib/sparql/algebra/operator/path_star.rb +4 -4
  100. data/lib/sparql/algebra/operator/plus.rb +3 -3
  101. data/lib/sparql/algebra/operator/prefix.rb +10 -10
  102. data/lib/sparql/algebra/operator/project.rb +4 -14
  103. data/lib/sparql/algebra/operator/rand.rb +1 -1
  104. data/lib/sparql/algebra/operator/reduced.rb +4 -14
  105. data/lib/sparql/algebra/operator/regex.rb +6 -6
  106. data/lib/sparql/algebra/operator/replace.rb +4 -4
  107. data/lib/sparql/algebra/operator/reverse.rb +4 -4
  108. data/lib/sparql/algebra/operator/round.rb +2 -2
  109. data/lib/sparql/algebra/operator/same_term.rb +8 -5
  110. data/lib/sparql/algebra/operator/sample.rb +3 -3
  111. data/lib/sparql/algebra/operator/seconds.rb +1 -1
  112. data/lib/sparql/algebra/operator/seq.rb +5 -6
  113. data/lib/sparql/algebra/operator/sequence.rb +4 -4
  114. data/lib/sparql/algebra/operator/sha1.rb +1 -1
  115. data/lib/sparql/algebra/operator/sha256.rb +1 -1
  116. data/lib/sparql/algebra/operator/sha384.rb +1 -1
  117. data/lib/sparql/algebra/operator/sha512.rb +1 -1
  118. data/lib/sparql/algebra/operator/slice.rb +4 -14
  119. data/lib/sparql/algebra/operator/str.rb +1 -1
  120. data/lib/sparql/algebra/operator/strafter.rb +2 -2
  121. data/lib/sparql/algebra/operator/strbefore.rb +2 -2
  122. data/lib/sparql/algebra/operator/strdt.rb +2 -2
  123. data/lib/sparql/algebra/operator/strends.rb +2 -2
  124. data/lib/sparql/algebra/operator/strlang.rb +2 -2
  125. data/lib/sparql/algebra/operator/strlen.rb +2 -2
  126. data/lib/sparql/algebra/operator/strstarts.rb +2 -2
  127. data/lib/sparql/algebra/operator/struuid.rb +1 -1
  128. data/lib/sparql/algebra/operator/substr.rb +4 -4
  129. data/lib/sparql/algebra/operator/subtract.rb +1 -1
  130. data/lib/sparql/algebra/operator/sum.rb +6 -4
  131. data/lib/sparql/algebra/operator/table.rb +6 -4
  132. data/lib/sparql/algebra/operator/timezone.rb +1 -1
  133. data/lib/sparql/algebra/operator/tz.rb +1 -1
  134. data/lib/sparql/algebra/operator/ucase.rb +2 -2
  135. data/lib/sparql/algebra/operator/union.rb +10 -9
  136. data/lib/sparql/algebra/operator/update.rb +4 -4
  137. data/lib/sparql/algebra/operator/using.rb +4 -4
  138. data/lib/sparql/algebra/operator/uuid.rb +1 -1
  139. data/lib/sparql/algebra/operator/with.rb +6 -6
  140. data/lib/sparql/algebra/operator/year.rb +1 -1
  141. data/lib/sparql/algebra/query.rb +2 -2
  142. data/lib/sparql/algebra/update.rb +2 -2
  143. data/lib/sparql/algebra/version.rb +1 -1
  144. data/lib/sparql/extensions.rb +5 -5
  145. data/lib/sparql/grammar.rb +111 -11
  146. data/lib/sparql/grammar/meta.rb +1372 -333
  147. data/lib/sparql/grammar/parser11.rb +56 -42
  148. data/lib/sparql/grammar/terminals11.rb +1 -0
  149. data/lib/sparql/results.rb +63 -44
  150. data/lib/sparql/version.rb +1 -1
  151. metadata +40 -47
@@ -15,7 +15,7 @@ module SPARQL; module Algebra
15
15
  # (bgp (triple ?s :p ?o))
16
16
  # (bgp (triple ?s :q ?x))))))
17
17
  #
18
- # @see http://www.w3.org/TR/sparql11-query/#func-coalesce
18
+ # @see https://www.w3.org/TR/sparql11-query/#func-coalesce
19
19
  class Coalesce < Operator
20
20
  include Evaluatable
21
21
 
@@ -41,25 +41,15 @@ module SPARQL; module Algebra
41
41
  # options passed from query
42
42
  # @return [RDF::Term]
43
43
  # @raise [TypeError] if none of the operands succeeds
44
- def evaluate(bindings, options = {})
44
+ def evaluate(bindings, **options)
45
45
  operands.each do |op|
46
46
  begin
47
- return op.evaluate(bindings, options.merge(depth: options[:depth].to_i + 1))
47
+ return op.evaluate(bindings, depth: options[:depth].to_i + 1, **options)
48
48
  rescue
49
49
  end
50
50
  end
51
51
  raise TypeError, "None of the operands evaluated"
52
52
  end
53
-
54
- ##
55
- # Returns an optimized version of this query.
56
- #
57
- # Return optimized query
58
- #
59
- # @return [Union, RDF::Query] `self`
60
- def optimize
61
- operands = operands.map(&:optimize)
62
- end
63
53
  end # Coalesce
64
54
  end # Operator
65
55
  end; end # SPARQL::Algebra
@@ -6,8 +6,8 @@ module SPARQL; module Algebra
6
6
  # @example
7
7
  # (<=> ?x ?y)
8
8
  #
9
- # @see http://www.w3.org/TR/sparql11-query/#OperatorMapping
10
- # @see http://www.w3.org/TR/xpath-functions/#func-compare
9
+ # @see https://www.w3.org/TR/sparql11-query/#OperatorMapping
10
+ # @see https://www.w3.org/TR/xpath-functions/#func-compare
11
11
  class Compare < Operator::Binary
12
12
  include Evaluatable
13
13
 
@@ -33,14 +33,14 @@ module SPARQL; module Algebra
33
33
  # @raise [TypeError] if either operand is not a literal
34
34
  def apply(left, right)
35
35
  case
36
- # @see http://www.w3.org/TR/sparql11-query/#OperatorMapping
37
- # @see http://www.w3.org/TR/sparql11-query/#modOrderBy
36
+ # @see https://www.w3.org/TR/sparql11-query/#OperatorMapping
37
+ # @see https://www.w3.org/TR/sparql11-query/#modOrderBy
38
38
  when left.is_a?(RDF::Literal) && right.is_a?(RDF::Literal)
39
39
  case
40
- # @see http://www.w3.org/TR/xpath-functions/#string-compare
41
- # @see http://www.w3.org/TR/xpath-functions/#comp.numeric
42
- # @see http://www.w3.org/TR/xpath-functions/#op.boolean
43
- # @see http://www.w3.org/TR/xpath-functions/#comp.duration.datetime
40
+ # @see https://www.w3.org/TR/xpath-functions/#string-compare
41
+ # @see https://www.w3.org/TR/xpath-functions/#comp.numeric
42
+ # @see https://www.w3.org/TR/xpath-functions/#op.boolean
43
+ # @see https://www.w3.org/TR/xpath-functions/#comp.duration.datetime
44
44
  when (left.simple? && right.simple?) ||
45
45
  (left.is_a?(RDF::Literal::Numeric) && right.is_a?(RDF::Literal::Numeric)) ||
46
46
  (left.datatype == right.datatype && left.language == right.language)
@@ -8,8 +8,8 @@ module SPARQL; module Algebra
8
8
  # @example
9
9
  # (concat ?a ?b ...)
10
10
  #
11
- # @see http://www.w3.org/TR/sparql11-query/#func-concat
12
- # @see http://www.w3.org/TR/xpath-functions/#func-concat
11
+ # @see https://www.w3.org/TR/sparql11-query/#func-concat
12
+ # @see https://www.w3.org/TR/xpath-functions/#func-concat
13
13
  class Concat < Operator
14
14
  include Evaluatable
15
15
 
@@ -32,8 +32,8 @@ module SPARQL; module Algebra
32
32
  # options passed from query
33
33
  # @return [RDF::Term]
34
34
  # @raise [TypeError] if any operand is not a literal
35
- def evaluate(bindings, options = {})
36
- ops = operands.map {|op| op.evaluate(bindings, options.merge(depth: options[:depth].to_i + 1))}
35
+ def evaluate(bindings, **options)
36
+ ops = operands.map {|op| op.evaluate(bindings, depth: options[:depth].to_i + 1, **options)}
37
37
 
38
38
  raise TypeError, "expected all plain literal operands" unless ops.all? {|op| op.literal? && op.plain?}
39
39
 
@@ -12,7 +12,7 @@ module SPARQL; module Algebra
12
12
  # (project (?s ?p ?o)
13
13
  # (bgp (triple ?s ?p ?o)))))
14
14
  #
15
- # @see http://www.w3.org/TR/sparql11-query/#construct
15
+ # @see https://www.w3.org/TR/sparql11-query/#construct
16
16
  class Construct < Operator::Binary
17
17
  include Query
18
18
 
@@ -34,14 +34,14 @@ module SPARQL; module Algebra
34
34
  # @yieldreturn [void] ignored
35
35
  # @return [RDF::Queryable]
36
36
  # A Queryable with constructed triples
37
- # @see http://www.w3.org/TR/sparql11-query/#construct
38
- def execute(queryable, options = {}, &block)
37
+ # @see https://www.w3.org/TR/sparql11-query/#construct
38
+ def execute(queryable, **options, &block)
39
39
  debug(options) {"Construct #{operands.first}, #{options.inspect}"}
40
40
  graph = RDF::Graph.new
41
41
  patterns = operands.first
42
42
  query = operands.last
43
43
 
44
- queryable.query(query, options.merge(depth: options[:depth].to_i + 1)).each do |solution|
44
+ queryable.query(query, depth: options[:depth].to_i + 1, **options).each do |solution|
45
45
  debug(options) {"(construct apply) #{solution.inspect} to BGP"}
46
46
 
47
47
  # Create a mapping from BNodes within the pattern list to newly constructed BNodes
@@ -74,16 +74,6 @@ module SPARQL; module Algebra
74
74
  graph.each(&block) if block_given?
75
75
  graph
76
76
  end
77
-
78
- ##
79
- # Returns an optimized version of this query.
80
- #
81
- # Return optimized query
82
- #
83
- # @return [Union, RDF::Query] `self`
84
- def optimize
85
- operands = operands.map(&:optimize)
86
- end
87
77
 
88
78
  # Query results statements (e.g., CONSTRUCT, DESCRIBE, CREATE)
89
79
  # @return [Boolean]
@@ -6,8 +6,8 @@ module SPARQL; module Algebra
6
6
  # @example
7
7
  # (contains ?x ?y)
8
8
  #
9
- # @see http://www.w3.org/TR/sparql11-query/#func-contains
10
- # @see http://www.w3.org/TR/xpath-functions/#func-contains
9
+ # @see https://www.w3.org/TR/sparql11-query/#func-contains
10
+ # @see https://www.w3.org/TR/xpath-functions/#func-contains
11
11
  class Contains < Operator::Binary
12
12
  include Evaluatable
13
13
 
@@ -9,7 +9,7 @@ module SPARQL; module Algebra
9
9
  # @example
10
10
  # (copy silent <iri> to default)
11
11
  #
12
- # @see http://www.w3.org/TR/sparql11-update/#copy
12
+ # @see https://www.w3.org/TR/sparql11-update/#copy
13
13
  class Copy < Operator
14
14
  include SPARQL::Algebra::Update
15
15
 
@@ -28,8 +28,8 @@ module SPARQL; module Algebra
28
28
  # Returns queryable.
29
29
  # @raise [IOError]
30
30
  # If `from` does not exist, unless the `silent` operator is present
31
- # @see http://www.w3.org/TR/sparql11-update/
32
- def execute(queryable, options = {})
31
+ # @see https://www.w3.org/TR/sparql11-update/
32
+ def execute(queryable, **options)
33
33
  debug(options) {"Copy"}
34
34
  silent = operands.first == :silent
35
35
  operands.shift if silent
@@ -6,11 +6,11 @@ module SPARQL; module Algebra
6
6
  # @example
7
7
  # (prefix ((: <http://www.example.org>))
8
8
  # (project (?C)
9
- # (extend ((?C ?.0))
10
- # (group () ((?.0 (count ?O)))
9
+ # (extend ((?C ??.0))
10
+ # (group () ((??.0 (count ?O)))
11
11
  # (bgp (triple ?S ?P ?O))))))
12
12
  #
13
- # @see http://www.w3.org/TR/sparql11-query/#defn_aggCount
13
+ # @see https://www.w3.org/TR/sparql11-query/#defn_aggCount
14
14
  class Count < Operator
15
15
  include Aggregate
16
16
 
@@ -11,7 +11,7 @@ module SPARQL; module Algebra
11
11
  # @example
12
12
  # (create silent <graph>)
13
13
  #
14
- # @see http://www.w3.org/TR/sparql11-update/#create
14
+ # @see https://www.w3.org/TR/sparql11-update/#create
15
15
  class Create < Operator
16
16
  include SPARQL::Algebra::Update
17
17
 
@@ -30,8 +30,8 @@ module SPARQL; module Algebra
30
30
  # Returns queryable.
31
31
  # @raise [IOError]
32
32
  # If `from` does not exist, unless the `silent` operator is present
33
- # @see http://www.w3.org/TR/sparql11-update/
34
- def execute(queryable, options = {})
33
+ # @see https://www.w3.org/TR/sparql11-update/
34
+ def execute(queryable, **options)
35
35
  debug(options) {"Create"}
36
36
  silent = operands.first == :silent
37
37
  operands.shift if silent
@@ -102,7 +102,7 @@ module SPARQL; module Algebra
102
102
  # (graph ?g (bgp (triple ?s ?p ?o))))))
103
103
  #
104
104
  # @example Dataset with multiple named graphs
105
- # @see http://www.w3.org/TR/sparql11-query/#specifyingDataset
105
+ # @see https://www.w3.org/TR/sparql11-query/#specifyingDataset
106
106
  class Dataset < Binary
107
107
  include Query
108
108
 
@@ -125,8 +125,8 @@ module SPARQL; module Algebra
125
125
  # @yieldreturn [void] ignored
126
126
  # @return [RDF::Query::Solutions]
127
127
  # the resulting solution sequence
128
- # @see http://www.w3.org/TR/sparql11-query/#sparqlAlgebra
129
- def execute(queryable, options = {}, &base)
128
+ # @see https://www.w3.org/TR/sparql11-query/#sparqlAlgebra
129
+ def execute(queryable, **options, &base)
130
130
  debug(options) {"Dataset"}
131
131
  default_datasets = []
132
132
  named_datasets = []
@@ -144,7 +144,7 @@ module SPARQL; module Algebra
144
144
  load_opts = {debug: options.fetch(:debug, nil), graph_name: uri, base_uri: uri}
145
145
  unless queryable.has_graph?(uri)
146
146
  debug(options) {"=> load #{uri}"}
147
- queryable.load(uri.to_s, load_opts)
147
+ queryable.load(uri.to_s, **load_opts)
148
148
  end
149
149
  end
150
150
  debug(options) {
@@ -156,18 +156,7 @@ module SPARQL; module Algebra
156
156
  aggregate = RDF::AggregateRepo.new(queryable)
157
157
  named_datasets.each {|name| aggregate.named(name) if queryable.has_graph?(name)}
158
158
  aggregate.default(*default_datasets.select {|name| queryable.has_graph?(name)})
159
- aggregate.query(operands.last, options.merge(depth: options[:depth].to_i + 1), &base)
160
- end
161
-
162
- ##
163
- # Returns an optimized version of this query.
164
- #
165
- # If optimize operands, and if the first two operands are both Queries, replace
166
- # with the unique sum of the query elements
167
- #
168
- # @return [Union, RDF::Query] `self`
169
- def optimize
170
- operands.last.optimize
159
+ aggregate.query(operands.last, depth: options[:depth].to_i + 1, **options, &base)
171
160
  end
172
161
  end # Dataset
173
162
  end # Operator
@@ -11,7 +11,7 @@ module SPARQL; module Algebra
11
11
  # (filter (= (datatype (xsd:double ?v)) xsd:double)
12
12
  # (bgp (triple ?s :p ?v)))))
13
13
  #
14
- # @see http://www.w3.org/TR/sparql11-query/#func-datatype
14
+ # @see https://www.w3.org/TR/sparql11-query/#func-datatype
15
15
  class Datatype < Operator::Unary
16
16
  include Evaluatable
17
17
 
@@ -9,7 +9,7 @@ module SPARQL; module Algebra
9
9
  # (extend ((?x (day ?date)))
10
10
  # (bgp (triple ?s :date ?date)))))
11
11
  #
12
- # @see http://www.w3.org/TR/sparql11-query/#func-day
12
+ # @see https://www.w3.org/TR/sparql11-query/#func-day
13
13
  class Day < Operator::Unary
14
14
  include Evaluatable
15
15
 
@@ -9,7 +9,7 @@ module SPARQL; module Algebra
9
9
  # @example
10
10
  # (delete ((triple ?s ?p ?o))))
11
11
  #
12
- # @see http://www.w3.org/TR/sparql11-update/#delete
12
+ # @see https://www.w3.org/TR/sparql11-update/#delete
13
13
  class Delete < Operator::Unary
14
14
  include SPARQL::Algebra::Update
15
15
 
@@ -20,8 +20,8 @@ module SPARQL; module Algebra
20
20
  #
21
21
  # @param [RDF::Queryable] queryable
22
22
  # the graph or repository to write
23
- # @param [RDF::Query::Solution] solution
24
- # Solution to map to patterns for this operation
23
+ # @param [RDF::Query::Solutions] solutions
24
+ # Solutions to map to patterns for this operation
25
25
  # @param [Hash{Symbol => Object}] options
26
26
  # any additional keyword options
27
27
  # @option options [Boolean] debug
@@ -30,9 +30,11 @@ module SPARQL; module Algebra
30
30
  # Returns queryable.
31
31
  # @raise [IOError]
32
32
  # If `from` does not exist, unless the `silent` operator is present
33
- # @see http://www.w3.org/TR/sparql11-update/
34
- def execute(queryable, solution, options = {})
33
+ # @see https://www.w3.org/TR/sparql11-update/
34
+ def execute(queryable, solutions: nil, **options)
35
35
  debug(options) {"Delete: #{solution} against #{operands.to_sse}"}
36
+ # Only binds the first solution
37
+ solution = solutions.is_a?(RDF::Query::Solutions) ? solutions.first : solutions
36
38
  # Operands are an array of patterns and Queries (when named).
37
39
  # Create a new query made up all patterns
38
40
  patterns = operand.inject([]) do |memo, op|
@@ -9,7 +9,7 @@ module SPARQL; module Algebra
9
9
  # @example
10
10
  # (deleteData ((triple :a foaf:knows :c)))
11
11
  #
12
- # @see http://www.w3.org/TR/sparql11-update/#deleteData
12
+ # @see https://www.w3.org/TR/sparql11-update/#deleteData
13
13
  class DeleteData < Operator::Unary
14
14
  include SPARQL::Algebra::Update
15
15
 
@@ -28,8 +28,8 @@ module SPARQL; module Algebra
28
28
  # Returns queryable.
29
29
  # @raise [IOError]
30
30
  # If `from` does not exist, unless the `silent` operator is present
31
- # @see http://www.w3.org/TR/sparql11-update/
32
- def execute(queryable, options = {})
31
+ # @see https://www.w3.org/TR/sparql11-update/
32
+ def execute(queryable, **options)
33
33
  operand.each do |op|
34
34
  debug(options) {"DeleteData #{op.to_sxp}"}
35
35
  queryable.delete(op)
@@ -9,7 +9,7 @@ module SPARQL; module Algebra
9
9
  # @example
10
10
  # (deleteWhere ((triple :a foaf:knows ?b))
11
11
  #
12
- # @see http://www.w3.org/TR/sparql11-update/#deleteWhere
12
+ # @see https://www.w3.org/TR/sparql11-update/#deleteWhere
13
13
  class DeleteWhere < Operator::Unary
14
14
  include SPARQL::Algebra::Update
15
15
 
@@ -28,8 +28,8 @@ module SPARQL; module Algebra
28
28
  # Returns queryable.
29
29
  # @raise [IOError]
30
30
  # If `from` does not exist, unless the `silent` operator is present
31
- # @see http://www.w3.org/TR/sparql11-update/
32
- def execute(queryable, options = {})
31
+ # @see https://www.w3.org/TR/sparql11-update/
32
+ def execute(queryable, **options)
33
33
  # Operands are an array of patterns and Queries (when named).
34
34
  # Create a new query made up all patterns
35
35
  patterns = operand.inject([]) do |memo, op|
@@ -40,9 +40,9 @@ module SPARQL; module Algebra
40
40
  end
41
41
  memo
42
42
  end
43
- query = RDF::Query.new(*patterns, {}) # FIXME: added hash argument needed until Statement#to_hash removed.
43
+ query = RDF::Query.new(*patterns, **{}) # FIXME: added hash argument needed until Statement#to_hash removed.
44
44
  debug(options) {"DeleteWhere query #{query.to_sse}"}
45
- query.execute(queryable, options.merge(depth: options[:depth].to_i + 1)) do |solution|
45
+ query.execute(queryable, depth: options[:depth].to_i + 1, **options) do |solution|
46
46
  debug(options) {"DeleteWhere solution #{solution.to_sse}"}
47
47
  query.each_statement do |pattern|
48
48
  pattern = pattern.dup.bind(solution)
@@ -9,7 +9,7 @@ module SPARQL; module Algebra
9
9
  # (order ((desc ?name))
10
10
  # (bgp (triple ?x foaf:name ?name)))))
11
11
  #
12
- # @see http://www.w3.org/TR/sparql11-query/#modOrderBy
12
+ # @see https://www.w3.org/TR/sparql11-query/#modOrderBy
13
13
  class Desc < Operator::Asc
14
14
  NAME = :desc
15
15
  end # Desc
@@ -10,7 +10,7 @@ module SPARQL; module Algebra
10
10
  # (describe (?x)
11
11
  # (bgp (triple ?x exOrg:employeeId "1234"))))
12
12
  #
13
- # @see http://www.w3.org/TR/sparql11-query/#describe
13
+ # @see https://www.w3.org/TR/sparql11-query/#describe
14
14
  class Describe < Operator::Binary
15
15
  include Query
16
16
 
@@ -39,8 +39,8 @@ module SPARQL; module Algebra
39
39
  # @yieldreturn [void] ignored
40
40
  # @return [RDF::Graph]
41
41
  # containing the constructed triples
42
- # @see http://www.w3.org/TR/sparql11-query/#describe
43
- def execute(queryable, options = {}, &block)
42
+ # @see https://www.w3.org/TR/sparql11-query/#describe
43
+ def execute(queryable, **options, &block)
44
44
  debug(options) {"Describe #{operands.first}, #{options.inspect}"}
45
45
 
46
46
  # Describe any constand URIs
@@ -60,16 +60,6 @@ module SPARQL; module Algebra
60
60
  # Return Concise Bounded Description
61
61
  queryable.concise_bounded_description(*to_describe.uniq, &block)
62
62
  end
63
-
64
- ##
65
- # Returns an optimized version of this query.
66
- #
67
- # Return optimized query
68
- #
69
- # @return [Union, RDF::Query] `self`
70
- def optimize
71
- operands = operands.map(&:optimize)
72
- end
73
63
 
74
64
  # Query results statements (e.g., CONSTRUCT, DESCRIBE, CREATE)
75
65
  # @return [Boolean]
@@ -10,7 +10,7 @@ module SPARQL; module Algebra
10
10
  # (project (?v)
11
11
  # (bgp (triple ?x ?p ?v)))))
12
12
  #
13
- # @see http://www.w3.org/TR/sparql11-query/#sparqlDistinct
13
+ # @see https://www.w3.org/TR/sparql11-query/#sparqlDistinct
14
14
  class Distinct < Operator::Unary
15
15
  include Query
16
16
 
@@ -30,22 +30,12 @@ module SPARQL; module Algebra
30
30
  # @yieldreturn [void] ignored
31
31
  # @return [RDF::Query::Solutions]
32
32
  # the resulting solution sequence
33
- # @see http://www.w3.org/TR/sparql11-query/#sparqlAlgebra
34
- def execute(queryable, options = {}, &block)
35
- @solutions = queryable.query(operands.last, options.merge(depth: options[:depth].to_i + 1)).distinct
33
+ # @see https://www.w3.org/TR/sparql11-query/#sparqlAlgebra
34
+ def execute(queryable, **options, &block)
35
+ @solutions = queryable.query(operands.last, depth: options[:depth].to_i + 1, **options).distinct
36
36
  @solutions.each(&block) if block_given?
37
37
  @solutions
38
38
  end
39
-
40
- ##
41
- # Returns an optimized version of this query.
42
- #
43
- # Return optimized query
44
- #
45
- # @return [Union, RDF::Query] `self`
46
- def optimize
47
- operands = operands.map(&:optimize)
48
- end
49
39
  end # Distinct
50
40
  end # Operator
51
41
  end; end # SPARQL::Algebra
@@ -6,7 +6,7 @@ module SPARQL; module Algebra
6
6
  # @example
7
7
  # (/ 4 2)
8
8
  #
9
- # @see http://www.w3.org/TR/xpath-functions/#func-numeric-divide
9
+ # @see https://www.w3.org/TR/xpath-functions/#func-numeric-divide
10
10
  class Divide < Operator::Binary
11
11
  include Evaluatable
12
12