sparql 3.1.8 → 3.2.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 (155) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +88 -60
  3. data/VERSION +1 -1
  4. data/bin/sparql +15 -35
  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 +110 -46
  10. data/lib/sparql/algebra/operator/abs.rb +22 -2
  11. data/lib/sparql/algebra/operator/add.rb +21 -2
  12. data/lib/sparql/algebra/operator/adjust.rb +69 -0
  13. data/lib/sparql/algebra/operator/alt.rb +26 -2
  14. data/lib/sparql/algebra/operator/and.rb +25 -3
  15. data/lib/sparql/algebra/operator/asc.rb +20 -1
  16. data/lib/sparql/algebra/operator/ask.rb +17 -1
  17. data/lib/sparql/algebra/operator/avg.rb +19 -1
  18. data/lib/sparql/algebra/operator/base.rb +18 -1
  19. data/lib/sparql/algebra/operator/bgp.rb +13 -1
  20. data/lib/sparql/algebra/operator/bnode.rb +33 -10
  21. data/lib/sparql/algebra/operator/bound.rb +22 -1
  22. data/lib/sparql/algebra/operator/ceil.rb +25 -2
  23. data/lib/sparql/algebra/operator/clear.rb +26 -2
  24. data/lib/sparql/algebra/operator/coalesce.rb +33 -11
  25. data/lib/sparql/algebra/operator/compare.rb +9 -0
  26. data/lib/sparql/algebra/operator/concat.rb +26 -2
  27. data/lib/sparql/algebra/operator/construct.rb +29 -6
  28. data/lib/sparql/algebra/operator/contains.rb +24 -2
  29. data/lib/sparql/algebra/operator/copy.rb +19 -2
  30. data/lib/sparql/algebra/operator/count.rb +52 -6
  31. data/lib/sparql/algebra/operator/create.rb +20 -2
  32. data/lib/sparql/algebra/operator/dataset.rb +37 -2
  33. data/lib/sparql/algebra/operator/datatype.rb +25 -6
  34. data/lib/sparql/algebra/operator/day.rb +25 -7
  35. data/lib/sparql/algebra/operator/delete.rb +29 -2
  36. data/lib/sparql/algebra/operator/delete_data.rb +23 -2
  37. data/lib/sparql/algebra/operator/delete_where.rb +24 -2
  38. data/lib/sparql/algebra/operator/desc.rb +20 -1
  39. data/lib/sparql/algebra/operator/describe.rb +27 -4
  40. data/lib/sparql/algebra/operator/distinct.rb +20 -3
  41. data/lib/sparql/algebra/operator/divide.rb +26 -2
  42. data/lib/sparql/algebra/operator/drop.rb +27 -3
  43. data/lib/sparql/algebra/operator/encode_for_uri.rb +22 -2
  44. data/lib/sparql/algebra/operator/equal.rb +12 -2
  45. data/lib/sparql/algebra/operator/exists.rb +28 -4
  46. data/lib/sparql/algebra/operator/exprlist.rb +15 -2
  47. data/lib/sparql/algebra/operator/extend.rb +95 -7
  48. data/lib/sparql/algebra/operator/filter.rb +27 -5
  49. data/lib/sparql/algebra/operator/floor.rb +25 -2
  50. data/lib/sparql/algebra/operator/function_call.rb +64 -0
  51. data/lib/sparql/algebra/operator/graph.rb +69 -6
  52. data/lib/sparql/algebra/operator/greater_than.rb +12 -3
  53. data/lib/sparql/algebra/operator/greater_than_or_equal.rb +12 -2
  54. data/lib/sparql/algebra/operator/group.rb +133 -8
  55. data/lib/sparql/algebra/operator/group_concat.rb +43 -7
  56. data/lib/sparql/algebra/operator/hours.rb +25 -7
  57. data/lib/sparql/algebra/operator/if.rb +20 -3
  58. data/lib/sparql/algebra/operator/in.rb +18 -1
  59. data/lib/sparql/algebra/operator/insert.rb +24 -2
  60. data/lib/sparql/algebra/operator/insert_data.rb +23 -2
  61. data/lib/sparql/algebra/operator/iri.rb +21 -4
  62. data/lib/sparql/algebra/operator/is_blank.rb +20 -3
  63. data/lib/sparql/algebra/operator/is_iri.rb +20 -3
  64. data/lib/sparql/algebra/operator/is_literal.rb +20 -3
  65. data/lib/sparql/algebra/operator/is_numeric.rb +22 -5
  66. data/lib/sparql/algebra/operator/is_triple.rb +32 -0
  67. data/lib/sparql/algebra/operator/join.rb +58 -3
  68. data/lib/sparql/algebra/operator/lang.rb +25 -0
  69. data/lib/sparql/algebra/operator/lang_matches.rb +22 -1
  70. data/lib/sparql/algebra/operator/lcase.rb +22 -2
  71. data/lib/sparql/algebra/operator/left_join.rb +44 -3
  72. data/lib/sparql/algebra/operator/less_than.rb +12 -3
  73. data/lib/sparql/algebra/operator/less_than_or_equal.rb +12 -2
  74. data/lib/sparql/algebra/operator/load.rb +25 -2
  75. data/lib/sparql/algebra/operator/max.rb +19 -1
  76. data/lib/sparql/algebra/operator/md5.rb +22 -5
  77. data/lib/sparql/algebra/operator/min.rb +21 -3
  78. data/lib/sparql/algebra/operator/minus.rb +65 -7
  79. data/lib/sparql/algebra/operator/minutes.rb +25 -7
  80. data/lib/sparql/algebra/operator/modify.rb +62 -5
  81. data/lib/sparql/algebra/operator/month.rb +25 -7
  82. data/lib/sparql/algebra/operator/move.rb +20 -2
  83. data/lib/sparql/algebra/operator/multiply.rb +26 -3
  84. data/lib/sparql/algebra/operator/negate.rb +23 -3
  85. data/lib/sparql/algebra/operator/not.rb +24 -3
  86. data/lib/sparql/algebra/operator/not_equal.rb +13 -0
  87. data/lib/sparql/algebra/operator/notexists.rb +30 -6
  88. data/lib/sparql/algebra/operator/notin.rb +20 -3
  89. data/lib/sparql/algebra/operator/notoneof.rb +21 -2
  90. data/lib/sparql/algebra/operator/now.rb +24 -5
  91. data/lib/sparql/algebra/operator/object.rb +32 -0
  92. data/lib/sparql/algebra/operator/or.rb +26 -3
  93. data/lib/sparql/algebra/operator/order.rb +64 -1
  94. data/lib/sparql/algebra/operator/path.rb +29 -2
  95. data/lib/sparql/algebra/operator/path_opt.rb +28 -65
  96. data/lib/sparql/algebra/operator/path_plus.rb +37 -10
  97. data/lib/sparql/algebra/operator/path_range.rb +178 -0
  98. data/lib/sparql/algebra/operator/path_star.rb +25 -4
  99. data/lib/sparql/algebra/operator/path_zero.rb +110 -0
  100. data/lib/sparql/algebra/operator/plus.rb +49 -8
  101. data/lib/sparql/algebra/operator/predicate.rb +32 -0
  102. data/lib/sparql/algebra/operator/prefix.rb +24 -3
  103. data/lib/sparql/algebra/operator/project.rb +111 -6
  104. data/lib/sparql/algebra/operator/rand.rb +30 -2
  105. data/lib/sparql/algebra/operator/reduced.rb +20 -3
  106. data/lib/sparql/algebra/operator/regex.rb +26 -18
  107. data/lib/sparql/algebra/operator/replace.rb +26 -6
  108. data/lib/sparql/algebra/operator/reverse.rb +31 -2
  109. data/lib/sparql/algebra/operator/round.rb +25 -2
  110. data/lib/sparql/algebra/operator/same_term.rb +24 -6
  111. data/lib/sparql/algebra/operator/sample.rb +32 -8
  112. data/lib/sparql/algebra/operator/seconds.rb +25 -7
  113. data/lib/sparql/algebra/operator/seq.rb +23 -5
  114. data/lib/sparql/algebra/operator/sequence.rb +14 -11
  115. data/lib/sparql/algebra/operator/sha1.rb +18 -1
  116. data/lib/sparql/algebra/operator/sha256.rb +18 -1
  117. data/lib/sparql/algebra/operator/sha384.rb +18 -1
  118. data/lib/sparql/algebra/operator/sha512.rb +18 -1
  119. data/lib/sparql/algebra/operator/slice.rb +27 -5
  120. data/lib/sparql/algebra/operator/str.rb +21 -1
  121. data/lib/sparql/algebra/operator/strafter.rb +25 -2
  122. data/lib/sparql/algebra/operator/strbefore.rb +25 -2
  123. data/lib/sparql/algebra/operator/strdt.rb +22 -1
  124. data/lib/sparql/algebra/operator/strends.rb +25 -3
  125. data/lib/sparql/algebra/operator/strlang.rb +24 -6
  126. data/lib/sparql/algebra/operator/strlen.rb +23 -2
  127. data/lib/sparql/algebra/operator/strstarts.rb +25 -2
  128. data/lib/sparql/algebra/operator/struuid.rb +29 -9
  129. data/lib/sparql/algebra/operator/subject.rb +32 -0
  130. data/lib/sparql/algebra/operator/substr.rb +23 -2
  131. data/lib/sparql/algebra/operator/subtract.rb +37 -7
  132. data/lib/sparql/algebra/operator/sum.rb +24 -6
  133. data/lib/sparql/algebra/operator/table.rb +85 -4
  134. data/lib/sparql/algebra/operator/timezone.rb +25 -7
  135. data/lib/sparql/algebra/operator/triple.rb +24 -0
  136. data/lib/sparql/algebra/operator/tz.rb +24 -7
  137. data/lib/sparql/algebra/operator/ucase.rb +23 -2
  138. data/lib/sparql/algebra/operator/union.rb +29 -6
  139. data/lib/sparql/algebra/operator/update.rb +46 -4
  140. data/lib/sparql/algebra/operator/using.rb +49 -2
  141. data/lib/sparql/algebra/operator/uuid.rb +27 -8
  142. data/lib/sparql/algebra/operator/with.rb +38 -4
  143. data/lib/sparql/algebra/operator/year.rb +25 -7
  144. data/lib/sparql/algebra/operator.rb +150 -12
  145. data/lib/sparql/algebra/query.rb +5 -3
  146. data/lib/sparql/algebra/sxp_extensions.rb +3 -3
  147. data/lib/sparql/algebra.rb +42 -6
  148. data/lib/sparql/grammar/meta.rb +1367 -267
  149. data/lib/sparql/grammar/parser11.rb +829 -331
  150. data/lib/sparql/grammar/terminals11.rb +2 -2
  151. data/lib/sparql/grammar.rb +6 -4
  152. data/lib/sparql/results.rb +3 -2
  153. data/lib/sparql/server.rb +93 -0
  154. data/lib/sparql.rb +8 -5
  155. metadata +57 -35
