sparql 3.2.1 → 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 (56) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +57 -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 +35 -7
  9. data/lib/sparql/algebra/extensions.rb +18 -18
  10. data/lib/sparql/algebra/operator/adjust.rb +69 -0
  11. data/lib/sparql/algebra/operator/bgp.rb +1 -1
  12. data/lib/sparql/algebra/operator/construct.rb +1 -1
  13. data/lib/sparql/algebra/operator/dataset.rb +10 -0
  14. data/lib/sparql/algebra/operator/day.rb +2 -2
  15. data/lib/sparql/algebra/operator/delete.rb +1 -1
  16. data/lib/sparql/algebra/operator/delete_data.rb +1 -1
  17. data/lib/sparql/algebra/operator/delete_where.rb +1 -1
  18. data/lib/sparql/algebra/operator/extend.rb +32 -2
  19. data/lib/sparql/algebra/operator/group.rb +34 -6
  20. data/lib/sparql/algebra/operator/hours.rb +2 -2
  21. data/lib/sparql/algebra/operator/insert.rb +1 -1
  22. data/lib/sparql/algebra/operator/insert_data.rb +1 -1
  23. data/lib/sparql/algebra/operator/join.rb +3 -3
  24. data/lib/sparql/algebra/operator/left_join.rb +3 -3
  25. data/lib/sparql/algebra/operator/minus.rb +1 -1
  26. data/lib/sparql/algebra/operator/minutes.rb +2 -2
  27. data/lib/sparql/algebra/operator/modify.rb +21 -0
  28. data/lib/sparql/algebra/operator/month.rb +2 -2
  29. data/lib/sparql/algebra/operator/path_opt.rb +9 -65
  30. data/lib/sparql/algebra/operator/path_plus.rb +18 -10
  31. data/lib/sparql/algebra/operator/path_range.rb +178 -0
  32. data/lib/sparql/algebra/operator/path_star.rb +7 -4
  33. data/lib/sparql/algebra/operator/path_zero.rb +110 -0
  34. data/lib/sparql/algebra/operator/plus.rb +7 -5
  35. data/lib/sparql/algebra/operator/project.rb +42 -1
  36. data/lib/sparql/algebra/operator/seconds.rb +2 -2
  37. data/lib/sparql/algebra/operator/seq.rb +3 -3
  38. data/lib/sparql/algebra/operator/sequence.rb +10 -0
  39. data/lib/sparql/algebra/operator/subtract.rb +9 -5
  40. data/lib/sparql/algebra/operator/table.rb +11 -2
  41. data/lib/sparql/algebra/operator/timezone.rb +2 -2
  42. data/lib/sparql/algebra/operator/triple.rb +51 -0
  43. data/lib/sparql/algebra/operator/tz.rb +2 -2
  44. data/lib/sparql/algebra/operator/using.rb +2 -2
  45. data/lib/sparql/algebra/operator/year.rb +2 -2
  46. data/lib/sparql/algebra/operator.rb +27 -10
  47. data/lib/sparql/algebra/query.rb +5 -3
  48. data/lib/sparql/algebra.rb +22 -3
  49. data/lib/sparql/grammar/meta.rb +1367 -267
  50. data/lib/sparql/grammar/parser11.rb +826 -328
  51. data/lib/sparql/grammar/terminals11.rb +2 -2
  52. data/lib/sparql/grammar.rb +6 -4
  53. data/lib/sparql/results.rb +3 -2
  54. data/lib/sparql/server.rb +93 -0
  55. data/lib/sparql.rb +8 -5
  56. metadata +39 -17
@@ -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'
@@ -173,6 +177,7 @@ module SPARQL; module Algebra
173
177
  when :> then GreaterThan
174
178
  when :>= then GreaterThanOrEqual
175
179
  when :abs then Abs
180
+ when :adjust then Adjust
176
181
  when :alt then Alt
177
182
  when :and, :'&&' then And
178
183
  when :avg then Avg
@@ -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
@@ -302,7 +309,9 @@ module SPARQL; module Algebra
302
309
 
303
310
  # RDF-star
304
311
  when :istriple then IsTriple
305
- when :triple then RDF::Query::Pattern
312
+ when :triple then Triple
313
+ when :qtriple then RDF::Query::Pattern
314
+ when :quad then RDF::Query::Pattern
306
315
  when :subject then Subject
307
316
  when :predicate then Predicate
308
317
  when :object then Object
@@ -340,7 +349,7 @@ module SPARQL; module Algebra
340
349
  # @param [String] content
341
350
  # @param [Operator] datasets ([])
342
351
  # @param [Operator] distinct (false)
343
- # @param [Hash{Symbol => Operator}] extensions
352
+ # @param [Hash{String => Operator}] extensions
344
353
  # Variable bindings
345
354
  # @param [Array<Operator>] filter_ops ([])
346
355
  # Filter Operations
@@ -383,10 +392,9 @@ module SPARQL; module Algebra
383
392
  str << "REDUCED " if reduced
384
393
 
385
394
  str << project.map do |p|
386
- if expr = extensions.delete(p)
387
- v = expr.to_sparql(as_statement: true, **options)
388
- v = "<< #{v} >>" if expr.is_a?(RDF::Statement)
389
- pp = p.to_sparql(**options)
395
+ if expr = extensions.delete(p.to_s)
396
+ v = expr.to_sparql(**options)
397
+ pp = RDF::Query::Variable.new(p).to_sparql(**options)
390
398
  # Replace projected variables with their extension, if any
391
399
  '(' + v + ' AS ' + pp + ')'
392
400
  else
@@ -402,9 +410,9 @@ module SPARQL; module Algebra
402
410
 
403
411
  # Bind
404
412
  extensions.each do |as, expression|
405
- v = expression.to_sparql(as_statement: true, **options)
406
- v = "<< #{v} >>" if expression.is_a?(RDF::Statement)
407
- content << "\nBIND (" << v << " AS " << as.to_sparql(**options) << ") ."
413
+ v = expression.to_sparql(**options)
414
+ pp = RDF::Query::Variable.new(as).to_sparql(**options)
415
+ content << "\nBIND (" << v << " AS " << pp << ") ."
408
416
  end
409
417
 
410
418
  # Filter
@@ -793,6 +801,15 @@ module SPARQL; module Algebra
793
801
  operands.each {|op| op.validate! if op.respond_to?(:validate!)}
794
802
  self
795
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
+
796
813
  protected
797
814
 
798
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]
@@ -233,7 +233,7 @@ module SPARQL
233
233
  # scarcity.
234
234
  #
235
235
  # [memoization]: http://en.wikipedia.org/wiki/Memoization
236
- # [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
237
237
  #
238
238
  # ## Documentation
239
239
  #
@@ -246,12 +246,15 @@ module SPARQL
246
246
  # * {SPARQL::Algebra::Operator}
247
247
  # * {SPARQL::Algebra::Operator::Abs}
248
248
  # * {SPARQL::Algebra::Operator::Add}
249
+ # * {SPARQL::Algebra::Operator::Adjust}
250
+ # * {SPARQL::Algebra::Operator::Alt}
249
251
  # * {SPARQL::Algebra::Operator::And}
250
252
  # * {SPARQL::Algebra::Operator::Asc}
251
253
  # * {SPARQL::Algebra::Operator::Ask}
252
254
  # * {SPARQL::Algebra::Operator::Avg}
253
255
  # * {SPARQL::Algebra::Operator::Base}
254
256
  # * {SPARQL::Algebra::Operator::BGP}
257
+ # * {SPARQL::Algebra::Operator::Bnode}
255
258
  # * {SPARQL::Algebra::Operator::Bound}
256
259
  # * {SPARQL::Algebra::Operator::Ceil}
257
260
  # * {SPARQL::Algebra::Operator::Clear}
@@ -266,9 +269,9 @@ module SPARQL
266
269
  # * {SPARQL::Algebra::Operator::Dataset}
267
270
  # * {SPARQL::Algebra::Operator::Datatype}
268
271
  # * {SPARQL::Algebra::Operator::Day}
269
- # * {SPARQL::Algebra::Operator::Delete}
270
272
  # * {SPARQL::Algebra::Operator::DeleteData}
271
273
  # * {SPARQL::Algebra::Operator::DeleteWhere}
274
+ # * {SPARQL::Algebra::Operator::Delete}
272
275
  # * {SPARQL::Algebra::Operator::Desc}
273
276
  # * {SPARQL::Algebra::Operator::Describe}
274
277
  # * {SPARQL::Algebra::Operator::Distinct}
@@ -276,6 +279,7 @@ module SPARQL
276
279
  # * {SPARQL::Algebra::Operator::Drop}
277
280
  # * {SPARQL::Algebra::Operator::EncodeForURI}
278
281
  # * {SPARQL::Algebra::Operator::Equal}
282
+ # * {SPARQL::Algebra::Operator::Exists}
279
283
  # * {SPARQL::Algebra::Operator::Exprlist}
280
284
  # * {SPARQL::Algebra::Operator::Extend}
281
285
  # * {SPARQL::Algebra::Operator::Filter}
@@ -296,9 +300,11 @@ module SPARQL
296
300
  # * {SPARQL::Algebra::Operator::IsIRI}
297
301
  # * {SPARQL::Algebra::Operator::IsLiteral}
298
302
  # * {SPARQL::Algebra::Operator::IsNumeric}
303
+ # * {SPARQL::Algebra::Operator::IsTriple}
299
304
  # * {SPARQL::Algebra::Operator::Join}
300
305
  # * {SPARQL::Algebra::Operator::Lang}
301
306
  # * {SPARQL::Algebra::Operator::LangMatches}
307
+ # * {SPARQL::Algebra::Operator::LCase}
302
308
  # * {SPARQL::Algebra::Operator::LeftJoin}
303
309
  # * {SPARQL::Algebra::Operator::LessThan}
304
310
  # * {SPARQL::Algebra::Operator::LessThanOrEqual}
@@ -316,20 +322,32 @@ module SPARQL
316
322
  # * {SPARQL::Algebra::Operator::NotEqual}
317
323
  # * {SPARQL::Algebra::Operator::NotExists}
318
324
  # * {SPARQL::Algebra::Operator::NotIn}
325
+ # * {SPARQL::Algebra::Operator::NotOneOf}
319
326
  # * {SPARQL::Algebra::Operator::Now}
327
+ # * {SPARQL::Algebra::Operator::Object}
320
328
  # * {SPARQL::Algebra::Operator::Or}
321
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}
322
336
  # * {SPARQL::Algebra::Operator::Plus}
337
+ # * {SPARQL::Algebra::Operator::Predicate}
323
338
  # * {SPARQL::Algebra::Operator::Prefix}
324
339
  # * {SPARQL::Algebra::Operator::Project}
325
340
  # * {SPARQL::Algebra::Operator::Rand}
326
341
  # * {SPARQL::Algebra::Operator::Reduced}
327
342
  # * {SPARQL::Algebra::Operator::Regex}
328
343
  # * {SPARQL::Algebra::Operator::Replace}
344
+ # * {SPARQL::Algebra::Operator::Reverse}
329
345
  # * {SPARQL::Algebra::Operator::Round}
330
346
  # * {SPARQL::Algebra::Operator::SameTerm}
331
347
  # * {SPARQL::Algebra::Operator::Sample}
332
348
  # * {SPARQL::Algebra::Operator::Seconds}
349
+ # * {SPARQL::Algebra::Operator::Seq}
350
+ # * {SPARQL::Algebra::Operator::Sequence}
333
351
  # * {SPARQL::Algebra::Operator::SHA1}
334
352
  # * {SPARQL::Algebra::Operator::SHA256}
335
353
  # * {SPARQL::Algebra::Operator::SHA384}
@@ -349,6 +367,7 @@ module SPARQL
349
367
  # * {SPARQL::Algebra::Operator::Sum}
350
368
  # * {SPARQL::Algebra::Operator::Table}
351
369
  # * {SPARQL::Algebra::Operator::Timezone}
370
+ # * {SPARQL::Algebra::Operator::Triple}
352
371
  # * {SPARQL::Algebra::Operator::TZ}
353
372
  # * {SPARQL::Algebra::Operator::Ucase}
354
373
  # * {SPARQL::Algebra::Operator::Union}
@@ -436,7 +455,7 @@ module SPARQL
436
455
  #
437
456
  # @param [Symbol, #to_sym] name
438
457
  # @return [Variable]
439
- # @see http://www.rubydoc.info/github/ruby-rdf/rdf/RDF/Query/Variable
458
+ # @see https://ruby-rdf.github.io/rdf/RDF/Query/Variable
440
459
  def Variable(name)
441
460
  Variable.new(name)
442
461
  end