sparql 3.1.0 → 3.1.6

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 (154) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +188 -73
  3. data/UNLICENSE +1 -1
  4. data/VERSION +1 -1
  5. data/bin/sparql +37 -17
  6. data/lib/rack/sparql/conneg.rb +2 -2
  7. data/lib/sinatra/sparql.rb +4 -4
  8. data/lib/sparql.rb +13 -12
  9. data/lib/sparql/algebra.rb +11 -19
  10. data/lib/sparql/algebra/aggregate.rb +2 -2
  11. data/lib/sparql/algebra/expression.rb +67 -38
  12. data/lib/sparql/algebra/extensions.rb +182 -23
  13. data/lib/sparql/algebra/operator.rb +55 -22
  14. data/lib/sparql/algebra/operator/abs.rb +2 -2
  15. data/lib/sparql/algebra/operator/add.rb +2 -2
  16. data/lib/sparql/algebra/operator/alt.rb +2 -2
  17. data/lib/sparql/algebra/operator/and.rb +3 -3
  18. data/lib/sparql/algebra/operator/asc.rb +1 -1
  19. data/lib/sparql/algebra/operator/ask.rb +2 -12
  20. data/lib/sparql/algebra/operator/avg.rb +8 -1
  21. data/lib/sparql/algebra/operator/base.rb +8 -8
  22. data/lib/sparql/algebra/operator/bgp.rb +2 -2
  23. data/lib/sparql/algebra/operator/bnode.rb +2 -2
  24. data/lib/sparql/algebra/operator/bound.rb +1 -1
  25. data/lib/sparql/algebra/operator/ceil.rb +2 -2
  26. data/lib/sparql/algebra/operator/clear.rb +2 -2
  27. data/lib/sparql/algebra/operator/coalesce.rb +1 -11
  28. data/lib/sparql/algebra/operator/compare.rb +15 -8
  29. data/lib/sparql/algebra/operator/concat.rb +2 -2
  30. data/lib/sparql/algebra/operator/construct.rb +4 -13
  31. data/lib/sparql/algebra/operator/contains.rb +2 -2
  32. data/lib/sparql/algebra/operator/copy.rb +2 -2
  33. data/lib/sparql/algebra/operator/count.rb +1 -1
  34. data/lib/sparql/algebra/operator/create.rb +2 -2
  35. data/lib/sparql/algebra/operator/dataset.rb +3 -14
  36. data/lib/sparql/algebra/operator/datatype.rb +1 -1
  37. data/lib/sparql/algebra/operator/day.rb +1 -1
  38. data/lib/sparql/algebra/operator/delete.rb +6 -6
  39. data/lib/sparql/algebra/operator/delete_data.rb +2 -2
  40. data/lib/sparql/algebra/operator/delete_where.rb +3 -3
  41. data/lib/sparql/algebra/operator/desc.rb +1 -1
  42. data/lib/sparql/algebra/operator/describe.rb +2 -12
  43. data/lib/sparql/algebra/operator/distinct.rb +2 -12
  44. data/lib/sparql/algebra/operator/divide.rb +1 -1
  45. data/lib/sparql/algebra/operator/drop.rb +2 -2
  46. data/lib/sparql/algebra/operator/encode_for_uri.rb +2 -2
  47. data/lib/sparql/algebra/operator/equal.rb +2 -2
  48. data/lib/sparql/algebra/operator/exists.rb +1 -1
  49. data/lib/sparql/algebra/operator/exprlist.rb +1 -11
  50. data/lib/sparql/algebra/operator/extend.rb +3 -12
  51. data/lib/sparql/algebra/operator/filter.rb +3 -13
  52. data/lib/sparql/algebra/operator/floor.rb +2 -2
  53. data/lib/sparql/algebra/operator/graph.rb +4 -15
  54. data/lib/sparql/algebra/operator/greater_than.rb +5 -5
  55. data/lib/sparql/algebra/operator/greater_than_or_equal.rb +5 -5
  56. data/lib/sparql/algebra/operator/group.rb +14 -14
  57. data/lib/sparql/algebra/operator/group_concat.rb +1 -1
  58. data/lib/sparql/algebra/operator/hours.rb +1 -1
  59. data/lib/sparql/algebra/operator/if.rb +1 -11
  60. data/lib/sparql/algebra/operator/in.rb +1 -11
  61. data/lib/sparql/algebra/operator/insert.rb +4 -4
  62. data/lib/sparql/algebra/operator/insert_data.rb +2 -2
  63. data/lib/sparql/algebra/operator/iri.rb +1 -1
  64. data/lib/sparql/algebra/operator/is_blank.rb +1 -1
  65. data/lib/sparql/algebra/operator/is_iri.rb +1 -1
  66. data/lib/sparql/algebra/operator/is_literal.rb +1 -1
  67. data/lib/sparql/algebra/operator/is_numeric.rb +1 -1
  68. data/lib/sparql/algebra/operator/is_triple.rb +30 -0
  69. data/lib/sparql/algebra/operator/join.rb +9 -7
  70. data/lib/sparql/algebra/operator/lang.rb +1 -1
  71. data/lib/sparql/algebra/operator/lang_matches.rb +3 -3
  72. data/lib/sparql/algebra/operator/lcase.rb +2 -2
  73. data/lib/sparql/algebra/operator/left_join.rb +16 -9
  74. data/lib/sparql/algebra/operator/less_than.rb +5 -5
  75. data/lib/sparql/algebra/operator/less_than_or_equal.rb +5 -5
  76. data/lib/sparql/algebra/operator/load.rb +2 -2
  77. data/lib/sparql/algebra/operator/max.rb +8 -1
  78. data/lib/sparql/algebra/operator/md5.rb +1 -1
  79. data/lib/sparql/algebra/operator/min.rb +8 -1
  80. data/lib/sparql/algebra/operator/minus.rb +9 -8
  81. data/lib/sparql/algebra/operator/minutes.rb +1 -1
  82. data/lib/sparql/algebra/operator/modify.rb +1 -1
  83. data/lib/sparql/algebra/operator/month.rb +1 -1
  84. data/lib/sparql/algebra/operator/move.rb +2 -2
  85. data/lib/sparql/algebra/operator/multiply.rb +1 -1
  86. data/lib/sparql/algebra/operator/negate.rb +1 -1
  87. data/lib/sparql/algebra/operator/not.rb +1 -1
  88. data/lib/sparql/algebra/operator/not_equal.rb +2 -2
  89. data/lib/sparql/algebra/operator/notexists.rb +2 -2
  90. data/lib/sparql/algebra/operator/notin.rb +1 -11
  91. data/lib/sparql/algebra/operator/notoneof.rb +2 -2
  92. data/lib/sparql/algebra/operator/now.rb +1 -1
  93. data/lib/sparql/algebra/operator/object.rb +27 -0
  94. data/lib/sparql/algebra/operator/or.rb +3 -3
  95. data/lib/sparql/algebra/operator/order.rb +2 -12
  96. data/lib/sparql/algebra/operator/path.rb +2 -2
  97. data/lib/sparql/algebra/operator/path_opt.rb +2 -2
  98. data/lib/sparql/algebra/operator/path_plus.rb +2 -2
  99. data/lib/sparql/algebra/operator/path_star.rb +2 -2
  100. data/lib/sparql/algebra/operator/plus.rb +2 -2
  101. data/lib/sparql/algebra/operator/predicate.rb +27 -0
  102. data/lib/sparql/algebra/operator/prefix.rb +8 -8
  103. data/lib/sparql/algebra/operator/project.rb +2 -12
  104. data/lib/sparql/algebra/operator/rand.rb +1 -1
  105. data/lib/sparql/algebra/operator/reduced.rb +2 -12
  106. data/lib/sparql/algebra/operator/regex.rb +5 -5
  107. data/lib/sparql/algebra/operator/replace.rb +3 -3
  108. data/lib/sparql/algebra/operator/reverse.rb +2 -2
  109. data/lib/sparql/algebra/operator/round.rb +2 -2
  110. data/lib/sparql/algebra/operator/same_term.rb +8 -5
  111. data/lib/sparql/algebra/operator/sample.rb +9 -2
  112. data/lib/sparql/algebra/operator/seconds.rb +1 -1
  113. data/lib/sparql/algebra/operator/seq.rb +1 -1
  114. data/lib/sparql/algebra/operator/sequence.rb +1 -1
  115. data/lib/sparql/algebra/operator/sha1.rb +1 -1
  116. data/lib/sparql/algebra/operator/sha256.rb +1 -1
  117. data/lib/sparql/algebra/operator/sha384.rb +1 -1
  118. data/lib/sparql/algebra/operator/sha512.rb +1 -1
  119. data/lib/sparql/algebra/operator/slice.rb +2 -12
  120. data/lib/sparql/algebra/operator/str.rb +1 -1
  121. data/lib/sparql/algebra/operator/strafter.rb +2 -2
  122. data/lib/sparql/algebra/operator/strbefore.rb +2 -2
  123. data/lib/sparql/algebra/operator/strdt.rb +2 -2
  124. data/lib/sparql/algebra/operator/strends.rb +2 -2
  125. data/lib/sparql/algebra/operator/strlang.rb +2 -2
  126. data/lib/sparql/algebra/operator/strlen.rb +2 -2
  127. data/lib/sparql/algebra/operator/strstarts.rb +2 -2
  128. data/lib/sparql/algebra/operator/struuid.rb +1 -1
  129. data/lib/sparql/algebra/operator/subject.rb +29 -0
  130. data/lib/sparql/algebra/operator/substr.rb +3 -3
  131. data/lib/sparql/algebra/operator/subtract.rb +1 -1
  132. data/lib/sparql/algebra/operator/sum.rb +1 -1
  133. data/lib/sparql/algebra/operator/table.rb +2 -2
  134. data/lib/sparql/algebra/operator/timezone.rb +1 -1
  135. data/lib/sparql/algebra/operator/triple.rb +27 -0
  136. data/lib/sparql/algebra/operator/tz.rb +1 -1
  137. data/lib/sparql/algebra/operator/ucase.rb +2 -2
  138. data/lib/sparql/algebra/operator/union.rb +7 -6
  139. data/lib/sparql/algebra/operator/update.rb +2 -2
  140. data/lib/sparql/algebra/operator/using.rb +2 -2
  141. data/lib/sparql/algebra/operator/uuid.rb +1 -1
  142. data/lib/sparql/algebra/operator/with.rb +3 -3
  143. data/lib/sparql/algebra/operator/year.rb +1 -1
  144. data/lib/sparql/algebra/query.rb +1 -1
  145. data/lib/sparql/algebra/update.rb +1 -1
  146. data/lib/sparql/algebra/version.rb +1 -1
  147. data/lib/sparql/extensions.rb +7 -13
  148. data/lib/sparql/grammar.rb +81 -6
  149. data/lib/sparql/grammar/meta.rb +5801 -1584
  150. data/lib/sparql/grammar/parser11.rb +116 -50
  151. data/lib/sparql/grammar/terminals11.rb +4 -0
  152. data/lib/sparql/results.rb +70 -43
  153. data/lib/sparql/version.rb +1 -1
  154. metadata +34 -39
