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.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +23 -4
  3. data/VERSION +1 -1
  4. data/lib/rack/sparql/conneg.rb +5 -2
  5. data/lib/sinatra/sparql.rb +9 -16
  6. data/lib/sinatra/sparql/extensions.rb +0 -2
  7. data/lib/sparql.rb +8 -5
  8. data/lib/sparql/algebra/expression.rb +1 -1
  9. data/lib/sparql/algebra/extensions.rb +34 -6
  10. data/lib/sparql/algebra/operator/ask.rb +13 -5
  11. data/lib/sparql/algebra/operator/base.rb +19 -5
  12. data/lib/sparql/algebra/operator/bgp.rb +6 -2
  13. data/lib/sparql/algebra/operator/construct.rb +19 -8
  14. data/lib/sparql/algebra/operator/dataset.rb +8 -4
  15. data/lib/sparql/algebra/operator/datatype.rb +1 -7
  16. data/lib/sparql/algebra/operator/describe.rb +16 -6
  17. data/lib/sparql/algebra/operator/distinct.rb +7 -6
  18. data/lib/sparql/algebra/operator/exists.rb +3 -6
  19. data/lib/sparql/algebra/operator/extend.rb +11 -1
  20. data/lib/sparql/algebra/operator/filter.rb +12 -17
  21. data/lib/sparql/algebra/operator/graph.rb +6 -4
  22. data/lib/sparql/algebra/operator/group.rb +10 -5
  23. data/lib/sparql/algebra/operator/join.rb +16 -9
  24. data/lib/sparql/algebra/operator/left_join.rb +15 -11
  25. data/lib/sparql/algebra/operator/minus.rb +11 -7
  26. data/lib/sparql/algebra/operator/notexists.rb +1 -1
  27. data/lib/sparql/algebra/operator/order.rb +9 -3
  28. data/lib/sparql/algebra/operator/prefix.rb +19 -2
  29. data/lib/sparql/algebra/operator/project.rb +9 -4
  30. data/lib/sparql/algebra/operator/reduced.rb +8 -3
  31. data/lib/sparql/algebra/operator/slice.rb +8 -1
  32. data/lib/sparql/algebra/operator/table.rb +7 -2
  33. data/lib/sparql/algebra/operator/union.rb +7 -2
  34. data/lib/sparql/algebra/query.rb +26 -6
  35. data/lib/sparql/extensions.rb +0 -8
  36. data/lib/sparql/grammar/parser11.rb +1 -1
  37. data/lib/sparql/results.rb +6 -4
  38. 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
- execute(queryable, options.merge(:depth => options[:depth].to_i + 1)).
32
- project(*(operands.first))
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
- reduced
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.new
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.new(operands.inject([]) do |memo, op|
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
 
@@ -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
- # @return [RDF::Query::Solutions]
44
- # the resulting solution sequence
45
- # @raise [TypeError]
46
- # TypeError raised if any operands are invalid
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
  #
@@ -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.force_encoding(Encoding::UTF_8)
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
@@ -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 #content_type
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 ||= RDF::NTriples::Format
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.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-10-30 00:00:00.000000000 Z
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.10
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.10
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: '0'
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: '0'
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.0
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.0
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.0.3
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.0.3
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.3.3
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.3.3
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.4.4
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.4.4
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.0.9
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.0.9
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.0.9
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.0.9
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.0.5
410
+ rubygems_version: 2.1.11
411
411
  signing_key:
412
412
  specification_version: 4
413
413
  summary: SPARQL library for Ruby.