rdf-raptor 0.0.1 → 0.1.0

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.
data/README CHANGED
@@ -12,25 +12,68 @@ Examples
12
12
 
13
13
  require 'rdf/raptor'
14
14
 
15
- ### Parsing an RDF/XML file
15
+ ### Ensuring Raptor is installed and obtaining the version number
16
16
 
17
- RDF::Reader.open('http://datagraph.org/jhacker/foaf.rdf') do |reader|
17
+ RDF::Raptor.available? #=> true
18
+ RDF::Raptor.version #=> "1.4.21"
19
+
20
+ ### Parsing RDF statements from an RDF/XML file
21
+
22
+ RDF::Reader.open("http://datagraph.org/jhacker/foaf.rdf") do |reader|
18
23
  reader.each_statement do |statement|
19
24
  puts statement.inspect
20
25
  end
21
26
  end
22
27
 
23
- ### Parsing a Turtle file
28
+ ### Parsing RDF statements from a Turtle file
24
29
 
25
- RDF::Reader.open('http://datagraph.org/jhacker/foaf.ttl') do |reader|
30
+ RDF::Reader.open("http://datagraph.org/jhacker/foaf.ttl") do |reader|
26
31
  reader.each_statement do |statement|
27
32
  puts statement.inspect
28
33
  end
29
34
  end
30
35
 
36
+ ### Serializing RDF statements into an RDF/XML file
37
+
38
+ data = RDF::Repository.load("http://datagraph.org/jhacker/foaf.nt")
39
+
40
+ RDF::Writer.open("output.rdf") do |writer|
41
+ data.each_statement do |statement|
42
+ writer << statement
43
+ end
44
+ end
45
+
46
+ ### Serializing RDF statements into a Turtle file
47
+
48
+ data = RDF::Repository.load("http://datagraph.org/jhacker/foaf.nt")
49
+
50
+ RDF::Writer.open("output.ttl") do |writer|
51
+ data.each_statement do |statement|
52
+ writer << statement
53
+ end
54
+ end
55
+
56
+ ### Obtaining the RDF/XML format specification class
57
+
58
+ RDF::Format.for(:rdfxml) #=> RDF::Raptor::RDFXML::Format
59
+ RDF::Format.for("input.rdf")
60
+ RDF::Format.for(:file_name => "input.rdf")
61
+ RDF::Format.for(:file_extension => "rdf")
62
+ RDF::Format.for(:content_type => "application/rdf+xml")
63
+
64
+ ### Obtaining the Turtle format specification class
65
+
66
+ RDF::Format.for(:turtle) #=> RDF::Raptor::Turtle::Format
67
+ RDF::Format.for("input.ttl")
68
+ RDF::Format.for(:file_name => "input.ttl")
69
+ RDF::Format.for(:file_extension => "ttl")
70
+ RDF::Format.for(:content_type => "text/turtle")
71
+
31
72
  Documentation
32
73
  -------------
33
74
 
75
+ <http://rdf.rubyforge.org/raptor/>
76
+
34
77
  * {RDF::Raptor}
35
78
  * {RDF::Raptor::RDFXML}
36
79
  * {RDF::Raptor::Turtle}
@@ -39,7 +82,8 @@ Dependencies
39
82
  ------------
40
83
 
