rdf-raptor 0.3.0 → 0.4.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/AUTHORS CHANGED
@@ -1 +1,2 @@
1
1
  * Arto Bendiken <arto.bendiken@gmail.com>
2
+ * John Fieber <jrf@ursamaris.org>
@@ -0,0 +1 @@
1
+ * Ben Lavender <blavender@gmail.com>
data/README CHANGED
@@ -2,11 +2,11 @@ Raptor RDF Parser Wrapper for RDF.rb
2
2
  ====================================
3
3
 
4
4
  This is an [RDF.rb][] plugin that adds support for parsing/serializing
5
- [RDF/XML][] and [Turtle][] data using the [Raptor RDF Parser][Raptor]
5
+ [RDF/XML][], [Turtle][] and [RDFa][] data using the [Raptor RDF Parser][Raptor]
6
6
  library.
7
7
 
8
8
  * <http://github.com/bendiken/rdf-raptor>
9
- * <http://lists.w3.org/Archives/Public/public-rdf-ruby/2010Apr/0003.html>
9
+ * <http://blog.datagraph.org/2010/04/parsing-rdf-with-ruby>
10
10
 
11
11
  Features
12
12
  --------
@@ -106,11 +106,12 @@ Documentation
106
106
  * {RDF::Raptor::RDFXML}
107
107
  * {RDF::Raptor::Turtle}
108
108
  * {RDF::Raptor::RDFa}
109
+ * {RDF::Raptor::Graphviz}
109
110
 
110
111
  Dependencies
111
112
  ------------
112
113
 
113
- * [RDF.rb](http://rubygems.org/gems/rdf) (>= 0.1.9)
114
+ * [RDF.rb](http://rubygems.org/gems/rdf) (>= 0.2.0)
114
115
  * [Raptor][] (>= 1.4.16), specifically the `rapper` binary
115
116
 
116
117
  Installation
@@ -152,6 +153,12 @@ Author
152
153
  ------
153
154
 
154
155
  * [Arto Bendiken](mailto:arto.bendiken@gmail.com) - <http://ar.to/>
156
+ * [John Fieber](mailto:jrf@ursamaris.org) - <http://github.com/jfieber>
157
+
158
+ Contributors
159
+ ------------
160
+
161
+ * [Ben Lavender](mailto:blavender@gmail.com) - <http://bhuga.net/>
155
162
 
156
163
  License
157
164
  -------
@@ -162,5 +169,6 @@ information, see <http://unlicense.org/> or the accompanying UNLICENSE file.
162
169
  [RDF.rb]: http://rdf.rubyforge.org/
163
170
  [RDF/XML]: http://www.w3.org/TR/REC-rdf-syntax/
164
171
  [Turtle]: http://en.wikipedia.org/wiki/Turtle_(syntax)
172
+ [RDFa]: http://rdfa.info/
165
173
  [Raptor]: http://librdf.org/raptor/
166
174
  [rapper]: http://librdf.org/raptor/rapper.html
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.0
1
+ 0.4.0
@@ -0,0 +1,45 @@
1
+ @base <http://rubygems.org/gems/rdf-json> .
2
+ @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
3
+ @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
4
+ @prefix dc: <http://purl.org/dc/terms/> .
5
+ @prefix foaf: <http://xmlns.com/foaf/0.1/> .
6
+ @prefix doap: <http://usefulinc.com/ns/doap#> .
7
+
8
+ <> a doap:Project ;
9
+ doap:name "RDF::Raptor" ;
10
+ doap:homepage <http://rdf.rubyforge.org/raptor/> ;
11
+ doap:license <http://creativecommons.org/licenses/publicdomain/> ;
12
+ doap:shortdesc "Raptor RDF Parser wrapper for RDF.rb."@en ;
13
+ doap:description "RDF.rb plugin for parsing/serializing RDF/XML, Turtle and RDFa data using the Raptor RDF Parser library."@en ;
14
+ doap:created "2010-03-23" ;
15
+ doap:platform "Ruby" ;
16
+ doap:download-page <http://rubyforge.org/projects/rdf/> ;
17
+ doap:bug-database <http://github.com/bendiken/rdf-raptor/issues> ;
18
+ doap:blog <http://ar.to/>, <http://blog.datagraph.org/> ;
19
+ doap:developer <http://ar.to/#self>, _:jfieber ;
20
+ doap:maintainer <http://ar.to/#self> ;
21
+ doap:documenter <http://ar.to/#self> ;
22
+ doap:helper <http://bhuga.net/#ben> ;
23
+ foaf:maker <http://ar.to/#self> ;
24
+ dc:creator <http://ar.to/#self> .
25
+
26
+ <http://ar.to/#self> a foaf:Person ;
27
+ foaf:name "Arto Bendiken" ;
28
+ foaf:mbox <mailto:arto.bendiken@gmail.com> ;
29
+ foaf:mbox_sha1sum "d0737cceb55eb7d740578d2db1bc0727e3ed49ce",
30
+ "a033f652c84a4d73b8c26d318c2395699dd2bdfb" ;
31
+ foaf:homepage <http://ar.to/> ;
32
+ rdfs:isDefinedBy <http://datagraph.org/bendiken/foaf> .
33
+
34
+ <http://bhuga.net/#ben> a foaf:Person ;
35
+ foaf:name "Ben Lavender" ;
36
+ foaf:mbox <mailto:blavender@gmail.com> ;
37
+ foaf:mbox_sha1sum "dbf45f4ffbd27b67aa84f02a6a31c144727d10af" ;
38
+ foaf:homepage <http://bhuga.net/> ;
39
+ rdfs:isDefinedBy <http://datagraph.org/bhuga/foaf> .
40
+
41
+ _:jfieber a foaf:Person ;
42
+ foaf:name "John Fieber" ;
43
+ foaf:mbox <mailto:jrf@ursamaris.org> ;
44
+ foaf:mbox_sha1sum "f7653fc1ac0e82ebb32f092389bd5fc728eaae12" ;
45
+ foaf:homepage <http://ursamaris.org/> .
@@ -1,3 +1,4 @@
1
+ require 'tempfile'
1
2
  require 'rdf'
2
3
 
3
4
  module RDF
@@ -10,6 +11,8 @@ module RDF
10
11
  # human-readable Turtle format.
11
12
  # * {RDF::Raptor::RDFa} provides support for extracting
12
13
  # RDF statements from XHTML+RDFa documents.
14
+ # * {RDF::Raptor::Graphviz} provides support for serializing
15
+ # RDF statements to the Graphviz DOT format.
13
16
  #
14
17
  # @example Requiring the `RDF::Raptor` module
15
18
  # require 'rdf/raptor'
@@ -20,6 +23,9 @@ module RDF
20
23
  # @example Obtaining the Raptor version number
21
24
  # RDF::Raptor.version #=> "1.4.21"
22
25
  #
26
+ # @example Obtaining the Raptor engine
27
+ # RDF::Raptor::ENGINE #=> :ffi
28
+ #
23
29
  # @example Obtaining an RDF/XML format class
24
30
  # RDF::Format.for(:rdfxml) #=> RDF::Raptor::RDFXML::Format
25
31
  # RDF::Format.for("input.rdf")
@@ -41,18 +47,42 @@ module RDF
41
47
  # RDF::Format.for(:file_extension => "html")
42
48
  # RDF::Format.for(:content_type => "application/xhtml+xml")
43
49
  #
50
+ # {RDF::Raptor} includes an ffi implementation, which loads
51
+ # the libraptor library into the ruby process, and a cli
52
+ # implementation, which uses the rapper command line tool
53
+ # in a subprocess. The ffi implementation is used unless
54
+ # libraptor library is not found, or the RDF_RAPTOR_ENGINE
55
+ # environment variable is set to 'cli'.
56
+ #
57
+ # If the libraptor library is in the standard library search
58
+ # path, and the rapper command is in the standard command
59
+ # search path, all should be well. If either is in a
60
+ # non-standard location, set the RDF_RAPTOR_LIBPATH and/or
61
+ # RDF_RAPTOR_BINPATH appropriately before requiring rdf/raptor.
62
+ #
44
63
  # @see http://rdf.rubyforge.org/
45
64
  # @see http://librdf.org/raptor/
65
+ # @see http://wiki.github.com/ffi/ffi/
46
66
  #
47
67
  # @author [Arto Bendiken](http://ar.to/)
68
+ # @author [John Fieber](http://github.com/jfieber)
48
69
  module Raptor
49
- ENGINE = (ENV['RDF_RAPTOR_ENGINE'] || :cli).to_sym unless const_defined?(:ENGINE)
50
70
  LIBRAPTOR = ENV['RDF_RAPTOR_LIBPATH'] || 'libraptor' unless const_defined?(:LIBRAPTOR)
51
71
  RAPPER = ENV['RDF_RAPTOR_BINPATH'] || 'rapper' unless const_defined?(:RAPPER)
52
72
 
53
73
  require 'rdf/raptor/version'
54
- require 'rdf/raptor/cli'
55
- require 'rdf/raptor/ffi' if ENGINE == :ffi
74
+ begin
75
+ # Try ffi implementation
76
+ raise LoadError if ENV['RDF_RAPTOR_ENGINE'] == 'cli' # override
77
+ require 'rdf/raptor/ffi'
78
+ include RDF::Raptor::FFI
79
+ extend RDF::Raptor::FFI
80
+ rescue LoadError => e
81
+ # cli fallback
82
+ require 'rdf/raptor/cli'
83
+ include RDF::Raptor::CLI
84
+ extend RDF::Raptor::CLI
85
+ end
56
86
 
57
87
  ##
58
88
  # Returns `true` if the `rapper` binary is available.
@@ -65,20 +95,6 @@ module RDF
65
95
  !!version
66
96
  end
67
97
 
68
- ##
69
- # Returns the installed `rapper` version number, or `nil` if `rapper` is
70
- # not available.
71
- #
72
- # @example
73
- # RDF::Raptor.version #=> "1.4.21"
74
- #
75
- # @return [String]
76
- def self.version
77
- if `#{RAPPER} --version 2>/dev/null` =~ /^(\d+)\.(\d+)\.(\d+)/
78
- [$1, $2, $3].join('.')
79
- end
80
- end
81
-
82
98
  ##
83
99
  # Format base class.
84
100
  class Format < RDF::Format
@@ -98,21 +114,9 @@ module RDF
98
114
  end
99
115
  end
100
116
 
101
- ##
102
- # Reader base class.
103
- class Reader < RDF::Reader
104
- include RDF::Raptor::CLI::Reader if ENGINE == :cli
105
- include RDF::Raptor::FFI::Reader if ENGINE == :ffi
106
- end
107
-
108
- ##
109
- # Writer base class.
110
- class Writer < RDF::Writer
111
- include RDF::Raptor::CLI::Writer
112
- end
113
-
114
117
  require 'rdf/raptor/rdfxml'
115
118
  require 'rdf/raptor/turtle'
116
119
  require 'rdf/raptor/rdfa'
120
+ require 'rdf/raptor/graphviz'
117
121
  end # module Raptor
118
122
  end # module RDF
@@ -2,9 +2,26 @@ module RDF::Raptor
2
2
  ##
3
3
  # A command-line interface to Raptor's `rapper` utility.
4
4
  module CLI
5
+
6
+ ENGINE = :cli
7
+
8
+ ##
9
+ # Returns the installed `rapper` version number, or `nil` if `rapper` is
10
+ # not available.
11
+ #
12
+ # @example
13
+ # RDF::Raptor.version #=> "1.4.21"
14
+ #
15
+ # @return [String]
16
+ def version
17
+ if `#{RAPPER} --version 2>/dev/null` =~ /^(\d+)\.(\d+)\.(\d+)/
18
+ [$1, $2, $3].join('.')
19
+ end
20
+ end
21
+
5
22
  ##
6
23
  # Reader implementation.
7
- module Reader
24
+ class Reader < RDF::Reader
8
25
  ##
9
26
  # @param [IO, File, RDF::URI, String] input
10
27
  # @param [Hash{Symbol => Object}] options
@@ -17,18 +34,35 @@ module RDF::Raptor
17
34
  format = self.class.format.rapper_format
18
35
  case input
19
36
  when RDF::URI, %r(^(file|http|https|ftp)://)
20
- @command = "#{RAPPER} -q -i #{format} -o ntriples #{input}"
21
- @command << " #{options[:base_uri]}" if options.has_key?(:base_uri)
37
+ @command = "#{RAPPER} -q -i #{format} -o ntriples '#{input}'"
38
+ @command << " '#{options[:base_uri]}'" if options.has_key?(:base_uri)
22
39
  @rapper = IO.popen(@command, 'rb')
23
- when File
24
- @command = "#{RAPPER} -q -i #{format} -o ntriples #{File.expand_path(input.path)}"
25
- @command << " #{options[:base_uri]}" if options.has_key?(:base_uri)
40
+ when File, Tempfile
41
+ @command = "#{RAPPER} -q -i #{format} -o ntriples '#{File.expand_path(input.path)}'"
42
+ @command << " '#{options[:base_uri]}'" if options.has_key?(:base_uri)
26
43
  @rapper = IO.popen(@command, 'rb')
27
44
  else # IO, String
28
45
  @command = "#{RAPPER} -q -i #{format} -o ntriples file:///dev/stdin"
29
- @command << " #{options[:base_uri]}" if options.has_key?(:base_uri)
46
+ @command << " '#{options[:base_uri]}'" if options.has_key?(:base_uri)
30
47
  @rapper = IO.popen(@command, 'rb+')
31
- @rapper.write(input.respond_to?(:read) ? input.read : input.to_s)
48
+ pid = fork do
49
+ # process to feed rapper
50
+ begin
51
+ @rapper.close_read
52
+ if input.respond_to?(:read)
53
+ buf = String.new
54
+ while input.read(8192, buf)
55
+ @rapper.write(buf)
56
+ end
57
+ else
58
+ @rapper.write(input.to_s)
59
+ end
60
+ @rapper.close_write
61
+ ensure
62
+ Process.exit
63
+ end
64
+ end
65
+ Process.detach(pid)
32
66
  @rapper.close_write
33
67
  end
34
68
  @reader = RDF::NTriples::Reader.new(@rapper, options, &block)
@@ -39,13 +73,21 @@ module RDF::Raptor
39
73
  ##
40
74
  # @return [Array]
41
75
  def read_triple
42
- @reader.read_triple
76
+ raise EOFError if @rapper.closed?
77
+ begin
78
+ triple = @reader.read_triple
79
+ rescue EOFError
80
+ @rapper.close
81
+ raise
82
+ end
83
+ triple
43
84
  end
85
+
44
86
  end
45
87
 
46
88
  ##
47
89
  # Writer implementation.
48
- module Writer
90
+ class Writer < RDF::Writer
49
91
  ##
50
92
  # @param [IO, File] output
51
93
  # @param [Hash{Symbol => Object}] options
@@ -56,9 +98,9 @@ module RDF::Raptor
56
98
 
57
99
  format = self.class.format.rapper_format
58
100
  case output
59
- when File, IO, StringIO
60
- @command = "#{RAPPER} -q -i ntriples -o #{format} file:///dev/stdin"
61
- @command << " #{options[:base_uri]}" if options.has_key?(:base_uri)
101
+ when File, IO, StringIO, Tempfile
102
+ @command = "#{RAPPER} -q -i turtle -o #{format} file:///dev/stdin"
103
+ @command << " '#{options[:base_uri]}'" if options.has_key?(:base_uri)
62
104
  @rapper = IO.popen(@command, 'rb+')
63
105
  else
64
106
  raise ArgumentError.new("unsupported output type: #{output.inspect}")
@@ -81,22 +123,36 @@ module RDF::Raptor
81
123
  # @param [RDF::Value] object
82
124
  # @return [void]
83
125
  def write_triple(subject, predicate, object)
126
+ output_transit(false)
84
127
  @writer.write_triple(subject, predicate, object)
128
+ output_transit(false)
85
129
  end
86
130
 
87
131
  ##
88
132
  # @return [void]
89
133
  def write_epilogue
90
- @rapper.close_write
91
- begin
134
+ @rapper.close_write unless @rapper.closed?
135
+ output_transit(true)
136
+ end
137
+
138
+ ##
139
+ # Feed any available rapper output to the destination.
140
+ # @return [void]
141
+ def output_transit(block)
142
+ unless @rapper.closed?
92
143
  chunk_size = @options[:chunk_size] || 4096 # bytes
93
- loop do
94
- @output.write(@rapper.readpartial(chunk_size))
144
+ begin
145
+ loop do
146
+ @output.write(block ? @rapper.readpartial(chunk_size) : @rapper.read_nonblock(chunk_size))
147
+ end
148
+ rescue EOFError => e
149
+ @rapper.close
150
+ rescue Errno::EAGAIN, Errno::EINTR
151
+ # eat
95
152
  end
96
- rescue EOFError => e
97
- # we're all done
98
153
  end
99
154
  end
155
+
100
156
  end
101
157
  end
102
158
  end
@@ -7,9 +7,26 @@ module RDF::Raptor
7
7
  # @see http://librdf.org/raptor/api/
8
8
  # @see http://librdf.org/raptor/libraptor.html
9
9
  module FFI
10
+
11
+ ENGINE = :ffi
12
+
13
+ ##
14
+ # Returns the installed `rapper` version number, or `nil` if `rapper` is
15
+ # not available.
16
+ #
17
+ # @example
18
+ # RDF::Raptor.version #=> "1.4.21"
19
+ #
20
+ # @return [String]
21
+ def version
22
+ [ V1_4.raptor_version_major,
23
+ V1_4.raptor_version_minor,
24
+ V1_4.raptor_version_release ].join('.')
25
+ end
26
+
10
27
  ##
11
28
  # Reader implementation.
12
- module Reader
29
+ class Reader < RDF::Reader
13
30
  ##
14
31
  # @param [IO, File, RDF::URI, String] input
15
32
  # @param [Hash{Symbol => Object}] options
@@ -21,6 +38,17 @@ module RDF::Raptor
21
38
  super
22
39
  end
23
40
 
41
+ ERROR_HANDLER = Proc.new do |user_data, locator, message|
42
+ line = V1_4.raptor_locator_line(locator)
43
+ raise RDF::ReaderError, line > -1 ? "Line #{line}: #{message}" : message
44
+ end
45
+
46
+ WARNING_HANDLER = Proc.new do |user_data, locator, message|
47
+ # line = V1_4.raptor_locator_line(locator)
48
+ # $stderr.puts line > -1 ? "Line #{line}: #{message}" : message
49
+ end
50
+
51
+
24
52
  ##
25
53
  # @yield [statement]
26
54
  # @yieldparam [RDF::Statement] statement
@@ -34,59 +62,130 @@ module RDF::Raptor
34
62
  # @yield [triple]
35
63
  # @yieldparam [Array(RDF::Resource, RDF::URI, RDF::Value)] triple
36
64
  def each_triple(&block)
37
- @parser = Proc.new do |user_data, statement|
65
+ statement_handler = Proc.new do |user_data, statement|
38
66
  triple = V1_4::Statement.new(statement).to_triple
39
67
  block.call(triple)
40
68
  end
41
69
 
42
- V1_4.with_world do |world|
43
- V1_4.with_parser(:name => @format) do |parser|
44
- V1_4.raptor_set_statement_handler(parser, nil, @parser)
45
- case @input
46
- when RDF::URI, %r(^(file|http|https|ftp)://)
47
- begin
48
- data_url = V1_4.raptor_new_uri(@input.to_s)
49
- base_uri = @options.has_key?(:base_uri) ? V1_4.raptor_new_uri(@options[:base_uri].to_s) : nil
50
- unless (result = V1_4.raptor_parse_uri(parser, data_url, base_uri)).zero?
51
- # TODO: error handling
52
- end
53
- ensure
54
- V1_4.raptor_free_uri(base_uri) if base_uri
55
- V1_4.raptor_free_uri(data_url) if data_url
56
- end
57
-
58
- when File
59
- begin
60
- data_url = V1_4.raptor_new_uri("file://#{File.expand_path(@input.path)}")
61
- base_uri = @options.has_key?(:base_uri) ? V1_4.raptor_new_uri(@options[:base_uri].to_s) : nil
62
- unless (result = V1_4.raptor_parse_file(parser, data_url, base_uri)).zero?
63
- # TODO: error handling
64
- end
65
- ensure
66
- V1_4.raptor_free_uri(base_uri) if base_uri
67
- V1_4.raptor_free_uri(data_url) if data_url
68
- end
69
-
70
- else # IO, String
71
- base_uri = (@options[:base_uri] || 'file:///dev/stdin').to_s
72
- unless (result = V1_4.raptor_start_parse(parser, base_uri)).zero?
70
+ V1_4.with_parser(:name => @format) do |parser|
71
+ V1_4.raptor_set_error_handler(parser, nil, ERROR_HANDLER)
72
+ V1_4.raptor_set_warning_handler(parser, nil, WARNING_HANDLER)
73
+ V1_4.raptor_set_statement_handler(parser, nil, statement_handler)
74
+ case @input
75
+ when RDF::URI, %r(^(file|http|https|ftp)://)
76
+ begin
77
+ data_url = V1_4.raptor_new_uri(@input.to_s)
78
+ base_uri = @options[:base_uri].to_s.empty? ? nil : V1_4.raptor_new_uri(@options[:base_uri].to_s)
79
+ unless (result = V1_4.raptor_parse_uri(parser, data_url, base_uri)).zero?
73
80
  # TODO: error handling
74
81
  end
75
- # TODO: read in chunks instead of everything in one go:
76
- unless (result = V1_4.raptor_parse_chunk(parser, buffer = @input.read, buffer.size, 0)).zero?
82
+ ensure
83
+ V1_4.raptor_free_uri(base_uri) if base_uri
84
+ V1_4.raptor_free_uri(data_url) if data_url
85
+ end
86
+
87
+ when File, Tempfile
88
+ begin
89
+ data_url = V1_4.raptor_new_uri("file://#{File.expand_path(@input.path)}")
90
+ base_uri = @options[:base_uri].to_s.empty? ? nil : V1_4.raptor_new_uri(@options[:base_uri].to_s)
91
+ unless (result = V1_4.raptor_parse_file(parser, data_url, base_uri)).zero?
77
92
  # TODO: error handling
78
93
  end
79
- V1_4.raptor_parse_chunk(parser, nil, 0, 1) # EOF
80
- end
94
+ ensure
95
+ V1_4.raptor_free_uri(base_uri) if base_uri
96
+ V1_4.raptor_free_uri(data_url) if data_url
97
+ end
98
+
99
+ else # IO, String
100
+ base_uri = (@options[:base_uri] || 'file:///dev/stdin').to_s
101
+ unless (result = V1_4.raptor_start_parse(parser, base_uri)).zero?
102
+ # TODO: error handling
103
+ end
104
+ # TODO: read in chunks instead of everything in one go:
105
+ unless (result = V1_4.raptor_parse_chunk(parser, buffer = @input.read, buffer.size, 0)).zero?
106
+ # TODO: error handling
107
+ end
108
+ V1_4.raptor_parse_chunk(parser, nil, 0, 1) # EOF
81
109
  end
82
110
  end
83
111
 
84
- @parser = nil
85
112
  end
86
113
 
87
114
  alias_method :each, :each_statement
88
115
  end
89
116
 
117
+ ##
118
+ # Writer implementation.
119
+ class Writer < RDF::Writer
120
+
121
+ ERROR_HANDLER = Proc.new do |user_data, locator, message|
122
+ raise RDF::WriterError, message
123
+ end
124
+
125
+ WARNING_HANDLER = Proc.new do |user_data, locator, message|
126
+ # $stderr.puts "warning"
127
+ end
128
+
129
+ def initialize(output = $stdout, options = {}, &block)
130
+ raise ArgumentError, "Block required" unless block_given? # Can we work without this?
131
+ @format = self.class.format.rapper_format
132
+ begin
133
+ # make a serializer
134
+ @serializer = V1_4.raptor_new_serializer((@format || :rdfxml).to_s)
135
+ raise RDF::WriterError, "raptor_new_serializer failed" if @serializer.nil?
136
+ V1_4.raptor_serializer_set_error_handler(@serializer, nil, ERROR_HANDLER)
137
+ V1_4.raptor_serializer_set_warning_handler(@serializer, nil, WARNING_HANDLER)
138
+ base_uri = options[:base_uri].to_s.empty? ? nil : V1_4.raptor_new_uri(options[:base_uri].to_s)
139
+
140
+ # make an iostream
141
+ handler = V1_4::IOStreamHandler.new
142
+ handler.rubyio = output
143
+ raptor_iostream = V1_4.raptor_new_iostream_from_handler2(nil, handler)
144
+
145
+ # connect the two
146
+ unless V1_4.raptor_serialize_start_to_iostream(@serializer, base_uri, raptor_iostream).zero?
147
+ raise RDF::WriterError, "raptor_serialize_start_to_iostream failed"
148
+ end
149
+ super
150
+ ensure
151
+ V1_4.raptor_free_iostream(raptor_iostream) if raptor_iostream
152
+ V1_4.raptor_free_uri(base_uri) if base_uri
153
+ V1_4.raptor_free_serializer(@serializer) if @serializer
154
+ end
155
+ end
156
+
157
+ ##
158
+ # @param [RDF::Resource] subject
159
+ # @param [RDF::URI] predicate
160
+ # @param [RDF::Value] object
161
+ # @return [void]
162
+ def write_triple(subject, predicate, object)
163
+ raptor_statement = V1_4::Statement.new
164
+ raptor_statement.subject = subject
165
+ raptor_statement.predicate = predicate
166
+ raptor_statement.object = object
167
+ begin
168
+ unless V1_4.raptor_serialize_statement(@serializer, raptor_statement.to_ptr).zero?
169
+ raise RDF::WriterError, "raptor_serialize_statement failed"
170
+ end
171
+ ensure
172
+ raptor_statement.release
173
+ raptor_statement = nil
174
+ end
175
+ end
176
+
177
+ ##
178
+ # @return [void]
179
+ def write_epilogue
180
+ unless V1_4.raptor_serialize_end(@serializer).zero?
181
+ raise RDF::WriterError, "raptor_serialize_end failed"
182
+ end
183
+ super
184
+ end
185
+
186
+ end
187
+
188
+
90
189
  ##
91
190
  # Helper methods for FFI modules.
92
191
  module Base
@@ -100,23 +199,6 @@ module RDF::Raptor
100
199
  #
101
200
  # @see http://librdf.org/raptor/libraptor.html
102
201
  module V1_4
103
- ##
104
- # @param [Hash{Symbol => Object}] options
105
- # @option (options) [Boolean] :init (true)
106
- # @yield [world]
107
- # @yieldparam [FFI::Pointer] world
108
- # @return [void]
109
- def self.with_world(options = {}, &block)
110
- options = {:init => true}.merge(options)
111
- begin
112
- raptor_init if options[:init]
113
- raptor_world_open(world = raptor_new_world)
114
- block.call(world)
115
- ensure
116
- raptor_free_world(world) if world
117
- raptor_finish if options[:init]
118
- end
119
- end
120
202
 
121
203
  ##
122
204
  # @param [Hash{Symbol => Object}] options
@@ -133,6 +215,7 @@ module RDF::Raptor
133
215
  end
134
216
  end
135
217
 
218
+
136
219
  extend Base
137
220
  extend ::FFI::Library
138
221
  ffi_lib LIBRAPTOR
@@ -153,19 +236,62 @@ module RDF::Raptor
153
236
  :object, :pointer,
154
237
  :object_type, :int,
155
238
  :object_literal_datatype, :pointer,
156
- :object_literal_language, :string
239
+ :object_literal_language, :pointer
240
+
241
+ def initialize(*args)
242
+ super
243
+ # Objects we need to keep a Ruby reference
244
+ # to so they don't get garbage collected out from under
245
+ # the C code we pass them to.
246
+ @mp = {}
247
+
248
+ # Raptor object references we we need to explicitly free
249
+ # when release is called
250
+ @raptor_uri_list = []
251
+ end
252
+
253
+ ##
254
+ # Release raptor memory associated with this struct.
255
+ # Use of the object after calling this will most likely
256
+ # cause a crash. This is kind of ugly.
257
+ def release
258
+ if pointer.kind_of?(::FFI::MemoryPointer) && !pointer.null?
259
+ pointer.free
260
+ end
261
+ while uri = @raptor_uri_list.pop
262
+ V1_4.raptor_free_uri(uri) unless uri.nil? || uri.null?
263
+ end
264
+ end
157
265
 
158
266
  ##
159
267
  # @return [RDF::Resource]
160
268
  def subject
161
269
  @subject ||= case self[:subject_type]
162
270
  when RAPTOR_IDENTIFIER_TYPE_RESOURCE
163
- RDF::URI.new(V1_4.raptor_uri_to_string(self[:subject]))
271
+ RDF::URI.intern(V1_4.raptor_uri_to_string(self[:subject]))
164
272
  when RAPTOR_IDENTIFIER_TYPE_ANONYMOUS
165
273
  RDF::Node.new(self[:subject].read_string)
166
274
  end
167
275
  end
168
276
 
277
+ ##
278
+ # Set the subject from an RDF::Resource
279
+ # @param [RDF::Resource] value
280
+ def subject=(resource)
281
+ @subject = nil
282
+ case resource
283
+ when RDF::Node
284
+ self[:subject] = @mp[:subject] = ::FFI::MemoryPointer.from_string(resource.id.to_s)
285
+ self[:subject_type] = RAPTOR_IDENTIFIER_TYPE_ANONYMOUS
286
+ when RDF::URI
287
+ self[:subject] = @mp[:subject] = @raptor_uri_list.push(V1_4.raptor_new_uri(resource.to_s)).last
288
+ self[:subject_type] = RAPTOR_IDENTIFIER_TYPE_RESOURCE
289
+ else
290
+ raise ArgumentError, "subject must be of kind RDF::Node or RDF::URI"
291
+ end
292
+ @subject = resource
293
+ end
294
+
169
295
  ##
170
296
  # @return [String]
171
297
  def subject_as_string
@@ -180,10 +306,21 @@ module RDF::Raptor
180
306
  def predicate
181
307
  @predicate ||= case self[:predicate_type]
182
308
  when RAPTOR_IDENTIFIER_TYPE_RESOURCE
183
- RDF::URI.new(V1_4.raptor_uri_to_string(self[:predicate]))
309
+ RDF::URI.intern(V1_4.raptor_uri_to_string(self[:predicate]))
184
310
  end
185
311
  end
186
312
 
313
+ ##
314
+ # Set the predicate from an RDF::URI
315
+ # @param [RDF::URI] value
316
+ def predicate=(uri)
317
+ @predicate = nil
318
+ raise ArgumentError, "predicate must be a kind of RDF::URI" unless uri.kind_of?(RDF::URI)
319
+ self[:predicate] = @raptor_uri_list.push(V1_4.raptor_new_uri(uri.to_s)).last
320
+ self[:predicate_type] = RAPTOR_IDENTIFIER_TYPE_RESOURCE
321
+ @predicate = uri
322
+ end
323
+
187
324
  ##
188
325
  # @return [String]
189
326
  def predicate_as_string
@@ -198,13 +335,13 @@ module RDF::Raptor
198
335
  def object
199
336
  @object ||= case self[:object_type]
200
337
  when RAPTOR_IDENTIFIER_TYPE_RESOURCE
201
- RDF::URI.new(V1_4.raptor_uri_to_string(self[:object]))
338
+ RDF::URI.intern(V1_4.raptor_uri_to_string(self[:object]))
202
339
  when RAPTOR_IDENTIFIER_TYPE_ANONYMOUS
203
340
  RDF::Node.new(self[:object].read_string)
204
341
  when RAPTOR_IDENTIFIER_TYPE_LITERAL
205
342
  case
206
- when self[:object_literal_language]
207
- RDF::Literal.new(self[:object].read_string, :language => self[:object_literal_language])
343
+ when self[:object_literal_language] && !self[:object_literal_language].null?
344
+ RDF::Literal.new(self[:object].read_string, :language => self[:object_literal_language].read_string)
208
345
  when self[:object_literal_datatype] && !self[:object_literal_datatype].null?
209
346
  RDF::Literal.new(self[:object].read_string, :datatype => V1_4.raptor_uri_to_string(self[:object_literal_datatype]))
210
347
  else
@@ -213,6 +350,38 @@ module RDF::Raptor
213
350
  end
214
351
  end
215
352
 
353
+ ##
354
+ # Set the object from an RDF::Value.
355
+ # Value must be one of RDF::Resource or RDF::Literal.
356
+ # @param [RDF::Value] value
357
+ def object=(value)
358
+ @object = nil
359
+ case value
360
+ when RDF::Node
361
+ self[:object] = @mp[:object] = ::FFI::MemoryPointer.from_string(value.id.to_s)
362
+ self[:object_type] = RAPTOR_IDENTIFIER_TYPE_ANONYMOUS
363
+ when RDF::URI
364
+ self[:object] = @mp[:object] = @raptor_uri_list.push(V1_4.raptor_new_uri(value.to_s)).last
365
+ self[:object_type] = RAPTOR_IDENTIFIER_TYPE_RESOURCE
366
+ when RDF::Literal
367
+ self[:object_type] = RAPTOR_IDENTIFIER_TYPE_LITERAL
368
+ self[:object] = @mp[:object] = ::FFI::MemoryPointer.from_string(value.value)
369
+ self[:object_literal_datatype] = if value.datatype
370
+ @raptor_uri_list.push(V1_4.raptor_new_uri(value.datatype.to_s)).last
371
+ else
372
+ nil
373
+ end
374
+ self[:object_literal_language] = @mp[:object_literal_language] = if value.language?
375
+ ::FFI::MemoryPointer.from_string(value.language.to_s)
376
+ else
377
+ nil
378
+ end
379
+ else
380
+ raise ArgumentError, "object must be of type RDF::Node, RDF::URI or RDF::Literal"
381
+ end
382
+ @object = value
383
+ end
384
+
216
385
  ##
217
386
  # @return [String]
218
387
  def object_as_string
@@ -234,17 +403,25 @@ module RDF::Raptor
234
403
  def to_quad
235
404
  [subject, predicate, object, nil]
236
405
  end
406
+
237
407
  end
238
408
 
239
409
  # @see http://librdf.org/raptor/api/tutorial-initialising-finishing.html
240
410
  attach_function :raptor_init, [], :void
241
411
  attach_function :raptor_finish, [], :void
242
412
 
243
- # @see http://librdf.org/raptor/api/raptor-section-world.html
244
- define_pointer :raptor_world
245
- attach_function :raptor_new_world, [], raptor_world
246
- attach_function :raptor_world_open, [raptor_world], :int
247
- attach_function :raptor_free_world, [raptor_world], :void
413
+ # @see http://librdf.org/raptor/api/raptor-section-locator.html
414
+ define_pointer :raptor_locator
415
+ attach_function :raptor_locator_line, [raptor_locator], :int
416
+ attach_function :raptor_locator_column, [raptor_locator], :int
417
+ attach_function :raptor_locator_byte, [raptor_locator], :int
418
+
419
+ # @see http://librdf.org/raptor/api/raptor-section-general.html
420
+ attach_variable :raptor_version_major, :int
421
+ attach_variable :raptor_version_minor, :int
422
+ attach_variable :raptor_version_release, :int
423
+ attach_variable :raptor_version_decimal, :int
424
+ callback :raptor_message_handler, [:pointer, raptor_locator, :string], :void
248
425
 
249
426
  # @see http://librdf.org/raptor/api/raptor-section-uri.html
250
427
  define_pointer :raptor_uri
@@ -255,6 +432,7 @@ module RDF::Raptor
255
432
  attach_function :raptor_free_uri, [raptor_uri], :void
256
433
 
257
434
  # @see http://librdf.org/raptor/api/raptor-section-triples.html
435
+ define_pointer :raptor_identifier
258
436
  define_pointer :raptor_statement
259
437
  attach_function :raptor_statement_compare, [raptor_statement, raptor_statement], :int
260
438
  attach_function :raptor_print_statement, [raptor_statement, :pointer], :void
@@ -265,6 +443,8 @@ module RDF::Raptor
265
443
  callback :raptor_statement_handler, [:pointer, raptor_statement], :void
266
444
  define_pointer :raptor_parser
267
445
  attach_function :raptor_new_parser, [:string], raptor_parser
446
+ attach_function :raptor_set_error_handler, [raptor_parser, :pointer, :raptor_message_handler], :void
447
+ attach_function :raptor_set_warning_handler, [raptor_parser, :pointer, :raptor_message_handler], :void
268
448
  attach_function :raptor_set_statement_handler, [raptor_parser, :pointer, :raptor_statement_handler], :void
269
449
  attach_function :raptor_parse_file, [raptor_parser, raptor_uri, raptor_uri], :int
270
450
  attach_function :raptor_parse_file_stream, [raptor_parser, :pointer, :string, raptor_uri], :int
@@ -274,8 +454,95 @@ module RDF::Raptor
274
454
  attach_function :raptor_get_mime_type, [raptor_parser], :string
275
455
  attach_function :raptor_set_parser_strict, [raptor_parser, :int], :void
276
456
  attach_function :raptor_get_need_base_uri, [raptor_parser], :int
277
- attach_function :raptor_parser_get_world, [raptor_parser], raptor_world
278
457
  attach_function :raptor_free_parser, [raptor_parser], :void
458
+
459
+ # @see http://librdf.org/raptor/api/raptor-section-iostream.html
460
+ define_pointer :raptor_iostream
461
+ callback :raptor_iostream_init_func, [:pointer], :int
462
+ callback :raptor_iostream_finish_func, [:pointer], :void
463
+ callback :raptor_iostream_write_byte_func, [:pointer, :int], :int
464
+ callback :raptor_iostream_write_bytes_func, [:pointer, :pointer, :size_t, :size_t], :int
465
+ callback :raptor_iostream_write_end_func, [:pointer], :void
466
+ callback :raptor_iostream_read_bytes_func, [:pointer, :pointer, :size_t, :size_t], :int
467
+ callback :raptor_iostream_read_eof_func, [:pointer], :int
468
+ attach_function :raptor_new_iostream_from_handler2, [:pointer, :pointer], raptor_iostream
469
+ attach_function :raptor_free_iostream, [raptor_iostream], :void
470
+
471
+ class IOStreamHandler < ::FFI::Struct
472
+ layout :version, :int,
473
+ :init, :raptor_iostream_init_func,
474
+ :finish, :raptor_iostream_finish_func,
475
+ :write_byte, :raptor_iostream_write_byte_func,
476
+ :write_bytes, :raptor_iostream_write_bytes_func,
477
+ :write_end, :raptor_iostream_write_end_func,
478
+ :read_bytes, :raptor_iostream_read_bytes_func,
479
+ :read_eof, :raptor_iostream_read_eof_func
480
+
481
+ attr_accessor :rubyio
482
+
483
+ def initialize(*args)
484
+ super
485
+ # Keep a ruby land reference to our procs so they don't
486
+ # get snatched by GC.
487
+ @procs = {}
488
+
489
+ self[:version] = 2
490
+
491
+ # @procs[:init] = self[:init] = Proc.new do |context|
492
+ # $stderr.puts("#{self.class}: init")
493
+ # end
494
+ # @procs[:finish] = self[:finish] = Proc.new do |context|
495
+ # $stderr.puts("#{self.class}: finish")
496
+ # end
497
+ @procs[:write_byte] = self[:write_byte] = Proc.new do |context, byte|
498
+ begin
499
+ @rubyio.putc(byte)
500
+ rescue
501
+ return 1
502
+ end
503
+ 0
504
+ end
505
+ @procs[:write_bytes] = self[:write_bytes] = Proc.new do |context, data, size, nmemb|
506
+ begin
507
+ @rubyio.write(data.read_string(size * nmemb))
508
+ rescue
509
+ return 1
510
+ end
511
+ 0
512
+ end
513
+ # @procs[:write_end] = self[:write_end] = Proc.new do |context|
514
+ # $stderr.puts("#{self.class}: write_end")
515
+ # end
516
+ # @procs[:read_bytes] = self[:read_bytes] = Proc.new do |context, data, size, nmemb|
517
+ # $stderr.puts("#{self.class}: read_bytes")
518
+ # end
519
+ # @procs[:read_eof] = self[:read_eof] = Proc.new do |context|
520
+ # $stderr.puts("#{self.class}: read_eof")
521
+ # end
522
+ end
523
+ end
524
+
525
+ # @see http://librdf.org/raptor/api/raptor-section-xml-namespace.html
526
+ define_pointer :raptor_namespace
527
+
528
+ # @see http://librdf.org/raptor/api/raptor-section-serializer.html
529
+ define_pointer :raptor_serializer
530
+ attach_function :raptor_new_serializer, [:string], raptor_serializer
531
+ attach_function :raptor_free_serializer, [raptor_serializer], :void
532
+ attach_function :raptor_serialize_start_to_iostream, [raptor_serializer, raptor_uri, raptor_iostream], :int
533
+ attach_function :raptor_serialize_start_to_filename, [raptor_serializer, :string], :int
534
+ attach_function :raptor_serialize_statement, [raptor_serializer, raptor_statement], :int
535
+ attach_function :raptor_serialize_end, [raptor_serializer], :int
536
+ attach_function :raptor_serializer_set_error_handler, [raptor_serializer, :pointer, :raptor_message_handler], :void
537
+ attach_function :raptor_serializer_set_warning_handler, [raptor_serializer, :pointer, :raptor_message_handler], :void
538
+
539
+ # Initialize the world
540
+ # We do this exactly once and never release because we can't delegate
541
+ # any memory management to the ruby GC.
542
+ # Internally raptor_init/raptor_finish work with ref-counts.
543
+ raptor_init
544
+
279
545
  end
280
546
  end
281
547
  end
548
+
@@ -0,0 +1,56 @@
1
+ module RDF::Raptor
2
+ ##
3
+ # Graphviz support.
4
+ #
5
+ # @example Requiring the `RDF::Raptor` module
6
+ # require 'rdf/raptor'
7
+ #
8
+ # @example Serializing RDF statements into a Graphviz file
9
+ # RDF::Writer.open("output.dot") do |writer|
10
+ # graph.each_statement do |statement|
11
+ # writer << statement
12
+ # end
13
+ # end
14
+ #
15
+ module Graphviz
16
+ ##
17
+ # Graphviz format specification.
18
+ #
19
+ # @example Obtaining a Graphviz format class
20
+ # RDF::Format.for(:graphviz) #=> RDF::Raptor::Graphviz::Format
21
+ # RDF::Format.for("output.dot")
22
+ # RDF::Format.for(:file_name => "output.dot")
23
+ # RDF::Format.for(:file_extension => "dot")
24
+ # RDF::Format.for(:content_type => "text/vnd.graphviz")
25
+ #
26
+ # @see http://www.iana.org/assignments/media-types/text/vnd.graphviz
27
+ class Format < RDF::Raptor::Format
28
+ content_type 'text/vnd.graphviz', :aliases => ['application/x-graphviz', 'text/x-graphviz'], :extension => :dot # TODO: also .gv
29
+ content_encoding 'utf-8'
30
+ rapper_format :dot
31
+
32
+ writer { RDF::Raptor::Graphviz::Writer }
33
+ end
34
+
35
+ ##
36
+ # Graphviz serializer.
37
+ #
38
+ # @example Obtaining a Graphviz writer class
39
+ # RDF::Writer.for(:graphviz) #=> RDF::Raptor::Graphviz::Writer
40
+ # RDF::Writer.for("output.dot")
41
+ # RDF::Writer.for(:file_name => "output.dot")
42
+ # RDF::Writer.for(:file_extension => "dot")
43
+ # RDF::Writer.for(:content_type => "text/vnd.graphviz")
44
+ #
45
+ # @example Serializing RDF statements into a Graphviz file
46
+ # RDF::Writer.open("output.dot") do |writer|
47
+ # graph.each_statement do |statement|
48
+ # writer << statement
49
+ # end
50
+ # end
51
+ #
52
+ class Writer < RDF::Raptor::Writer
53
+ format RDF::Raptor::Graphviz::Format
54
+ end
55
+ end
56
+ end
@@ -23,6 +23,7 @@ module RDF::Raptor
23
23
  module Turtle
24
24
  ##
25
25
  # Turtle format specification.
26
+ # @see http://www.w3.org/TeamSubmission/turtle/
26
27
  #
27
28
  # @example Obtaining a Turtle format class
28
29
  # RDF::Format.for(:turtle) #=> RDF::Raptor::Turtle::Format
@@ -32,7 +33,7 @@ module RDF::Raptor
32
33
  # RDF::Format.for(:content_type => "text/turtle")
33
34
  #
34
35
  class Format < RDF::Raptor::Format
35
- content_type 'text/turtle', :extension => :ttl
36
+ content_type 'text/turtle', :aliases => ['application/x-turtle', 'application/turtle'], :extension => :ttl
36
37
  content_encoding 'utf-8'
37
38
  rapper_format :turtle
38
39
 
@@ -1,12 +1,11 @@
1
1
  module RDF; module Raptor
2
2
  module VERSION
3
3
  MAJOR = 0
4
- MINOR = 3
4
+ MINOR = 4
5
5
  TINY = 0
6
6
  EXTRA = nil
7
7
 
8
- STRING = [MAJOR, MINOR, TINY].join('.')
9
- STRING << ".#{EXTRA}" if EXTRA
8
+ STRING = [MAJOR, MINOR, TINY, EXTRA].compact.join('.')
10
9
 
11
10
  ##
12
11
  # @return [String]
metadata CHANGED
@@ -4,77 +4,78 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 3
7
+ - 4
8
8
  - 0
9
- version: 0.3.0
9
+ version: 0.4.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Arto Bendiken
13
+ - John Fieber
13
14
  autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2010-04-28 00:00:00 +02:00
18
+ date: 2010-06-22 00:00:00 +02:00
18
19
  default_executable:
19
20
  dependencies:
20
21
  - !ruby/object:Gem::Dependency
21
- name: rdf-spec
22
+ name: rdf
22
23
  prerelease: false
23
24
  requirement: &id001 !ruby/object:Gem::Requirement
24
25
  requirements:
25
- - - ">="
26
+ - - ~>
26
27
  - !ruby/object:Gem::Version
27
28
  segments:
28
29
  - 0
29
- - 1
30
- - 9
31
- version: 0.1.9
32
- type: :development
30
+ - 2
31
+ - 0
32
+ version: 0.2.0
33
+ type: :runtime
33
34
  version_requirements: *id001
34
35
  - !ruby/object:Gem::Dependency
35
- name: rspec
36
+ name: yard
36
37
  prerelease: false
37
38
  requirement: &id002 !ruby/object:Gem::Requirement
38
39
  requirements:
39
40
  - - ">="
40
41
  - !ruby/object:Gem::Version
41
42
  segments:
42
- - 1
43
- - 3
44
43
  - 0
45
- version: 1.3.0
44
+ - 5
45
+ - 6
46
+ version: 0.5.6
46
47
  type: :development
47
48
  version_requirements: *id002
48
49
  - !ruby/object:Gem::Dependency
49
- name: yard
50
+ name: rspec
50
51
  prerelease: false
51
52
  requirement: &id003 !ruby/object:Gem::Requirement
52
53
  requirements:
53
54
  - - ">="
54
55
  - !ruby/object:Gem::Version
55
56
  segments:
56
- - 0
57
- - 5
57
+ - 1
58
58
  - 3
59
- version: 0.5.3
59
+ - 0
60
+ version: 1.3.0
60
61
  type: :development
61
62
  version_requirements: *id003
62
63
  - !ruby/object:Gem::Dependency
63
- name: rdf
64
+ name: rdf-spec
64
65
  prerelease: false
65
66
  requirement: &id004 !ruby/object:Gem::Requirement
66
67
  requirements:
67
- - - ">="
68
+ - - ~>
68
69
  - !ruby/object:Gem::Version
69
70
  segments:
70
71
  - 0
71
- - 1
72
- - 9
73
- version: 0.1.9
74
- type: :runtime
72
+ - 2
73
+ - 0
74
+ version: 0.2.0
75
+ type: :development
75
76
  version_requirements: *id004
76
- description: RDF.rb plugin for parsing/serializing RDF/XML and Turtle data using the Raptor RDF Parser library.
77
- email: arto.bendiken@gmail.com
77
+ description: RDF.rb plugin for parsing/serializing RDF/XML, Turtle and RDFa data using the Raptor RDF Parser library.
78
+ email: public-rdf-ruby@w3.org
78
79
  executables: []
79
80
 
80
81
  extensions: []
@@ -83,11 +84,14 @@ extra_rdoc_files: []
83
84
 
84
85
  files:
85
86
  - AUTHORS
87
+ - CONTRIBUTORS
86
88
  - README
87
89
  - UNLICENSE
88
90
  - VERSION
91
+ - etc/doap.ttl
89
92
  - lib/rdf/raptor/cli.rb
90
93
  - lib/rdf/raptor/ffi.rb
94
+ - lib/rdf/raptor/graphviz.rb
91
95
  - lib/rdf/raptor/rdfa.rb
92
96
  - lib/rdf/raptor/rdfxml.rb
93
97
  - lib/rdf/raptor/turtle.rb
@@ -109,8 +113,8 @@ required_ruby_version: !ruby/object:Gem::Requirement
109
113
  segments:
110
114
  - 1
111
115
  - 8
112
- - 2
113
- version: 1.8.2
116
+ - 1
117
+ version: 1.8.1
114
118
  required_rubygems_version: !ruby/object:Gem::Requirement
115
119
  requirements:
116
120
  - - ">="
@@ -119,7 +123,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
119
123
  - 0
120
124
  version: "0"
121
125
  requirements:
122
- - Raptor (>= 1.4.16)
126
+ - libraptor (>= 1.4.16)
123
127
  rubyforge_project: rdf
124
128
  rubygems_version: 1.3.6
125
129
  signing_key: