rdf 0.2.3 → 0.3.0.pre

Sign up to get free protection for your applications and to get access to all the features.
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