rdf-raptor 0.1.0 → 0.2.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 +30 -5
- data/VERSION +1 -1
- data/lib/rdf/raptor.rb +42 -6
- data/lib/rdf/raptor/cli.rb +102 -0
- data/lib/rdf/raptor/ffi.rb +281 -0
- data/lib/rdf/raptor/version.rb +1 -1
- metadata +10 -11
- data/lib/rdf/raptor/format.rb +0 -20
- data/lib/rdf/raptor/reader.rb +0 -38
- data/lib/rdf/raptor/writer.rb +0 -69
data/README
CHANGED
@@ -6,6 +6,17 @@ This is an [RDF.rb][] plugin that adds support for parsing/serializing
|
|
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>
|
10
|
+
|
11
|
+
Features
|
12
|
+
--------
|
13
|
+
|
14
|
+
* Requires the [Raptor][] library and utilities to be available.
|
15
|
+
* Based on the [`rapper`][rapper] command-line utility bundled with Raptor.
|
16
|
+
* Parses and serializes RDF data from/into the RDF/XML or Turtle formats.
|
17
|
+
* Provides serialization format autodetection for RDF/XML and Turtle.
|
18
|
+
* Compatible with any operating system supported by Raptor and Ruby.
|
19
|
+
* Compatible with MRI 1.8.x, 1.9.x and JRuby (tested with JRuby 1.4).
|
9
20
|
|
10
21
|
Examples
|
11
22
|
--------
|
@@ -81,18 +92,31 @@ Documentation
|
|
81
92
|
Dependencies
|
82
93
|
------------
|
83
94
|
|
84
|
-
* [RDF.rb](http://rubygems.org/gems/rdf) (>= 0.1.
|
85
|
-
* [Raptor]
|
86
|
-
specifically the `rapper` binary
|
95
|
+
* [RDF.rb](http://rubygems.org/gems/rdf) (>= 0.1.4)
|
96
|
+
* [Raptor][] (>= 1.4.16), specifically the `rapper` binary
|
87
97
|
|
88
98
|
Installation
|
89
99
|
------------
|
90
100
|
|
91
|
-
The recommended installation method is via RubyGems.
|
92
|
-
official release, do:
|
101
|
+
The recommended installation method is via [RubyGems](http://rubygems.org/).
|
102
|
+
To install the latest official release of the `RDF::Raptor` gem, do:
|
93
103
|
|
94
104
|
% [sudo] gem install rdf-raptor
|
95
105
|
|
106
|
+
To install the required [Raptor][] command-line tools themselves, look for a
|
107
|
+
`raptor` or `raptor-utils` package in your platform's package management
|
108
|
+
system. Here follow installation instructions for the Mac and the most
|
109
|
+
common Linux and BSD distributions:
|
110
|
+
|
111
|
+
% [sudo] port install raptor # Mac OS X with MacPorts
|
112
|
+
% [sudo] fink install raptor-bin # Mac OS X with Fink
|
113
|
+
% [sudo] aptitude install raptor-utils # Ubuntu / Debian
|
114
|
+
% [sudo] yum install raptor # Fedora / CentOS / RHEL
|
115
|
+
% [sudo] zypper install raptor # openSUSE
|
116
|
+
% [sudo] emerge raptor # Gentoo Linux
|
117
|
+
% [sudo] pkg_add -r raptor # FreeBSD
|
118
|
+
% [sudo] pkg_add raptor # OpenBSD / NetBSD
|
119
|
+
|
96
120
|
Download
|
97
121
|
--------
|
98
122
|
|
@@ -120,3 +144,4 @@ information, see <http://unlicense.org/> or the accompanying UNLICENSE file.
|
|
120
144
|
[RDF/XML]: http://www.w3.org/TR/REC-rdf-syntax/
|
121
145
|
[Turtle]: http://en.wikipedia.org/wiki/Turtle_(syntax)
|
122
146
|
[Raptor]: http://librdf.org/raptor/
|
147
|
+
[rapper]: http://librdf.org/raptor/rapper.html
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
data/lib/rdf/raptor.rb
CHANGED
@@ -37,12 +37,13 @@ module RDF
|
|
37
37
|
#
|
38
38
|
# @author [Arto Bendiken](http://ar.to/)
|
39
39
|
module Raptor
|
40
|
+
ENGINE = (ENV['RDF_RAPTOR_ENGINE'] || :cli).to_sym unless const_defined?(:ENGINE)
|
41
|
+
LIBRAPTOR = ENV['RDF_RAPTOR_LIBPATH'] || 'libraptor' unless const_defined?(:LIBRAPTOR)
|
42
|
+
RAPPER = ENV['RDF_RAPTOR_BINPATH'] || 'rapper' unless const_defined?(:RAPPER)
|
43
|
+
|
40
44
|
require 'rdf/raptor/version'
|
41
|
-
require 'rdf/raptor/
|
42
|
-
require 'rdf/raptor/
|
43
|
-
require 'rdf/raptor/writer'
|
44
|
-
require 'rdf/raptor/rdfxml'
|
45
|
-
require 'rdf/raptor/turtle'
|
45
|
+
require 'rdf/raptor/cli'
|
46
|
+
require 'rdf/raptor/ffi' if ENGINE == :ffi
|
46
47
|
|
47
48
|
##
|
48
49
|
# Returns `true` if the `rapper` binary is available.
|
@@ -64,9 +65,44 @@ module RDF
|
|
64
65
|
#
|
65
66
|
# @return [String]
|
66
67
|
def self.version
|
67
|
-
if
|
68
|
+
if `#{RAPPER} --version 2>/dev/null` =~ /^(\d+)\.(\d+)\.(\d+)/
|
68
69
|
[$1, $2, $3].join('.')
|
69
70
|
end
|
70
71
|
end
|
72
|
+
|
73
|
+
##
|
74
|
+
# Format base class.
|
75
|
+
class Format < RDF::Format
|
76
|
+
##
|
77
|
+
# @overload rapper_format
|
78
|
+
#
|
79
|
+
# @overload rapper_format(format)
|
80
|
+
# @param [Symbol] format
|
81
|
+
#
|
82
|
+
# @return [void]
|
83
|
+
def self.rapper_format(format = nil)
|
84
|
+
unless format
|
85
|
+
@rapper_format
|
86
|
+
else
|
87
|
+
@rapper_format = format
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
##
|
93
|
+
# Reader base class.
|
94
|
+
class Reader < RDF::Reader
|
95
|
+
include RDF::Raptor::CLI::Reader if ENGINE == :cli
|
96
|
+
include RDF::Raptor::FFI::Reader if ENGINE == :ffi
|
97
|
+
end
|
98
|
+
|
99
|
+
##
|
100
|
+
# Writer base class.
|
101
|
+
class Writer < RDF::Writer
|
102
|
+
include RDF::Raptor::CLI::Writer
|
103
|
+
end
|
104
|
+
|
105
|
+
require 'rdf/raptor/rdfxml'
|
106
|
+
require 'rdf/raptor/turtle'
|
71
107
|
end # module Raptor
|
72
108
|
end # module RDF
|
@@ -0,0 +1,102 @@
|
|
1
|
+
module RDF::Raptor
|
2
|
+
##
|
3
|
+
# A command-line interface to Raptor's `rapper` utility.
|
4
|
+
module CLI
|
5
|
+
##
|
6
|
+
# Reader implementation.
|
7
|
+
module Reader
|
8
|
+
##
|
9
|
+
# @param [IO, File, RDF::URI, String] input
|
10
|
+
# @param [Hash{Symbol => Object}] options
|
11
|
+
# @option (options) [String, #to_s] :base_uri ("file:///dev/stdin")
|
12
|
+
# @yield [reader]
|
13
|
+
# @yieldparam [RDF::Reader] reader
|
14
|
+
def initialize(input = $stdin, options = {}, &block)
|
15
|
+
raise RDF::ReaderError.new("`rapper` binary not found") unless RDF::Raptor.available?
|
16
|
+
|
17
|
+
format = self.class.format.rapper_format
|
18
|
+
case input
|
19
|
+
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)
|
22
|
+
@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)
|
26
|
+
@rapper = IO.popen(@command, 'rb')
|
27
|
+
else # IO, String
|
28
|
+
@command = "#{RAPPER} -q -i #{format} -o ntriples file:///dev/stdin"
|
29
|
+
@command << " #{options[:base_uri]}" if options.has_key?(:base_uri)
|
30
|
+
@rapper = IO.popen(@command, 'rb+')
|
31
|
+
@rapper.write(input.respond_to?(:read) ? input.read : input.to_s)
|
32
|
+
@rapper.close_write
|
33
|
+
end
|
34
|
+
@reader = RDF::NTriples::Reader.new(@rapper, options, &block)
|
35
|
+
end
|
36
|
+
|
37
|
+
protected
|
38
|
+
|
39
|
+
##
|
40
|
+
# @return [Array]
|
41
|
+
def read_triple
|
42
|
+
@reader.read_triple
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
##
|
47
|
+
# Writer implementation.
|
48
|
+
module Writer
|
49
|
+
##
|
50
|
+
# @param [IO, File] output
|
51
|
+
# @param [Hash{Symbol => Object}] options
|
52
|
+
# @yield [writer]
|
53
|
+
# @yieldparam [RDF::Writer] writer
|
54
|
+
def initialize(output = $stdout, options = {}, &block)
|
55
|
+
raise RDF::WriterError.new("`rapper` binary not found") unless RDF::Raptor.available?
|
56
|
+
|
57
|
+
format = self.class.format.rapper_format
|
58
|
+
case output
|
59
|
+
when File, IO
|
60
|
+
@command = "#{RAPPER} -q -i ntriples -o #{format} file:///dev/stdin"
|
61
|
+
@command << " #{options[:base_uri]}" if options.has_key?(:base_uri)
|
62
|
+
@rapper = IO.popen(@command, 'rb+')
|
63
|
+
else
|
64
|
+
raise ArgumentError.new("unsupported output type: #{output.inspect}")
|
65
|
+
end
|
66
|
+
@writer = RDF::NTriples::Writer.new(@rapper, options)
|
67
|
+
super(output, options, &block)
|
68
|
+
end
|
69
|
+
|
70
|
+
protected
|
71
|
+
|
72
|
+
##
|
73
|
+
# @return [void]
|
74
|
+
def write_prologue
|
75
|
+
super
|
76
|
+
end
|
77
|
+
|
78
|
+
##
|
79
|
+
# @param [RDF::Resource] subject
|
80
|
+
# @param [RDF::URI] predicate
|
81
|
+
# @param [RDF::Value] object
|
82
|
+
# @return [void]
|
83
|
+
def write_triple(subject, predicate, object)
|
84
|
+
@writer.write_triple(subject, predicate, object)
|
85
|
+
end
|
86
|
+
|
87
|
+
##
|
88
|
+
# @return [void]
|
89
|
+
def write_epilogue
|
90
|
+
@rapper.close_write
|
91
|
+
begin
|
92
|
+
chunk_size = @options[:chunk_size] || 4096 # bytes
|
93
|
+
loop do
|
94
|
+
@output.write(@rapper.readpartial(chunk_size))
|
95
|
+
end
|
96
|
+
rescue EOFError => e
|
97
|
+
# we're all done
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
@@ -0,0 +1,281 @@
|
|
1
|
+
require 'ffi'
|
2
|
+
|
3
|
+
module RDF::Raptor
|
4
|
+
##
|
5
|
+
# A foreign-function interface (FFI) to `libraptor`.
|
6
|
+
#
|
7
|
+
# @see http://librdf.org/raptor/api/
|
8
|
+
# @see http://librdf.org/raptor/libraptor.html
|
9
|
+
module FFI
|
10
|
+
##
|
11
|
+
# Reader implementation.
|
12
|
+
module Reader
|
13
|
+
##
|
14
|
+
# @param [IO, File, RDF::URI, String] input
|
15
|
+
# @param [Hash{Symbol => Object}] options
|
16
|
+
# @option (options) [String, #to_s] :base_uri ("file:///dev/stdin")
|
17
|
+
# @yield [reader]
|
18
|
+
# @yieldparam [RDF::Reader] reader
|
19
|
+
def initialize(input = $stdin, options = {}, &block)
|
20
|
+
@format = self.class.format.rapper_format
|
21
|
+
super
|
22
|
+
end
|
23
|
+
|
24
|
+
##
|
25
|
+
# @yield [statement]
|
26
|
+
# @yieldparam [RDF::Statement] statement
|
27
|
+
def each_statement(&block)
|
28
|
+
each_triple do |triple|
|
29
|
+
block.call(RDF::Statement.new(*triple))
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
##
|
34
|
+
# @yield [triple]
|
35
|
+
# @yieldparam [Array(RDF::Resource, RDF::URI, RDF::Value)] triple
|
36
|
+
def each_triple(&block)
|
37
|
+
@parser = Proc.new do |user_data, statement|
|
38
|
+
triple = V1_4::Statement.new(statement).to_triple
|
39
|
+
block.call(triple)
|
40
|
+
end
|
41
|
+
|
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?
|
73
|
+
# TODO: error handling
|
74
|
+
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?
|
77
|
+
# TODO: error handling
|
78
|
+
end
|
79
|
+
V1_4.raptor_parse_chunk(parser, nil, 0, 1) # EOF
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
@parser = nil
|
85
|
+
end
|
86
|
+
|
87
|
+
alias_method :each, :each_statement
|
88
|
+
end
|
89
|
+
|
90
|
+
##
|
91
|
+
# Helper methods for FFI modules.
|
92
|
+
module Base
|
93
|
+
def define_pointer(name)
|
94
|
+
self.class.send(:define_method, name) { :pointer }
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
##
|
99
|
+
# A foreign-function interface (FFI) to `libraptor` 1.4.x.
|
100
|
+
#
|
101
|
+
# @see http://librdf.org/raptor/libraptor.html
|
102
|
+
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
|
+
|
121
|
+
##
|
122
|
+
# @param [Hash{Symbol => Object}] options
|
123
|
+
# @option (options) [String, #to_s] :name (:rdfxml)
|
124
|
+
# @yield [parser]
|
125
|
+
# @yieldparam [FFI::Pointer] parser
|
126
|
+
# @return [void]
|
127
|
+
def self.with_parser(options = {}, &block)
|
128
|
+
begin
|
129
|
+
parser = raptor_new_parser((options[:name] || :rdfxml).to_s)
|
130
|
+
block.call(parser)
|
131
|
+
ensure
|
132
|
+
raptor_free_parser(parser) if parser
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
extend Base
|
137
|
+
extend ::FFI::Library
|
138
|
+
ffi_lib LIBRAPTOR
|
139
|
+
|
140
|
+
# TODO: Ideally this would be an enum, but the JRuby FFI (as of
|
141
|
+
# version 1.4.0) has problems with enums as part of structs:
|
142
|
+
# `Unknown field type: #<FFI::Enum> (ArgumentError)`
|
143
|
+
RAPTOR_IDENTIFIER_TYPE_RESOURCE = 1
|
144
|
+
RAPTOR_IDENTIFIER_TYPE_ANONYMOUS = 2
|
145
|
+
RAPTOR_IDENTIFIER_TYPE_LITERAL = 5
|
146
|
+
|
147
|
+
# @see http://librdf.org/raptor/api/raptor-section-triples.html
|
148
|
+
class Statement < ::FFI::Struct
|
149
|
+
layout :subject, :pointer,
|
150
|
+
:subject_type, :int,
|
151
|
+
:predicate, :pointer,
|
152
|
+
:predicate_type, :int,
|
153
|
+
:object, :pointer,
|
154
|
+
:object_type, :int,
|
155
|
+
:object_literal_datatype, :pointer,
|
156
|
+
:object_literal_language, :string
|
157
|
+
|
158
|
+
##
|
159
|
+
# @return [RDF::Resource]
|
160
|
+
def subject
|
161
|
+
@subject ||= case self[:subject_type]
|
162
|
+
when RAPTOR_IDENTIFIER_TYPE_RESOURCE
|
163
|
+
RDF::URI.new(V1_4.raptor_uri_to_string(self[:subject]))
|
164
|
+
when RAPTOR_IDENTIFIER_TYPE_ANONYMOUS
|
165
|
+
RDF::Node.new(self[:subject].read_string)
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
##
|
170
|
+
# @return [String]
|
171
|
+
def subject_as_string
|
172
|
+
V1_4.raptor_statement_part_as_string(
|
173
|
+
self[:subject],
|
174
|
+
self[:subject_type],
|
175
|
+
nil, nil)
|
176
|
+
end
|
177
|
+
|
178
|
+
##
|
179
|
+
# @return [RDF::URI]
|
180
|
+
def predicate
|
181
|
+
@predicate ||= case self[:predicate_type]
|
182
|
+
when RAPTOR_IDENTIFIER_TYPE_RESOURCE
|
183
|
+
RDF::URI.new(V1_4.raptor_uri_to_string(self[:predicate]))
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
##
|
188
|
+
# @return [String]
|
189
|
+
def predicate_as_string
|
190
|
+
V1_4.raptor_statement_part_as_string(
|
191
|
+
self[:predicate],
|
192
|
+
self[:predicate_type],
|
193
|
+
nil, nil)
|
194
|
+
end
|
195
|
+
|
196
|
+
##
|
197
|
+
# @return [RDF::Value]
|
198
|
+
def object
|
199
|
+
@object ||= case self[:object_type]
|
200
|
+
when RAPTOR_IDENTIFIER_TYPE_RESOURCE
|
201
|
+
RDF::URI.new(V1_4.raptor_uri_to_string(self[:object]))
|
202
|
+
when RAPTOR_IDENTIFIER_TYPE_ANONYMOUS
|
203
|
+
RDF::Node.new(self[:object].read_string)
|
204
|
+
when RAPTOR_IDENTIFIER_TYPE_LITERAL
|
205
|
+
case
|
206
|
+
when self[:object_literal_language]
|
207
|
+
RDF::Literal.new(self[:object].read_string, :language => self[:object_literal_language])
|
208
|
+
when self[:object_literal_datatype] && !self[:object_literal_datatype].null?
|
209
|
+
RDF::Literal.new(self[:object].read_string, :datatype => V1_4.raptor_uri_to_string(self[:object_literal_datatype]))
|
210
|
+
else
|
211
|
+
RDF::Literal.new(self[:object].read_string)
|
212
|
+
end
|
213
|
+
end
|
214
|
+
end
|
215
|
+
|
216
|
+
##
|
217
|
+
# @return [String]
|
218
|
+
def object_as_string
|
219
|
+
V1_4.raptor_statement_part_as_string(
|
220
|
+
self[:object],
|
221
|
+
self[:object_type],
|
222
|
+
self[:object_literal_datatype],
|
223
|
+
self[:object_literal_language])
|
224
|
+
end
|
225
|
+
|
226
|
+
##
|
227
|
+
# @return [Array(RDF::Resource, RDF::URI, RDF::Value)]
|
228
|
+
def to_triple
|
229
|
+
[subject, predicate, object]
|
230
|
+
end
|
231
|
+
|
232
|
+
##
|
233
|
+
# @return [Array(RDF::Resource, RDF::URI, RDF::Value, nil)]
|
234
|
+
def to_quad
|
235
|
+
[subject, predicate, object, nil]
|
236
|
+
end
|
237
|
+
end
|
238
|
+
|
239
|
+
# @see http://librdf.org/raptor/api/tutorial-initialising-finishing.html
|
240
|
+
attach_function :raptor_init, [], :void
|
241
|
+
attach_function :raptor_finish, [], :void
|
242
|
+
|
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
|
248
|
+
|
249
|
+
# @see http://librdf.org/raptor/api/raptor-section-uri.html
|
250
|
+
define_pointer :raptor_uri
|
251
|
+
attach_function :raptor_new_uri, [:string], raptor_uri
|
252
|
+
attach_function :raptor_uri_as_string, [raptor_uri], :string
|
253
|
+
attach_function :raptor_uri_to_string, [raptor_uri], :string
|
254
|
+
attach_function :raptor_uri_print, [raptor_uri, :pointer], :void
|
255
|
+
attach_function :raptor_free_uri, [raptor_uri], :void
|
256
|
+
|
257
|
+
# @see http://librdf.org/raptor/api/raptor-section-triples.html
|
258
|
+
define_pointer :raptor_statement
|
259
|
+
attach_function :raptor_statement_compare, [raptor_statement, raptor_statement], :int
|
260
|
+
attach_function :raptor_print_statement, [raptor_statement, :pointer], :void
|
261
|
+
attach_function :raptor_print_statement_as_ntriples, [:pointer, :pointer], :void
|
262
|
+
attach_function :raptor_statement_part_as_string, [:pointer, :int, raptor_uri, :string], :string
|
263
|
+
|
264
|
+
# @see http://librdf.org/raptor/api/raptor-section-parser.html
|
265
|
+
callback :raptor_statement_handler, [:pointer, raptor_statement], :void
|
266
|
+
define_pointer :raptor_parser
|
267
|
+
attach_function :raptor_new_parser, [:string], raptor_parser
|
268
|
+
attach_function :raptor_set_statement_handler, [raptor_parser, :pointer, :raptor_statement_handler], :void
|
269
|
+
attach_function :raptor_parse_file, [raptor_parser, raptor_uri, raptor_uri], :int
|
270
|
+
attach_function :raptor_parse_file_stream, [raptor_parser, :pointer, :string, raptor_uri], :int
|
271
|
+
attach_function :raptor_parse_uri, [raptor_parser, raptor_uri, raptor_uri], :int
|
272
|
+
attach_function :raptor_start_parse, [raptor_parser, :string], :int
|
273
|
+
attach_function :raptor_parse_chunk, [raptor_parser, :string, :size_t, :int], :int
|
274
|
+
attach_function :raptor_get_mime_type, [raptor_parser], :string
|
275
|
+
attach_function :raptor_set_parser_strict, [raptor_parser, :int], :void
|
276
|
+
attach_function :raptor_get_need_base_uri, [raptor_parser], :int
|
277
|
+
attach_function :raptor_parser_get_world, [raptor_parser], raptor_world
|
278
|
+
attach_function :raptor_free_parser, [raptor_parser], :void
|
279
|
+
end
|
280
|
+
end
|
281
|
+
end
|
data/lib/rdf/raptor/version.rb
CHANGED
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
7
|
+
- 2
|
8
8
|
- 0
|
9
|
-
version: 0.
|
9
|
+
version: 0.2.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-
|
17
|
+
date: 2010-04-04 00:00:00 +02:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -27,8 +27,8 @@ dependencies:
|
|
27
27
|
segments:
|
28
28
|
- 0
|
29
29
|
- 1
|
30
|
-
-
|
31
|
-
version: 0.1.
|
30
|
+
- 4
|
31
|
+
version: 0.1.4
|
32
32
|
type: :development
|
33
33
|
version_requirements: *id001
|
34
34
|
- !ruby/object:Gem::Dependency
|
@@ -69,8 +69,8 @@ dependencies:
|
|
69
69
|
segments:
|
70
70
|
- 0
|
71
71
|
- 1
|
72
|
-
-
|
73
|
-
version: 0.1.
|
72
|
+
- 4
|
73
|
+
version: 0.1.4
|
74
74
|
type: :runtime
|
75
75
|
version_requirements: *id004
|
76
76
|
description: RDF.rb plugin for parsing/serializing RDF/XML and Turtle data using the Raptor RDF Parser library.
|
@@ -86,12 +86,11 @@ files:
|
|
86
86
|
- README
|
87
87
|
- UNLICENSE
|
88
88
|
- VERSION
|
89
|
-
- lib/rdf/raptor/
|
89
|
+
- lib/rdf/raptor/cli.rb
|
90
|
+
- lib/rdf/raptor/ffi.rb
|
90
91
|
- lib/rdf/raptor/rdfxml.rb
|
91
|
-
- lib/rdf/raptor/reader.rb
|
92
92
|
- lib/rdf/raptor/turtle.rb
|
93
93
|
- lib/rdf/raptor/version.rb
|
94
|
-
- lib/rdf/raptor/writer.rb
|
95
94
|
- lib/rdf/raptor.rb
|
96
95
|
has_rdoc: false
|
97
96
|
homepage: http://rdf.rubyforge.org/
|
@@ -119,7 +118,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
119
118
|
- 0
|
120
119
|
version: "0"
|
121
120
|
requirements:
|
122
|
-
- Raptor (>= 1.4.
|
121
|
+
- Raptor (>= 1.4.16)
|
123
122
|
rubyforge_project: rdf
|
124
123
|
rubygems_version: 1.3.6
|
125
124
|
signing_key:
|
data/lib/rdf/raptor/format.rb
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
module RDF::Raptor
|
2
|
-
##
|
3
|
-
# Format base class.
|
4
|
-
class Format < RDF::Format
|
5
|
-
##
|
6
|
-
# @overload rapper_format
|
7
|
-
#
|
8
|
-
# @overload rapper_format(format)
|
9
|
-
# @param [Symbol] format
|
10
|
-
#
|
11
|
-
# @return [void]
|
12
|
-
def self.rapper_format(format = nil)
|
13
|
-
unless format
|
14
|
-
@rapper_format
|
15
|
-
else
|
16
|
-
@rapper_format = format
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
data/lib/rdf/raptor/reader.rb
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
module RDF::Raptor
|
2
|
-
##
|
3
|
-
# Reader base class.
|
4
|
-
class Reader < RDF::Reader
|
5
|
-
##
|
6
|
-
# @param [IO, File, RDF::URI, String] input
|
7
|
-
# @param [Hash{Symbol => Object}] options
|
8
|
-
# @yield [reader]
|
9
|
-
# @yieldparam [RDF::Reader] reader
|
10
|
-
def initialize(input = $stdin, options = {}, &block)
|
11
|
-
raise RDF::ReaderError.new("`rapper` binary not found") unless RDF::Raptor.available?
|
12
|
-
|
13
|
-
format = self.class.format.rapper_format
|
14
|
-
case input
|
15
|
-
when RDF::URI, %r(^(file|http|https|ftp)://)
|
16
|
-
@command = "rapper -q -i #{format} -o ntriples #{input}"
|
17
|
-
@rapper = IO.popen(@command, 'rb')
|
18
|
-
when File
|
19
|
-
@command = "rapper -q -i #{format} -o ntriples #{File.expand_path(input.path)}"
|
20
|
-
@rapper = IO.popen(@command, 'rb')
|
21
|
-
else # IO, String
|
22
|
-
@command = "rapper -q -i #{format} -o ntriples file:///dev/stdin"
|
23
|
-
@rapper = IO.popen(@command, 'rb+')
|
24
|
-
@rapper.write(input.respond_to?(:read) ? input.read : input.to_s)
|
25
|
-
@rapper.close_write
|
26
|
-
end
|
27
|
-
@reader = RDF::NTriples::Reader.new(@rapper, options, &block)
|
28
|
-
end
|
29
|
-
|
30
|
-
protected
|
31
|
-
|
32
|
-
##
|
33
|
-
# @return [Array]
|
34
|
-
def read_triple
|
35
|
-
@reader.read_triple
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
data/lib/rdf/raptor/writer.rb
DELETED
@@ -1,69 +0,0 @@
|
|
1
|
-
module RDF::Raptor
|
2
|
-
##
|
3
|
-
# Writer base class.
|
4
|
-
class Writer < RDF::Writer
|
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
|
68
|
-
end
|
69
|
-
end
|