rdf 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
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