sparql 3.2.0 → 3.2.4

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 (92) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +59 -38
  3. data/VERSION +1 -1
  4. data/bin/sparql +2 -31
  5. data/lib/rack/sparql/conneg.rb +22 -1
  6. data/lib/sinatra/sparql/extensions.rb +1 -1
  7. data/lib/sinatra/sparql.rb +57 -12
  8. data/lib/sparql/algebra/expression.rb +63 -10
  9. data/lib/sparql/algebra/extensions.rb +39 -35
  10. data/lib/sparql/algebra/operator/abs.rb +1 -1
  11. data/lib/sparql/algebra/operator/adjust.rb +69 -0
  12. data/lib/sparql/algebra/operator/alt.rb +1 -1
  13. data/lib/sparql/algebra/operator/avg.rb +3 -1
  14. data/lib/sparql/algebra/operator/bgp.rb +9 -1
  15. data/lib/sparql/algebra/operator/clear.rb +13 -3
  16. data/lib/sparql/algebra/operator/construct.rb +1 -1
  17. data/lib/sparql/algebra/operator/count.rb +36 -6
  18. data/lib/sparql/algebra/operator/create.rb +5 -4
  19. data/lib/sparql/algebra/operator/dataset.rb +29 -11
  20. data/lib/sparql/algebra/operator/day.rb +2 -2
  21. data/lib/sparql/algebra/operator/delete.rb +3 -1
  22. data/lib/sparql/algebra/operator/delete_data.rb +1 -1
  23. data/lib/sparql/algebra/operator/delete_where.rb +1 -1
  24. data/lib/sparql/algebra/operator/distinct.rb +2 -2
  25. data/lib/sparql/algebra/operator/divide.rb +1 -1
  26. data/lib/sparql/algebra/operator/drop.rb +15 -6
  27. data/lib/sparql/algebra/operator/encode_for_uri.rb +2 -4
  28. data/lib/sparql/algebra/operator/exprlist.rb +3 -1
  29. data/lib/sparql/algebra/operator/extend.rb +73 -5
  30. data/lib/sparql/algebra/operator/filter.rb +6 -1
  31. data/lib/sparql/algebra/operator/function_call.rb +64 -0
  32. data/lib/sparql/algebra/operator/graph.rb +57 -7
  33. data/lib/sparql/algebra/operator/group.rb +105 -6
  34. data/lib/sparql/algebra/operator/group_concat.rb +25 -1
  35. data/lib/sparql/algebra/operator/hours.rb +2 -2
  36. data/lib/sparql/algebra/operator/if.rb +10 -10
  37. data/lib/sparql/algebra/operator/insert.rb +3 -1
  38. data/lib/sparql/algebra/operator/insert_data.rb +1 -1
  39. data/lib/sparql/algebra/operator/is_blank.rb +1 -2
  40. data/lib/sparql/algebra/operator/is_iri.rb +1 -2
  41. data/lib/sparql/algebra/operator/is_literal.rb +1 -2
  42. data/lib/sparql/algebra/operator/is_numeric.rb +1 -2
  43. data/lib/sparql/algebra/operator/join.rb +39 -5
  44. data/lib/sparql/algebra/operator/lcase.rb +2 -3
  45. data/lib/sparql/algebra/operator/left_join.rb +27 -9
  46. data/lib/sparql/algebra/operator/max.rb +3 -1
  47. data/lib/sparql/algebra/operator/min.rb +4 -2
  48. data/lib/sparql/algebra/operator/minus.rb +46 -6
  49. data/lib/sparql/algebra/operator/minutes.rb +2 -2
  50. data/lib/sparql/algebra/operator/modify.rb +21 -0
  51. data/lib/sparql/algebra/operator/month.rb +2 -2
  52. data/lib/sparql/algebra/operator/multiply.rb +1 -1
  53. data/lib/sparql/algebra/operator/notoneof.rb +12 -3
  54. data/lib/sparql/algebra/operator/order.rb +44 -0
  55. data/lib/sparql/algebra/operator/path_opt.rb +9 -65
  56. data/lib/sparql/algebra/operator/path_plus.rb +18 -10
  57. data/lib/sparql/algebra/operator/path_range.rb +178 -0
  58. data/lib/sparql/algebra/operator/path_star.rb +7 -4
  59. data/lib/sparql/algebra/operator/path_zero.rb +110 -0
  60. data/lib/sparql/algebra/operator/plus.rb +8 -6
  61. data/lib/sparql/algebra/operator/project.rb +64 -5
  62. data/lib/sparql/algebra/operator/reduced.rb +3 -3
  63. data/lib/sparql/algebra/operator/regex.rb +1 -1
  64. data/lib/sparql/algebra/operator/reverse.rb +12 -1
  65. data/lib/sparql/algebra/operator/sample.rb +3 -1
  66. data/lib/sparql/algebra/operator/seconds.rb +2 -2
  67. data/lib/sparql/algebra/operator/seq.rb +4 -4
  68. data/lib/sparql/algebra/operator/sequence.rb +14 -1
  69. data/lib/sparql/algebra/operator/service.rb +86 -0
  70. data/lib/sparql/algebra/operator/strlang.rb +1 -2
  71. data/lib/sparql/algebra/operator/subtract.rb +10 -6
  72. data/lib/sparql/algebra/operator/sum.rb +9 -7
  73. data/lib/sparql/algebra/operator/table.rb +50 -7
  74. data/lib/sparql/algebra/operator/timezone.rb +2 -2
  75. data/lib/sparql/algebra/operator/triple.rb +51 -0
  76. data/lib/sparql/algebra/operator/tz.rb +2 -2
  77. data/lib/sparql/algebra/operator/ucase.rb +1 -1
  78. data/lib/sparql/algebra/operator/update.rb +22 -1
  79. data/lib/sparql/algebra/operator/using.rb +18 -1
  80. data/lib/sparql/algebra/operator/with.rb +1 -1
  81. data/lib/sparql/algebra/operator/year.rb +2 -2
  82. data/lib/sparql/algebra/operator.rb +69 -22
  83. data/lib/sparql/algebra/query.rb +5 -3
  84. data/lib/sparql/algebra.rb +42 -6
  85. data/lib/sparql/grammar/meta.rb +1367 -267
  86. data/lib/sparql/grammar/parser11.rb +842 -331
  87. data/lib/sparql/grammar/terminals11.rb +2 -2
  88. data/lib/sparql/grammar.rb +6 -4
  89. data/lib/sparql/results.rb +3 -2
  90. data/lib/sparql/server.rb +93 -0
  91. data/lib/sparql.rb +8 -5
  92. metadata +49 -13
@@ -55,12 +55,14 @@ module SPARQL; module Algebra
55
55
  autoload :Timezone, 'sparql/algebra/operator/timezone'
56
56
  autoload :TZ, 'sparql/algebra/operator/tz'
57
57
  autoload :Year, 'sparql/algebra/operator/year'
58
+ autoload :Triple, 'sparql/algebra/operator/triple'
58
59
  autoload :IsTriple, 'sparql/algebra/operator/is_triple'
59
60
  autoload :Subject, 'sparql/algebra/operator/subject'
60
61
  autoload :Predicate, 'sparql/algebra/operator/predicate'
61
62
  autoload :Object, 'sparql/algebra/operator/object'
62
63
 
63
64
  # Binary operators
65
+ autoload :Adjust, 'sparql/algebra/operator/adjust'
64
66
  autoload :And, 'sparql/algebra/operator/and'
65
67
  autoload :Compare, 'sparql/algebra/operator/compare'
66
68
  autoload :Concat, 'sparql/algebra/operator/concat'
@@ -95,7 +97,9 @@ module SPARQL; module Algebra
95
97
  autoload :NotOneOf, 'sparql/algebra/operator/notoneof'
96
98
  autoload :PathOpt, 'sparql/algebra/operator/path_opt'
97
99
  autoload :PathPlus, 'sparql/algebra/operator/path_plus'
100
+ autoload :PathRange, 'sparql/algebra/operator/path_range'
98
101
  autoload :PathStar, 'sparql/algebra/operator/path_star'
102
+ autoload :PathZero, 'sparql/algebra/operator/path_zero'
99
103
  autoload :Path, 'sparql/algebra/operator/path'