@@ -49,17 +49,20 @@ module SPARQL; module Algebra
49
49
  autoload :Sum, 'sparql/algebra/operator/sum'
50
50
  autoload :SHA1, 'sparql/algebra/operator/sha1'
51
51
  autoload :SHA256, 'sparql/algebra/operator/sha256'
52
+ autoload :SHA384, 'sparql/algebra/operator/sha384'
52
53
  autoload :SHA512, 'sparql/algebra/operator/sha512'
53
54
  autoload :Str, 'sparql/algebra/operator/str'
54
55
  autoload :Timezone, 'sparql/algebra/operator/timezone'
55
56
  autoload :TZ, 'sparql/algebra/operator/tz'
56
57
  autoload :Year, 'sparql/algebra/operator/year'
58
+ autoload :Triple, 'sparql/algebra/operator/triple'
57
59
  autoload :IsTriple, 'sparql/algebra/operator/is_triple'
58
60
  autoload :Subject, 'sparql/algebra/operator/subject'
59
61
  autoload :Predicate, 'sparql/algebra/operator/predicate'
60
62
  autoload :Object, 'sparql/algebra/operator/object'
61
63
 
62
64
  # Binary operators
65
+ autoload :Adjust, 'sparql/algebra/operator/adjust'
63
66
  autoload :And, 'sparql/algebra/operator/and'
