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
@@ -11,7 +11,7 @@ module SPARQL; module Algebra
11
11
  # (extend ((?x (seconds ?date)))
12
12
  # (bgp (triple ?s :date ?date)))))
13
13
  #
14
- # @see http://www.w3.org/TR/sparql11-query/#func-seconds
14
+ # @see https://www.w3.org/TR/sparql11-query/#func-seconds
15
15
  class Seconds < Operator::Unary
16
16
  include Evaluatable
17
17
 
@@ -28,7 +28,7 @@ module SPARQL; module Algebra
28
28
  # each matching solution
29
29
  # @yieldparam [RDF::Query::Solution] solution
30
30
  # @yieldreturn [void] ignored
31
- # @see http://www.w3.org/TR/sparql11-query/#sparqlAlgebra
31
+ # @see https://www.w3.org/TR/sparql11-query/#sparqlAlgebra
32
32
  def execute(queryable, **options, &block)
33
33
  subject, object = options[:subject], options[:object]
34
34
  debug(options) {"Seq #{[subject, operands, object].to_sse}"}
@@ -34,7 +34,7 @@ module SPARQL; module Algebra
34
34
  # each matching solution
35
35
  # @yieldparam [RDF::Query::Solution] solution
36
36
  # @yieldreturn [void] ignored
37
- # @see http://www.w3.org/TR/sparql11-query/#sparqlAlgebra
37
+ # @see https://www.w3.org/TR/sparql11-query/#sparqlAlgebra
38
38
  def execute(queryable, **options)
39
39
  debug(options) {"Sequence #{operands.to_sse}"}
40
40
 
@@ -13,7 +13,7 @@ module SPARQL; module Algebra
13
13
  # (extend ((?hash (sha1 ?l)))
14
14
  # (bgp (triple :s1 :str ?l)))))
15
15
  #
16
- # @see http://www.w3.org/TR/sparql11-query/#func-sha1
16
+ # @see https://www.w3.org/TR/sparql11-query/#func-sha1
17
17
  class SHA1 < Operator::Unary
18
18
  include Evaluatable
19
19
 
@@ -13,7 +13,7 @@ module SPARQL; module Algebra
13
13
  # (extend ((?hash (sha256 ?l)))
14
14
  # (bgp (triple :s1 :str ?l)))))
15
15
  #
16
- # @see http://www.w3.org/TR/sparql11-query/#func-sha256
16
+ # @see https://www.w3.org/TR/sparql11-query/#func-sha256
17
17
  class SHA256 < Operator::Unary
18
18
  include Evaluatable
19
19
 
@@ -13,7 +13,7 @@ module SPARQL; module Algebra
13
13
  # (extend ((?hash (sha384 ?l)))
14
14
  # (bgp (triple :s1 :str ?l)))))
15
15
  #
16
- # @see http://www.w3.org/TR/sparql11-query/#func-sha384
16
+ # @see https://www.w3.org/TR/sparql11-query/#func-sha384
17
17
  class SHA384 < Operator::Unary
18
18
  include Evaluatable
19
19
 
@@ -13,7 +13,7 @@ module SPARQL; module Algebra
13
13
  # (extend ((?hash (sha512 ?l)))
14
14
  # (bgp (triple :s1 :str ?l)))))
15
15
  #
16
- # @see http://www.w3.org/TR/sparql11-query/#func-sha512
16
+ # @see https://www.w3.org/TR/sparql11-query/#func-sha512
17
17
  class SHA512 < Operator::Unary
18
18
  include Evaluatable
19
19
 
@@ -10,7 +10,7 @@ module SPARQL; module Algebra
10
10
  # (order (?v)
11
11
  # (bgp (triple ??0 :num ?v))))))
12
12
  #
13
- # @see http://www.w3.org/TR/sparql11-query/#sparqlAlgebra
13
+ # @see https://www.w3.org/TR/sparql11-query/#sparqlAlgebra
14
14
  class Slice < Operator::Ternary
15
15
  include Query
16
16
 
@@ -42,7 +42,7 @@ module SPARQL; module Algebra
42
42
  # @yieldreturn [void] ignored
43
43
  # @return [RDF::Query::Solutions]
44
44
  # the resulting solution sequence
45
- # @see http://www.w3.org/TR/sparql11-query/#sparqlAlgebra
45
+ # @see https://www.w3.org/TR/sparql11-query/#sparqlAlgebra
46
46
  def execute(queryable, **options, &block)
47
47
  offset = operands[0] == :_ ? 0 : operands[0].to_i
48
48
  limit = operands[1] == :_ ? -1 : operands[1].to_i
@@ -52,16 +52,6 @@ module SPARQL; module Algebra
52
52
  @solutions.each(&block) if block_given?
53
53
  @solutions
54
54
  end
55
-
56
- ##
57
- # Returns an optimized version of this query.
58
- #
59
- # Return optimized query
60
- #
61
- # @return [Union, RDF::Query] `self`
62
- def optimize
63
- operands = operands.map(&:optimize)
64
- end
65
55
  end # Slice
66
56
  end # Operator
67
57
  end; end # SPARQL::Algebra
@@ -10,7 +10,7 @@ module SPARQL; module Algebra
10
10
  # (filter (= (str ?v) "1")
11
11
  # (bgp (triple ?x :p ?v)))))
12
12
  #
13
- # @see http://www.w3.org/TR/sparql11-query/#func-str
13
+ # @see https://www.w3.org/TR/sparql11-query/#func-str
14
14
  class Str < Operator::Unary
15
15
  include Evaluatable
16
16
 
@@ -6,8 +6,8 @@ module SPARQL; module Algebra
6
6
  # @example
7
7
  # (strafter ?x ?y)
8
8
  #
9
- # @see http://www.w3.org/TR/sparql11-query/#func-strafter
10
- # @see http://www.w3.org/TR/xpath-functions/#func-substring-after
9
+ # @see https://www.w3.org/TR/sparql11-query/#func-strafter
10
+ # @see https://www.w3.org/TR/xpath-functions/#func-substring-after
11
11
  class StrAfter < Operator::Binary
12
12
  include Evaluatable
13
13
 
@@ -6,8 +6,8 @@ module SPARQL; module Algebra
6
6
  # @example
7
7
  # (strbefore ?x ?y)
8
8
  #
9
- # @see http://www.w3.org/TR/sparql11-query/#func-strbefore
10
- # @see http://www.w3.org/TR/xpath-functions/#func-substring-before
9
+ # @see https://www.w3.org/TR/sparql11-query/#func-strbefore
10
+ # @see https://www.w3.org/TR/xpath-functions/#func-substring-before
11
11
  class StrBefore < Operator::Binary
12
12
  include Evaluatable
13
13
 
@@ -9,7 +9,7 @@ module SPARQL; module Algebra
9
9
  # (filter (langMatches (lang ?str) "en")
10
10
  # (bgp (triple ?s :str ?str))))))
11
11
  #
12
- # @see http://www.w3.org/TR/sparql11-query/#func-strdt
12
+ # @see https://www.w3.org/TR/sparql11-query/#func-strdt
13
13
  class StrDT < Operator::Binary
14
14
  include Evaluatable
15
15
 
@@ -23,7 +23,7 @@ module SPARQL; module Algebra
23
23
  # @param [RDF::URI] datatypeIRI
24
24
  # datatype
25
25
  # @return [RDF::Literal] a datatyped literal
26
- # @see http://www.w3.org/TR/sparql11-query/#func-strdt
26
+ # @see https://www.w3.org/TR/sparql11-query/#func-strdt
27
27
  def apply(value, datatypeIRI)
28
28
  raise TypeError, "Literal #{value.inspect} is not simple" unless value.simple?
29
29
  RDF::Literal.new(value.to_s, datatype: datatypeIRI)
@@ -6,8 +6,8 @@ module SPARQL; module Algebra
6
6
  # @example
7
7
  # (strends ?x ?y)
8
8
  #
9
- # @see http://www.w3.org/TR/sparql11-query/#func-strends
10
- # @see http://www.w3.org/TR/xpath-functions/#func-ends-with
9
+ # @see https://www.w3.org/TR/sparql11-query/#func-strends
10
+ # @see https://wwww.w3.org/TR/xpath-functions/#func-ends-with
11
11
  class StrEnds < Operator::Binary
12
12
  include Evaluatable
13
13
 
@@ -10,7 +10,7 @@ module SPARQL; module Algebra
10
10
  # (filter (langMatches (lang ?str) "en")
11
11
  # (bgp (triple ?s :str ?str))))))
12
12
  #
13
- # @see http://www.w3.org/TR/sparql11-query/#func-strlang
13
+ # @see https://www.w3.org/TR/sparql11-query/#func-strlang
14
14
  class StrLang < Operator::Binary
15
15
  include Evaluatable
16
16
 
@@ -24,7 +24,7 @@ module SPARQL; module Algebra
24
24
  # @param [RDF::Literal] langTag
25
25
  # datatype
26
26
  # @return [RDF::Literal] a datatyped literal
27
- # @see http://www.w3.org/TR/sparql11-query/#func-strlang
27
+ # @see https://www.w3.org/TR/sparql11-query/#func-strlang
28
28
  def apply(value, langTag)
29
29
  raise TypeError, "Literal #{value.inspect} is not simple" unless value.simple?
30
30
  RDF::Literal.new(value.to_s, language: langTag.to_s)
@@ -6,8 +6,8 @@ module SPARQL; module Algebra
6
6
  # @example
7
7
  # (strlen ?x)
8
8
  #
9
- # @see http://www.w3.org/TR/sparql11-query/#func-strlen
10
- # @see http://www.w3.org/TR/xpath-functions/#func-string-length
9
+ # @see https://www.w3.org/TR/sparql11-query/#func-strlen
10
+ # @see https://www.w3.org/TR/xpath-functions/#func-string-length
11
11
  class StrLen < Operator::Unary
12
12
  include Evaluatable
13
13
 
@@ -6,8 +6,8 @@ module SPARQL; module Algebra
6
6
  # @example
7
7
  # (strstarts ?x ?y)
8
8
  #
9
- # @see http://www.w3.org/TR/sparql11-query/#func-strstarts
10
- # @see http://www.w3.org/TR/xpath-functions/#func-starts-with
9
+ # @see https://www.w3.org/TR/sparql11-query/#func-strstarts
10
+ # @see https://www.w3.org/TR/xpath-functions/#func-starts-with
11
11
  class StrStarts < Operator::Binary
12
12
  include Evaluatable
13
13
 
@@ -14,7 +14,7 @@ module SPARQL; module Algebra
14
14
  # (extend ((?uuid (struuid)))
15
15
  # (bgp))))))
16
16
  #
17
- # @see http://www.w3.org/TR/sparql11-query/#func-struuid
17
+ # @see https://www.w3.org/TR/sparql11-query/#func-struuid
18
18
  class StrUUID < Operator::Nullary
19
19
  include Evaluatable
20
20
 
@@ -0,0 +1,29 @@
1
+ module SPARQL; module Algebra
2
+ class Operator
3
+ ##
4
+ # The SPARQL `SUBJECT` operator.
5
+ #
6
+ # Returns the subject part of `arg` as a term.
7
+ #
8
+ # If triple is an RDF-star triple, the function returns the subject of this triple. Passing anything other than an RDF-star triple is an error.
9
+ #
10
+ # @see https://w3c.github.io/rdf-star/rdf-star-cg-spec.html#subject
11
+ class Subject < Operator::Unary
12
+ include Evaluatable
13
+
14
+ NAME = :subject
15
+
16
+ ##
17
+ # Returns the subject part of arg.
18
+ #
19
+ # @param [RDF::Statement] operand
20
+ # the operand
21
+ # @return [RDF::Literal]
22
+ # @raise [TypeError] if the operand is not a statement
23
+ def apply(operand)
24
+ raise TypeError, "expected an RDF::Statement, but got #{operand.inspect}" unless operand.is_a?(RDF::Statement)
25
+ operand.subject
26
+ end
27
+ end # Subject
28
+ end # Operator
29
+ end; end # SPARQL::Algebra
@@ -6,8 +6,8 @@ module SPARQL; module Algebra
6
6
  # @example
7
7
  # (substr ?x ?y)
8
8
  #
9
- # @see http://www.w3.org/TR/sparql11-query/#func-substr
10
- # @see http://www.w3.org/TR/xpath-functions/#func-substring
9
+ # @see https://www.w3.org/TR/sparql11-query/#func-substr
10
+ # @see https://www.w3.org/TR/xpath-functions/#func-substring
11
11
  class SubStr < Operator::Ternary