@@ -10,7 +10,7 @@ module SPARQL; module Algebra
10
10
  # (filter (exists (bgp (triple ?s ?p ex:o)))
11
11
  # (bgp (triple ?s ?p ?o))))
12
12
  #
13
- # @see http://www.w3.org/TR/sparql11-query/#func-filter-exists
13
+ # @see https://www.w3.org/TR/sparql11-query/#func-filter-exists
14
14
  class Exists < Operator::Unary
15
15
  include Evaluatable
16
16
 
@@ -14,7 +14,7 @@ module SPARQL; module Algebra
14
14
  # (triple ?s :q ?w)
15
15
  # ))))
16
16
  #
17
- # @see http://www.w3.org/TR/sparql11-query/#evaluation
17
+ # @see https://www.w3.org/TR/sparql11-query/#evaluation
18
18
  class Exprlist < Operator
19
19
  include Evaluatable
20
20
 
@@ -40,16 +40,6 @@ module SPARQL; module Algebra
40
40
  res = operands.all? {|op| boolean(op.evaluate(bindings, depth: options[:depth].to_i + 1, **options)).true? }
41
41
  RDF::Literal(res) # FIXME: error handling
42
42
  end
43
-
44
- ##
45
- # Returns an optimized version of this query.
46
- #
47
- # Return optimized query
48
- #
49
- # @return [Union, RDF::Query] `self`
50
- def optimize
51
- operands = operands.map(&:optimize)
52
- end
53
43
  end # Exprlist
54
44
  end # Operator
55
45
  end; end # SPARQL::Algebra
@@ -11,7 +11,7 @@ module SPARQL; module Algebra
11
11
  # (extend ((?z (+ ?o 10)))
12
12
  # (bgp (triple ?s <http://example/p> ?o)))))
13
13
  #
14
- # @see http://www.w3.org/TR/sparql11-query/#evaluation
14
+ # @see https://www.w3.org/TR/sparql11-query/#evaluation
15
15
  class Extend < Operator::Binary
16
16
  include Query
17
17
 
@@ -38,7 +38,7 @@ module SPARQL; module Algebra
38
38
  # @yieldreturn [void] ignored
39
39
  # @return [RDF::Query::Solutions]
40
40
  # the resulting solution sequence
41
- # @see http://www.w3.org/TR/sparql11-query/#evaluation
41
+ # @see https://www.w3.org/TR/sparql11-query/#evaluation
42
42
  def execute(queryable, **options, &block)
43
43
  debug(options) {"Extend"}
44
44
  @solutions = operand(1).execute(queryable, depth: options[:depth].to_i + 1, **options)
@@ -50,6 +50,7 @@ module SPARQL; module Algebra
50
50
  depth: options[:depth].to_i + 1,
51
51
  **options)
52
52
  debug(options) {"===> + #{var} => #{val.inspect}"}
53
+ val = val.dup.bind(solution) if val.is_a?(RDF::Query::Pattern)
53
54
  solution.bindings[var.to_sym] = val
54
55
  rescue TypeError => e
55
56
  # Evaluates to error, ignore
@@ -72,16 +73,6 @@ module SPARQL; module Algebra
72
73
  end
73
74
  super
74
75
  end
75
-
76
- ##
77
- # Returns an optimized version of this query.
78
- #
79
- # Return optimized query
80
- #
81
- # @return FIXME
82
- def optimize
83
- operands = operands.map(&:optimize)
84
- end
85
76
  end # Filter
86
77
  end # Operator
87
78
  end; end # SPARQL::Algebra
@@ -9,7 +9,7 @@ module SPARQL; module Algebra
9
9
  # (filter (= ?v 2)
10
10
  # (bgp (triple ?s <http://example/p> ?v)))))
11
11
  #
12
- # @see http://www.w3.org/TR/sparql11-query/#evaluation
12
+ # @see https://www.w3.org/TR/sparql11-query/#evaluation
13
13
  class Filter < Operator::Binary
14
14
  include Query
15
15
 
@@ -34,8 +34,8 @@ module SPARQL; module Algebra
34
34
  # @yieldreturn [void] ignored
35
35
  # @return [RDF::Query::Solutions]
36
36
  # the resulting solution sequence
37
- # @see http://www.w3.org/TR/sparql11-query/#sparqlAlgebra
38
- # @see http://www.w3.org/TR/sparql11-query/#ebv
37
+ # @see https://www.w3.org/TR/sparql11-query/#sparqlAlgebra
38
+ # @see https://www.w3.org/TR/sparql11-query/#ebv
39
39
  def execute(queryable, **options, &block)
40
40
  debug(options) {"Filter #{operands.first.to_sxp}"}
41
41
  opts = options.merge(queryable: queryable, depth: options[:depth].to_i + 1)
@@ -69,16 +69,6 @@ module SPARQL; module Algebra
69
69
  end
70
70
  self
71
71
  end
72
-
73
- ##
74
- # Returns an optimized version of this query.
75
- #
76
- # Return optimized query
77
- #
78
- # @return [Union, RDF::Query] `self`
79
- def optimize
80
- operands = operands.map(&:optimize)
81
- end
82
72
  end # Filter
83
73
  end # Operator
84
74
  end; end # SPARQL::Algebra
@@ -6,8 +6,8 @@ module SPARQL; module Algebra
6
6
  # @example
7
7
  # (floor ?x)
8
8
  #
9
- # @see http://www.w3.org/TR/sparql11-query/#func-floor
10
- # @see http://www.w3.org/TR/xpath-functions/#func-floor
9
+ # @see https://www.w3.org/TR/sparql11-query/#func-floor
10
+ # @see https://www.w3.org/TR/xpath-functions/#func-floor
11
11
  class Floor < Operator::Unary
12
12
  include Evaluatable
13
13
 
@@ -15,7 +15,7 @@ module SPARQL; module Algebra
15
15
  # (graph :g
16
16
  # ((triple :s :p :o))))
17
17
  #
18
- # @see http://www.w3.org/TR/sparql11-query/#sparqlAlgebra
18
+ # @see https://www.w3.org/TR/sparql11-query/#sparqlAlgebra
19
19
  class Graph < Operator::Binary
20
20
  include Query
21
21
 
@@ -36,7 +36,7 @@ module SPARQL; module Algebra
36
36
  # @param [Array<RDF::Query::Pattern>] patterns
37
37
  # Quads
38
38
  # @return [RDF::Query]
39
- def self.new(name, patterns, &block)
39
+ def self.new(name, patterns, **options, &block)
40
40
  case patterns
41
41
  when RDF::Query
42
42
  # Record that the argument as a (bgp) for re-serialization back to SSE
@@ -63,26 +63,15 @@ module SPARQL; module Algebra
63
63
  # @yieldreturn [void] ignored
64
64
  # @return [RDF::Query::Solutions]
65
65
  # the resulting solution sequence
66
- # @see http://www.w3.org/TR/sparql11-query/#sparqlAlgebra
66
+ # @see https://www.w3.org/TR/sparql11-query/#sparqlAlgebra
67
67
  def execute(queryable, **options, &block)
68
68
  debug(options) {"Graph #{operands.first}"}
69
69
  graph_name, query = operands.first, operands.last
70
70
  @solutions = queryable.query(query, graph_name: graph_name, **options, &block)
71
71
  end
72
-
73
- ##
74
- # Returns an optimized version of this query.
75
- #
76
- # Return optimized query
77
- #
78
- # @return [Union, RDF::Query] `self`
79
- def optimize
80
- operands = operands.map(&:optimize)
81
- end
82
-
72
+
83
73
  ##
84
74
  # Don't do any more rewriting
85
- # FIXME: if ooperator is JOIN, and rewritten sub-operators are queries, can do simple merge of sub-graphs
86
75
  # @return [SPARQL::Algebra::Expression] `self`
87
76
  def rewrite(&block)
88
77
  self
@@ -6,11 +6,11 @@ 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
11
- # @see http://www.w3.org/TR/xpath-functions/#func-numeric-greater-than
12
- # @see http://www.w3.org/TR/xpath-functions/#func-boolean-greater-than
13
- # @see http://www.w3.org/TR/xpath-functions/#func-dateTime-greater-than
9
+ # @see https://www.w3.org/TR/sparql11-query/#OperatorMapping
10
+ # @see https://www.w3.org/TR/xpath-functions/#func-compare
11
+ # @see https://www.w3.org/TR/xpath-functions/#func-numeric-greater-than
12
+ # @see https://www.w3.org/TR/xpath-functions/#func-boolean-greater-than
13
+ # @see https://www.w3.org/TR/xpath-functions/#func-dateTime-greater-than
14
14
  class GreaterThan < Compare
15
15
  NAME = :>
16
16
 
@@ -7,11 +7,11 @@ module SPARQL; module Algebra
7
7
  # @example
