rdf 0.2.3 → 0.3.0.pre

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 (44) hide show
  1. data/AUTHORS +1 -0
  2. data/{CONTRIBUTORS → CREDITS} +3 -1
  3. data/README +17 -8
  4. data/VERSION +1 -1
  5. data/etc/doap.nt +28 -10
  6. data/lib/rdf/format.rb +55 -47
  7. data/lib/rdf/mixin/countable.rb +3 -6
  8. data/lib/rdf/mixin/enumerable.rb +69 -69
  9. data/lib/rdf/mixin/indexable.rb +26 -0
  10. data/lib/rdf/mixin/mutable.rb +2 -2
  11. data/lib/rdf/mixin/queryable.rb +50 -12
  12. data/lib/rdf/mixin/writable.rb +8 -19
  13. data/lib/rdf/model/literal/boolean.rb +42 -6
  14. data/lib/rdf/model/literal/date.rb +17 -5
  15. data/lib/rdf/model/literal/datetime.rb +18 -6
  16. data/lib/rdf/model/literal/decimal.rb +32 -5
  17. data/lib/rdf/model/literal/double.rb +32 -5
  18. data/lib/rdf/model/literal/integer.rb +16 -5
  19. data/lib/rdf/model/literal/time.rb +6 -6
  20. data/lib/rdf/model/literal/token.rb +5 -5
  21. data/lib/rdf/model/literal/xml.rb +5 -5
  22. data/lib/rdf/model/literal.rb +24 -11
  23. data/lib/rdf/model/node.rb +14 -13
  24. data/lib/rdf/model/uri.rb +315 -42
  25. data/lib/rdf/model/value.rb +1 -1
  26. data/lib/rdf/ntriples/reader.rb +23 -15
  27. data/lib/rdf/ntriples/writer.rb +1 -1
  28. data/lib/rdf/query/pattern.rb +131 -15
  29. data/lib/rdf/query/solution.rb +94 -29
  30. data/lib/rdf/query/solutions.rb +202 -0
  31. data/lib/rdf/query/variable.rb +42 -18
  32. data/lib/rdf/query.rb +210 -160
  33. data/lib/rdf/reader.rb +300 -112
  34. data/lib/rdf/repository.rb +88 -6
  35. data/lib/rdf/transaction.rb +161 -0
  36. data/lib/rdf/util/cache.rb +5 -0
  37. data/lib/rdf/util/file.rb +31 -0
  38. data/lib/rdf/util/uuid.rb +36 -0
  39. data/lib/rdf/util.rb +2 -0
  40. data/lib/rdf/version.rb +3 -3
  41. data/lib/rdf/vocab.rb +43 -35
  42. data/lib/rdf/writer.rb +105 -50
  43. data/lib/rdf.rb +29 -27
  44. metadata +26 -17
data/lib/rdf/writer.rb CHANGED
@@ -1,6 +1,9 @@
1
1
  module RDF
2
2
  ##
3
- # An RDF serializer.
3
+ # The base class for RDF serializers.
4
+ #
5
+ # @example Loading an RDF writer implementation
6
+ # require 'rdf/ntriples'
4
7
  #
5
8
  # @example Iterating over known RDF writer classes
6
9
  # RDF::Writer.each { |klass| puts klass.name }
@@ -33,15 +36,16 @@ module RDF
33
36
  # @see RDF::Format
34
37
  # @see RDF::Reader
35
38
  class Writer
36
- extend RDF::Util::Aliasing::LateBound
37
39
  extend ::Enumerable
40
+ extend RDF::Util::Aliasing::LateBound
38
41
  include RDF::Writable
39
42
 
40
43
  ##
41
44
  # Enumerates known RDF writer classes.
42
45
  #
43
46
  # @yield [klass]
44
- # @yieldparam [Class]
47
+ # @yieldparam [Class] klass
48
+ # @yieldreturn [void] ignored
45
49
  # @return [Enumerator]
46
50
  def self.each(&block)
47
51
  @@subclasses.each(&block)
@@ -122,8 +126,11 @@ module RDF
122
126
  end
123
127
 
124
128
  ##
129
+ # Buffers output into a string buffer.
130
+ #
125
131
  # @yield [writer]
126
- # @yieldparam [Writer] writer
132
+ # @yieldparam [RDF::Writer] writer
133
+ # @yieldreturn [void]
127
134
  # @return [String]
128
135
  def self.buffer(*args, &block)
129
136
  StringIO.open do |buffer|
@@ -133,9 +140,13 @@ module RDF
133
140
  end
134
141
 
135
142
  ##
136
- # @param [String] filename
143
+ # Writes output to the given `filename`.
144
+ #
145
+ # @param [String, #to_s] filename
137
146
  # @param [Hash{Symbol => Object}] options
138
- # @return [Writer]
147
+ # any additional options (see {RDF::Writer#initialize})
148
+ # @option options [Symbol] :format (nil)
149
+ # @return [RDF::Writer]
139
150
  def self.open(filename, options = {}, &block)
140
151
  File.open(filename, 'wb') do |file|
141
152
  self.for(options[:format] || filename).new(file, options, &block)
@@ -143,11 +154,24 @@ module RDF
143
154
  end
144
155
 
145
156
  ##
146
- # @param [IO, File] output
157
+ # Initializes the writer.
158
+ #
159
+ # @param [IO, File] output
160
+ # the output stream
147
161
  # @param [Hash{Symbol => Object}] options
148
- # @option options [Hash] :prefixes ({})
149
- # @yield [writer]
150
- # @yieldparam [RDF::Writer] writer
162
+ # any additional options
163
+ # @option options [Encoding] :encoding (Encoding::UTF_8)
164
+ # the encoding to use on the output stream (Ruby 1.9+)
165
+ # @option options [Boolean] :canonicalize (false)
166
+ # whether to canonicalize literals when serializing
167
+ # @option options [Hash] :prefixes (Hash.new)
168
+ # the prefix mappings to use (not supported by all writers)
169
+ # @option options [#to_s] :base_uri (nil)
170
+ # the base URI to use when constructing relative URIs (not supported
171
+ # by all writers)
172
+ # @yield [writer] `self`
173
+ # @yieldparam [RDF::Writer] writer
174
+ # @yieldreturn [void]
151
175
  def initialize(output = $stdout, options = {}, &block)
152
176
  @output, @options = output, options.dup
153
177
  @nodes, @node_id = {}, 0
@@ -155,29 +179,55 @@ module RDF
155
179
  if block_given?
156
180
  write_prologue
157
181
  case block.arity
158
- when 1 then block.call(self)
159
- else instance_eval(&block)
182
+ when 0 then instance_eval(&block)
183
+ else block.call(self)
160
184
  end
161
185
  write_epilogue
162
186
  end
163
187
  end
164
188
 
165
189
  ##
166
- # Returns the options for this writer.
190
+ # Any additional options for this writer.
167
191
  #
168
- # @return [Hash{Symbol => Object}]
192
+ # @return [Hash]
193
+ # @since 0.2.2
169
194
  attr_reader :options
170
195
 
171
196
  ##
172
197
  # Returns the URI prefixes currently defined for this writer.
173
198
  #
199
+ # @example
200
+ # writer.prefixes[:dc] #=> RDF::URI('http://purl.org/dc/terms/')
201
+ #
174
202
  # @return [Hash{Symbol => RDF::URI}]
203
+ # @since 0.2.2
175
204
  def prefixes
176
- options[:prefixes] ||= {}
205
+ @options[:prefixes] ||= {}
177
206
  end
178
207
 
179
208
  ##
