sparql 3.1.0 → 3.1.2
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.
- 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
@@ -33,7 +33,7 @@ module SPARQL; module Algebra
|
|
33
33
|
# Returns queryable.
|
34
34
|
# @raise [IOError]
|
35
35
|
# If `from` does not exist, unless the `silent` operator is present
|
36
|
-
# @see
|
36
|
+
# @see https://www.w3.org/TR/sparql11-update/
|
37
37
|
def execute(queryable, **options)
|
38
38
|
debug(options) {"Modify"}
|
39
39
|
query = operands.shift
|
@@ -11,7 +11,7 @@ module SPARQL; module Algebra
|
|
11
11
|
# (extend ((?x (month ?date)))
|
12
12
|
# (bgp (triple ?s :date ?date)))))
|
13
13
|
#
|
14
|
-
# @see
|
14
|
+
# @see https://www.w3.org/TR/sparql11-query/#func-month
|
15
15
|
class Month < Operator::Unary
|
16
16
|
include Evaluatable
|
17
17
|
|
@@ -9,7 +9,7 @@ module SPARQL; module Algebra
|
|
9
9
|
# @example
|
10
10
|
# (move silent <iri> to default)
|
11
11
|
#
|
12
|
-
# @see
|
12
|
+
# @see https://www.w3.org/TR/sparql11-update/#move
|
13
13
|
class Move < Operator
|
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
|
31
|
+
# @see https://www.w3.org/TR/sparql11-update/
|
32
32
|
def execute(queryable, **options)
|
33
33
|
debug(options) {"Move"}
|
34
34
|
silent = operands.first == :silent
|
@@ -7,7 +7,7 @@ module SPARQL; module Algebra
|
|
7
7
|
# (* ?x ?y)
|
8
8
|
# (multiply ?x ?y)
|
9
9
|
#
|
10
|
-
# @see
|
10
|
+
# @see https://www.w3.org/TR/xpath-functions/#func-numeric-multiply
|
11
11
|
class Multiply < Operator::Binary
|
12
12
|
include Evaluatable
|
13
13
|
|
@@ -7,7 +7,7 @@ module SPARQL; module Algebra
|
|
7
7
|
# (- ?x)
|
8
8
|
# (negate ?x)
|
9
9
|
#
|
10
|
-
# @see
|
10
|
+
# @see https://www.w3.org/TR/xpath-functions/#func-numeric-unary-minus
|
11
11
|
class Negate < Operator::Unary
|
12
12
|
include Evaluatable
|
13
13
|
|
@@ -3,8 +3,8 @@ module SPARQL; module Algebra
|
|
3
3
|
##
|
4
4
|
# The SPARQL relational `!=` (not equal) comparison operator.
|
5
5
|
#
|
6
|
-
# @see
|
7
|
-
# @see
|
6
|
+
# @see https://www.w3.org/TR/sparql11-query/#OperatorMapping
|
7
|
+
# @see https://www.w3.org/TR/sparql11-query/#func-RDFterm-equal
|
8
8
|
class NotEqual < Equal
|
9
9
|
NAME = :'!='
|
10
10
|
|
@@ -12,8 +12,8 @@ module SPARQL; module Algebra
|
|
12
12
|
# (bgp (triple ?s ?p ex:o1))))
|
13
13
|
# (bgp (triple ?s ?p ex:o))))
|
14
14
|
#
|
15
|
-
# @see
|
16
|
-
# @see
|
15
|
+
# @see https://www.w3.org/TR/sparql11-query/#func-abs
|
16
|
+
# @see https://www.w3.org/TR/xpath-functions/#func-abs
|
17
17
|
class NotExists < Operator::Unary
|
18
18
|
include Evaluatable
|
19
19
|
|
@@ -8,7 +8,7 @@ module SPARQL; module Algebra
|
|
8
8
|
# @example
|
9
9
|
# (ask (filter (notin ?o 1 2) (bgp)))
|
10
10
|
#
|
11
|
-
# @see
|
11
|
+
# @see https://www.w3.org/TR/sparql11-query/#func-notin
|
12
12
|
class NotIn < Operator
|
13
13
|
include Evaluatable
|
14
14
|
|
@@ -58,16 +58,6 @@ module SPARQL; module Algebra
|
|
58
58
|
else RDF::Literal::TRUE
|
59
59
|
end
|
60
60
|
end
|
61
|
-
|
62
|
-
##
|
63
|
-
# Returns an optimized version of this query.
|
64
|
-
#
|
65
|
-
# Return optimized query
|
66
|
-
#
|
67
|
-
# @return [Union, RDF::Query] `self`
|
68
|
-
def optimize
|
69
|
-
operands = operands.map(&:optimize)
|
70
|
-
end
|
71
61
|
end # Exprlist
|
72
62
|
end # Operator
|
73
63
|
end; end # SPARQL::Algebra
|
@@ -6,7 +6,7 @@ module SPARQL; module Algebra
|
|
6
6
|
# @example
|
7
7
|
# (notoneof ex:p1 ex:p2)
|
8
8
|
#
|
9
|
-
# @see
|
9
|
+
# @see https://www.w3.org/TR/sparql11-query/#eval_negatedPropertySet
|
10
10
|
class NotOneOf < Operator
|
11
11
|
include Query
|
12
12
|
|
@@ -30,7 +30,7 @@ module SPARQL; module Algebra
|
|
30
30
|
# each matching solution
|
31
31
|
# @yieldparam [RDF::Query::Solution] solution
|
32
32
|
# @yieldreturn [void] ignored
|
33
|
-
# @see
|
33
|
+
# @see https://www.w3.org/TR/sparql11-query/#sparqlAlgebra
|
34
34
|
def execute(queryable, **options, &block)
|
35
35
|
debug(options) {"NotOneOf #{operands.to_sse}"}
|
36
36
|
subject, object = options[:subject], options[:object]
|
@@ -7,8 +7,8 @@ module SPARQL; module Algebra
|
|
7
7
|
# (|| ?x ?y)
|
8
8
|
# (or ?x ?y)
|
9
9
|
#
|
10
|
-
# @see
|
11
|
-
# @see
|
10
|
+
# @see https://www.w3.org/TR/sparql11-query/#func-logical-or
|
11
|
+
# @see https://www.w3.org/TR/sparql11-query/#evaluation
|
12
12
|
class Or < Operator::Binary
|
13
13
|
include Evaluatable
|
14
14
|
|
@@ -53,7 +53,7 @@ module SPARQL; module Algebra
|
|
53
53
|
right = nil
|
54
54
|
end
|
55
55
|
|
56
|
-
# From
|
56
|
+
# From https://www.w3.org/TR/sparql11-query/#evaluation
|
57
57
|
# A logical-or that encounters an error on only one branch will return TRUE if the other branch is TRUE
|
58
58
|
# and an error if the other branch is FALSE.
|
59
59
|
case
|
@@ -9,7 +9,7 @@ module SPARQL; module Algebra
|
|
9
9
|
# (order ((asc ?name))
|
10
10
|
# (bgp (triple ?x foaf:name ?name)))))
|
11
11
|
#
|
12
|
-
# @see
|
12
|
+
# @see https://www.w3.org/TR/sparql11-query/#modOrderBy
|
13
13
|
class Order < Operator::Binary
|
14
14
|
include Query
|
15
15
|
|
@@ -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
|
|
36
36
|
debug(options) {"Order"}
|
@@ -50,16 +50,6 @@ module SPARQL; module Algebra
|
|
50
50
|
@solutions.each(&block) if block_given?
|
51
51
|
@solutions
|
52
52
|
end
|
53
|
-
|
54
|
-
##
|
55
|
-
# Returns an optimized version of this query.
|
56
|
-
#
|
57
|
-
# Return optimized query
|
58
|
-
#
|
59
|
-
# @return [Union, RDF::Query] `self`
|
60
|
-
def optimize
|
61
|
-
operands = operands.map(&:optimize)
|
62
|
-
end
|
63
53
|
end # Order
|
64
54
|
end # Operator
|
65
55
|
end; end # SPARQL::Algebra
|
@@ -6,7 +6,7 @@ module SPARQL; module Algebra
|
|
6
6
|
# @example
|
7
7
|
# (path :a (path+ :p) ?z)
|
8
8
|
#
|
9
|
-
# @see
|
9
|
+
# @see https://www.w3.org/TR/sparql11-query/#sparqlTranslatePathExpressions
|
10
10
|
class Path < Operator::Ternary
|
11
11
|
include Query
|
12
12
|
|
@@ -25,7 +25,7 @@ module SPARQL; module Algebra
|
|
25
25
|
# @yieldreturn [void] ignored
|
26
26
|
# @return [RDF::Query::Solutions]
|
27
27
|
# the resulting solution sequence
|
28
|
-
# @see
|
28
|
+
# @see https://www.w3.org/TR/sparql11-query/#sparqlAlgebra
|
29
29
|
def execute(queryable, **options, &block)
|
30
30
|
debug(options) {"Path #{operands.to_sse}"}
|
31
31
|
subject, path_op, object = operands
|
@@ -6,7 +6,7 @@ module SPARQL; module Algebra
|
|
6
6
|
# @example
|
7
7
|
# (path? :p)
|
8
8
|
#
|
9
|
-
# @see
|
9
|
+
# @see https://www.w3.org/TR/sparql11-query/#defn_evalPP_ZeroOrOnePath
|
10
10
|
class PathOpt < 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
|
subject, object = options[:subject], options[:object]
|
35
35
|
debug(options) {"Path? #{[subject, operands, object].to_sse}"}
|
@@ -6,7 +6,7 @@ module SPARQL; module Algebra
|
|
6
6
|
# @example
|
7
7
|
# (path+ :p)
|
8
8
|
#
|
9
|
-
# @see
|
9
|
+
# @see https://www.w3.org/TR/sparql11-query/#defn_evalPP_OneOrMorePath
|
10
10
|
class PathPlus < Operator::Unary
|
11
11
|
include Query
|
12
12
|
|
@@ -25,7 +25,7 @@ module SPARQL; module Algebra
|
|
25
25
|
# each matching solution
|
26
26
|
# @yieldparam [RDF::Query::Solution] solution
|
27
27
|
# @yieldreturn [void] ignored
|
28
|
-
# @see
|
28
|
+
# @see https://www.w3.org/TR/sparql11-query/#sparqlAlgebra
|
29
29
|
def execute(queryable, **options, &block)
|
30
30
|
subject, object = options[:subject], options[:object]
|
31
31
|
debug(options) {"Path+ #{[subject, operands, object].to_sse}"}
|
@@ -6,7 +6,7 @@ module SPARQL; module Algebra
|
|
6
6
|
# @example
|
7
7
|
# (path* :p)
|
8
8
|
#
|
9
|
-
# @see
|
9
|
+
# @see https://www.w3.org/TR/sparql11-query/#defn_evalPP_ZeroOrMorePath
|
10
10
|
class PathStar < Operator::Unary
|
11
11
|
include Query
|
12
12
|
|
@@ -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) {"Path* #{[subject, operands, object].to_sse}"}
|
@@ -7,8 +7,8 @@ module SPARQL; module Algebra
|
|
7
7
|
# (+ ?x ?y)
|
8
8
|
# (plus ?x ?y)
|
9
9
|
#
|
10
|
-
# @see
|
11
|
-
# @see
|
10
|
+
# @see https://www.w3.org/TR/xpath-functions/#func-numeric-unary-plus
|
11
|
+
# @see https://www.w3.org/TR/xpath-functions/#func-numeric-add
|
12
12
|
class Plus < Operator
|
13
13
|
include Evaluatable
|
14
14
|
|
@@ -8,7 +8,7 @@ module SPARQL; module Algebra
|
|
8
8
|
# (graph ?g
|
9
9
|
# (bgp (triple ?s ?p ?o))))
|
10
10
|
#
|
11
|
-
# @see
|
11
|
+
# @see https://www.w3.org/TR/sparql11-query/#QSynIRI
|
12
12
|
class Prefix < Binary
|
13
13
|
include Query
|
14
14
|
|
@@ -29,21 +29,21 @@ module SPARQL; module Algebra
|
|
29
29
|
# @yieldreturn [void] ignored
|
30
30
|
# @return [RDF::Query::Solutions]
|
31
31
|
# the resulting solution sequence
|
32
|
-
# @see
|
32
|
+
# @see https://www.w3.org/TR/sparql11-query/#sparqlAlgebra
|
33
33
|
def execute(queryable, **options, &block)
|
34
34
|
debug(options) {"Prefix"}
|
35
35
|
@solutions = queryable.query(operands.last, depth: options[:depth].to_i + 1, **options, &block)
|
36
36
|
end
|
37
|
-
|
37
|
+
|
38
38
|
##
|
39
39
|
# Returns an optimized version of this query.
|
40
40
|
#
|
41
|
-
#
|
42
|
-
# with the unique sum of the query elements
|
41
|
+
# Replace with the query with URIs having their lexical shortcut removed
|
43
42
|
#
|
44
|
-
# @return [
|
45
|
-
|
46
|
-
|
43
|
+
# @return [Prefix] a copy of `self`
|
44
|
+
# @see SPARQL::Algebra::Expression#optimize
|
45
|
+
def optimize(**options)
|
46
|
+
operands.last.optimize(**options)
|
47
47
|
end
|
48
48
|
|
49
49
|
# Combine two prefix definitions, merging their definitions
|
@@ -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
|
12
|
+
# @see https://www.w3.org/TR/sparql11-query/#modProjection
|
13
13
|
class Project < Operator::Binary
|
14
14
|
include Query
|
15
15
|
|
@@ -29,23 +29,13 @@ module SPARQL; module Algebra
|
|
29
29
|
# @yieldreturn [void] ignored
|
30
30
|
# @return [RDF::Query::Solutions]
|
31
31
|
# the resulting solution sequence
|
32
|
-
# @see
|
32
|
+
# @see https://www.w3.org/TR/sparql11-query/#sparqlAlgebra
|
33
33
|
def execute(queryable, **options, &block)
|
34
34
|
@solutions = queryable.query(operands.last, depth: options[:depth].to_i + 1, **options)
|
35
35
|
@solutions = @solutions.project(*(operands.first))
|
36
36
|
@solutions.each(&block) if block_given?
|
37
37
|
@solutions
|
38
38
|
end
|
39
|
-
|
40
|
-
##
|
41
|
-
# Returns an optimized version of this query.
|
42
|
-
#
|
43
|
-
# Return optimized query
|
44
|
-
#
|
45
|
-
# @return [Union, RDF::Query] `self`
|
46
|
-
def optimize
|
47
|
-
operands = operands.map(&:optimize)
|
48
|
-
end
|
49
39
|
end # Project
|
50
40
|
end # Operator
|
51
41
|
end; end # SPARQL::Algebra
|
@@ -10,7 +10,7 @@ module SPARQL; module Algebra
|
|
10
10
|
# (project (?v)
|
11
11
|
# (bgp (triple ?x ?p ?v)))))
|
12
12
|
#
|
13
|
-
# @see
|
13
|
+
# @see https://www.w3.org/TR/sparql11-query/#sparqlAlgebra
|
14
14
|
class Reduced < Operator::Unary
|
15
15
|
include Query
|
16
16
|
|
@@ -30,23 +30,13 @@ 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
|
@solutions = operands.last.
|
36
36
|
execute(queryable, depth: options[:depth].to_i + 1, **options).reduced
|
37
37
|
@solutions.each(&block) if block_given?
|
38
38
|
@solutions
|
39
39
|
end
|
40
|
-
|
41
|
-
##
|
42
|
-
# Returns an optimized version of this query.
|
43
|
-
#
|
44
|
-
# Return optimized query
|
45
|
-
#
|
46
|
-
# @return [Union, RDF::Query] `self`
|
47
|
-
def optimize
|
48
|
-
operands = operands.map(&:optimize)
|
49
|
-
end
|
50
40
|
end # Reduced
|
51
41
|
end # Operator
|
52
42
|
end; end # SPARQL::Algebra
|
@@ -10,8 +10,8 @@ module SPARQL; module Algebra
|
|
10
10
|
# (filter (regex ?val "GHI")
|
11
11
|
# (bgp (triple ex:foo rdf:value ?val)))))
|
12
12
|
#
|
13
|
-
# @see
|
14
|
-
# @see
|
13
|
+
# @see https://www.w3.org/TR/sparql11-query/#funcex-regex
|
14
|
+
# @see https://www.w3.org/TR/xpath-functions/#func-matches
|
15
15
|
class Regex < Operator::Ternary
|
16
16
|
include Evaluatable
|
17
17
|
|
@@ -43,17 +43,17 @@ module SPARQL; module Algebra
|
|
43
43
|
# @raise [TypeError] if any operand is unbound
|
44
44
|
# @raise [TypeError] if any operand is not a simple literal
|
45
45
|
def apply(text, pattern, flags = RDF::Literal(''))
|
46
|
-
# @see
|
46
|
+
# @see https://www.w3.org/TR/xpath-functions/#regex-syntax
|
47
47
|
raise TypeError, "expected a plain RDF::Literal, but got #{text.inspect}" unless text.is_a?(RDF::Literal) && text.plain?
|
48
48
|
text = text.to_s
|
49
49
|
# TODO: validate text syntax
|
50
50
|
|
51
|
-
# @see
|
51
|
+
# @see https://www.w3.org/TR/xpath-functions/#regex-syntax
|
52
52
|
raise TypeError, "expected a plain RDF::Literal, but got #{pattern.inspect}" unless pattern.is_a?(RDF::Literal) && pattern.plain?
|
53
53
|
pattern = pattern.to_s
|
54
54
|
# TODO: validate pattern syntax
|
55
55
|
|
56
|
-
# @see
|
56
|
+
# @see https://www.w3.org/TR/xpath-functions/#flags
|
57
57
|
raise TypeError, "expected a plain RDF::Literal, but got #{flags.inspect}" unless flags.is_a?(RDF::Literal) && flags.plain?
|
58
58
|
flags = flags.to_s
|
59
59
|
# TODO: validate flag syntax
|
@@ -10,8 +10,8 @@ module SPARQL; module Algebra
|
|
10
10
|
# (extend ((?new (replace ?str "[^a-z0-9]" "-")))
|
11
11
|
# (bgp (triple ?s :str ?str)))))
|
12
12
|
#
|
13
|
-
# @see
|
14
|
-
# @see
|
13
|
+
# @see https://www.w3.org/TR/sparql11-query/#funcex-replace
|
14
|
+
# @see https://www.w3.org/TR/xpath-functions/#func-replace
|
15
15
|
class Replace < Operator::Quaternary
|
16
16
|
include Evaluatable
|
17
17
|
|
@@ -72,7 +72,7 @@ module SPARQL; module Algebra
|
|
72
72
|
# Remove the optional argument.
|
73
73
|
#
|
74
74
|
# @return [Array] `self`
|
75
|
-
# @see
|
75
|
+
# @see https://openjena.org/wiki/SSE
|
76
76
|
def to_sxp_bin
|
77
77
|
[NAME] + operands.reject {|o| o.to_s == ""}
|
78
78
|
end
|