12
12
  include Evaluatable
13
13
 
@@ -71,7 +71,7 @@ module SPARQL; module Algebra
71
71
  # Remove the optional argument.
72
72
  #
73
73
  # @return [Array] `self`
74
- # @see http://openjena.org/wiki/SSE
74
+ # @see https://openjena.org/wiki/SSE
75
75
  def to_sxp_bin
76
76
  [NAME] + operands.reject {|o| o.to_s == ""}
77
77
  end
@@ -5,7 +5,7 @@ module SPARQL; module Algebra
5
5
  # (- ?x ?y)
6
6
  # (subtract ?x ?y)
7
7
  #
8
- # @see http://www.w3.org/TR/xpath-functions/#func-numeric-subtract
8
+ # @see https://www.w3.org/TR/xpath-functions/#func-numeric-subtract
9
9
  class Subtract < Operator::Binary
10
10
  include Evaluatable
11
11
 
@@ -10,7 +10,7 @@ module SPARQL; module Algebra
10
10
  # (group () ((??.0 (sum ?o)))
11
11
  # (bgp (triple ?s :dec ?o))))))
12
12
  #
13
- # @see http://www.w3.org/TR/sparql11-query/#defn_aggSum
13
+ # @see https://www.w3.org/TR/sparql11-query/#defn_aggSum
14
14
  class Sum < Operator
15
15
  include Aggregate
16
16
 
@@ -13,7 +13,7 @@ module SPARQL; module Algebra
13
13
  #
14
14
  # @example empty table
15
15
  # (table unit)
16
- # @see http://www.w3.org/TR/2013/REC-sparql11-query-20130321/#inline-data
16
+ # @see https://www.w3.org/TR/2013/REC-sparql11-query-20130321/#inline-data
17
17
  class Table < Operator
18
18
  include Query
19
19
 
@@ -32,7 +32,7 @@ module SPARQL; module Algebra
32
32
  # @yieldreturn [void] ignored
33
33
  # @return [RDF::Query::Solutions]
34
34
  # the resulting solution sequence
35
- # @see http://www.w3.org/TR/sparql11-query/#sparqlAlgebra
35
+ # @see https://www.w3.org/TR/sparql11-query/#sparqlAlgebra
36
36
  def execute(queryable, **options, &block)
37
37
  @solutions = RDF::Query::Solutions()
38
38
  Array(operands[1..-1]).each do |row|
@@ -11,7 +11,7 @@ module SPARQL; module Algebra
11
11
  # (extend ((?x (timezone ?date)))
12
12
  # (bgp (triple ?s :date ?date)))))
13
13
  #
14
- # @see http://www.w3.org/TR/sparql11-query/#func-timezone
14
+ # @see https://www.w3.org/TR/sparql11-query/#func-timezone
15
15
  class Timezone < Operator::Unary
16
16
  include Evaluatable
17
17
 
@@ -0,0 +1,27 @@
1
+ module SPARQL; module Algebra
2
+ class Operator
3
+ ##
4
+ # The SPARQL `triple` operator.
5
+ #
6
+ # If the 3-tuple (term1, term2, term3) is an RDF-star triple, the function returns this triple. If the 3-tuple is not an RDF-star triple, then the function raises an error.
7
+ #
8
+ # @see https://w3c.github.io/rdf-star/rdf-star-cg-spec.html#triple
9
+ class Triple < Operator::Ternary
10
+ include Evaluatable
11
+
12
+ NAME = :triple
13
+
14
+ ##
15
+ # @param [RDF::Term] subject
16
+ # @param [RDF::Term] predicate
17
+ # @param [RDF::Term] object
18
+ # @return [RDF::URI]
19
+ # @raise [TypeError] if the operand is not a simple literal
20
+ def apply(subject, predicate, object)
21
+ triple = RDF::Statement(subject, predicate, object)
22
+ raise TypeError, "valid components, but got #{triple.inspect}" unless triple.valid?
23
+ triple
24
+ end
25
+ end # Triple
26
+ end # Operator
27
+ end; end # SPARQL::Algebra
@@ -11,7 +11,7 @@ module SPARQL; module Algebra
11
11
  # (extend ((?x (tz ?date)))
12
12
  # (bgp (triple ?s :date ?date)))))
13
13
  #
14
- # @see http://www.w3.org/TR/sparql11-query/#func-tz
14
+ # @see https://www.w3.org/TR/sparql11-query/#func-tz
15
15
  class TZ < Operator::Unary
16
16
  include Evaluatable
17
17
 
@@ -6,8 +6,8 @@ module SPARQL; module Algebra
6
6
  # @example
7
7
  # (ucase ?x)
8
8
  #
9
- # @see http://www.w3.org/TR/sparql11-query/#func-ucase
10
- # @see http://www.w3.org/TR/xpath-functions/#func-ucase
9
+ # @see https://www.w3.org/TR/sparql11-query/#func-ucase
10
+ # @see https://www.w3.org/TR/xpath-functions/#func-ucase
11
11
  class UCase < Operator::Unary
12
12
  include Evaluatable
13
13
 
@@ -10,7 +10,7 @@ module SPARQL; module Algebra
10
10
  # (graph ?g
11
11
  # (bgp (triple ?s ?p ?o)))))
12
12
  #
13
- # @see http://www.w3.org/TR/sparql11-query/#sparqlAlgebra
13
+ # @see https://www.w3.org/TR/sparql11-query/#sparqlAlgebra
14
14
  class Union < Operator::Binary
15
15
  include Query
16
16
 
@@ -30,7 +30,7 @@ module SPARQL; module Algebra
30
30
  # @yieldreturn [void] ignored
31
31
  # @return [RDF::Query::Solutions]
32
32
  # the resulting solution sequence
33
- # @see http://www.w3.org/TR/sparql11-query/#sparqlAlgebra
33
+ # @see https://www.w3.org/TR/sparql11-query/#sparqlAlgebra
34
34
  def execute(queryable, **options, &block)
35
35
  debug(options) {"Union"}
36
36
  @solutions = RDF::Query::Solutions(operands.inject([]) do |memo, op|
@@ -55,13 +55,14 @@ module SPARQL; module Algebra
55
55
  end
56
56
 
57
57
  ##
58
- # Returns an optimized version of this query.
58
+ # Optimizes this query.
59
59
  #
60
60
  # Optimize operands and remove any which are empty.
61
61
  #
62
- # @return [Union, RDF::Query] `self`
63
- def optimize
64
- ops = operands.map {|o| o.optimize }.select {|o| o.respond_to?(:empty?) && !o.empty?}
62
+ # @return [self]
63
+ # @see SPARQL::Algebra::Expression#optimize!
64
+ def optimize!(**options)
65
+ ops = operands.map {|o| o.optimize(**options) }.select {|o| o.respond_to?(:empty?) && !o.empty?}
65
66
  @operands = ops
66
67
  self
67
68
  end
@@ -9,7 +9,7 @@ module SPARQL; module Algebra
9
9
  # (bgp (triple ?s ?p ?o))
10
10
  # (insert ((triple ?s ?p "q")))))
11
11
  #
12
- # @see http://www.w3.org/TR/sparql11-update/#graphUpdate
12
+ # @see https://www.w3.org/TR/sparql11-update/#graphUpdate
13
13
  class Update < Operator
14
14
  include SPARQL::Algebra::Update
15
15
 
@@ -30,7 +30,7 @@ module SPARQL; module Algebra
30
30
  # If an attempt is made to perform an unsupported operation
31
31
  # @raise [IOError]
32
32
  # If `queryable` is immutable
33
- # @see http://www.w3.org/TR/sparql11-update/
33
+ # @see https://www.w3.org/TR/sparql11-update/
34
34
  def execute(queryable, **options)
35
35
  debug(options) {"Update"}
36
36
  raise IOError, "queryable is not mutable" unless queryable.mutable?
@@ -9,7 +9,7 @@ module SPARQL; module Algebra
9
9
  # @example
10
10
  # (using (:g1) (bgp (triple ?s ?p ?o)))
11
11
  #
12
- # @see http://www.w3.org/TR/sparql11-update/#add
12
+ # @see https://www.w3.org/TR/sparql11-update/#add
13
13
  class Using < Operator
14
14
  include SPARQL::Algebra::Query
15
15
 
@@ -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, **options, &block)
35
35
  debug(options) {"Using"}
36
36
  Dataset.new(*operands).execute(queryable, depth: options[:depth].to_i + 1, **options, &block)