180
- # Defines a named URI prefix for this writer.
209
+ # Defines the given URI prefixes for this writer.
210
+ #
211
+ # @example
212
+ # writer.prefixes = {
213
+ # :dc => RDF::URI('http://purl.org/dc/terms/'),
214
+ # }
215
+ #
216
+ # @param [Hash{Symbol => RDF::URI}] prefixes
217
+ # @return [Hash{Symbol => RDF::URI}]
218
+ # @since 0.3.0
219
+ def prefixes=(prefixes)
220
+ @options[:prefixes] = prefixes
221
+ end
222
+
223
+ ##
224
+ # Defines the given named URI prefix for this writer.
225
+ #
226
+ # @example Defining a URI prefix
227
+ # writer.prefix :dc, RDF::URI('http://purl.org/dc/terms/')
228
+ #
229
+ # @example Returning a URI prefix
230
+ # writer.prefix(:dc) #=> RDF::URI('http://purl.org/dc/terms/')
181
231
  #
182
232
  # @overload prefix(name, uri)
183
233
  # @param [Symbol, #to_s] name
@@ -186,73 +236,82 @@ module RDF
186
236
  # @overload prefix(name)
187
237
  # @param [Symbol, #to_s] name
188
238
  #
189
- # @return [void]
239
+ # @return [RDF::URI]
190
240
  def prefix(name, uri = nil)
191
241
  name = name.respond_to?(:to_sym) ? name.to_sym : name.to_s.to_sym
192
242
  uri.nil? ? prefixes[name] : prefixes[name] = RDF::URI(uri)
193
243
  end
194
-
195
244
  alias_method :prefix!, :prefix
196
245
 
197
246
  ##
198
247
  # Flushes the underlying output buffer.
199
248
  #
200
- # @return [void]
249
+ # @return [void] `self`
201
250
  def flush
202
251
  @output.flush if @output.respond_to?(:flush)
252
+ self
203
253
  end
204
-
205
254
  alias_method :flush!, :flush
206
255
 
207
256
  ##
208
- # @return [void]
257
+ # @return [void] `self`
209
258
  # @abstract
210
- def write_prologue() end
259
+ def write_prologue
260
+ self
261
+ end
211
262
 
212
263
  ##
213
- # @return [void]
264
+ # @return [void] `self`
214
265
  # @abstract
215
- def write_epilogue() end
266
+ def write_epilogue
267
+ self
268
+ end
216
269
 
217
270
  ##
218
271
  # @param [String] text
219
- # @return [void]
272
+ # @return [void] `self`
220
273
  # @abstract
221
- def write_comment(text) end
274
+ def write_comment(text)
275
+ self
276
+ end
222
277
 
223
278
  ##
224
279
  # @param [RDF::Graph] graph
225
- # @return [void]
280
+ # @return [void] `self`
226
281
  def write_graph(graph)
227
282
  graph.each_triple { |*triple| write_triple(*triple) }
283
+ self
228
284
  end
229
285
 
230
286
  ##
231
287
  # @param [Array<RDF::Statement>] statements
232
- # @return [void]
288
+ # @return [void] `self`
233
289
  def write_statements(*statements)
234
290
  statements.flatten.each { |statement| write_statement(statement) }
291
+ self
235
292
  end
236
293
 
237
294
  ##
238
295
  # @param [RDF::Statement] statement
239
- # @return [void]
296
+ # @return [void] `self`
240
297
  def write_statement(statement)
241
298
  write_triple(*statement.to_triple)
299
+ self
242
300
  end
243
301
 
244
302
  ##
245
303
  # @param [Array<Array(RDF::Resource, RDF::URI, RDF::Value)>] triples
246
- # @return [void]
304
+ # @return [void] `self`
247
305
  def write_triples(*triples)
248
306
  triples.each { |triple| write_triple(*triple) }
307
+ self
249
308
  end
250
309
 
251
310
  ##
252
311
  # @param [RDF::Resource] subject
253
312
  # @param [RDF::URI] predicate
254
313
  # @param [RDF::Value] object
255
- # @return [void]
314
+ # @return [void] `self`
256
315
  # @raise [NotImplementedError] unless implemented in subclass
257
316
  # @abstract
258
317
  def write_triple(subject, predicate, object)
@@ -269,7 +328,7 @@ module RDF
269
328
  # @return [String]
270
329
  def format_value(value, options = {})
271
330
  case value
272
- when String then format_literal(RDF::Literal.new(value, options), options)
331
+ when String then format_literal(RDF::Literal(value, options), options)
273
332
  when RDF::List then format_list(value, options)
274
333
  when RDF::Literal then format_literal(value, options)
275
334
  when RDF::URI then format_uri(value, options)
@@ -279,7 +338,7 @@ module RDF
279
338
  end
280
339
 
281
340
  ##
282
- # @param [Node] value
341
+ # @param [RDF::Node] value
283
342
  # @param [Hash{Symbol => Object}] options
284
343
  # @return [String]
285
344
  # @raise [NotImplementedError] unless implemented in subclass
@@ -289,7 +348,7 @@ module RDF
289
348
  end
290
349
 
291
350
  ##
292
- # @param [URI] value
351
+ # @param [RDF::URI] value
293
352
  # @param [Hash{Symbol => Object}] options
294
353
  # @return [String]
295
354
  # @raise [NotImplementedError] unless implemented in subclass
@@ -299,7 +358,7 @@ module RDF
299
358
  end
300
359
 
301
360
  ##
302
- # @param [Literal, String, #to_s] value
361
+ # @param [RDF::Literal, String, #to_s] value
303
362
  # @param [Hash{Symbol => Object}] options
304
363
  # @return [String]
305
364
  # @raise [NotImplementedError] unless implemented in subclass
@@ -309,7 +368,7 @@ module RDF
309
368
  end
310
369
 
311
370
  ##
312
- # @param [List] value
371
+ # @param [RDF::List] value
313
372
  # @param [Hash{Symbol => Object}] options
314
373
  # @return [String]
315
374
  # @abstract
@@ -346,16 +405,6 @@ module RDF
346
405
  "_:n#{@node_id += 1}"
347
406
  end
348
407
 
349
- ##
350
- # @deprecated
351
- def register!(resource)
352
- if resource.kind_of?(RDF::Resource)
353
- unless @nodes[resource] # have we already seen it?
354
- @nodes[resource] = resource.uri || node_id
355
- end
356
- end
357
- end
358
-
359
408
  ##
360
409
  # @param [String] string
361
410
  # @return [String]
@@ -375,11 +424,17 @@ module RDF
375
424
 
376
425
  @@subclasses = [] # @private
377
426
 
378
- def self.inherited(child) # @private
427
+ ##
428
+ # @private
429
+ # @return [void]
430
+ def self.inherited(child)
379
431
  @@subclasses << child
380
432
  super
381
433
  end
382
- end # class Writer
434
+ end # Writer
383
435
 
384
- class WriterError < IOError; end
385
- end
436
+ ##
437
+ # The base class for RDF serialization errors.
438
+ class WriterError < IOError
439
+ end # WriterError
440
+ end # RDF
data/lib/rdf.rb CHANGED
@@ -26,51 +26,53 @@ module RDF
26
26
  Enumerator = defined?(::Enumerator) ? ::Enumerator : ::Enumerable::Enumerator
27
27
 
28
28
  # RDF mixins
29
- autoload :Countable, 'rdf/mixin/countable'
30
- autoload :Durable, 'rdf/mixin/durable'
31
- autoload :Enumerable, 'rdf/mixin/enumerable'
32
- autoload :Inferable, 'rdf/mixin/inferable'
33
- autoload :Mutable, 'rdf/mixin/mutable'
34
- autoload :Queryable, 'rdf/mixin/queryable'
35
- autoload :Readable, 'rdf/mixin/readable'
36
- autoload :Writable, 'rdf/mixin/writable'
29
+ autoload :Countable, 'rdf/mixin/countable'
30
+ autoload :Durable, 'rdf/mixin/durable'
31
+ autoload :Enumerable, 'rdf/mixin/enumerable'
32
+ autoload :Indexable, 'rdf/mixin/indexable'
33
+ autoload :Inferable, 'rdf/mixin/inferable'
34
+ autoload :Mutable, 'rdf/mixin/mutable'
35
+ autoload :Queryable, 'rdf/mixin/queryable'
36
+ autoload :Readable, 'rdf/mixin/readable'
37
+ autoload :Writable, 'rdf/mixin/writable'
37
38
 
