sparql 1.1.1 → 1.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 +23 -4
- data/VERSION +1 -1
- data/lib/rack/sparql/conneg.rb +5 -2
- data/lib/sinatra/sparql.rb +9 -16
- data/lib/sinatra/sparql/extensions.rb +0 -2
- data/lib/sparql.rb +8 -5
- data/lib/sparql/algebra/expression.rb +1 -1
- data/lib/sparql/algebra/extensions.rb +34 -6
- data/lib/sparql/algebra/operator/ask.rb +13 -5
- data/lib/sparql/algebra/operator/base.rb +19 -5
- data/lib/sparql/algebra/operator/bgp.rb +6 -2
- data/lib/sparql/algebra/operator/construct.rb +19 -8
- data/lib/sparql/algebra/operator/dataset.rb +8 -4
- data/lib/sparql/algebra/operator/datatype.rb +1 -7
- data/lib/sparql/algebra/operator/describe.rb +16 -6
- data/lib/sparql/algebra/operator/distinct.rb +7 -6
- data/lib/sparql/algebra/operator/exists.rb +3 -6
- data/lib/sparql/algebra/operator/extend.rb +11 -1
- data/lib/sparql/algebra/operator/filter.rb +12 -17
- data/lib/sparql/algebra/operator/graph.rb +6 -4
- data/lib/sparql/algebra/operator/group.rb +10 -5
- data/lib/sparql/algebra/operator/join.rb +16 -9
- data/lib/sparql/algebra/operator/left_join.rb +15 -11
- data/lib/sparql/algebra/operator/minus.rb +11 -7
- data/lib/sparql/algebra/operator/notexists.rb +1 -1
- data/lib/sparql/algebra/operator/order.rb +9 -3
- data/lib/sparql/algebra/operator/prefix.rb +19 -2
- data/lib/sparql/algebra/operator/project.rb +9 -4
- data/lib/sparql/algebra/operator/reduced.rb +8 -3
- data/lib/sparql/algebra/operator/slice.rb +8 -1
- data/lib/sparql/algebra/operator/table.rb +7 -2
- data/lib/sparql/algebra/operator/union.rb +7 -2
- data/lib/sparql/algebra/query.rb +26 -6
- data/lib/sparql/extensions.rb +0 -8
- data/lib/sparql/grammar/parser11.rb +1 -1
- data/lib/sparql/results.rb +6 -4
- metadata +25 -25
@@ -23,13 +23,18 @@ module SPARQL; module Algebra
|
|
23
23
|
# the graph or repository to query
|
24
24
|
# @param [Hash{Symbol => Object}] options
|
25
25
|
# any additional keyword options
|
26
|
+
# @yield [solution]
|
27
|
+
# each matching solution
|
28
|
+
# @yieldparam [RDF::Query::Solution] solution
|
29
|
+
# @yieldreturn [void] ignored
|
26
30
|
# @return [RDF::Query::Solutions]
|
27
31
|
# the resulting solution sequence
|
28
32
|
# @see http://www.w3.org/TR/rdf-sparql-query/#sparqlAlgebra
|
29
|
-
def execute(queryable, options = {})
|
30
|
-
@solutions = operands.last.
|
31
|
-
|
32
|
-
|
33
|
+
def execute(queryable, options = {}, &block)
|
34
|
+
@solutions = queryable.query(operands.last, options.merge(:depth => options[:depth].to_i + 1))
|
35
|
+
@solutions = @solutions.project(*(operands.first))
|
36
|
+
@solutions.each(&block) if block_given?
|
37
|
+
@solutions
|
33
38
|
end
|
34
39
|
|
35
40
|
##
|
@@ -24,13 +24,18 @@ module SPARQL; module Algebra
|
|
24
24
|
# the graph or repository to query
|
25
25
|
# @param [Hash{Symbol => Object}] options
|
26
26
|
# any additional keyword options
|
27
|
+
# @yield [solution]
|
28
|
+
# each matching solution
|
29
|
+
# @yieldparam [RDF::Query::Solution] solution
|
30
|
+
# @yieldreturn [void] ignored
|
27
31
|
# @return [RDF::Query::Solutions]
|
28
32
|
# the resulting solution sequence
|
29
33
|
# @see http://www.w3.org/TR/rdf-sparql-query/#sparqlAlgebra
|
30
|
-
def execute(queryable, options = {})
|
34
|
+
def execute(queryable, options = {}, &block)
|
31
35
|
@solutions = operands.last.
|
32
|
-
execute(queryable, options.merge(:depth => options[:depth].to_i + 1)).
|
33
|
-
|
36
|
+
execute(queryable, options.merge(:depth => options[:depth].to_i + 1)).reduced
|
37
|
+
@solutions.each(&block) if block_given?
|
38
|
+
@solutions
|
34
39
|
end
|
35
40
|
|
36
41
|
##
|
@@ -36,13 +36,20 @@ module SPARQL; module Algebra
|
|
36
36
|
# the graph or repository to query
|
37
37
|
# @param [Hash{Symbol => Object}] options
|
38
38
|
# any additional keyword options
|
39
|
+
# @yield [solution]
|
40
|
+
# each matching solution
|
41
|
+
# @yieldparam [RDF::Query::Solution] solution
|
42
|
+
# @yieldreturn [void] ignored
|
39
43
|
# @return [RDF::Query::Solutions]
|
40
44
|
# the resulting solution sequence
|
41
45
|
# @see http://www.w3.org/TR/rdf-sparql-query/#sparqlAlgebra
|
42
|
-
def execute(queryable, options = {})
|
46
|
+
def execute(queryable, options = {}, &block)
|
47
|
+
offset = operands[0] == :_ ? 0 : operands[0].to_i
|
48
|
+
limit = operands[1] == :_ ? -1 : operands[1].to_i
|
43
49
|
@solutions = operands.last. execute(queryable, options.merge(:depth => options[:depth].to_i + 1))
|
44
50
|
@solutions.offset(operands[0]) unless operands[0] == :_
|
45
51
|
@solutions.limit(operands[1]) unless operands[1] == :_
|
52
|
+
@solutions.each(&block) if block_given?
|
46
53
|
@solutions
|
47
54
|
end
|
48
55
|
|
@@ -24,11 +24,15 @@ module SPARQL; module Algebra
|
|
24
24
|
# the graph or repository to query
|
25
25
|
# @param [Hash{Symbol => Object}] options
|
26
26
|
# any additional keyword options
|
27
|
+
# @yield [solution]
|
28
|
+
# each matching solution
|
29
|
+
# @yieldparam [RDF::Query::Solution] solution
|
30
|
+
# @yieldreturn [void] ignored
|
27
31
|
# @return [RDF::Query::Solutions]
|
28
32
|
# the resulting solution sequence
|
29
33
|
# @see http://www.w3.org/TR/rdf-sparql-query/#sparqlAlgebra
|
30
|
-
def execute(queryable, options = {})
|
31
|
-
@solutions = RDF::Query::Solutions
|
34
|
+
def execute(queryable, options = {}, &block)
|
35
|
+
@solutions = RDF::Query::Solutions()
|
32
36
|
operands[1..-1].each do |row|
|
33
37
|
next unless row.is_a?(Array)
|
34
38
|
bindings = row[1..-1].inject({}) do |memo, (var, value)|
|
@@ -37,6 +41,7 @@ module SPARQL; module Algebra
|
|
37
41
|
end
|
38
42
|
@solutions << RDF::Query::Solution.new(bindings)
|
39
43
|
end
|
44
|
+
@solutions.each(&block) if block_given?
|
40
45
|
@solutions
|
41
46
|
end
|
42
47
|
end # Table
|
@@ -24,17 +24,22 @@ module SPARQL; module Algebra
|
|
24
24
|
# the graph or repository to query
|
25
25
|
# @param [Hash{Symbol => Object}] options
|
26
26
|
# any additional keyword options
|
27
|
+
# @yield [solution]
|
28
|
+
# each matching solution
|
29
|
+
# @yieldparam [RDF::Query::Solution] solution
|
30
|
+
# @yieldreturn [void] ignored
|
27
31
|
# @return [RDF::Query::Solutions]
|
28
32
|
# the resulting solution sequence
|
29
33
|
# @see http://www.w3.org/TR/rdf-sparql-query/#sparqlAlgebra
|
30
|
-
def execute(queryable, options = {})
|
34
|
+
def execute(queryable, options = {}, &block)
|
31
35
|
debug(options) {"Union"}
|
32
|
-
@solutions = RDF::Query::Solutions
|
36
|
+
@solutions = RDF::Query::Solutions(operands.inject([]) do |memo, op|
|
33
37
|
solns = op.execute(queryable, options.merge(:depth => options[:depth].to_i + 1))
|
34
38
|
debug(options) {"=> (op) #{solns.inspect}"}
|
35
39
|
memo + solns
|
36
40
|
end)
|
37
41
|
debug(options) {"=> #{@solutions.inspect}"}
|
42
|
+
@solutions.each(&block) if block_given?
|
38
43
|
@solutions
|
39
44
|
end
|
40
45
|
|
data/lib/sparql/algebra/query.rb
CHANGED
@@ -26,7 +26,7 @@ module SPARQL; module Algebra
|
|
26
26
|
end
|
27
27
|
|
28
28
|
##
|
29
|
-
# The solution sequence for this query.
|
29
|
+
# The solution sequence for this query. This is only set
|
30
30
|
#
|
31
31
|
# @return [RDF::Query::Solutions]
|
32
32
|
attr_reader :solutions
|
@@ -40,14 +40,16 @@ module SPARQL; module Algebra
|
|
40
40
|
# any additional keyword options
|
41
41
|
# @option options [Boolean] debug
|
42
42
|
# Query execution debugging
|
43
|
-
# @
|
44
|
-
#
|
45
|
-
# @
|
46
|
-
#
|
43
|
+
# @yield [solution]
|
44
|
+
# each matching solution, statement or boolean
|
45
|
+
# @yieldparam [RDF::Statement, RDF::Query::Solution, Boolean] solution
|
46
|
+
# @yieldreturn [void] ignored
|
47
|
+
# @return [RDF::Graph, Boolean, RDF::Query::Solutions::Enumerator]
|
48
|
+
# Note, results may be used with {SPARQL.serialize_results} to obtain appropriate output encoding.
|
47
49
|
# @raise [NotImplementedError]
|
48
50
|
# If an attempt is made to perform an unsupported operation
|
49
51
|
# @see http://www.w3.org/TR/rdf-sparql-query/#sparqlAlgebra
|
50
|
-
def execute(queryable, options = {})
|
52
|
+
def execute(queryable, options = {}, &block)
|
51
53
|
raise NotImplementedError, "#{self.class}#execute(#{queryable})"
|
52
54
|
end
|
53
55
|
|
@@ -90,6 +92,24 @@ module SPARQL; module Algebra
|
|
90
92
|
self.operands.empty?
|
91
93
|
end
|
92
94
|
|
95
|
+
# Query results in a boolean result (e.g., ASK)
|
96
|
+
# @return [Boolean]
|
97
|
+
def query_yields_boolean?
|
98
|
+
false
|
99
|
+
end
|
100
|
+
|
101
|
+
# Query results statements (e.g., CONSTRUCT, DESCRIBE, CREATE)
|
102
|
+
# @return [Boolean]
|
103
|
+
def query_yields_statements?
|
104
|
+
false
|
105
|
+
end
|
106
|
+
|
107
|
+
# Query results solutions (e.g., SELECT)
|
108
|
+
# @return [Boolean]
|
109
|
+
def query_yields_solutions?
|
110
|
+
!(query_yields_boolean? || query_yields_statements?)
|
111
|
+
end
|
112
|
+
|
93
113
|
##
|
94
114
|
# Enumerates over each matching query solution.
|
95
115
|
#
|
data/lib/sparql/extensions.rb
CHANGED
@@ -99,14 +99,6 @@ module RDF::Queryable
|
|
99
99
|
end
|
100
100
|
end
|
101
101
|
|
102
|
-
class RDF::Query
|
103
|
-
# Determine if this is an empty query, having no patterns
|
104
|
-
def empty?
|
105
|
-
self.patterns.empty?
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
|
110
102
|
##
|
111
103
|
# Extensions for `RDF::Query::Solutions`.
|
112
104
|
class RDF::Query::Solutions
|
@@ -1063,7 +1063,7 @@ module SPARQL::Grammar
|
|
1063
1063
|
when IO, StringIO then input.read
|
1064
1064
|
else input.to_s.dup
|
1065
1065
|
end
|
1066
|
-
@input.
|
1066
|
+
@input.encode!(Encoding::UTF_8)
|
1067
1067
|
@options = {:anon_base => "b0", :validate => false}.merge(options)
|
1068
1068
|
@options[:debug] ||= case
|
1069
1069
|
when options[:progress] then 2
|
data/lib/sparql/results.rb
CHANGED
@@ -183,13 +183,12 @@ module SPARQL
|
|
183
183
|
# Similar to :content_type, but takes an ordered array of appropriate content types,
|
184
184
|
# and serializes using the first appropriate type, including wild-cards.
|
185
185
|
# @return [String]
|
186
|
-
# String with serialized results and
|
186
|
+
# String with serialized results and `#content_type`
|
187
187
|
# @raise [RDF::WriterError] when inappropriate formatting options are used
|
188
188
|
def serialize_results(solutions, options = {})
|
189
189
|
format = options[:format].to_sym if options[:format]
|
190
190
|
content_type = options[:content_type].to_s.split(';').first
|
191
|
-
content_types = options[:content_types] ||
|
192
|
-
format ||= SPARQL::Results::MIME_TYPES.invert[content_type] if content_type
|
191
|
+
content_types = Array(options[:content_types] || '*/*')
|
193
192
|
|
194
193
|
if !format && !content_type
|
195
194
|
case solutions
|
@@ -231,7 +230,10 @@ module SPARQL
|
|
231
230
|
require 'rdf/ntriples'
|
232
231
|
end
|
233
232
|
fmt = RDF::Format.for(format ? format.to_sym : {:content_type => content_type})
|
234
|
-
fmt
|
233
|
+
unless fmt
|
234
|
+
fmt = RDF::Format.for(:file_extension => format.to_sym) || RDF::NTriples::Format
|
235
|
+
format = fmt.to_sym
|
236
|
+
end
|
235
237
|
format ||= fmt.to_sym
|
236
238
|
content_type ||= fmt.content_type.first
|
237
239
|
results = solutions.dump(format, options)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sparql
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gregg Kellogg
|
@@ -9,50 +9,50 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-12-04 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rdf
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- -
|
18
|
+
- - '>='
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: 1.0
|
20
|
+
version: 1.1.0
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
-
- -
|
25
|
+
- - '>='
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version: 1.0
|
27
|
+
version: 1.1.0
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: rdf-aggregate-repo
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
32
|
- - '>='
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version:
|
34
|
+
version: 1.1.0
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
39
|
- - '>='
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version:
|
41
|
+
version: 1.1.0
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: ebnf
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
46
|
- - '>='
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version: 0.3.
|
48
|
+
version: 0.3.1
|
49
49
|
type: :runtime
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
53
|
- - '>='
|
54
54
|
- !ruby/object:Gem::Version
|
55
|
-
version: 0.3.
|
55
|
+
version: 0.3.1
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: builder
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
@@ -101,26 +101,26 @@ dependencies:
|
|
101
101
|
requirements:
|
102
102
|
- - '>='
|
103
103
|
- !ruby/object:Gem::Version
|
104
|
-
version: 1.
|
104
|
+
version: '1.1'
|
105
105
|
type: :runtime
|
106
106
|
prerelease: false
|
107
107
|
version_requirements: !ruby/object:Gem::Requirement
|
108
108
|
requirements:
|
109
109
|
- - '>='
|
110
110
|
- !ruby/object:Gem::Version
|
111
|
-
version: 1.
|
111
|
+
version: '1.1'
|
112
112
|
- !ruby/object:Gem::Dependency
|
113
113
|
name: rdf-xsd
|
114
114
|
requirement: !ruby/object:Gem::Requirement
|
115
115
|
requirements:
|
116
|
-
- -
|
116
|
+
- - '>='
|
117
117
|
- !ruby/object:Gem::Version
|
118
118
|
version: 1.0.2
|
119
119
|
type: :runtime
|
120
120
|
prerelease: false
|
121
121
|
version_requirements: !ruby/object:Gem::Requirement
|
122
122
|
requirements:
|
123
|
-
- -
|
123
|
+
- - '>='
|
124
124
|
- !ruby/object:Gem::Version
|
125
125
|
version: 1.0.2
|
126
126
|
- !ruby/object:Gem::Dependency
|
@@ -129,28 +129,28 @@ dependencies:
|
|
129
129
|
requirements:
|
130
130
|
- - '>='
|
131
131
|
- !ruby/object:Gem::Version
|
132
|
-
version: 1.
|
132
|
+
version: 1.4.4
|
133
133
|
type: :development
|
134
134
|
prerelease: false
|
135
135
|
version_requirements: !ruby/object:Gem::Requirement
|
136
136
|
requirements:
|
137
137
|
- - '>='
|
138
138
|
- !ruby/object:Gem::Version
|
139
|
-
version: 1.
|
139
|
+
version: 1.4.4
|
140
140
|
- !ruby/object:Gem::Dependency
|
141
141
|
name: rack
|
142
142
|
requirement: !ruby/object:Gem::Requirement
|
143
143
|
requirements:
|
144
144
|
- - '>='
|
145
145
|
- !ruby/object:Gem::Version
|
146
|
-
version: 1.
|
146
|
+
version: 1.5.2
|
147
147
|
type: :development
|
148
148
|
prerelease: false
|
149
149
|
version_requirements: !ruby/object:Gem::Requirement
|
150
150
|
requirements:
|
151
151
|
- - '>='
|
152
152
|
- !ruby/object:Gem::Version
|
153
|
-
version: 1.
|
153
|
+
version: 1.5.2
|
154
154
|
- !ruby/object:Gem::Dependency
|
155
155
|
name: rack-test
|
156
156
|
requirement: !ruby/object:Gem::Requirement
|
@@ -169,30 +169,30 @@ dependencies:
|
|
169
169
|
name: linkeddata
|
170
170
|
requirement: !ruby/object:Gem::Requirement
|
171
171
|
requirements:
|
172
|
-
- -
|
172
|
+
- - '>='
|
173
173
|
- !ruby/object:Gem::Version
|
174
|
-
version: 1.
|
174
|
+
version: '1.1'
|
175
175
|
type: :development
|
176
176
|
prerelease: false
|
177
177
|
version_requirements: !ruby/object:Gem::Requirement
|
178
178
|
requirements:
|
179
|
-
- -
|
179
|
+
- - '>='
|
180
180
|
- !ruby/object:Gem::Version
|
181
|
-
version: 1.
|
181
|
+
version: '1.1'
|
182
182
|
- !ruby/object:Gem::Dependency
|
183
183
|
name: rdf-spec
|
184
184
|
requirement: !ruby/object:Gem::Requirement
|
185
185
|
requirements:
|
186
186
|
- - '>='
|
187
187
|
- !ruby/object:Gem::Version
|
188
|
-
version: 1.
|
188
|
+
version: '1.1'
|
189
189
|
type: :development
|
190
190
|
prerelease: false
|
191
191
|
version_requirements: !ruby/object:Gem::Requirement
|
192
192
|
requirements:
|
193
193
|
- - '>='
|
194
194
|
- !ruby/object:Gem::Version
|
195
|
-
version: 1.
|
195
|
+
version: '1.1'
|
196
196
|
- !ruby/object:Gem::Dependency
|
197
197
|
name: open-uri-cached
|
198
198
|
requirement: !ruby/object:Gem::Requirement
|
@@ -407,7 +407,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
407
407
|
version: '0'
|
408
408
|
requirements: []
|
409
409
|
rubyforge_project: sparql
|
410
|
-
rubygems_version: 2.
|
410
|
+
rubygems_version: 2.1.11
|
411
411
|
signing_key:
|
412
412
|
specification_version: 4
|
413
413
|
summary: SPARQL library for Ruby.
|