turtle_reader 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/ChangeLog ADDED
@@ -0,0 +1,11 @@
1
+ # markup: rd
2
+
3
+ = Revision history for turtle_reader
4
+
5
+ == 0.0.1 [2014-04-30]
6
+
7
+ * First release (extracted from ruby-nuggets).
8
+
9
+ == 0.0.0 [2014-04-30]
10
+
11
+ * Birthday :-)
data/README ADDED
@@ -0,0 +1,41 @@
1
+ = turtle_reader - RDF Turtle reader
2
+
3
+ == VERSION
4
+
5
+ This documentation refers to turtle_reader version 0.0.1
6
+
7
+
8
+ == DESCRIPTION
9
+
10
+ A convenience wrapper for reading RDF Turtle data.
11
+
12
+
13
+ == LINKS
14
+
15
+ Documentation:: https://blackwinter.github.io/turtle_reader/
16
+ Source code:: https://github.com/blackwinter/turtle_reader
17
+ RubyGem:: https://rubygems.org/gems/turtle_reader
18
+ Travis CI:: https//travis-ci.org/blackwinter/turtle_reader
19
+
20
+
21
+ == AUTHORS
22
+
23
+ * Jens Wille <mailto:jens.wille@gmail.com>
24
+
25
+
26
+ == LICENSE AND COPYRIGHT
27
+
28
+ Copyright (C) 2014 Jens Wille
29
+
30
+ turtle_reader is free software: you can redistribute it and/or modify it
31
+ under the terms of the GNU Affero General Public License as published by
32
+ the Free Software Foundation, either version 3 of the License, or (at your
33
+ option) any later version.
34
+
35
+ turtle_reader is distributed in the hope that it will be useful, but
36
+ WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
37
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
38
+ License for more details.
39
+
40
+ You should have received a copy of the GNU Affero General Public License
41
+ along with turtle_reader. If not, see <http://www.gnu.org/licenses/>.
data/Rakefile ADDED
@@ -0,0 +1,25 @@
1
+ require File.expand_path(%q{../lib/turtle_reader/version}, __FILE__)
2
+
3
+ begin
4
+ require 'hen'
5
+
6
+ Hen.lay! {{
7
+ gem: {
8
+ name: %q{turtle_reader},
9
+ version: TurtleReader::VERSION,
10
+ summary: %q{RDF Turtle reader.},
11
+ description: %q{A convenience wrapper for reading RDF Turtle data.},
12
+ author: %q{Jens Wille},
13
+ email: %q{jens.wille@gmail.com},
14
+ license: %q{AGPL-3.0},
15
+ homepage: :blackwinter,
16
+ dependencies: %w[rdf-turtle],
17
+
18
+ development_dependencies: %w[rbzip2],
19
+
20
+ required_ruby_version: '>= 1.9.3'
21
+ }
22
+ }}
23
+ rescue LoadError => err
24
+ warn "Please install the `hen' gem. (#{err})"
25
+ end
@@ -0,0 +1,96 @@
1
+ # encoding: utf-8
2
+
3
+ #--
4
+ ###############################################################################
5
+ # #
6
+ # turtle_reader -- RDF Turtle reader #
7
+ # #
8
+ # Copyright (C) 2014 Jens Wille #
9
+ # #
10
+ # Authors: #
11
+ # Jens Wille <jens.wille@gmail.com> #
12
+ # #
13
+ # turtle_reader is free software; you can redistribute it and/or modify it #
14
+ # under the terms of the GNU Affero General Public License as published by #
15
+ # the Free Software Foundation; either version 3 of the License, or (at your #
16
+ # option) any later version. #
17
+ # #
18
+ # turtle_reader is distributed in the hope that it will be useful, but #
19
+ # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY #
20
+ # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public #
21
+ # License for more details. #
22
+ # #
23
+ # You should have received a copy of the GNU Affero General Public License #
24
+ # along with turtle_reader. If not, see <http://www.gnu.org/licenses/>. #
25
+ # #
26
+ ###############################################################################
27
+ #++
28
+
29
+ require 'rdf/util'
30
+
31
+ begin
32
+ require 'zlib'
33
+ rescue LoadError => err
34
+ warn err if $VERBOSE
35
+ end
36
+
37
+ begin
38
+ require 'rbzip2'
39
+
40
+ class RBzip2::Decompressor
41
+
42
+ def eof?
43
+ @current_state == EOF
44
+ end
45
+
46
+ def gets(sep = $/)
47
+ r = ''
48
+
49
+ loop {
50
+ b = read0
51
+ break if b < 0
52
+
53
+ count(1)
54
+ r << b
55
+
56
+ break if r.end_with?(sep)
57
+ }
58
+
59
+ r
60
+ end
61
+
62
+ def rewind
63
+ @io.rewind
64
+ initialize(@io)
65
+ end
66
+
67
+ end
68
+ rescue LoadError => err
69
+ warn err if $VERBOSE
70
+ end
71
+
72
+ class << RDF::Util::File
73
+
74
+ alias_method :_turtle_reader_original_open_file, :open_file
75
+
76
+ def open_file(filename_or_url, options = {}, &block)
77
+ klass = begin
78
+ case filename_or_url
79
+ when /\.bz(?:ip)?2?\z/i then RBzip2::Decompressor
80
+ when /\.gz(?:ip)?\z/i then Zlib::GzipReader
81
+ end
82
+ rescue NameError => err
83
+ err.message.sub!('Module::', '')
84
+ raise
85
+ end
86
+
87
+ if klass
88
+ original_block, block = block, lambda { |file|
89
+ original_block[file.is_a?(IO) ? klass.new(file) : file]
90
+ }
91
+ end
92
+
93
+ _turtle_reader_original_open_file(filename_or_url, options, &block)
94
+ end
95
+
96
+ end
@@ -0,0 +1,31 @@
1
+ # encoding: utf-8
2
+
3
+ #--
4
+ ###############################################################################
5
+ # #
6
+ # turtle_reader -- RDF Turtle reader #
7
+ # #
8
+ # Copyright (C) 2014 Jens Wille #
9
+ # #
10
+ # Authors: #
11
+ # Jens Wille <jens.wille@gmail.com> #
12
+ # #
13
+ # turtle_reader is free software; you can redistribute it and/or modify it #
14
+ # under the terms of the GNU Affero General Public License as published by #
15
+ # the Free Software Foundation; either version 3 of the License, or (at your #
16
+ # option) any later version. #
17
+ # #
18
+ # turtle_reader is distributed in the hope that it will be useful, but #
19
+ # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY #
20
+ # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public #
21
+ # License for more details. #
22
+ # #
23
+ # You should have received a copy of the GNU Affero General Public License #
24
+ # along with turtle_reader. If not, see <http://www.gnu.org/licenses/>. #
25
+ # #
26
+ ###############################################################################
27
+ #++
28
+
29
+ require 'rdf'
30
+
31
+ def RDF.__prefix__; :rdf; end
@@ -0,0 +1,74 @@
1
+ # encoding: utf-8
2
+
3
+ #--
4
+ ###############################################################################
5
+ # #
6
+ # turtle_reader -- RDF Turtle reader #
7
+ # #
8
+ # Copyright (C) 2014 Jens Wille #
9
+ # #
10
+ # Authors: #
11
+ # Jens Wille <jens.wille@gmail.com> #
12
+ # #
13
+ # turtle_reader is free software; you can redistribute it and/or modify it #
14
+ # under the terms of the GNU Affero General Public License as published by #
15
+ # the Free Software Foundation; either version 3 of the License, or (at your #
16
+ # option) any later version. #
17
+ # #
18
+ # turtle_reader is distributed in the hope that it will be useful, but #
19
+ # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY #
20
+ # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public #
21
+ # License for more details. #
22
+ # #
23
+ # You should have received a copy of the GNU Affero General Public License #
24
+ # along with turtle_reader. If not, see <http://www.gnu.org/licenses/>. #
25
+ # #
26
+ ###############################################################################
27
+ #++
28
+
29
+ require 'rdf/turtle'
30
+
31
+ module RDF
32
+ class Turtle::Reader
33
+
34
+ PARSE_OPTIONS = {
35
+ branch: BRANCH,
36
+ first: FIRST,
37
+ follow: FOLLOW,
38
+ reset_on_start: true,
39
+
40
+ # NoMethodError: undefined method `[]' for nil:NilClass (line 17) [GND-sample.ttl]
41
+ # from .../lib/ruby/gems/shared/gems/rdf-turtle-1.1.3.1/lib/rdf/turtle/reader.rb:153
42
+ progress: RUBY_PLATFORM == 'java'
43
+ }
44
+
45
+ def closed?
46
+ @input.closed?
47
+ end
48
+
49
+ def parse_prologue
50
+ parse_internal { break }
51
+ rewind
52
+ [base_uri, prefixes]
53
+ end
54
+
55
+ def parse_statements
56
+ parse_internal { |context, _, *data|
57
+ if context == :statement
58
+ data[3] = { context: data[3] }
59
+ yield Statement.new(*data)
60
+ end
61
+ }
62
+ end
63
+
64
+ private
65
+
66
+ def parse_internal(&block)
67
+ parse(@input, START, @options.merge(PARSE_OPTIONS), &block)
68
+ rescue => err
69
+ err.message << " (line #{lineno})"
70
+ raise
71
+ end
72
+
73
+ end
74
+ end
@@ -0,0 +1,37 @@
1
+ # encoding: utf-8
2
+
3
+ #--
4
+ ###############################################################################
5
+ # #
6
+ # turtle_reader -- RDF Turtle reader #
7
+ # #
8
+ # Copyright (C) 2014 Jens Wille #
9
+ # #
10
+ # Authors: #
11
+ # Jens Wille <jens.wille@gmail.com> #
12
+ # #
13
+ # turtle_reader is free software; you can redistribute it and/or modify it #
14
+ # under the terms of the GNU Affero General Public License as published by #
15
+ # the Free Software Foundation; either version 3 of the License, or (at your #
16
+ # option) any later version. #
17
+ # #
18
+ # turtle_reader is distributed in the hope that it will be useful, but #
19
+ # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY #
20
+ # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public #
21
+ # License for more details. #
22
+ # #
23
+ # You should have received a copy of the GNU Affero General Public License #
24
+ # along with turtle_reader. If not, see <http://www.gnu.org/licenses/>. #
25
+ # #
26
+ ###############################################################################
27
+ #++
28
+
29
+ require 'rdf'
30
+
31
+ class RDF::URI
32
+
33
+ def basename
34
+ File.basename(path).sub(/;[^\/]*$/, '')
35
+ end
36
+
37
+ end
@@ -0,0 +1,27 @@
1
+ class TurtleReader
2
+
3
+ module Version
4
+
5
+ MAJOR = 0
6
+ MINOR = 0
7
+ TINY = 1
8
+
9
+ class << self
10
+
11
+ # Returns array representation.
12
+ def to_a
13
+ [MAJOR, MINOR, TINY]
14
+ end
15
+
16
+ # Short-cut for version string.
17
+ def to_s
18
+ to_a.join('.')
19
+ end
20
+
21
+ end
22
+
23
+ end
24
+
25
+ VERSION = Version.to_s
26
+
27
+ end
@@ -0,0 +1,119 @@
1
+ # encoding: utf-8
2
+
3
+ #--
4
+ ###############################################################################
5
+ # #
6
+ # turtle_reader -- RDF Turtle reader #
7
+ # #
8
+ # Copyright (C) 2014 Jens Wille #
9
+ # #
10
+ # Authors: #
11
+ # Jens Wille <jens.wille@gmail.com> #
12
+ # #
13
+ # turtle_reader is free software; you can redistribute it and/or modify it #
14
+ # under the terms of the GNU Affero General Public License as published by #
15
+ # the Free Software Foundation; either version 3 of the License, or (at your #
16
+ # option) any later version. #
17
+ # #
18
+ # turtle_reader is distributed in the hope that it will be useful, but #
19
+ # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY #
20
+ # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public #
21
+ # License for more details. #
22
+ # #
23
+ # You should have received a copy of the GNU Affero General Public License #
24
+ # along with turtle_reader. If not, see <http://www.gnu.org/licenses/>. #
25
+ # #
26
+ ###############################################################################
27
+ #++
28
+
29
+ require_relative 'turtle_reader/rdf/turtle/reader'
30
+ require_relative 'turtle_reader/rdf/compression'
31
+ require_relative 'turtle_reader/rdf/prefix'
32
+ require_relative 'turtle_reader/rdf/uri'
33
+
34
+ class TurtleReader
35
+
36
+ include Enumerable
37
+
38
+ NS = RDF::Vocabulary.inject({}) { |h, v| h[v.__prefix__] = v; h }
39
+
40
+ class << self
41
+
42
+ def open(file, *args)
43
+ RDF::Reader.open(file, format: :ttl) { |reader|
44
+ turtle = new(reader, *args)
45
+ turtle.file = File.expand_path(file)
46
+
47
+ return block_given? ? yield(turtle) : turtle
48
+ }
49
+ end
50
+
51
+ def foreach(file, *args, &block)
52
+ open(file, *args) { |turtle| turtle.each(&block) }
53
+ end
54
+
55
+ end
56
+
57
+ def initialize(reader, map = true)
58
+ @reader, @base, @prefixes = reader, *reader.parse_prologue
59
+ self.map = map
60
+ end
61
+
62
+ attr_reader :reader, :map, :base, :prefixes
63
+
64
+ attr_accessor :file
65
+
66
+ def map=(map)
67
+ unless map.is_a?(Hash)
68
+ @map = Hash.new(map)
69
+ else
70
+ @map = {}
71
+
72
+ map.each { |k, v|
73
+ if k.is_a?(String)
74
+ n, s = k.split(':', 2)
75
+ k = NS.key?(n = n.to_sym) ? NS[n][s] : prefixes[n] / s
76
+ end
77
+
78
+ @map[k] = v
79
+ }
80
+ end
81
+ end
82
+
83
+ def statements
84
+ each_statement.to_a
85
+ end
86
+
87
+ def each_statement(&block)
88
+ return enum_for(:each_statement) unless block_given?
89
+ reader.parse_statements(&block)
90
+ self
91
+ end
92
+
93
+ def each
94
+ return enum_for(:each) unless block_given?
95
+
96
+ uri, map, base = RDF::URI, self.map, self.base
97
+
98
+ each_statement { |t|
99
+ s, p, o = *t
100
+
101
+ if s.is_a?(uri) and k = map[p] and s.start_with?(base)
102
+ yield s, o, k
103
+ end
104
+ }
105
+ end
106
+
107
+ def closed?
108
+ reader.closed?
109
+ end
110
+
111
+ def inspect
112
+ '#<%s:0x%x @file=%p, @base=%p%s>' % [
113
+ self.class, object_id, file, base, closed? ? ' (closed)' : ''
114
+ ]
115
+ end
116
+
117
+ end
118
+
119
+ require_relative 'turtle_reader/version'