rdf 0.1.2 → 0.1.3

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.2
1
+ 0.1.3
data/lib/rdf.rb CHANGED
@@ -29,6 +29,7 @@ module RDF
29
29
 
30
30
  # RDF serialization formats
31
31
  autoload :NTriples, 'rdf/ntriples'
32
+ autoload :NQuads, 'rdf/nquads'
32
33
 
33
34
  # RDF storage
34
35
  autoload :Repository, 'rdf/repository'
data/lib/rdf/nquads.rb ADDED
@@ -0,0 +1,7 @@
1
+ module RDF
2
+ ##
3
+ # **`RDF::NQuads`** provides support for the N-Quads serialization format.
4
+ module NQuads
5
+ include NTriples # TODO
6
+ end
7
+ end
@@ -28,41 +28,67 @@ module RDF::NTriples
28
28
  class Reader < RDF::Reader
29
29
  format RDF::NTriples::Format
30
30
 
31
+ ##
32
+ # Reconstructs an RDF value from its serialized N-Triples
33
+ # representation.
34
+ #
35
+ # @param [String] data
36
+ # @return [RDF::Value]
37
+ def self.unserialize(data)
38
+ self.new(data).read_value
39
+ end
40
+
41
+ ##
42
+ # @return [RDF::Value]
43
+ def read_value
44
+ begin
45
+ read_statement
46
+ rescue RDF::ReaderError => e
47
+ read_uriref || read_bnode || read_literal
48
+ end
49
+ end
50
+
31
51
  ##
32
52
  # @return [Array]
33
53
  # @see http://www.w3.org/TR/rdf-testcases/#ntrip_grammar
34
54
  def read_triple
35
55
  loop do
36
56
  readline.strip! # EOFError thrown on end of input
57
+ line = @line # for backtracking input in case of parse error
37
58
 
38
- unless blank? || read_comment
39
- subject = read_uriref || read_bnode || fail_subject
40
- predicate = read_uriref || fail_predicate
41
- object = read_uriref || read_bnode || read_literal || fail_object
42
- return [subject, predicate, object]
59
+ begin
60
+ unless blank? || read_comment
61
+ subject = read_uriref || read_bnode || fail_subject
62
+ predicate = read_uriref || fail_predicate
63
+ object = read_uriref || read_bnode || read_literal || fail_object
64
+ return [subject, predicate, object]
65
+ end
66
+ rescue RDF::ReaderError => e
67
+ @line = line # this allows #read_value to work
68
+ raise e
43
69
  end
44
70
  end
45
71
  end
46
72
 
47
73
  ##
48
74
  # @return [Boolean]
49
- # @see http://www.w3.org/TR/rdf-testcases/#ntrip_grammar (comment)
75
+ # @see http://www.w3.org/TR/rdf-testcases/#ntrip_grammar (comment)
50
76
  def read_comment
51
77
  match(/^#\s*(.*)$/)
52
78
  end
53
79
 
54
80
  ##
55
- # @return [URI, nil]
56
- # @see http://www.w3.org/TR/rdf-testcases/#ntrip_grammar (uriref)
81
+ # @return [URI]
82
+ # @see http://www.w3.org/TR/rdf-testcases/#ntrip_grammar (uriref)
57
83
  def read_uriref
58
84
  if uri = match(/^<([^>]+)>/)
59
- RDF::URI.parse(uri)
85
+ RDF::URI.new(uri)
60
86
  end
61
87
  end
62
88
 
63
89
  ##
64
- # @return [Node, nil]
65
- # @see http://www.w3.org/TR/rdf-testcases/#ntrip_grammar (nodeID)
90
+ # @return [Node]
91
+ # @see http://www.w3.org/TR/rdf-testcases/#ntrip_grammar (nodeID)
66
92
  def read_bnode
67
93
  if node_id = match(/^_:([A-Za-z][A-Za-z0-9]*)/)
68
94
  @nodes[node_id] ||= RDF::Node.new(node_id)
@@ -70,8 +96,8 @@ module RDF::NTriples
70
96
  end
71
97
 
72
98
  ##
73
- # @return [String, Literal, nil]
74
- # @see http://www.w3.org/TR/rdf-testcases/#ntrip_grammar (literal)
99
+ # @return [Literal]
100
+ # @see http://www.w3.org/TR/rdf-testcases/#ntrip_grammar (literal)
75
101
  def read_literal
76
102
  if literal = match(/^"((?:\\"|[^"])*)"/)
77
103
  literal = unescaped(literal)
@@ -89,7 +115,7 @@ module RDF::NTriples
89
115
  ##
90
116
  # @param [String] string
91
117
  # @return [String]
92
- # @see http://www.w3.org/TR/rdf-testcases/#ntrip_strings
118
+ # @see http://www.w3.org/TR/rdf-testcases/#ntrip_strings
93
119
  def unescaped(string)
94
120
  ["\t", "\n", "\r", "\"", "\\"].each do |escape|
95
121
  string.gsub!(escape.inspect[1...-1], escape)
@@ -27,6 +27,22 @@ module RDF::NTriples
27
27
  class Writer < RDF::Writer
28
28
  format RDF::NTriples::Format
29
29
 
30
+ ##
31
+ # Returns the serialized N-Triples representation of the given RDF
32
+ # value.
33
+ #
34
+ # @param [RDF::Value] value
35
+ # @return [String]
36
+ def self.serialize(value)
37
+ writer = self.new
38
+ case value
39
+ when RDF::Statement
40
+ writer.format_statement(value) + "\n"
41
+ else
42
+ writer.format_value(value)
43
+ end
44
+ end
45
+
30
46
  ##
31
47
  # Outputs an N-Triples comment line.
32
48
  #
data/lib/rdf/reader.rb CHANGED
@@ -138,26 +138,33 @@ module RDF
138
138
  ##
139
139
  # @yield [statement]
140
140
  # @yieldparam [Statement]
141
- # @return [Reader]
141
+ # @return [Enumerator]
142
142
  def each_statement(&block)
143
- each_triple { |*triple| block.call(Statement.new(*triple)) }
144
- self
143
+ begin
144
+ loop { block.call(read_statement) }
145
+ rescue EOFError => e
146
+ end
145
147
  end
146
148
 
147
149
  ##
148
150
  # @yield [triple]
149
151
  # @yieldparam [Array(Value)]
150
- # @return [Reader]
152
+ # @return [Enumerator]
151
153
  def each_triple(&block)
152
154
  begin
153
155
  loop { block.call(*read_triple) }
154
156
  rescue EOFError => e
155
157
  end
156
- self
157
158
  end
158
159
 
159
160
  protected
160
161
 
162
+ ##
163
+ # @raise [NotImplementedError] unless implemented in subclass
164
+ def read_statement
165
+ Statement.new(*read_triple)
166
+ end
167
+
161
168
  ##
162
169
  # @raise [NotImplementedError] unless implemented in subclass
163
170
  def read_triple
data/lib/rdf/version.rb CHANGED
@@ -2,7 +2,7 @@ module RDF
2
2
  module VERSION
3
3
  MAJOR = 0
4
4
  MINOR = 1
5
- TINY = 2
5
+ TINY = 3
6
6
  EXTRA = nil
7
7
 
8
8
  STRING = [MAJOR, MINOR, TINY].join('.')
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 2
9
- version: 0.1.2
8
+ - 3
9
+ version: 0.1.3
10
10
  platform: ruby
11
11
  authors:
12
12
  - Arto Bendiken
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-03-27 00:00:00 +01:00
18
+ date: 2010-03-30 00:00:00 +02:00
19
19
  default_executable: rdf
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -106,6 +106,7 @@ files:
106
106
  - lib/rdf/model/statement.rb
107
107
  - lib/rdf/model/uri.rb
108
108
  - lib/rdf/model/value.rb
109
+ - lib/rdf/nquads.rb
109
110
  - lib/rdf/ntriples/format.rb
110
111
  - lib/rdf/ntriples/reader.rb
111
112
  - lib/rdf/ntriples/writer.rb