100
104
  autoload :Reverse, 'sparql/algebra/operator/reverse'
101
105
  autoload :Seq, 'sparql/algebra/operator/seq'
@@ -106,6 +110,7 @@ module SPARQL; module Algebra
106
110
  autoload :Coalesce, 'sparql/algebra/operator/coalesce'
107
111
  autoload :Desc, 'sparql/algebra/operator/desc'
108
112
  autoload :Exprlist, 'sparql/algebra/operator/exprlist'
113
+ autoload :FunctionCall, 'sparql/algebra/operator/function_call'
109
114
  autoload :GroupConcat, 'sparql/algebra/operator/group_concat'
110
115
  autoload :In, 'sparql/algebra/operator/in'
111
116
  autoload :NotIn, 'sparql/algebra/operator/notin'
@@ -129,6 +134,7 @@ module SPARQL; module Algebra
129
134
  autoload :Prefix, 'sparql/algebra/operator/prefix'
130
135
  autoload :Project, 'sparql/algebra/operator/project'
131
136
  autoload :Reduced, 'sparql/algebra/operator/reduced'
137
+ autoload :Service, 'sparql/algebra/operator/service'
132
138
  autoload :Slice, 'sparql/algebra/operator/slice'
133
139
  autoload :Table, 'sparql/algebra/operator/table'
134
140
  autoload :Union, 'sparql/algebra/operator/union'
@@ -172,6 +178,7 @@ module SPARQL; module Algebra
172
178
  when :> then GreaterThan
173
179
  when :>= then GreaterThanOrEqual
174
180
  when :abs then Abs
181
+ when :adjust then Adjust
175
182
  when :alt then Alt
176
183
  when :and, :'&&' then And
177
184
  when :avg then Avg
@@ -214,9 +221,11 @@ module SPARQL; module Algebra
214
221
  when :now then Now
215
222
  when :or, :'||' then Or
216
223
  when :path then Path
224
+ when :path0 then PathZero
217
225
  when :path? then PathOpt
218
- when :"path*" then PathStar
219
226
  when :"path+" then PathPlus
227
+ when :"path*" then PathStar
228
+ when :pathrange then PathRange
220
229
  when :plus then Plus
221
230
  when :rand then Rand
222
231
  when :regex then Regex
@@ -228,6 +237,7 @@ module SPARQL; module Algebra
228
237
  when :seconds then Seconds
229
238
  when :seq then Seq
230
239
  when :sequence then Sequence
240
+ when :service then Service
231
241
  when :sha1 then SHA1
232
242
  when :sha256 then SHA256
233
243
  when :sha384 then SHA384
@@ -254,6 +264,7 @@ module SPARQL; module Algebra
254
264
  when :asc then Asc
255
265
  when :desc then Desc
256
266
  when :exprlist then Exprlist
267
+ when :function_call then FunctionCall
257
268
 
258
269
  # Datasets
259
270
  when :dataset then Dataset
@@ -300,7 +311,9 @@ module SPARQL; module Algebra
300
311
 
301
312
  # RDF-star
302
313
  when :istriple then IsTriple
303
- when :triple then RDF::Query::Pattern
314
+ when :triple then Triple
315
+ when :qtriple then RDF::Query::Pattern
316
+ when :quad then RDF::Query::Pattern
304
317
  when :subject then Subject
305
318
  when :predicate then Predicate
306
319
  when :object then Object
@@ -336,31 +349,41 @@ module SPARQL; module Algebra
336
349
  # Generate a top-level Grammar, using collected options
337
350
  #
338
351
  # @param [String] content
339
- # @param [Hash{Symbol => Operator}] extensions
340
- # Variable bindings
352
+ # @param [Operator] datasets ([])
341
353
  # @param [Operator] distinct (false)
354
+ # @param [Hash{String => Operator}] extensions
355
+ # Variable bindings
342
356
  # @param [Array<Operator>] filter_ops ([])
343
357
  # Filter Operations
344
358
  # @param [Integer] limit (nil)
345
359
  # @param [Array<Operator>] group_ops ([])
360
+ # @param [Array<Operator>] having_ops ([])
346
361
  # @param [Integer] offset (nil)
347
362
  # @param [Array<Operator>] order_ops ([])
348
363
  # Order Operations
349
364
  # @param [Array<Symbol,Operator>] project (%i(*))
350
365
  # Terms to project
351
366
  # @param [Operator] reduced (false)
367
+ # @param [Operator] values_clause (nil)
368
+ # Top-level Values clause
369
+ # @param [Operator] where_clause (true)
370
+ # Emit 'WHERE' before GroupGraphPattern
352
371
  # @param [Hash{Symbol => Object}] options
353
372
  # @return [String]
354
373
  def self.to_sparql(content,
374
+ datasets: [],
355
375
  distinct: false,
356
376
  extensions: {},
357
377
  filter_ops: [],
358
378
  group_ops: [],
379
+ having_ops: [],
359
380
  limit: nil,
360
381
  offset: nil,
361
382
  order_ops: [],
362
383
  project: %i(*),
363
384
  reduced: false,
385
+ values_clause: nil,
386
+ where_clause: true,
364
387
  **options)
365
388
  str = ""
366
389
 
@@ -371,29 +394,41 @@ module SPARQL; module Algebra
371
394
  str << "REDUCED " if reduced
372
395
 
373
396
  str << project.map do |p|
374
- if expr = extensions.delete(p)
397
+ if expr = extensions.delete(p.to_s)
398
+ v = expr.to_sparql(**options)
399
+ pp = RDF::Query::Variable.new(p).to_sparql(**options)
375
400
  # Replace projected variables with their extension, if any
376
- "(" + [expr, :AS, p].to_sparql(**options) + ")"
401
+ '(' + v + ' AS ' + pp + ')'
377
402
  else
378
403
  p.to_sparql(**options)
379
404
  end
380
405
  end.join(" ") + "\n"
381
406
  end
382
407
 
383
- # Extensions
408
+ # DatasetClause
409
+ datasets.each do |ds|
410
+ str << "FROM #{ds.to_sparql(**options)}\n"
411
+ end
412
+
413
+ # Bind
384
414
  extensions.each do |as, expression|
385
- content << "\nBIND (#{expression.to_sparql(**options)} AS #{as.to_sparql(**options)}) ."
415
+ v = expression.to_sparql(**options)
416
+ pp = RDF::Query::Variable.new(as).to_sparql(**options)
417
+ content << "\nBIND (" << v << " AS " << pp << ") ."
386
418
  end
387
419
 
388
- # Filters
420
+ # Filter
389
421
  filter_ops.each do |f|
390
- content << "\nFILTER #{f.to_sparql(**options)} ."
422
+ content << "\nFILTER (#{f.to_sparql(**options)}) ."
391
423
  end
392
424
 
393
- # Where clause
394
- str << "WHERE {\n#{content}\n}\n"
425
+ # WhereClause / GroupGraphPattern
426
+ str << (where_clause ? "WHERE {\n#{content}\n}\n" : "{\n#{content}\n}\n")
395
427
 
396
- # Group
428
+ ##
429
+ # SolutionModifier
430
+ #
431
+ # GroupClause
397
432
  unless group_ops.empty?
398
433
  ops = group_ops.map do |o|
399
434
  # Replace projected variables with their extension, if any
@@ -404,14 +439,22 @@ module SPARQL; module Algebra
404
439
  str << "GROUP BY #{ops.join(' ')}\n"
405
440
  end
406
441
 
407
- # Order
442
+ # HavingClause
443
+ unless having_ops.empty?
444
+ str << "HAVING #{having_ops.to_sparql(**options)}"
445
+ end
446
+
447
+ # OrderClause
408
448
  unless order_ops.empty?
409
449
  str << "ORDER BY #{order_ops.to_sparql(**options)}\n"
410
450
  end
411
451
 
412
- # Offset and Limmit
452
+ # LimitOffsetClauses
413
453
  str << "OFFSET #{offset}\n" unless offset.nil?
414
454
  str << "LIMIT #{limit}\n" unless limit.nil?
455
+
456
+ # Values Clause
457
+ str << values_clause.to_sparql(top_level: false, **options) if values_clause
415
458
  str
416
459
  end
417
460
 
@@ -640,12 +683,8 @@ module SPARQL; module Algebra
640
683
  # @return [SPARQL::Algebra::Expression] `self`
641
684
  def rewrite(&block)
642
685
  @operands = @operands.map do |op|
643
- # Rewrite the operand
644
- unless new_op = block.call(op)
645
- # Not re-written, rewrite
646
- new_op = op.respond_to?(:rewrite) ? op.rewrite(&block) : op
647
- end
648
- new_op
686
+ new_op = block.call(op)
687
+ new_op.respond_to?(:rewrite) ? new_op.rewrite(&block) : new_op
649
688
  end
650
689
  self
651
690
  end
@@ -671,7 +710,6 @@ module SPARQL; module Algebra
671
710
  end
672
711
 
673
712
  ##
674
- #
675
713
  # Returns a partial SPARQL grammar for the operator.
676
714
  #
677
715
  # @return [String]
@@ -765,6 +803,15 @@ module SPARQL; module Algebra
765
803
  operands.each {|op| op.validate! if op.respond_to?(:validate!)}
766
804
  self
767
805
  end
806
+
807
+ ##
808
+ # The variables used in this query.
809
+ #
810
+ # @return [Hash{Symbol => RDF::Query::Variable}]
811
+ def variables
812
+ operands.inject({}) {|hash, o| o.respond_to?(:variables) ? hash.merge(o.variables) : hash}
813
+ end
814
+
768
815
  protected
769
816
 
770
817
  ##
@@ -16,13 +16,13 @@ module SPARQL; module Algebra
16
16
  @operands.unshift(query)
17
17
  self
18
18
  end
19
-
19
+
20
20
  ##
21
21
  # The variables used in this query.
22
22
  #
23
23
  # @return [Hash{Symbol => RDF::Query::Variable}]
24
24
  def variables
25
- operands.inject({}) {|hash, o| o.executable? ? hash.merge(o.variables) : hash}
25
+ operands.inject({}) {|hash, o| o.respond_to?(:variables) ? hash.merge(o.variables) : hash}
26
26
  end
27
27
 
28
28
  ##
@@ -38,7 +38,9 @@ module SPARQL; module Algebra
38
38
  # the graph or repository to query
39
39
  # @param [Hash{Symbol => Object}] options
40
40
  # any additional keyword options
41
- # @option options [Boolean] debug
41
+ # @option options [RDF::Query::Solution] :bindings
42
+ # a query solution containing zero or more variable bindings
43
+ # @option options [Boolean] :debug
42
44
  # Query execution debugging
43
45
  # @option options [RDF::Term, RDF::Query::Variable] :graph_name
44
46
  # @yield [solution]
@@ -19,6 +19,24 @@ module SPARQL
19
19
  #
20
20
  # {RDF::Query} and {RDF::Query::Pattern} are used as primitives for `bgp` and `triple` expressions.
21
21
  #
22
+ # # Background
23
+ #
24
+ # The SPARQL Algebra, and the S-Expressions used to represent it, are based on those of [Jena](https://jena.apache.org/documentation/notes/sse.html). Generally, an S-Expression generated by this Gem can be used as an SSE input to Jena, or an SSE output from Jena can also be used as input to this Gem.
25
+ #
26
+ # S-Expressions generally follow a standardized nesting resulting from parsing the original SPARQL Grammar. The individual operators map to SPARQL Grammar productions, and in most cases, the SPARQL Grammar can be reproduced by turning the S-Expression back into SPARQL (see {SPARQL::Algebra::Operator#to_sparql}). The order of operations will typically be as follows:
27
+ #
28
+ # * {SPARQL::Algebra::Operator::Base}
29
+ # * {SPARQL::Algebra::Operator::Prefix}
30
+ # * {SPARQL::Algebra::Operator::Slice}
31
+ # * {SPARQL::Algebra::Operator::Distinct}
32
+ # * {SPARQL::Algebra::Operator::Reduced}
33
+ # * {SPARQL::Algebra::Operator::Project}
34
+ # * {SPARQL::Algebra::Operator::Order}
35
+ # * {SPARQL::Algebra::Operator::Filter}
36
+ # * {SPARQL::Algebra::Operator::Extend}
37
+ # * {SPARQL::Algebra::Operator::Group}
38
+ # * {SPARQL::Algebra::Query} (many classes implement Query)
39
+ #
22
40
  # # Queries
23
41
  #
24
42
  # require 'sparql/algebra'
@@ -215,7 +233,7 @@ module SPARQL
215
233
  # scarcity.
216
234
  #
217
235
  # [memoization]: http://en.wikipedia.org/wiki/Memoization
218
- # [RDF::Util::Cache]: http://www.rubydoc.info/github/ruby-rdf/rdf/RDF/Util/Cache
236
+ # [RDF::Util::Cache]: https://ruby-rdf.github.io/rdf/RDF/Util/Cache
219
237
  #
220
238
  # ## Documentation
221
239
  #
@@ -228,12 +246,15 @@ module SPARQL
228
246
  # * {SPARQL::Algebra::Operator}
229
247
  # * {SPARQL::Algebra::Operator::Abs}
230
248
  # * {SPARQL::Algebra::Operator::Add}
249
+ # * {SPARQL::Algebra::Operator::Adjust}
250
+ # * {SPARQL::Algebra::Operator::Alt}
231
251
  # * {SPARQL::Algebra::Operator::And}
232
252
  # * {SPARQL::Algebra::Operator::Asc}
233
253
  # * {SPARQL::Algebra::Operator::Ask}
234
254
  # * {SPARQL::Algebra::Operator::Avg}
235
255
  # * {SPARQL::Algebra::Operator::Base}
236
256
  # * {SPARQL::Algebra::Operator::BGP}
257
+ # * {SPARQL::Algebra::Operator::Bnode}
237
258
  # * {SPARQL::Algebra::Operator::Bound}
238
259
  # * {SPARQL::Algebra::Operator::Ceil}
239
260
  # * {SPARQL::Algebra::Operator::Clear}
@@ -248,9 +269,9 @@ module SPARQL
248
269
  # * {SPARQL::Algebra::Operator::Dataset}
249
270
  # * {SPARQL::Algebra::Operator::Datatype}
250
271
  # * {SPARQL::Algebra::Operator::Day}
251
- # * {SPARQL::Algebra::Operator::Delete}
252
272
  # * {SPARQL::Algebra::Operator::DeleteData}
253
273
  # * {SPARQL::Algebra::Operator::DeleteWhere}
274
+ # * {SPARQL::Algebra::Operator::Delete}
254
275
  # * {SPARQL::Algebra::Operator::Desc}
255
276
  # * {SPARQL::Algebra::Operator::Describe}
256
277
  # * {SPARQL::Algebra::Operator::Distinct}
@@ -258,10 +279,12 @@ module SPARQL
258
279
  # * {SPARQL::Algebra::Operator::Drop}
259
280
  # * {SPARQL::Algebra::Operator::EncodeForURI}
260
281
  # * {SPARQL::Algebra::Operator::Equal}
282
+ # * {SPARQL::Algebra::Operator::Exists}
261
283
  # * {SPARQL::Algebra::Operator::Exprlist}
262
284
  # * {SPARQL::Algebra::Operator::Extend}
263
285
  # * {SPARQL::Algebra::Operator::Filter}
264
286
  # * {SPARQL::Algebra::Operator::Floor}
287
+ # * {SPARQL::Algebra::Operator::FunctionCall}
265
288
  # * {SPARQL::Algebra::Operator::Graph}
266
289
  # * {SPARQL::Algebra::Operator::GreaterThan}
267
290
  # * {SPARQL::Algebra::Operator::GreaterThanOrEqual}
@@ -277,9 +300,11 @@ module SPARQL
277
300
  # * {SPARQL::Algebra::Operator::IsIRI}
278
301
  # * {SPARQL::Algebra::Operator::IsLiteral}
279
302
  # * {SPARQL::Algebra::Operator::IsNumeric}
303
+ # * {SPARQL::Algebra::Operator::IsTriple}
280
304
  # * {SPARQL::Algebra::Operator::Join}
281
305
  # * {SPARQL::Algebra::Operator::Lang}
282
306
  # * {SPARQL::Algebra::Operator::LangMatches}
