sparql 3.1.0 → 3.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +183 -69
- data/UNLICENSE +1 -1
- data/VERSION +1 -1
- data/bin/sparql +20 -9
- data/lib/rack/sparql/conneg.rb +2 -2
- data/lib/sinatra/sparql.rb +3 -3
- data/lib/sparql.rb +8 -6
- data/lib/sparql/algebra.rb +7 -15
- data/lib/sparql/algebra/aggregate.rb +2 -2
- data/lib/sparql/algebra/expression.rb +22 -8
- data/lib/sparql/algebra/extensions.rb +135 -3
- data/lib/sparql/algebra/operator.rb +37 -9
- data/lib/sparql/algebra/operator/abs.rb +2 -2
- data/lib/sparql/algebra/operator/add.rb +2 -2
- data/lib/sparql/algebra/operator/alt.rb +2 -2
- data/lib/sparql/algebra/operator/and.rb +3 -3
- data/lib/sparql/algebra/operator/asc.rb +1 -1
- data/lib/sparql/algebra/operator/ask.rb +2 -12
- data/lib/sparql/algebra/operator/avg.rb +1 -1
- data/lib/sparql/algebra/operator/base.rb +8 -8
- data/lib/sparql/algebra/operator/bgp.rb +1 -1
- data/lib/sparql/algebra/operator/bnode.rb +2 -2
- data/lib/sparql/algebra/operator/bound.rb +1 -1
- data/lib/sparql/algebra/operator/ceil.rb +2 -2
- data/lib/sparql/algebra/operator/clear.rb +2 -2
- data/lib/sparql/algebra/operator/coalesce.rb +1 -11
- data/lib/sparql/algebra/operator/compare.rb +8 -8
- data/lib/sparql/algebra/operator/concat.rb +2 -2
- data/lib/sparql/algebra/operator/construct.rb +2 -12
- data/lib/sparql/algebra/operator/contains.rb +2 -2
- data/lib/sparql/algebra/operator/copy.rb +2 -2
- data/lib/sparql/algebra/operator/count.rb +1 -1
- data/lib/sparql/algebra/operator/create.rb +2 -2
- data/lib/sparql/algebra/operator/dataset.rb +2 -13
- data/lib/sparql/algebra/operator/datatype.rb +1 -1
- data/lib/sparql/algebra/operator/day.rb +1 -1
- data/lib/sparql/algebra/operator/delete.rb +4 -4
- data/lib/sparql/algebra/operator/delete_data.rb +2 -2
- data/lib/sparql/algebra/operator/delete_where.rb +2 -2
- data/lib/sparql/algebra/operator/desc.rb +1 -1
- data/lib/sparql/algebra/operator/describe.rb +2 -12
- data/lib/sparql/algebra/operator/distinct.rb +2 -12
- data/lib/sparql/algebra/operator/divide.rb +1 -1
- data/lib/sparql/algebra/operator/drop.rb +2 -2
- data/lib/sparql/algebra/operator/encode_for_uri.rb +2 -2
- data/lib/sparql/algebra/operator/equal.rb +2 -2
- data/lib/sparql/algebra/operator/exists.rb +1 -1
- data/lib/sparql/algebra/operator/exprlist.rb +1 -11
- data/lib/sparql/algebra/operator/extend.rb +14 -13
- data/lib/sparql/algebra/operator/filter.rb +3 -13
- data/lib/sparql/algebra/operator/floor.rb +2 -2
- data/lib/sparql/algebra/operator/graph.rb +3 -14
- data/lib/sparql/algebra/operator/greater_than.rb +5 -5
- data/lib/sparql/algebra/operator/greater_than_or_equal.rb +5 -5
- data/lib/sparql/algebra/operator/group.rb +14 -14
- data/lib/sparql/algebra/operator/group_concat.rb +1 -1
- data/lib/sparql/algebra/operator/hours.rb +1 -1
- data/lib/sparql/algebra/operator/if.rb +1 -11
- data/lib/sparql/algebra/operator/in.rb +1 -11
- data/lib/sparql/algebra/operator/insert.rb +3 -3
- data/lib/sparql/algebra/operator/insert_data.rb +2 -2
- data/lib/sparql/algebra/operator/iri.rb +1 -1
- data/lib/sparql/algebra/operator/is_blank.rb +1 -1
- data/lib/sparql/algebra/operator/is_iri.rb +1 -1
- data/lib/sparql/algebra/operator/is_literal.rb +1 -1
- data/lib/sparql/algebra/operator/is_numeric.rb +1 -1
- data/lib/sparql/algebra/operator/join.rb +9 -7
- data/lib/sparql/algebra/operator/lang.rb +1 -1
- data/lib/sparql/algebra/operator/lang_matches.rb +3 -3
- data/lib/sparql/algebra/operator/lcase.rb +2 -2
- data/lib/sparql/algebra/operator/left_join.rb +12 -9
- data/lib/sparql/algebra/operator/less_than.rb +5 -5
- data/lib/sparql/algebra/operator/less_than_or_equal.rb +5 -5
- data/lib/sparql/algebra/operator/load.rb +2 -2
- data/lib/sparql/algebra/operator/max.rb +1 -1
- data/lib/sparql/algebra/operator/md5.rb +1 -1
- data/lib/sparql/algebra/operator/min.rb +1 -1
- data/lib/sparql/algebra/operator/minus.rb +9 -8
- data/lib/sparql/algebra/operator/minutes.rb +1 -1
- data/lib/sparql/algebra/operator/modify.rb +1 -1
- data/lib/sparql/algebra/operator/month.rb +1 -1
- data/lib/sparql/algebra/operator/move.rb +2 -2
- data/lib/sparql/algebra/operator/multiply.rb +1 -1
- data/lib/sparql/algebra/operator/negate.rb +1 -1
- data/lib/sparql/algebra/operator/not.rb +1 -1
- data/lib/sparql/algebra/operator/not_equal.rb +2 -2
- data/lib/sparql/algebra/operator/notexists.rb +2 -2
- data/lib/sparql/algebra/operator/notin.rb +1 -11
- data/lib/sparql/algebra/operator/notoneof.rb +2 -2
- data/lib/sparql/algebra/operator/now.rb +1 -1
- data/lib/sparql/algebra/operator/or.rb +3 -3
- data/lib/sparql/algebra/operator/order.rb +2 -12
- data/lib/sparql/algebra/operator/path.rb +2 -2
- data/lib/sparql/algebra/operator/path_opt.rb +2 -2
- data/lib/sparql/algebra/operator/path_plus.rb +2 -2
- data/lib/sparql/algebra/operator/path_star.rb +2 -2
- data/lib/sparql/algebra/operator/plus.rb +2 -2
- data/lib/sparql/algebra/operator/prefix.rb +8 -8
- data/lib/sparql/algebra/operator/project.rb +2 -12
- data/lib/sparql/algebra/operator/rand.rb +1 -1
- data/lib/sparql/algebra/operator/reduced.rb +2 -12
- data/lib/sparql/algebra/operator/regex.rb +5 -5
- data/lib/sparql/algebra/operator/replace.rb +3 -3
- data/lib/sparql/algebra/operator/reverse.rb +2 -2
- data/lib/sparql/algebra/operator/round.rb +2 -2
- data/lib/sparql/algebra/operator/same_term.rb +8 -5
- data/lib/sparql/algebra/operator/sample.rb +1 -1
- data/lib/sparql/algebra/operator/seconds.rb +1 -1
- data/lib/sparql/algebra/operator/seq.rb +1 -1
- data/lib/sparql/algebra/operator/sequence.rb +1 -1
- data/lib/sparql/algebra/operator/sha1.rb +1 -1
- data/lib/sparql/algebra/operator/sha256.rb +1 -1
- data/lib/sparql/algebra/operator/sha384.rb +1 -1
- data/lib/sparql/algebra/operator/sha512.rb +1 -1
- data/lib/sparql/algebra/operator/slice.rb +2 -12
- data/lib/sparql/algebra/operator/str.rb +1 -1
- data/lib/sparql/algebra/operator/strafter.rb +2 -2
- data/lib/sparql/algebra/operator/strbefore.rb +2 -2
- data/lib/sparql/algebra/operator/strdt.rb +2 -2
- data/lib/sparql/algebra/operator/strends.rb +2 -2
- data/lib/sparql/algebra/operator/strlang.rb +2 -2
- data/lib/sparql/algebra/operator/strlen.rb +2 -2
- data/lib/sparql/algebra/operator/strstarts.rb +2 -2
- data/lib/sparql/algebra/operator/struuid.rb +1 -1
- data/lib/sparql/algebra/operator/substr.rb +3 -3
- data/lib/sparql/algebra/operator/subtract.rb +1 -1
- data/lib/sparql/algebra/operator/sum.rb +1 -1
- data/lib/sparql/algebra/operator/table.rb +2 -2
- data/lib/sparql/algebra/operator/timezone.rb +1 -1
- data/lib/sparql/algebra/operator/tz.rb +1 -1
- data/lib/sparql/algebra/operator/ucase.rb +2 -2
- data/lib/sparql/algebra/operator/union.rb +7 -6
- data/lib/sparql/algebra/operator/update.rb +2 -2
- data/lib/sparql/algebra/operator/using.rb +2 -2
- data/lib/sparql/algebra/operator/uuid.rb +1 -1
- data/lib/sparql/algebra/operator/with.rb +2 -2
- data/lib/sparql/algebra/operator/year.rb +1 -1
- data/lib/sparql/algebra/query.rb +1 -1
- data/lib/sparql/algebra/update.rb +1 -1
- data/lib/sparql/algebra/version.rb +1 -1
- data/lib/sparql/extensions.rb +1 -1
- data/lib/sparql/grammar.rb +104 -3
- data/lib/sparql/grammar/meta.rb +1372 -333
- data/lib/sparql/grammar/parser11.rb +27 -6
- data/lib/sparql/grammar/terminals11.rb +1 -0
- data/lib/sparql/results.rb +60 -41
- data/lib/sparql/version.rb +1 -1
- metadata +14 -8
@@ -6,7 +6,7 @@ module SPARQL; module Algebra
|
|
6
6
|
# @example
|
7
7
|
# (reverse :p)
|
8
8
|
#
|
9
|
-
# @see
|
9
|
+
# @see https://www.w3.org/TR/sparql11-query/#defn_evalPP_inverse
|
10
10
|
class Reverse < Operator::Unary
|
11
11
|
include Query
|
12
12
|
|
@@ -29,7 +29,7 @@ module SPARQL; module Algebra
|
|
29
29
|
# each matching solution
|
30
30
|
# @yieldparam [RDF::Query::Solution] solution
|
31
31
|
# @yieldreturn [void] ignored
|
32
|
-
# @see
|
32
|
+
# @see https://www.w3.org/TR/sparql11-query/#sparqlAlgebra
|
33
33
|
def execute(queryable, **options, &block)
|
34
34
|
debug(options) {"Reverse #{operands.to_sse}"}
|
35
35
|
subject, object = options[:subject], options[:object]
|
@@ -8,8 +8,8 @@ module SPARQL; module Algebra
|
|
8
8
|
# @example
|
9
9
|
# (round ?x)
|
10
10
|
#
|
11
|
-
# @see
|
12
|
-
# @see
|
11
|
+
# @see https://www.w3.org/TR/sparql11-query/#func-round
|
12
|
+
# @see https://www.w3.org/TR/xpath-functions/#func-round
|
13
13
|
class Round < Operator::Unary
|
14
14
|
include Evaluatable
|
15
15
|
|
@@ -10,7 +10,7 @@ module SPARQL; module Algebra
|
|
10
10
|
# (filter (sameTerm ?v)
|
11
11
|
# (bgp (triple ?x :p ?v)))))
|
12
12
|
#
|
13
|
-
# @see
|
13
|
+
# @see https://www.w3.org/TR/sparql11-query/#func-sameTerm
|
14
14
|
class SameTerm < Operator::Binary
|
15
15
|
include Evaluatable
|
16
16
|
|
@@ -33,12 +33,15 @@ module SPARQL; module Algebra
|
|
33
33
|
##
|
34
34
|
# Returns an optimized version of this expression.
|
35
35
|
#
|
36
|
-
#
|
37
|
-
|
38
|
-
|
36
|
+
# Return true if variable operand1 is a bound variable and equals operand2
|
37
|
+
#
|
38
|
+
# @return [SameTerm] a copy of `self`
|
39
|
+
# @see SPARQL::Algebra::Expression#optimize
|
40
|
+
def optimize(**options)
|
41
|
+
if operand(0).is_a?(Variable) && operand(0).bound? && operand(0).eql?(operand(1))
|
39
42
|
RDF::Literal::TRUE
|
40
43
|
else
|
41
|
-
super # @see Operator#optimize
|
44
|
+
super # @see Operator#optimize!
|
42
45
|
end
|
43
46
|
end
|
44
47
|
end # SameTerm
|
@@ -11,7 +11,7 @@ module SPARQL; module Algebra
|
|
11
11
|
# (group () ((??.0 (sample ?o)))
|
12
12
|
# (bgp (triple ?s :dec ?o)))))))
|
13
13
|
#
|
14
|
-
# @see
|
14
|
+
# @see https://www.w3.org/TR/sparql11-query/#defn_aggSample
|
15
15
|
class Sample < Operator::Unary
|
16
16
|
include Aggregate
|
17
17
|
|
@@ -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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
10
|
-
# @see
|
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
|
10
|
-
# @see
|
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
|
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
|
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
|
10
|
-
# @see
|
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
|
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
|
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
|
10
|
-
# @see
|
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
|
10
|
-
# @see
|
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
|
17
|
+
# @see https://www.w3.org/TR/sparql11-query/#func-struuid
|
18
18
|
class StrUUID < Operator::Nullary
|
19
19
|
include Evaluatable
|
20
20
|
|
@@ -6,8 +6,8 @@ module SPARQL; module Algebra
|
|
6
6
|
# @example
|
7
7
|
# (substr ?x ?y)
|
8
8
|
#
|
9
|
-
# @see
|
10
|
-
# @see
|
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
|
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
|
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
|
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
|
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
|
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
|
14
|
+
# @see https://www.w3.org/TR/sparql11-query/#func-timezone
|
15
15
|
class Timezone < Operator::Unary
|
16
16
|
include Evaluatable
|
17
17
|
|
@@ -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
|
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
|
10
|
-
# @see
|
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
|
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
|
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
|
-
#
|
58
|
+
# Optimizes this query.
|
59
59
|
#
|
60
60
|
# Optimize operands and remove any which are empty.
|
61
61
|
#
|
62
|
-
# @return [
|
63
|
-
|
64
|
-
|
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
|
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
|
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
|
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
|
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)
|