64
67
  autoload :Compare, 'sparql/algebra/operator/compare'
65
68
  autoload :Concat, 'sparql/algebra/operator/concat'
@@ -94,7 +97,9 @@ module SPARQL; module Algebra
94
97
  autoload :NotOneOf, 'sparql/algebra/operator/notoneof'
95
98
  autoload :PathOpt, 'sparql/algebra/operator/path_opt'
96
99
  autoload :PathPlus, 'sparql/algebra/operator/path_plus'
100
+ autoload :PathRange, 'sparql/algebra/operator/path_range'
97
101
  autoload :PathStar, 'sparql/algebra/operator/path_star'
102
+ autoload :PathZero, 'sparql/algebra/operator/path_zero'
98
103
  autoload :Path, 'sparql/algebra/operator/path'
99
104
  autoload :Reverse, 'sparql/algebra/operator/reverse'
100
105
  autoload :Seq, 'sparql/algebra/operator/seq'
@@ -105,6 +110,7 @@ module SPARQL; module Algebra
105
110
  autoload :Coalesce, 'sparql/algebra/operator/coalesce'
106
111
  autoload :Desc, 'sparql/algebra/operator/desc'
107
112
  autoload :Exprlist, 'sparql/algebra/operator/exprlist'
113
+ autoload :FunctionCall, 'sparql/algebra/operator/function_call'
108
114
  autoload :GroupConcat, 'sparql/algebra/operator/group_concat'
109
115
  autoload :In, 'sparql/algebra/operator/in'
110
116
  autoload :NotIn, 'sparql/algebra/operator/notin'
@@ -171,7 +177,7 @@ module SPARQL; module Algebra
171
177
  when :> then GreaterThan
172
178
  when :>= then GreaterThanOrEqual
173
179
  when :abs then Abs
174
- when :add then Add
180
+ when :adjust then Adjust
175
181
  when :alt then Alt
176
182
  when :and, :'&&' then And
177
183
  when :avg then Avg
@@ -204,7 +210,6 @@ module SPARQL; module Algebra
204
210
  when :md5 then MD5
205
211
  when :max then Max
206
212
  when :min then Min
207
- when :minus then Minus
208
213
  when :minutes then Minutes
209
214
  when :month then Month
210
215
  when :multiply then Multiply
@@ -215,9 +220,11 @@ module SPARQL; module Algebra
215
220
  when :now then Now
216
221
  when :or, :'||' then Or
217
222
  when :path then Path
223
+ when :path0 then PathZero
218
224
  when :path? then PathOpt
219
- when :"path*" then PathStar
220
225
  when :"path+" then PathPlus
226
+ when :"path*" then PathStar
227
+ when :pathrange then PathRange
221
228
  when :plus then Plus
222
229
  when :rand then Rand
223
230
  when :regex then Regex
@@ -231,6 +238,7 @@ module SPARQL; module Algebra
231
238
  when :sequence then Sequence
232
239
  when :sha1 then SHA1
233
240
  when :sha256 then SHA256
241
+ when :sha384 then SHA384
234
242
  when :sha512 then SHA512
235
243
  when :str then Str
236
244
  when :strafter then StrAfter
@@ -254,6 +262,7 @@ module SPARQL; module Algebra
254
262
  when :asc then Asc
255
263
  when :desc then Desc
256
264
  when :exprlist then Exprlist
265
+ when :function_call then FunctionCall
257
266
 
258
267
  # Datasets
259
268
  when :dataset then Dataset
@@ -278,7 +287,6 @@ module SPARQL; module Algebra
278
287
  when :reduced then Reduced
279
288
  when :slice then Slice
280
289
  when :table then Table
281
- when :triple then RDF::Query::Pattern
282
290
  when :union then Union
283
291
 
284
292
  # Update forms
@@ -302,6 +310,8 @@ module SPARQL; module Algebra
302
310
  # RDF-star
303
311
  when :istriple then IsTriple
304
312
  when :triple then Triple
313
+ when :qtriple then RDF::Query::Pattern
314
+ when :quad then RDF::Query::Pattern
305
315
  when :subject then Subject
306
316
  when :predicate then Predicate
307
317
  when :object then Object
@@ -333,6 +343,119 @@ module SPARQL; module Algebra
333
343
  self.const_get(:ARITY)
334
344
  end
335
345
 
346
+ ##
347
+ # Generate a top-level Grammar, using collected options
348
+ #
349
+ # @param [String] content
350
+ # @param [Operator] datasets ([])
351
+ # @param [Operator] distinct (false)
352
+ # @param [Hash{String => Operator}] extensions
353
+ # Variable bindings
354
+ # @param [Array<Operator>] filter_ops ([])
355
+ # Filter Operations
356
+ # @param [Integer] limit (nil)
357
+ # @param [Array<Operator>] group_ops ([])
358
+ # @param [Array<Operator>] having_ops ([])
359
+ # @param [Integer] offset (nil)
360
+ # @param [Array<Operator>] order_ops ([])
361
+ # Order Operations
362
+ # @param [Array<Symbol,Operator>] project (%i(*))
363
+ # Terms to project
364
+ # @param [Operator] reduced (false)
365
+ # @param [Operator] values_clause (nil)
366
+ # Top-level Values clause
367
+ # @param [Operator] where_clause (true)
368
+ # Emit 'WHERE' before GroupGraphPattern
369
+ # @param [Hash{Symbol => Object}] options
370
+ # @return [String]
371
+ def self.to_sparql(content,
372
+ datasets: [],
373
+ distinct: false,
374
+ extensions: {},
375
+ filter_ops: [],
376
+ group_ops: [],
377
+ having_ops: [],
378
+ limit: nil,
379
+ offset: nil,
380
+ order_ops: [],
381
+ project: %i(*),
382
+ reduced: false,
383
+ values_clause: nil,
384
+ where_clause: true,
385
+ **options)
386
+ str = ""
387
+
388
+ # Projections
389
+ if project
390
+ str << "SELECT "
391
+ str << "DISTINCT " if distinct
392
+ str << "REDUCED " if reduced
393
+
394
+ str << project.map do |p|
395
+ if expr = extensions.delete(p.to_s)
396
+ v = expr.to_sparql(**options)
397
+ pp = RDF::Query::Variable.new(p).to_sparql(**options)
398
+ # Replace projected variables with their extension, if any
399
+ '(' + v + ' AS ' + pp + ')'
400
+ else
401
+ p.to_sparql(**options)
402
+ end
403
+ end.join(" ") + "\n"
404
+ end
405
+
406
+ # DatasetClause
407
+ datasets.each do |ds|
408
+ str << "FROM #{ds.to_sparql(**options)}\n"
409
+ end
410
+
411
+ # Bind
412
+ extensions.each do |as, expression|
413
+ v = expression.to_sparql(**options)
414
+ pp = RDF::Query::Variable.new(as).to_sparql(**options)
415
+ content << "\nBIND (" << v << " AS " << pp << ") ."
416
+ end
417
+
418
+ # Filter
419
+ filter_ops.each do |f|
420
+ content << "\nFILTER (#{f.to_sparql(**options)}) ."
421
+ end
422
+
423
+ # WhereClause / GroupGraphPattern
424
+ str << (where_clause ? "WHERE {\n#{content}\n}\n" : "{\n#{content}\n}\n")
425
+
426
+ ##
427
+ # SolutionModifier
428
+ #
429
+ # GroupClause
430
+ unless group_ops.empty?
431
+ ops = group_ops.map do |o|
432
+ # Replace projected variables with their extension, if any
433
+ o.is_a?(Array) ?
434
+ "(" + [o.last, :AS, o.first].to_sparql(**options) + ")" :
435
+ o.to_sparql(**options)
436
+ end
437
+ str << "GROUP BY #{ops.join(' ')}\n"
438
+ end
439
+
440
+ # HavingClause
441
+ unless having_ops.empty?
442
+ str << "HAVING #{having_ops.to_sparql(**options)}"
443
+ end
444
+
445
+ # OrderClause
446
+ unless order_ops.empty?
447
+ str << "ORDER BY #{order_ops.to_sparql(**options)}\n"
448
+ end
449
+
450
+ # LimitOffsetClauses
451
+ str << "OFFSET #{offset}\n" unless offset.nil?
452
+ str << "LIMIT #{limit}\n" unless limit.nil?
453
+
454
+ # Values Clause
455
+ str << values_clause.to_sparql(top_level: false, **options) if values_clause
456
+ str
457
+ end
458
+
336
459
  ARITY = -1 # variable arity