41
84
  * [RDF.rb](http://rubygems.org/gems/rdf) (>= 0.1.3)
42
- * [Raptor](http://librdf.org/raptor/) (>= 1.4.21)
85
+ * [Raptor](http://librdf.org/raptor/) (>= 1.4.21),
86
+ specifically the `rapper` binary
43
87
 
44
88
  Installation
45
89
  ------------
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.1
1
+ 0.1.0
@@ -2,10 +2,35 @@ module RDF::Raptor
2
2
  ##
3
3
  # RDF/XML support.
4
4
  #
5
+ # @example Requiring the `RDF::Raptor` module
6
+ # require 'rdf/raptor'
7
+ #
8
+ # @example Parsing RDF statements from an RDF/XML file
9
+ # RDF::Reader.open("input.rdf") do |reader|
10
+ # reader.each_statement do |statement|
11
+ # puts statement.inspect
12
+ # end
13
+ # end
14
+ #
15
+ # @example Serializing RDF statements into an RDF/XML file
16
+ # RDF::Writer.open("output.rdf") do |writer|
17
+ # graph.each_statement do |statement|
18
+ # writer << statement
19
+ # end
20
+ # end
21
+ #
5
22
  # @see http://www.w3.org/TR/REC-rdf-syntax/
6
23
  module RDFXML
7
24
  ##
8
25
  # RDF/XML format specification.
26
+ #
27
+ # @example Obtaining an RDF/XML format class
28
+ # RDF::Format.for(:rdfxml) #=> RDF::Raptor::RDFXML::Format
29
+ # RDF::Format.for("input.rdf")
30
+ # RDF::Format.for(:file_name => "input.rdf")
31
+ # RDF::Format.for(:file_extension => "rdf")
32
+ # RDF::Format.for(:content_type => "application/rdf+xml")
33
+ #
9
34
  class Format < RDF::Raptor::Format
10
35
  content_type 'application/rdf+xml', :extension => :rdf
11
36
  content_encoding 'utf-8'
@@ -17,12 +42,42 @@ module RDF::Raptor
17
42
 
18
43
  ##
19
44
  # RDF/XML parser.
45
+ #
46
+ # @example Obtaining an RDF/XML reader class
47
+ # RDF::Reader.for(:rdfxml) #=> RDF::Raptor::RDFXML::Reader
48
+ # RDF::Reader.for("input.rdf")
49
+ # RDF::Reader.for(:file_name => "input.rdf")
50
+ # RDF::Reader.for(:file_extension => "rdf")
51
+ # RDF::Reader.for(:content_type => "application/rdf+xml")
52
+ #
53
+ # @example Parsing RDF statements from an RDF/XML file
54
+ # RDF::Reader.open("input.rdf") do |reader|
55
+ # reader.each_statement do |statement|
56
+ # puts statement.inspect
57
+ # end
58
+ # end
59
+ #
20
60
  class Reader < RDF::Raptor::Reader
21
61
  format RDF::Raptor::RDFXML::Format
22
62
  end
23
63
 
24
64
  ##
25
65
  # RDF/XML serializer.
66
+ #
67
+ # @example Obtaining an RDF/XML writer class
68
+ # RDF::Writer.for(:rdfxml) #=> RDF::Raptor::RDFXML::Writer
69
+ # RDF::Writer.for("output.rdf")
70
+ # RDF::Writer.for(:file_name => "output.rdf")
71
+ # RDF::Writer.for(:file_extension => "rdf")
72
+ # RDF::Writer.for(:content_type => "application/rdf+xml")
73
+ #
74
+ # @example Serializing RDF statements into an RDF/XML file
75
+ # RDF::Writer.open("output.rdf") do |writer|
76
+ # graph.each_statement do |statement|
77
+ # writer << statement
78
+ # end
79
+ # end
80
+ #
26
81
  class Writer < RDF::Raptor::Writer
27
82
  format RDF::Raptor::RDFXML::Format
28
83
  end
@@ -3,7 +3,13 @@ module RDF::Raptor
3
3
  # Reader base class.
4
4
  class Reader < RDF::Reader
5
5
  ##
6
+ # @param [IO, File, RDF::URI, String] input
7
+ # @param [Hash{Symbol => Object}] options
8
+ # @yield [reader]
9
+ # @yieldparam [RDF::Reader] reader
6
10
  def initialize(input = $stdin, options = {}, &block)
11
+ raise RDF::ReaderError.new("`rapper` binary not found") unless RDF::Raptor.available?
12
+
7
13
  format = self.class.format.rapper_format
8
14
  case input
9
15
  when RDF::URI, %r(^(file|http|https|ftp)://)
@@ -21,6 +27,8 @@ module RDF::Raptor
21
27
  @reader = RDF::NTriples::Reader.new(@rapper, options, &block)
22
28
  end
23
29
 
30
+ protected
31
+
24
32
  ##
25
33
  # @return [Array]
26
34
  def read_triple
@@ -2,10 +2,35 @@ module RDF::Raptor
2
2
  ##
3
3
  # Turtle support.
4
4
  #
5
+ # @example Requiring the `RDF::Raptor` module
6
+ # require 'rdf/raptor'
7
+ #
8
+ # @example Parsing RDF statements from a Turtle file
9
+ # RDF::Reader.open("input.ttl") do |reader|
10
+ # reader.each_statement do |statement|
11
+ # puts statement.inspect
12
+ # end
13
+ # end
14
+ #
15
+ # @example Serializing RDF statements into a Turtle file
16
+ # RDF::Writer.open("output.ttl") do |writer|
17
+ # graph.each_statement do |statement|
18
+ # writer << statement
19
+ # end
20
+ # end
21
+ #
5
22
  # @see http://www.w3.org/TeamSubmission/turtle/
6
23
  module Turtle
7
24
  ##
8
25
  # Turtle format specification.
26
+ #
27
+ # @example Obtaining a Turtle format class
28
+ # RDF::Format.for(:turtle) #=> RDF::Raptor::Turtle::Format
29
+ # RDF::Format.for("input.ttl")
30
+ # RDF::Format.for(:file_name => "input.ttl")
31
+ # RDF::Format.for(:file_extension => "ttl")
32
+ # RDF::Format.for(:content_type => "text/turtle")
33
+ #
9
34
  class Format < RDF::Raptor::Format
10
35
  content_type 'text/turtle', :extension => :ttl
11
36
  content_encoding 'utf-8'
@@ -17,12 +42,42 @@ module RDF::Raptor
17
42
 
18
43
  ##
19
44
  # Turtle parser.
45
+ #
46
+ # @example Obtaining a Turtle reader class
47
+ # RDF::Reader.for(:turtle) #=> RDF::Raptor::Turtle::Reader
48
+ # RDF::Reader.for("input.ttl")
49
+ # RDF::Reader.for(:file_name => "input.ttl")
50
+ # RDF::Reader.for(:file_extension => "ttl")
51
+ # RDF::Reader.for(:content_type => "text/turtle")
52
+ #
53
+ # @example Parsing RDF statements from a Turtle file
54
+ # RDF::Reader.open("input.ttl") do |reader|
55
+ # reader.each_statement do |statement|
56
+ # puts statement.inspect
57
+ # end
58
+ # end
59
+ #
20
60
  class Reader < RDF::Raptor::Reader
21
61
  format RDF::Raptor::Turtle::Format
22
62
  end
23
63
 
24
64
  ##
25
65
  # Turtle serializer.
66
+ #
67
+ # @example Obtaining a Turtle writer class
68
+ # RDF::Writer.for(:turtle) #=> RDF::Raptor::Turtle::Writer
69
+ # RDF::Writer.for("output.ttl")
70
+ # RDF::Writer.for(:file_name => "output.ttl")
71
+ # RDF::Writer.for(:file_extension => "ttl")
72
+ # RDF::Writer.for(:content_type => "text/turtle")
73
+ #
74
+ # @example Serializing RDF statements into a Turtle file
75
+ # RDF::Writer.open("output.ttl") do |writer|
76
+ # graph.each_statement do |statement|
77
+ # writer << statement
78
+ # end
79
+ # end
80
+ #
26
81
  class Writer < RDF::Raptor::Writer
27
82
  format RDF::Raptor::Turtle::Format
28
83
  end
@@ -1,8 +1,8 @@
1
1
  module RDF; module Raptor
2
2
  module VERSION
3
3
  MAJOR = 0
4
- MINOR = 0
5
- TINY = 1
4
+ MINOR = 1
5
+ TINY = 0
6
6
  EXTRA = nil
7
7
 
8
8
  STRING = [MAJOR, MINOR, TINY].join('.')
@@ -2,6 +2,68 @@ module RDF::Raptor
2
2
  ##
3
3
  # Writer base class.
4
4
  class Writer < RDF::Writer
5
- # TODO
5
+ ##
6
+ # @param [IO, File] output
7
+ # @param [Hash{Symbol => Object}] options
8
+ # @yield [writer]
9
+ # @yieldparam [RDF::Writer] writer
10
+ def initialize(output = $stdout, options = {}, &block)
11
+ raise RDF::WriterError.new("`rapper` binary not found") unless RDF::Raptor.available?
12
+
13
+ format = self.class.format.rapper_format
14
+ case output
15
+ when File, IO
16
+ @command = "rapper -q -i ntriples -o #{format} file:///dev/stdin"
17
+ @command << " #{options[:base_uri]}" if options.has_key?(:base_uri)
18
+ @rapper = IO.popen(@command, 'rb+')
19
+ else
20
+ raise ArgumentError.new("unsupported output type: #{output.inspect}")
21
+ end
22
+ @writer = RDF::NTriples::Writer.new(@rapper, options)
23
+ super(output, options, &block)
24
+ end
25
+
26
+ protected
27
+
28
+ ##
29
+ # @return [void]
30
+ def write_prologue
31
+ super
32
+ end
33
+
34
+ ##
35
+ # @param [RDF::Resource] subject
36
+ # @param [RDF::URI] predicate
37
+ # @param [RDF::Value] object
38
+ # @return [void]
39
+ def write_triple(subject, predicate, object)
40
+ @writer.write_triple(subject, predicate, object)
41
+ end
42
+
43
+ ##
44
+ # @return [void]
45
+ def write_epilogue
46
+ @rapper.close_write
47
+ begin
48
+ chunk_size = @options[:chunk_size] || 4096 # bytes
49
+ loop do
50
+ @output.write(@rapper.readpartial(chunk_size))
51
+ end
52
+ rescue EOFError => e
53
+ # we're all done
54
+ end
55
+ end
56
+
57
+ ##
58
+ # @todo Remove this once RDF.rb 0.1.4 is released.
59
+ # @private
60
+ def self.format(klass = nil)
61
+ if klass.nil?
62
+ Format.each do |format|
63
+ return format if format.writer == self
64
+ end
65
+ return nil # not found
66
+ end
67
+ end
6
68
  end
7
69
  end
data/lib/rdf/raptor.rb CHANGED
@@ -4,9 +4,34 @@ module RDF
4
4
  ##
5
5
  # **`RDF::Raptor`** is a Raptor RDF Parser wrapper for RDF.rb.
6
6
  #
7
+ # * {RDF::Raptor::RDFXML} provides support for the standard
8
+ # machine-readable RDF/XML format.
9
+ # * {RDF::Raptor::Turtle} provides support for the popular
10
+ # human-readable Turtle format.
11
+ #
7
12
  # @example Requiring the `RDF::Raptor` module
8
13
  # require 'rdf/raptor'
9
14
  #
15
+ # @example Checking whether Raptor is installed
16
+ # RDF::Raptor.available? #=> true
17
+ #
18
+ # @example Obtaining the Raptor version number
19
+ # RDF::Raptor.version #=> "1.4.21"
20
+ #
21
+ # @example Obtaining an RDF/XML format class
22
+ # RDF::Format.for(:rdfxml) #=> RDF::Raptor::RDFXML::Format
23
+ # RDF::Format.for("input.rdf")
24
+ # RDF::Format.for(:file_name => "input.rdf")
25
+ # RDF::Format.for(:file_extension => "rdf")
26
+ # RDF::Format.for(:content_type => "application/rdf+xml")
27
+ #
28
+ # @example Obtaining a Turtle format class
29
+ # RDF::Format.for(:turtle) #=> RDF::Raptor::Turtle::Format
30
+ # RDF::Format.for("input.ttl")
31
+ # RDF::Format.for(:file_name => "input.ttl")
32
+ # RDF::Format.for(:file_extension => "ttl")
33
+ # RDF::Format.for(:content_type => "text/turtle")
34
+ #
10
35
  # @see http://rdf.rubyforge.org/
11
36
  # @see http://librdf.org/raptor/
12
37
  #
@@ -18,5 +43,30 @@ module RDF
18
43
  require 'rdf/raptor/writer'
19
44
  require 'rdf/raptor/rdfxml'
20
45
  require 'rdf/raptor/turtle'
46
+
47
+ ##
48
+ # Returns `true` if the `rapper` binary is available.
49
+ #
50
+ # @example
51
+ # RDF::Raptor.available? #=> true
52
+ #
53
+ # @return [Boolean]
54
+ def self.available?
55
+ !!version
56
+ end
57
+
58
+ ##
59
+ # Returns the installed `rapper` version number, or `nil` if `rapper` is
60
+ # not available.
61
+ #
62
+ # @example
63
+ # RDF::Raptor.version #=> "1.4.21"
64
+ #
65
+ # @return [String]
66
+ def self.version
67
+ if `rapper --version 2>/dev/null` =~ /^(\d+)\.(\d+)\.(\d+)/
68
+ [$1, $2, $3].join('.')
69
+ end
70
+ end
21
71
  end # module Raptor
22
72
  end # module RDF
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 0
8
7
  - 1
9
- version: 0.0.1
8
+ - 0
9
+ version: 0.1.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Arto Bendiken
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-04-01 00:00:00 +02:00
17
+ date: 2010-04-02 00:00:00 +02:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency