sparql 3.2.1 → 3.2.3

Sign up to get free protection for your applications and to get access to all the features.
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