337
460
 
338
461
  ##
@@ -558,12 +681,8 @@ module SPARQL; module Algebra
558
681
  # @return [SPARQL::Algebra::Expression] `self`
559
682
  def rewrite(&block)
560
683
  @operands = @operands.map do |op|
561
- # Rewrite the operand
562
- unless new_op = block.call(op)
563
- # Not re-written, rewrite
564
- new_op = op.respond_to?(:rewrite) ? op.rewrite(&block) : op
565
- end
566
- new_op
684
+ new_op = block.call(op)
685
+ new_op.respond_to?(:rewrite) ? new_op.rewrite(&block) : new_op
567
686
  end
568
687
  self
569
688
  end
@@ -581,9 +700,19 @@ module SPARQL; module Algebra
581
700
  ##
582
701
  # Returns an S-Expression (SXP) representation of this operator
583
702
  #
703
+ # @param [Hash{Symbol => RDF::URI}] prefixes (nil)
704
+ # @param [RDF::URI] base_uri (nil)
584
705
  # @return [String]
585
- def to_sxp
586
- to_sxp_bin.to_sxp
706
+ def to_sxp(prefixes: nil, base_uri: nil)
707
+ to_sxp_bin.to_sxp(prefixes: prefixes, base_uri: base_uri)
708
+ end
709
+
710
+ ##
711
+ # Returns a partial SPARQL grammar for the operator.
712
+ #
713
+ # @return [String]
714
+ def to_sparql(**options)
715
+ raise NotImplementedError, "#{self.class}#to_sparql(#{operands.map(&:class).join(', ')})"
587
716
  end
588
717
 
589
718
  ##
@@ -672,6 +801,15 @@ module SPARQL; module Algebra
672
801
  operands.each {|op| op.validate! if op.respond_to?(:validate!)}
673
802
  self
674
803
  end
804
+
805
+ ##
806
+ # The variables used in this query.
807
+ #
808
+ # @return [Hash{Symbol => RDF::Query::Variable}]
809
+ def variables
810
+ operands.inject({}) {|hash, o| o.respond_to?(:variables) ? hash.merge(o.variables) : hash}
811
+ end
812
+
675
813
  protected
676
814
 
677
815
  ##
@@ -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]
@@ -5,7 +5,7 @@ class NilClass
5
5
  # Returns the SXP representation of this object.
6
6
  #
7
7
  # @return [String]
8
- def to_sxp
8
+ def to_sxp(**options)
9
9
  RDF.nil.to_s
10
10
  end
11
11
  end
@@ -17,7 +17,7 @@ class FalseClass
17
17
  # Returns the SXP representation of this object.
18
18
  #
19
19
  # @return [String]
20
- def to_sxp
20
+ def to_sxp(**options)
21
21
  'false'
22
22
  end
23
23
  end
@@ -29,7 +29,7 @@ class TrueClass
29
29
  # Returns the SXP representation of this object.
30
30
  #
31
31
  # @return [String]
32
- def to_sxp
32
+ def to_sxp(**options)
33
33
  'true'
34
34
  end
35
35
  end
@@ -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