307
+ # * {SPARQL::Algebra::Operator::LCase}
283
308
  # * {SPARQL::Algebra::Operator::LeftJoin}
284
309
  # * {SPARQL::Algebra::Operator::LessThan}
285
310
  # * {SPARQL::Algebra::Operator::LessThanOrEqual}
@@ -297,20 +322,32 @@ module SPARQL
297
322
  # * {SPARQL::Algebra::Operator::NotEqual}
298
323
  # * {SPARQL::Algebra::Operator::NotExists}
299
324
  # * {SPARQL::Algebra::Operator::NotIn}
325
+ # * {SPARQL::Algebra::Operator::NotOneOf}
300
326
  # * {SPARQL::Algebra::Operator::Now}
327
+ # * {SPARQL::Algebra::Operator::Object}
301
328
  # * {SPARQL::Algebra::Operator::Or}
302
329
  # * {SPARQL::Algebra::Operator::Order}
330
+ # * {SPARQL::Algebra::Operator::Path}
331
+ # * {SPARQL::Algebra::Operator::PathOpt}
332
+ # * {SPARQL::Algebra::Operator::PathPlus}
333
+ # * {SPARQL::Algebra::Operator::PathRange}
334
+ # * {SPARQL::Algebra::Operator::PathStar}
335
+ # * {SPARQL::Algebra::Operator::PathZero}
303
336
  # * {SPARQL::Algebra::Operator::Plus}
337
+ # * {SPARQL::Algebra::Operator::Predicate}
304
338
  # * {SPARQL::Algebra::Operator::Prefix}
305
339
  # * {SPARQL::Algebra::Operator::Project}
306
340
  # * {SPARQL::Algebra::Operator::Rand}
307
341
  # * {SPARQL::Algebra::Operator::Reduced}
308
342
  # * {SPARQL::Algebra::Operator::Regex}
309
343
  # * {SPARQL::Algebra::Operator::Replace}
344
+ # * {SPARQL::Algebra::Operator::Reverse}
310
345
  # * {SPARQL::Algebra::Operator::Round}
311
346
  # * {SPARQL::Algebra::Operator::SameTerm}
312
347
  # * {SPARQL::Algebra::Operator::Sample}
313
348
  # * {SPARQL::Algebra::Operator::Seconds}
349
+ # * {SPARQL::Algebra::Operator::Seq}
350
+ # * {SPARQL::Algebra::Operator::Sequence}
314
351
  # * {SPARQL::Algebra::Operator::SHA1}
315
352
  # * {SPARQL::Algebra::Operator::SHA256}
316
353
  # * {SPARQL::Algebra::Operator::SHA384}
@@ -330,6 +367,7 @@ module SPARQL
330
367
  # * {SPARQL::Algebra::Operator::Sum}
331
368
  # * {SPARQL::Algebra::Operator::Table}
332
369
  # * {SPARQL::Algebra::Operator::Timezone}
370
+ # * {SPARQL::Algebra::Operator::Triple}
333
371
  # * {SPARQL::Algebra::Operator::TZ}
334
372
  # * {SPARQL::Algebra::Operator::Ucase}
335
373
  # * {SPARQL::Algebra::Operator::Union}
@@ -339,11 +377,9 @@ module SPARQL
339
377
  # * {SPARQL::Algebra::Operator::With}
340
378
  # * {SPARQL::Algebra::Operator::Year}
341
379
  #
342
- # TODO
343
- # ====
344
- # * Operator#optimize needs to be completed and tested.
345
380
  #
346
381
  # @see http://www.w3.org/TR/sparql11-query/#sparqlAlgebra
382
+ # @see https://jena.apache.org/documentation/notes/sse.html
347
383
  module Algebra
348
384
  include RDF
349
385
 
@@ -419,7 +455,7 @@ module SPARQL
419
455
  #
420
456
  # @param [Symbol, #to_sym] name
421
457
  # @return [Variable]
422
- # @see http://www.rubydoc.info/github/ruby-rdf/rdf/RDF/Query/Variable
458
+ # @see https://ruby-rdf.github.io/rdf/RDF/Query/Variable
423
459
  def Variable(name)
424
460
  Variable.new(name)
425
461
  end