38
39
  # RDF objects
39
- autoload :Graph, 'rdf/model/graph'
40
- autoload :Literal, 'rdf/model/literal'
41
- autoload :Node, 'rdf/model/node'
42
- autoload :Resource, 'rdf/model/resource'
43
- autoload :Statement, 'rdf/model/statement'
44
- autoload :URI, 'rdf/model/uri'
45
- autoload :Value, 'rdf/model/value'
40
+ autoload :Graph, 'rdf/model/graph'
41
+ autoload :Literal, 'rdf/model/literal'
42
+ autoload :Node, 'rdf/model/node'
43
+ autoload :Resource, 'rdf/model/resource'
44
+ autoload :Statement, 'rdf/model/statement'
45
+ autoload :URI, 'rdf/model/uri'
46
+ autoload :Value, 'rdf/model/value'
46
47
 
47
48
  # RDF collections
48
- autoload :List, 'rdf/model/list'
49
+ autoload :List, 'rdf/model/list'
49
50
 
50
51
  # RDF serialization
51
- autoload :Format, 'rdf/format'
52
- autoload :Reader, 'rdf/reader'
53
- autoload :ReaderError,'rdf/reader'
54
- autoload :Writer, 'rdf/writer'
55
- autoload :WriterError,'rdf/writer'
52
+ autoload :Format, 'rdf/format'
53
+ autoload :Reader, 'rdf/reader'
54
+ autoload :ReaderError, 'rdf/reader'
55
+ autoload :Writer, 'rdf/writer'
56
+ autoload :WriterError, 'rdf/writer'
56
57
 
57
58
  # RDF serialization formats
58
- autoload :NTriples, 'rdf/ntriples'
59
- autoload :NQuads, 'rdf/nquads'
59
+ autoload :NTriples, 'rdf/ntriples'
60
+ autoload :NQuads, 'rdf/nquads'
60
61
 
61
62
  # RDF storage
62
- autoload :Repository, 'rdf/repository'
63
+ autoload :Repository, 'rdf/repository'
64
+ autoload :Transaction, 'rdf/transaction'
63
65
 
64
66
  # RDF querying
65
- autoload :Query, 'rdf/query'
67
+ autoload :Query, 'rdf/query'
66
68
 
67
69
  # RDF vocabularies
68
- autoload :Vocabulary, 'rdf/vocab'
70
+ autoload :Vocabulary, 'rdf/vocab'
69
71
  VOCABS = Dir.glob(File.join(File.dirname(__FILE__), 'rdf', 'vocab', '*.rb')).map { |f| File.basename(f)[0...-(File.extname(f).size)].to_sym } rescue []
70
72
  VOCABS.each { |v| autoload v.to_s.upcase.to_sym, "rdf/vocab/#{v}" unless v == :rdf }
71
73
 
72
74
  # Utilities
73
- autoload :Util, 'rdf/util'
75
+ autoload :Util, 'rdf/util'
74
76
 
75
77
  ##
76
78
  # Alias for `RDF::Resource.new`.
metadata CHANGED
@@ -1,21 +1,23 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rdf
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
4
+ prerelease: true
5
5
  segments:
6
6
  - 0
7
- - 2
8
7
  - 3
9
- version: 0.2.3
8
+ - 0
9
+ - pre
10
+ version: 0.3.0.pre
10
11
  platform: ruby
11
12
  authors:
12
13
  - Arto Bendiken
13
14
  - Ben Lavender
15
+ - Gregg Kellogg
14
16
  autorequire:
15
17
  bindir: bin
16
18
  cert_chain: []
17
19
 