8
8
  # (>= ?x ?y)
9
9
  #
10
- # @see http://www.w3.org/TR/sparql11-query/#OperatorMapping
11
- # @see http://www.w3.org/TR/xpath-functions/#func-compare
12
- # @see http://www.w3.org/TR/xpath-functions/#func-numeric-greater-than
13
- # @see http://www.w3.org/TR/xpath-functions/#func-boolean-greater-than
14
- # @see http://www.w3.org/TR/xpath-functions/#func-dateTime-greater-than
10
+ # @see https://www.w3.org/TR/sparql11-query/#OperatorMapping
11
+ # @see https://www.w3.org/TR/xpath-functions/#func-compare
12
+ # @see https://www.w3.org/TR/xpath-functions/#func-numeric-greater-than
13
+ # @see https://www.w3.org/TR/xpath-functions/#func-boolean-greater-than
14
+ # @see https://www.w3.org/TR/xpath-functions/#func-dateTime-greater-than
15
15
  class GreaterThanOrEqual < Compare
16
16
  NAME = :>=
17
17
 
@@ -17,7 +17,7 @@ module SPARQL; module Algebra
17
17
  # (bgp (triple ?s :p ?v))
18
18
  # (bgp (triple ?s :q ?w)))))))
19
19
  #
20
- # @see http://www.w3.org/TR/sparql11-query/#sparqlAlgebra
20
+ # @see https://www.w3.org/TR/sparql11-query/#sparqlAlgebra
21
21
  class Group < Operator
22
22
  include Query
23
23
 
@@ -37,7 +37,7 @@ module SPARQL; module Algebra
37
37
  # @yieldreturn [void] ignored
38
38
  # @return [RDF::Query::Solutions]
39
39
  # the resulting solution sequence
40
- # @see http://www.w3.org/TR/sparql11-query/#sparqlGroupAggregate
40
+ # @see https://www.w3.org/TR/sparql11-query/#sparqlGroupAggregate
41
41
  def execute(queryable, **options, &block)
42
42
  debug(options) {"Group"}
43
43
  exprlist = operands.first
@@ -84,8 +84,18 @@ module SPARQL; module Algebra
84
84
  group_soln
85
85
  end)
86
86
 
87
- # Make sure that's at least an empty solution
88
- @solutions << RDF::Query::Solution.new if @solutions.empty?
87
+ # If there exprlist is empty, make sure that's at least an empty solution
88
+ if @solutions.empty? && exprlist.empty?
89
+ soln = RDF::Query::Solution.new
90
+ aggregates.each do |(var, aggregate)|
91
+ begin
92
+ soln[var] = aggregate.aggregate([], **options)
93
+ rescue TypeError
94
+ # Ignored in output
95
+ end
96
+ end
97
+ @solutions << soln
98
+ end
89
99
 
90
100
  debug(options) {"=>(solutions) #{@solutions.inspect}"}
91
101
  @solutions.each(&block) if block_given?
@@ -112,16 +122,6 @@ module SPARQL; module Algebra
112
122
  end
113
123
  super
114
124
  end
115
-
116
- ##
117
- # Returns an optimized version of this query.
118
- #
119
- # TODO
120
- #
121
- # @return [Group] `self`
122
- def optimize
123
- self
124
- end
125
125
  end # Group
126
126
  end # Operator
127
127
  end; end # SPARQL::Algebra
@@ -13,7 +13,7 @@ module SPARQL; module Algebra
13
13
  # (group () ((??.0 (group_concat ?o)))
14
14
  # (bgp (triple ??.0 :p1 ?o)))))))
15
15
  #
16
- # @see http://www.w3.org/TR/sparql11-query/#defn_aggGroupConcat
16
+ # @see https://www.w3.org/TR/sparql11-query/#defn_aggGroupConcat
17
17
  class GroupConcat < Operator
18
18
  include Aggregate
19
19
 
@@ -9,7 +9,7 @@ module SPARQL; module Algebra
9
9
  # (extend ((?x (hours ?date)))
10
10
  # (bgp (triple ?s :date ?date)))))
11
11
  #
12
- # @see http://www.w3.org/TR/sparql11-query/#func-hours
12
+ # @see https://www.w3.org/TR/sparql11-query/#func-hours
13
13
  class Hours < Operator::Unary
14
14
  include Evaluatable
15
15
 
@@ -10,7 +10,7 @@ module SPARQL; module Algebra
10
10
  # (extend ((?integer (if (= (lang ?o) "ja") true false)))
11
11
  # (bgp (triple ?s ?p ?o))))))
12
12
  #
13
- # @see http://www.w3.org/TR/sparql11-query/#func-if
13
+ # @see https://www.w3.org/TR/sparql11-query/#func-if
14
14
  class If < Operator::Ternary
15
15
  include Evaluatable
16
16
 
@@ -40,16 +40,6 @@ module SPARQL; module Algebra
40
40
  rescue
41
41
  raise TypeError
42
42
  end
43
-
44
- ##
45
- # Returns an optimized version of this query.
46
- #
47
- # Return optimized query
48
- #
49
- # @return [Union, RDF::Query] `self`
50
- def optimize
51
- operands = operands.map(&:optimize)
52
- end
53
43
  end # If
54
44
  end # Operator
55
45
  end; end # SPARQL::Algebra
@@ -6,7 +6,7 @@ module SPARQL; module Algebra
6
6
  # @example
7
7
  # (ask (filter (in 2 1 2 3) (bgp)))
8
8
  #
9
- # @see http://www.w3.org/TR/sparql11-query/#func-in
9
+ # @see https://www.w3.org/TR/sparql11-query/#func-in
10
10
  class In < Operator
11
11
  include Evaluatable
12
12
 
@@ -54,16 +54,6 @@ module SPARQL; module Algebra
54
54
  else RDF::Literal::FALSE
55
55
  end
56
56
  end
57
-
58
- ##
59
- # Returns an optimized version of this query.
60
- #
61
- # Return optimized query
62
- #
63
- # @return [Union, RDF::Query] `self`
64
- def optimize
65
- operands = operands.map(&:optimize)
66
- end
67
57
  end # In
68
58
  end # Operator
69
59
  end; end # SPARQL::Algebra
@@ -9,7 +9,7 @@ module SPARQL; module Algebra
9
9
  # @example
10
10
  # (insert ((triple ?s ?p "q")))
11
11
  #
12
- # @see http://www.w3.org/TR/sparql11-update/#insert
12
+ # @see https://www.w3.org/TR/sparql11-update/#insert
13
13
  class Insert < Operator::Unary
14
14
  include SPARQL::Algebra::Update
15
15
 
@@ -20,7 +20,7 @@ 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] :solutions
23
+ # @param [RDF::Query::Solutions] solutions
24
24
  # Solution to map to patterns for this operation
25
25
  # @param [Hash{Symbol => Object}] options
26
26
  # any additional keyword options
@@ -30,7 +30,7 @@ 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/
33
+ # @see https://www.w3.org/TR/sparql11-update/
34
34
  def execute(queryable, solutions: nil, **options)
35
35
  # Only binds the first solution
36
36
  solution = solutions.is_a?(RDF::Query::Solutions) ? solutions.first : solutions
@@ -45,7 +45,7 @@ module SPARQL; module Algebra
45
45
  end
46
46
  patterns.each do |pattern|
47
47
  pattern = pattern.dup.bind(solution)
48
- debug(options) {"Insert statement #{statement.to_sse}"}
48
+ debug(options) {"Insert pattern #{pattern.to_sse}"}
49
49
  # Only insert bound or constant patterns
50
50
  queryable.insert(RDF::Statement.from(pattern)) if pattern.bound? || pattern.constant?
51
51
  end
@@ -9,7 +9,7 @@ module SPARQL; module Algebra
9
9
  # @example
10
10
  # (insertData ((graph <http://example.org/g1> ((triple :s :p :o)))))
11
11
  #
12
- # @see http://www.w3.org/TR/sparql11-update/#insertData
12
+ # @see https://www.w3.org/TR/sparql11-update/#insertData
13
13
  class InsertData < Operator::Unary
14
14
  include SPARQL::Algebra::Update
15
15
 
@@ -28,7 +28,7 @@ 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/
31
+ # @see https://www.w3.org/TR/sparql11-update/
32
32
  def execute(queryable, **options)
33
33
  operand.each do |op|
34
34
  debug(options) {"InsertData #{op.to_sxp}"}
@@ -8,7 +8,7 @@ module SPARQL; module Algebra
8
8
  # (extend ((?uri (uri "uri")) (?iri (iri "iri")))
9
9
  # (bgp))))
10
10
  #
11
- # @see http://www.w3.org/TR/sparql11-query/#func-iri
11
+ # @see https://www.w3.org/TR/sparql11-query/#func-iri
12
12
  class IRI < Operator::Unary
13
13
  include Evaluatable
14
14
 
@@ -10,7 +10,7 @@ module SPARQL; module Algebra
10
10
  # (filter (isBlank ?v)
11
11
  # (bgp (triple ?x :p ?v)))))
12
12
  #
13
- # @see http://www.w3.org/TR/sparql11-query/#func-isBlank
13
+ # @see https://www.w3.org/TR/sparql11-query/#func-isBlank
14
14
  class IsBlank < Operator::Unary
15
15
  include Evaluatable
16
16
 
@@ -10,7 +10,7 @@ module SPARQL; module Algebra
10
10
  # (filter (isIRI ?v)
11
11
  # (bgp (triple ?x :p ?v)))))
12
12
  #
13
- # @see http://www.w3.org/TR/sparql11-query/#func-isIRI
13
+ # @see https://www.w3.org/TR/sparql11-query/#func-isIRI
14
14
  class IsIRI < Operator::Unary
15
15
  include Evaluatable
16
16
 
@@ -10,7 +10,7 @@ module SPARQL; module Algebra
10
10
  # (filter (isLiteral ?v)
11
11
  # (bgp (triple ?x :p ?v)))))
12
12
  #
13
- # @see http://www.w3.org/TR/sparql11-query/#func-isLiteral
13
+ # @see https://www.w3.org/TR/sparql11-query/#func-isLiteral
14
14
  class IsLiteral < Operator::Unary
15
15
  include Evaluatable
16
16
 
@@ -12,7 +12,7 @@ module SPARQL; module Algebra
12
12
  # (filter (isNumeric ?v)
13
13
  # (bgp (triple ?x :p ?v)))))
14
14
  #
15
- # @see http://www.w3.org/TR/sparql11-query/#func-isNumeric
15
+ # @see https://www.w3.org/TR/sparql11-query/#func-isNumeric
16
16
  class IsNumeric < Operator::Unary
17
17
  include Evaluatable
18
18
 
@@ -0,0 +1,30 @@
1
+ module SPARQL; module Algebra
2
+ class Operator
3
+ ##
4
+ # The SPARQL `isTRIPLE` operator.
5
+ #
6
+ # Returns true if term is an RDF-star triple. Returns false otherwise.
7
+ #
8
+ # @see https://w3c.github.io/rdf-star/rdf-star-cg-spec.html#istriple
9
+ class IsTriple < Operator::Unary
10
+ include Evaluatable
11
+
12
+ NAME = :isTRIPLE
13
+
14
+ ##
15
+ # Returns `true` if the operand is an `RDF::Statement`, `false` otherwise.
16
+ #
17
+ # @param [RDF::Term] term
18
+ # an RDF term
19
+ # @return [RDF::Literal::Boolean] `true` or `false`
20
+ # @raise [TypeError] if the operand is not an RDF term
21
+ def apply(term)
22
+ case term
23
+ when RDF::Statement then RDF::Literal::TRUE
24
+ when RDF::Term then RDF::Literal::FALSE
25
+ else raise TypeError, "expected an RDF::Term, but got #{term.inspect}"
26
+ end
27
+ end
28
+ end # IsTriple
29
+ end # Operator
30
+ end; end # SPARQL::Algebra