18
- date: 2010-08-26 00:00:00 +02:00
20
+ date: 2010-11-18 00:00:00 +01:00
19
21
  default_executable: rdf
20
22
  dependencies:
21
23
  - !ruby/object:Gem::Dependency
@@ -23,13 +25,12 @@ dependencies:
23
25
  prerelease: false
24
26
  requirement: &id001 !ruby/object:Gem::Requirement
25
27
  requirements:
26
- - - ~>
28
+ - - ">="
27
29
  - !ruby/object:Gem::Version
28
30
  segments:
29
31
  - 2
30
32
  - 2
31
- - 0
32
- version: 2.2.0
33
+ version: "2.2"
33
34
  type: :runtime
34
35
  version_requirements: *id001
35
36
  - !ruby/object:Gem::Dependency
@@ -41,9 +42,9 @@ dependencies:
41
42
  - !ruby/object:Gem::Version
42
43
  segments:
43
44
  - 0
44
- - 5
45
- - 8
46
- version: 0.5.8
45
+ - 6
46
+ - 0
47
+ version: 0.6.0
47
48
  type: :development
48
49
  version_requirements: *id002
49
50
  - !ruby/object:Gem::Dependency
@@ -65,13 +66,14 @@ dependencies:
65
66
  prerelease: false
66
67
  requirement: &id004 !ruby/object:Gem::Requirement
67
68
  requirements:
68
- - - ~>
69
+ - - "="
69
70
  - !ruby/object:Gem::Version
70
71
  segments:
71
72
  - 0
72
- - 2
73
73
  - 3
74
- version: 0.2.3
74
+ - 0
75
+ - pre
76
+ version: 0.3.0.pre
75
77
  type: :development
76
78
  version_requirements: *id004
77
79
  description: RDF.rb is a pure-Ruby library for working with Resource Description Framework (RDF) data.
@@ -84,7 +86,7 @@ extra_rdoc_files: []
84
86
 
85
87
  files:
86
88
  - AUTHORS
87
- - CONTRIBUTORS
89
+ - CREDITS
88
90
  - README
89
91
  - UNLICENSE
90
92
  - VERSION
@@ -96,6 +98,7 @@ files:
96
98
  - lib/rdf/mixin/countable.rb
97
99
  - lib/rdf/mixin/durable.rb
98
100
  - lib/rdf/mixin/enumerable.rb
101
+ - lib/rdf/mixin/indexable.rb
99
102
  - lib/rdf/mixin/inferable.rb
100
103
  - lib/rdf/mixin/mutable.rb
101
104
  - lib/rdf/mixin/queryable.rb
@@ -125,12 +128,16 @@ files:
125
128
  - lib/rdf/ntriples.rb
126
129
  - lib/rdf/query/pattern.rb
127
130
  - lib/rdf/query/solution.rb
131
+ - lib/rdf/query/solutions.rb
128
132
  - lib/rdf/query/variable.rb
129
133
  - lib/rdf/query.rb
130
134
  - lib/rdf/reader.rb
131
135
  - lib/rdf/repository.rb
136
+ - lib/rdf/transaction.rb
132
137
  - lib/rdf/util/aliasing.rb
133
138
  - lib/rdf/util/cache.rb
139
+ - lib/rdf/util/file.rb
140
+ - lib/rdf/util/uuid.rb
134
141
  - lib/rdf/util.rb
135
142
  - lib/rdf/version.rb
136
143
  - lib/rdf/vocab/cc.rb
@@ -174,11 +181,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
174
181
  version: 1.8.1
175
182
  required_rubygems_version: !ruby/object:Gem::Requirement
176
183
  requirements:
177
- - - ">="
184
+ - - ">"
178
185
  - !ruby/object:Gem::Version
179
186
  segments:
180
- - 0
181
- version: "0"
187
+ - 1
188
+ - 3
189
+ - 1
190
+ version: 1.3.1
182
191
  requirements: []
183
192
 
184
193
  rubyforge_project: rdf