rdf-n3 0.0.1 → 0.0.2

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/spec/matchers.rb ADDED
@@ -0,0 +1,101 @@
1
+ module Matchers
2
+ class BeEquivalentGraph
3
+ Info = Struct.new(:about, :information, :trace, :compare, :inputDocument, :outputDocument)
4
+ def normalize(graph)
5
+ case graph
6
+ when RDF::Graph then graph
7
+ when IO, StringIO
8
+ RDF::Graph.new.load(graph, :base_uri => @info.about)
9
+ else
10
+ # Figure out which parser to use
11
+ g = RDF::Graph.new
12
+ reader_class = RDF::Reader.for(detect_format(graph))
13
+ reader_class.new(graph, :base_uri => @info.about).each {|s| g << s}
14
+ g
15
+ end
16
+ end
17
+
18
+ def initialize(expected, info)
19
+ @info = if info.respond_to?(:about)
20
+ info
21
+ elsif info.is_a?(Hash)
22
+ identifier = info[:identifier] || expected.is_a?(RDF::Graph) ? expected.context : info[:about]
23
+ trace = info[:trace]
24
+ trace = trace.join("\n") if trace.is_a?(Array)
25
+ Info.new(identifier, info[:information] || "", trace, info[:compare])
26
+ else
27
+ Info.new(expected.is_a?(RDF::Graph) ? expected.context : info, info.to_s)
28
+ end
29
+ @expected = normalize(expected)
30
+ end
31
+
32
+ def matches?(actual)
33
+ @actual = normalize(actual)
34
+ @actual == @expected
35
+ end
36
+
37
+ def failure_message_for_should
38
+ info = @info.respond_to?(:information) ? @info.information : @info.inspect
39
+ if @expected.is_a?(RDF::Graph) && @actual.size != @expected.size
40
+ "Graph entry count differs:\nexpected: #{@expected.size}\nactual: #{@actual.size}"
41
+ elsif @expected.is_a?(Array) && @actual.size != @expected.length
42
+ "Graph entry count differs:\nexpected: #{@expected.length}\nactual: #{@actual.size}"
43
+ else
44
+ "Graph differs"
45
+ end +
46
+ "\n#{info + "\n" unless info.empty?}" +
47
+ (@info.inputDocument ? "Input file: #{@info.inputDocument}\n" : "") +
48
+ (@info.outputDocument ? "Output file: #{@info.outputDocument}\n" : "") +
49
+ "Unsorted Expected:\n#{@expected.to_ntriples}" +
50
+ "Unsorted Results:\n#{@actual.to_ntriples}" +
51
+ (@info.trace ? "\nDebug:\n#{@info.trace}" : "")
52
+ end
53
+ def negative_failure_message
54
+ "Graphs do not differ\n"
55
+ end
56
+ end
57
+
58
+ def be_equivalent_graph(expected, info = nil)
59
+ BeEquivalentGraph.new(expected, info)
60
+ end
61
+
62
+ class MatchRE
63
+ Info = Struct.new(:about, :information, :trace, :inputDocument, :outputDocument)
64
+ def initialize(expected, info)
65
+ @info = if info.respond_to?(:about)
66
+ info
67
+ elsif info.is_a?(Hash)
68
+ identifier = info[:identifier] || info[:about]
69
+ trace = info[:trace]
70
+ trace = trace.join("\n") if trace.is_a?(Array)
71
+ Info.new(identifier, info[:information] || "", trace, info[:inputDocument], info[:outputDocument])
72
+ else
73
+ Info.new(info, info.to_s)
74
+ end
75
+ @expected = expected
76
+ end
77
+
78
+ def matches?(actual)
79
+ @actual = actual
80
+ @actual.to_s.match(@expected)
81
+ end
82
+
83
+ def failure_message_for_should
84
+ info = @info.respond_to?(:information) ? @info.information : @info.inspect
85
+ "Match failed"
86
+ "\n#{info + "\n" unless info.empty?}" +
87
+ (@info.inputDocument ? "Input file: #{@info.inputDocument}\n" : "") +
88
+ (@info.outputDocument ? "Output file: #{@info.outputDocument}\n" : "") +
89
+ "Expression: #{@expected}\n" +
90
+ "Unsorted Results:\n#{@actual}" +
91
+ (@info.trace ? "\nDebug:\n#{@info.trace}" : "")
92
+ end
93
+ def negative_failure_message
94
+ "Match succeeded\n"
95
+ end
96
+ end
97
+
98
+ def match_re(expected, info = nil)
99
+ MatchRE.new(expected, info)
100
+ end
101
+ end
@@ -1,29 +1,113 @@
1
1
  # coding: utf-8
2
2
  require File.join(File.dirname(__FILE__), 'spec_helper')
3
- include RdfContext
4
3
 
5
4
  describe "RDF::N3::Reader" do
6
- before(:each) { @parser = N3Parser.new(:strict => true) }
7
-
8
- describe "with simple ntriples" do
9
- it "should parse simple triple" do
10
- n3_string = %(<http://example.org/> <http://xmlns.com/foaf/0.1/name> "Tom Morris" .)
11
- @parser.parse(n3_string)
12
- @parser.graph[0].subject.to_s.should == "http://example.org/"
13
- @parser.graph[0].predicate.to_s.should == "http://xmlns.com/foaf/0.1/name"
14
- @parser.graph[0].object.to_s.should == "Tom Morris"
15
- @parser.graph.size.should == 1
5
+ context "discovery" do
6
+ {
7
+ "n3" => RDF::Reader.for(:n3),
8
+ "etc/foaf.n3" => RDF::Reader.for("etc/foaf.n3"),
9
+ "etc/foaf.ttl" => RDF::Reader.for("etc/foaf.ttl"),
10
+ "foaf.n3" => RDF::Reader.for(:file_name => "foaf.n3"),
11
+ "foaf.ttl" => RDF::Reader.for(:file_name => "foaf.ttl"),
12
+ ".n3" => RDF::Reader.for(:file_extension => "n3"),
13
+ ".ttl" => RDF::Reader.for(:file_extension => "ttl"),
14
+ "text/n3" => RDF::Reader.for(:content_type => "text/n3"),
15
+ "text/turtle" => RDF::Reader.for(:content_type => "text/turtle"),
16
+ }.each_pair do |label, format|
17
+ it "should discover '#{label}'" do
18
+ format.should == RDF::N3::Reader
19
+ end
20
+ end
21
+ end
22
+
23
+ context :interface do
24
+ before(:each) do
25
+ @sampledoc = <<-EOF;
26
+ @prefix dc: <http://purl.org/dc/elements/1.1/>.
27
+ @prefix po: <http://purl.org/ontology/po/>.
28
+ @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
29
+ _:broadcast
30
+ a po:Broadcast;
31
+ po:schedule_date """2008-06-24T12:00:00Z""";
32
+ po:broadcast_of _:version;
33
+ po:broadcast_on <http://www.bbc.co.uk/programmes/service/6music>;
34
+ .
35
+ _:version
36
+ a po:Version;
37
+ .
38
+ <http://www.bbc.co.uk/programmes/b0072l93>
39
+ dc:title """Nemone""";
40
+ a po:Brand;
41
+ .
42
+ <http://www.bbc.co.uk/programmes/b00c735d>
43
+ a po:Episode;
44
+ po:episode <http://www.bbc.co.uk/programmes/b0072l93>;
45
+ po:version _:version;
46
+ po:long_synopsis """Actor and comedian Rhys Darby chats to Nemone.""";
47
+ dc:title """Nemone""";
48
+ po:synopsis """Actor and comedian Rhys Darby chats to Nemone.""";
49
+ .
50
+ <http://www.bbc.co.uk/programmes/service/6music>
51
+ a po:Service;
52
+ dc:title """BBC 6 Music""";
53
+ .
54
+
55
+ #_:abcd a po:Episode.
56
+ EOF
16
57
  end
17
58
 
18
- it "should parse simple triple from class method" do
19
- n3_string = "<http://example.org/> <http://xmlns.com/foaf/0.1/name> \"Tom Morris\" . "
20
- graph = N3Parser.new(:strict => true).parse(n3_string)
21
- graph[0].subject.to_s.should == "http://example.org/"
22
- graph[0].predicate.to_s.should == "http://xmlns.com/foaf/0.1/name"
23
- graph[0].object.to_s.should == "Tom Morris"
24
- graph.size.should == 1
59
+ it "should yield reader" do
60
+ inner = mock("inner")
61
+ inner.should_receive(:called).with(RDF::N3::Reader)
62
+ RDF::N3::Reader.new(@sampledoc) do |reader|
63
+ inner.called(reader.class)
64
+ end
65
+ end
66
+
67
+ it "should return reader" do
68
+ RDF::N3::Reader.new(@sampledoc).should be_a(RDF::N3::Reader)
69
+ end
70
+
71
+ it "should yield statements" do
72
+ inner = mock("inner")
73
+ inner.should_receive(:called).with(RDF::Statement).exactly(15)
74
+ RDF::N3::Reader.new(@sampledoc).each_statement do |statement|
75
+ inner.called(statement.class)
76
+ end
77
+ end
78
+
79
+ it "should yield triples" do
80
+ inner = mock("inner")
81
+ inner.should_receive(:called).exactly(15)
82
+ RDF::N3::Reader.new(@sampledoc).each_triple do |subject, predicate, object|
83
+ inner.called(subject.class, predicate.class, object.class)
84
+ end
25
85
  end
86
+ end
26
87
 
88
+ describe "with simple ntriples" do
89
+ context "simple triple" do
90
+ before(:each) do
91
+ n3_string = %(<http://example.org/> <http://xmlns.com/foaf/0.1/name> "Gregg Kellogg" .)
92
+ @graph = parse(n3_string)
93
+ @statement = @graph.statements.first
94
+ end
95
+
96
+ it "should have a single triple" do
97
+ @graph.size.should == 1
98
+ end
99
+
100
+ it "should have subject" do
101
+ @statement.subject.to_s.should == "http://example.org/"
102
+ end
103
+ it "should have predicate" do
104
+ @statement.predicate.to_s.should == "http://xmlns.com/foaf/0.1/name"
105
+ end
106
+ it "should have object" do
107
+ @statement.object.to_s.should == '"Gregg Kellogg"'
108
+ end
109
+ end
110
+
27
111
  # NTriple tests from http://www.w3.org/2000/10/rdf-tests/rdfcore/ntriples/test.nt
28
112
  describe "with blank lines" do
29
113
  {
@@ -33,8 +117,7 @@ describe "RDF::N3::Reader" do
33
117
  "line with spaces" => " "
34
118
  }.each_pair do |name, statement|
35
119
  specify "test #{name}" do
36
- @parser.parse(statement)
37
- @parser.graph.size.should == 0
120
+ parse(statement).size.should == 0
38
121
  end
39
122
  end
40
123
  end
@@ -52,26 +135,26 @@ describe "RDF::N3::Reader" do
52
135
  "€" => ':a :b "\u20AC" .',
53
136
  }.each_pair do |contents, triple|
54
137
  specify "test #{contents}" do
55
- @parser.parse(triple, "http://a/b")
56
- @parser.graph.should_not be_nil
57
- @parser.graph.size.should == 1
58
- @parser.graph[0].object.contents.should == contents
138
+ graph = parse(triple, :base_uri => "http://a/b")
139
+ statement = graph.statements.first
140
+ graph.size.should == 1
141
+ statement.object.value.should == contents
59
142
  end
60
143
  end
61
144
 
62
145
  it "should parse long literal with escape" do
63
146
  n3 = %(@prefix : <http://example.org/foo#> . :a :b "\\U00015678another" .)
64
147
  if defined?(::Encoding)
65
- @parser.parse(n3)
66
- @parser.graph[0].object.contents.should == "\u{15678}another"
148
+ statement = parse(n3).statements.first
149
+ statement.object.value.should == "\u{15678}another"
67
150
  else
68
- lambda { @parser.parse(n3) }.should raise_error(RdfException, "Long Unicode escapes no supported in Ruby 1.8")
151
+ lambda { parse(n3) }.should raise_error(RDF::ReaderError, "Long Unicode escapes no supported in Ruby 1.8")
69
152
  pending("Not supported in Ruby 1.8")
70
153
  end
71
154
  end
72
155
 
73
156
  it "should parse multi-line literal" do
74
- @parser.parse(%(
157
+ graph = parse(%(
75
158
  <http://www.example.com/books#book12345> <http://purl.org/dc/terms/title> """
76
159
  Foo
77
160
  <html:b xmlns:html="http://www.w3.org/1999/xhtml" html:a="b">bar<rdf:Thing xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><a:b xmlns:a="foo:"></a:b>here<a:c xmlns:a="foo:"></a:c></rd
@@ -81,9 +164,8 @@ describe "RDF::N3::Reader" do
81
164
  """ .
82
165
  ))
83
166
 
84
- @parser.graph.should_not be_nil
85
- @parser.graph.size.should == 1
86
- @parser.graph[0].object.contents.should == %(
167
+ graph.size.should == 1
168
+ graph.statements.first.object.value.should == %(
87
169
  Foo
88
170
  <html:b xmlns:html="http://www.w3.org/1999/xhtml" html:a="b">bar<rdf:Thing xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><a:b xmlns:a="foo:"></a:b>here<a:c xmlns:a="foo:"></a:c></rd
89
171
  f:Thing></html:b>
@@ -93,43 +175,40 @@ describe "RDF::N3::Reader" do
93
175
  end
94
176
 
95
177
  it "should parse long literal ending in double quote" do
96
- @parser.parse(%(:a :b """ \\"""" .), "http://a/b")
97
- @parser.graph.size.should == 1
98
- @parser.graph[0].object.contents.should == ' "'
178
+ graph = parse(%(:a :b """ \\"""" .), :base_uri => "http://a/b")
179
+ graph.size.should == 1
180
+ graph.statements.first.object.value.should == ' "'
99
181
  end
100
182
  end
101
183
 
102
184
  it "should create named subject bnode" do
103
- @parser.parse("_:anon <http://example.org/property> <http://example.org/resource2> .")
104
- @parser.graph.should_not be_nil
105
- @parser.graph.size.should == 1
106
- triple = @parser.graph[0]
107
- triple.subject.should be_a(BNode)
108
- triple.subject.identifier.should =~ /anon/
109
- triple.predicate.should == "http://example.org/property"
110
- triple.object.should == "http://example.org/resource2"
185
+ graph = parse("_:anon <http://example.org/property> <http://example.org/resource2> .")
186
+ graph.size.should == 1
187
+ statement = graph.statements.first
188
+ statement.subject.should be_a(RDF::Node)
189
+ statement.subject.id.should =~ /anon/
190
+ statement.predicate.to_s.should == "http://example.org/property"
191
+ statement.object.to_s.should == "http://example.org/resource2"
111
192
  end
112
193
 
113
194
  it "should create named predicate bnode" do
114
- @parser.parse("<http://example.org/resource2> _:anon <http://example.org/object> .")
115
- @parser.graph.should_not be_nil
116
- @parser.graph.size.should == 1
117
- triple = @parser.graph[0]
118
- triple.subject.should == "http://example.org/resource2"
119
- triple.predicate.should be_a(BNode)
120
- triple.predicate.identifier.should =~ /anon/
121
- triple.object.should == "http://example.org/object"
195
+ graph = parse("<http://example.org/resource2> _:anon <http://example.org/object> .")
196
+ graph.size.should == 1
197
+ statement = graph.statements.first
198
+ statement.subject.to_s.should == "http://example.org/resource2"
199
+ statement.predicate.should be_a(RDF::Node)
200
+ statement.predicate.id.should =~ /anon/
201
+ statement.object.to_s.should == "http://example.org/object"
122
202
  end
123
203
 
124
204
  it "should create named object bnode" do
125
- @parser.parse("<http://example.org/resource2> <http://example.org/property> _:anon .")
126
- @parser.graph.should_not be_nil
127
- @parser.graph.size.should == 1
128
- triple = @parser.graph[0]
129
- triple.subject.should == "http://example.org/resource2"
130
- triple.predicate.should == "http://example.org/property"
131
- triple.object.should be_a(BNode)
132
- triple.object.identifier.should =~ /anon/
205
+ graph = parse("<http://example.org/resource2> <http://example.org/property> _:anon .")
206
+ graph.size.should == 1
207
+ statement = graph.statements.first
208
+ statement.subject.to_s.should == "http://example.org/resource2"
209
+ statement.predicate.to_s.should == "http://example.org/property"
210
+ statement.object.should be_a(RDF::Node)
211
+ statement.object.id.should =~ /anon/
133
212
  end
134
213
 
135
214
  {
@@ -161,28 +240,26 @@ describe "RDF::N3::Reader" do
161
240
  "Typed Literals" => '<http://example.org/resource32> <http://example.org/property> "abc"^^<http://example.org/datatype1> .',
162
241
  }.each_pair do |name, statement|
163
242
  specify "test #{name}" do
164
- @parser.parse([statement].flatten.first)
165
- @parser.graph.should_not be_nil
166
- @parser.graph.size.should == 1
167
- #puts @parser.graph[0].to_ntriples
168
- @parser.graph[0].to_ntriples.should == [statement].flatten.last.gsub(/\s+/, " ").strip
243
+ graph = parse([statement].flatten.first)
244
+ graph.size.should == 1
245
+ graph.to_ntriples.chomp.should == [statement].flatten.last.gsub(/\s+/, " ").strip
169
246
  end
170
247
  end
171
248
 
172
249
  it "should create typed literals" do
173
250
  n3doc = "<http://example.org/joe> <http://xmlns.com/foaf/0.1/name> \"Joe\"^^<http://www.w3.org/2001/XMLSchema#string> ."
174
- @parser.parse(n3doc)
175
- @parser.graph[0].object.class.should == RdfContext::Literal
251
+ statement = parse(n3doc).statements.first
252
+ statement.object.class.should == RDF::Literal
176
253
  end
177
254
 
178
255
  it "should create BNodes" do
179
256
  n3doc = "_:a a _:c ."
180
- @parser.parse(n3doc)
181
- @parser.graph[0].subject.class.should == RdfContext::BNode
182
- @parser.graph[0].object.class.should == RdfContext::BNode
257
+ statement = parse(n3doc).statements.first
258
+ statement.subject.class.should == RDF::Node
259
+ statement.object.class.should == RDF::Node
183
260
  end
184
261
 
185
- describe "should create URIRefs" do
262
+ describe "should create URIs" do
186
263
  {
187
264
  %(<http://example.org/joe> <http://xmlns.com/foaf/0.1/knows> <http://example.org/jane> .) => %(<http://example.org/joe> <http://xmlns.com/foaf/0.1/knows> <http://example.org/jane> .),
188
265
  %(<joe> <knows> <jane> .) => %(<http://a/joe> <http://a/knows> <http://a/jane> .),
@@ -190,7 +267,7 @@ describe "RDF::N3::Reader" do
190
267
  %(<#D%C3%BCrst> a "URI percent ^encoded as C3, BC".) => %(<http://a/b#D%C3%BCrst> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> "URI percent ^encoded as C3, BC" .),
191
268
  }.each_pair do |n3, nt|
192
269
  it "for '#{n3}'" do
193
- @parser.parse(n3, "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug, :compare => :array)
270
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug, :compare => :array)
194
271
  end
195
272
  end
196
273
 
@@ -200,7 +277,7 @@ describe "RDF::N3::Reader" do
200
277
  }.each_pair do |n3, nt|
201
278
  it "for '#{n3}'" do
202
279
  begin
203
- @parser.parse(n3, "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug, :compare => :array)
280
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug, :compare => :array)
204
281
  rescue
205
282
  if defined?(::Encoding)
206
283
  raise
@@ -214,15 +291,15 @@ describe "RDF::N3::Reader" do
214
291
 
215
292
  it "should create URIRefs" do
216
293
  n3doc = "<http://example.org/joe> <http://xmlns.com/foaf/0.1/knows> <http://example.org/jane> ."
217
- @parser.parse(n3doc)
218
- @parser.graph[0].subject.class.should == RdfContext::URIRef
219
- @parser.graph[0].object.class.should == RdfContext::URIRef
294
+ statement = parse(n3doc).statements.first
295
+ statement.subject.class.should == RDF::URI
296
+ statement.object.class.should == RDF::URI
220
297
  end
221
298
 
222
299
  it "should create literals" do
223
300
  n3doc = "<http://example.org/joe> <http://xmlns.com/foaf/0.1/name> \"Joe\"."
224
- @parser.parse(n3doc)
225
- @parser.graph[0].object.class.should == RdfContext::Literal
301
+ statement = parse(n3doc).statements.first
302
+ statement.object.class.should == RDF::Literal
226
303
  end
227
304
  end
228
305
 
@@ -233,13 +310,13 @@ describe "RDF::N3::Reader" do
233
310
  %(:y :p1 "xy.z"^^xsd:double .) => %r(Typed literal has an invalid lexical value: .* "xy\.z"),
234
311
  %(:y :p1 "+1.0z"^^xsd:double .) => %r(Typed literal has an invalid lexical value: .* "\+1.0z"),
235
312
  %(:a :b .) => %r(Illegal statment: ".*" missing object),
236
- %(:a :b 'single quote' .) => RdfException,
237
- %(:a "literal value" :b .) => InvalidPredicate,
313
+ %(:a :b 'single quote' .) => RDF::ReaderError,
314
+ %(:a "literal value" :b .) => RDF::ReaderError,
238
315
  %(@keywords prefix. :e prefix :f .) => %r(Keyword ".*" used as expression)
239
316
  }.each_pair do |n3, error|
240
317
  it "should raise error for '#{n3}'" do
241
318
  lambda {
242
- @parser.parse("@prefix xsd: <http://www.w3.org/2001/XMLSchema#> . #{n3}", "http://a/b")
319
+ parse("@prefix xsd: <http://www.w3.org/2001/XMLSchema#> . #{n3}", :base_uri => "http://a/b")
243
320
  }.should raise_error(error)
244
321
  end
245
322
  end
@@ -254,14 +331,8 @@ describe "RDF::N3::Reader" do
254
331
  @prefix xsd: <http://www.w3.org/2001/XMLSchema#>
255
332
  <http://example.org/joe> foaf:name \"Joe\"^^xsd:string .
256
333
  )
257
- @parser.parse(n3doc)
258
- @parser.graph[0].object.class.should == RdfContext::Literal
259
- end
260
-
261
- it "should map <> to document uri" do
262
- n3doc = "@prefix : <> ."
263
- @parser.parse(n3doc, "http://the.document.itself")
264
- @parser.graph.nsbinding.should == {"" => Namespace.new("http://the.document.itself#", "")}
334
+ statement = parse(n3doc).statements.first
335
+ statement.object.class.should == RDF::Literal
265
336
  end
266
337
 
267
338
  it "should use <> as a prefix and as a triple node" do
@@ -269,7 +340,7 @@ describe "RDF::N3::Reader" do
269
340
  nt = %(
270
341
  <http://a/b> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://a/b#a> .
271
342
  )
272
- @parser.parse(n3, "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug, :compare => :array)
343
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug, :compare => :array)
273
344
  end
274
345
 
275
346
  it "should use <#> as a prefix and as a triple node" do
@@ -277,31 +348,31 @@ describe "RDF::N3::Reader" do
277
348
  nt = %(
278
349
  <http://a/b#> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://a/b#a> .
279
350
  )
280
- @parser.parse(n3, "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug, :compare => :array)
351
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug, :compare => :array)
281
352
  end
282
353
 
283
354
  it "should generate rdf:type for 'a'" do
284
355
  n3 = %(@prefix a: <http://foo/a#> . a:b a <http://www.w3.org/2000/01/rdf-schema#resource> .)
285
356
  nt = %(<http://foo/a#b> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2000/01/rdf-schema#resource> .)
286
- @parser.parse(n3, "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug, :compare => :array)
357
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug, :compare => :array)
287
358
  end
288
359
 
289
360
  it "should generate rdf:type for '@a'" do
290
361
  n3 = %(@prefix a: <http://foo/a#> . a:b @a <http://www.w3.org/2000/01/rdf-schema#resource> .)
291
362
  nt = %(<http://foo/a#b> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2000/01/rdf-schema#resource> .)
292
- @parser.parse(n3, "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug, :compare => :array)
363
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug, :compare => :array)
293
364
  end
294
365
 
295
366
  it "should generate inverse predicate for 'is xxx of'" do
296
367
  n3 = %("value" is :prop of :b . :b :prop "value" .)
297
368
  nt = %(<http://a/b#b> <http://a/b#prop> "value" .)
298
- @parser.parse(n3, "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug, :compare => :array)
369
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug, :compare => :array)
299
370
  end
300
371
 
301
372
  it "should generate inverse predicate for '@is xxx @of'" do
302
373
  n3 = %("value" @is :prop @of :b . :b :prop "value" .)
303
374
  nt = %(<http://a/b#b> <http://a/b#prop> "value" .)
304
- @parser.parse(n3, "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug, :compare => :array)
375
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug, :compare => :array)
305
376
  end
306
377
 
307
378
  it "should generate inverse predicate for 'is xxx of' with object list" do
@@ -310,37 +381,37 @@ describe "RDF::N3::Reader" do
310
381
  <http://a/b#b> <http://a/b#prop> "value" .
311
382
  <http://a/b#c> <http://a/b#prop> "value" .
312
383
  )
313
- @parser.parse(n3, "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug, :compare => :array)
384
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug, :compare => :array)
314
385
  end
315
386
 
316
387
  it "should generate predicate for 'has xxx'" do
317
388
  n3 = %(@prefix a: <http://foo/a#> . a:b has :pred a:c .)
318
389
  nt = %(<http://foo/a#b> <http://a/b#pred> <http://foo/a#c> .)
319
- @parser.parse(n3, "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug, :compare => :array)
390
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug, :compare => :array)
320
391
  end
321
392
 
322
393
  it "should generate predicate for '@has xxx'" do
323
394
  n3 = %(@prefix a: <http://foo/a#> . a:b @has :pred a:c .)
324
395
  nt = %(<http://foo/a#b> <http://a/b#pred> <http://foo/a#c> .)
325
- @parser.parse(n3, "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug, :compare => :array)
396
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug, :compare => :array)
326
397
  end
327
398
 
328
399
  it "should create log:implies predicate for '=>'" do
329
400
  n3 = %(@prefix a: <http://foo/a#> . _:a => a:something .)
330
401
  nt = %(_:a <http://www.w3.org/2000/10/swap/log#implies> <http://foo/a#something> .)
331
- @parser.parse(n3, "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug)
402
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
332
403
  end
333
404
 
334
405
  it "should create log:implies inverse predicate for '<='" do
335
406
  n3 = %(@prefix a: <http://foo/a#> . _:a <= a:something .)
336
407
  nt = %(<http://foo/a#something> <http://www.w3.org/2000/10/swap/log#implies> _:a .)
337
- @parser.parse(n3, "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug)
408
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
338
409
  end
339
410
 
340
411
  it "should create owl:sameAs predicate for '='" do
341
412
  n3 = %(@prefix a: <http://foo/a#> . _:a = a:something .)
342
413
  nt = %(_:a <http://www.w3.org/2002/07/owl#sameAs> <http://foo/a#something> .)
343
- @parser.parse(n3, "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug)
414
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
344
415
  end
345
416
 
346
417
  {
@@ -355,20 +426,20 @@ describe "RDF::N3::Reader" do
355
426
  %(:a :b 1.0e+1) => %(<http://a/b#a> <http://a/b#b> "1.0e+1"^^<http://www.w3.org/2001/XMLSchema#double> .),
356
427
  }.each_pair do |n3, nt|
357
428
  it "should create typed literal for '#{n3}'" do
358
- @parser.parse(n3, "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug)
429
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
359
430
  end
360
431
  end
361
432
 
362
433
  it "should accept empty localname" do
363
434
  n3 = %(: : : .)
364
435
  nt = %(<http://a/b#> <http://a/b#> <http://a/b#> .)
365
- @parser.parse(n3, "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug, :compare => :array)
436
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug, :compare => :array)
366
437
  end
367
438
 
368
439
  it "should accept prefix with empty local name" do
369
440
  n3 = %(@prefix foo: <http://foo/bar#> . foo: foo: foo: .)
370
441
  nt = %(<http://foo/bar#> <http://foo/bar#> <http://foo/bar#> .)
371
- @parser.parse(n3, "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug, :compare => :array)
442
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug, :compare => :array)
372
443
  end
373
444
 
374
445
  it "should do something for @forAll"
@@ -383,7 +454,7 @@ describe "RDF::N3::Reader" do
383
454
  <http://foo/bar> <http://foo/bara> <http://foo/b> .
384
455
  <http://foo/bar#c> <http://foo/bard> <http://foo/e> .
385
456
  )
386
- @parser.parse(n3, "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug, :compare => :array)
457
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug, :compare => :array)
387
458
  end
388
459
 
389
460
  it "should set absolute base (trailing /)" do
@@ -392,7 +463,7 @@ describe "RDF::N3::Reader" do
392
463
  <http://foo/bar/> <http://foo/bar/a> <http://foo/bar/b> .
393
464
  <http://foo/bar/#c> <http://foo/bar/d> <http://foo/e> .
394
465
  )
395
- @parser.parse(n3, "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug, :compare => :array)
466
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug, :compare => :array)
396
467
  end
397
468
 
398
469
  it "should set absolute base (trailing #)" do
@@ -401,7 +472,7 @@ describe "RDF::N3::Reader" do
401
472
  <http://foo/bar> <http://foo/bar#a> <http://foo/b> .
402
473
  <http://foo/bar#c> <http://foo/bar#d> <http://foo/e> .
403
474
  )
404
- @parser.parse(n3, "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug, :compare => :array)
475
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug, :compare => :array)
405
476
  end
406
477
 
407
478
  it "should set relative base" do
@@ -421,25 +492,7 @@ describe "RDF::N3::Reader" do
421
492
  <http://example.org/products/> <http://example.org/products/a> <http://example.org/products/d> .
422
493
  <http://example.org/products/> <http://example.org/products/a> <http://example.org/products/#e> .
423
494
  )
424
- @parser.parse(n3, "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug, :compare => :array)
425
- end
426
-
427
- it "should bind named namespace" do
428
- n3doc = "@prefix ns: <http://the/namespace#> ."
429
- @parser.parse(n3doc, "http://a/b")
430
- @parser.graph.nsbinding.should == {"ns" => Namespace.new("http://the/namespace#", "ns")}
431
- end
432
-
433
- it "should bind empty prefix to <%> by default" do
434
- n3doc = "@prefix : <#> ."
435
- @parser.parse(n3doc, "http://the.document.itself")
436
- @parser.graph.nsbinding.should == {"" => Namespace.new("http://the.document.itself#", "")}
437
- end
438
-
439
- it "should be able to bind _ as namespace" do
440
- n3 = %(@prefix _: <http://underscore/> . _:a a _:p.)
441
- nt = %(<http://underscore/a> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://underscore/p> .)
442
- @parser.parse(n3, "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug, :compare => :array)
495
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug, :compare => :array)
443
496
  end
444
497
  end
445
498
 
@@ -455,7 +508,7 @@ describe "RDF::N3::Reader" do
455
508
  ].each do |n3|
456
509
  it "should require @ if keywords set to empty for '#{n3}'" do
457
510
  lambda do
458
- @parser.parse("@keywords . #{n3}", "http://a/b")
511
+ parse("@keywords . #{n3}", :base_uri => "http://a/b")
459
512
  end.should raise_error(/unqualified keyword '\w+' used without @keyword directive/)
460
513
  end
461
514
  end
@@ -469,7 +522,7 @@ describe "RDF::N3::Reader" do
469
522
  %(:c :a t) => %(<http://a/b#c> <http://a/b#a> <http://a/b#t> .),
470
523
  }.each_pair do |n3, nt|
471
524
  it "should use default_ns for '#{n3}'" do
472
- @parser.parse("@keywords . #{n3}", "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug, :compare => :array)
525
+ parse("@keywords . #{n3}", :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug, :compare => :array)
473
526
  end
474
527
  end
475
528
 
@@ -482,15 +535,15 @@ describe "RDF::N3::Reader" do
482
535
  %(@keywords has. :a has :b :c.) => %(<http://a/b#a> <http://a/b#b> <http://a/b#c> .),
483
536
  } .each_pair do |n3, nt|
484
537
  it "should use keyword for '#{n3}'" do
485
- @parser.parse(n3, "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug, :compare => :array)
538
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug, :compare => :array)
486
539
  end
487
540
  end
488
541
 
489
542
  it "should raise error if unknown keyword set" do
490
543
  n3 = %(@keywords foo.)
491
544
  lambda do
492
- @parser.parse(n3, "http://a/b")
493
- end.should raise_error(ParserException, "undefined keywords used: foo")
545
+ parse(n3, :base_uri => "http://a/b")
546
+ end.should raise_error(RDF::ReaderError, "undefined keywords used: foo")
494
547
  end
495
548
  end
496
549
 
@@ -502,10 +555,10 @@ describe "RDF::N3::Reader" do
502
555
  _:a a :p.
503
556
  )
504
557
  nt = %(
505
- <http://underscore/a> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> :p .
506
- _:a <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> :p .
558
+ <http://underscore/a> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://a/b#p> .
559
+ _:a <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://a/b#p> .
507
560
  )
508
- @parser.parse(n3, "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug)
561
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
509
562
  end
510
563
 
511
564
  it "should allow a prefix to be redefined" do
@@ -520,7 +573,7 @@ describe "RDF::N3::Reader" do
520
573
  <http://host/A#b> <http://host/A#p> <http://host/A#v> .
521
574
  <http://host/Z#b> <http://host/Z#p> <http://host/Z#v> .
522
575
  )
523
- @parser.parse(n3, "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug, :compare => :array)
576
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug, :compare => :array)
524
577
  end
525
578
 
526
579
  it "should process sequential @base declarations (swap base.n3)" do
@@ -534,7 +587,7 @@ describe "RDF::N3::Reader" do
534
587
  <http://example.com/path/DFFERENT/a2> <http://example.com/path/DFFERENT/b2> <http://example.com/path/DFFERENT/foo/bar#baz2> .
535
588
  <http://example.com/path/DFFERENT/d3> <http://example.com/path/DFFERENT/#b3> <http://example.com/path/DFFERENT/e3> .
536
589
  )
537
- @parser.parse(n3, "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug, :compare => :array)
590
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug, :compare => :array)
538
591
  end
539
592
  end
540
593
 
@@ -547,31 +600,31 @@ describe "RDF::N3::Reader" do
547
600
  it "should create BNode for [] as subject" do
548
601
  n3 = %(@prefix a: <http://foo/a#> . [] a:p a:v .)
549
602
  nt = %(_:bnode0 <http://foo/a#p> <http://foo/a#v> .)
550
- @parser.parse(n3, "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug)
603
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
551
604
  end
552
605
 
553
606
  it "should create BNode for [] as predicate" do
554
607
  n3 = %(@prefix a: <http://foo/a#> . a:s [] a:o .)
555
608
  nt = %(<http://foo/a#s> _:bnode0 <http://foo/a#o> .)
556
- @parser.parse(n3, "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug)
609
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
557
610
  end
558
611
 
559
612
  it "should create BNode for [] as object" do
560
613
  n3 = %(@prefix a: <http://foo/a#> . a:s a:p [] .)
561
614
  nt = %(<http://foo/a#s> <http://foo/a#p> _:bnode0 .)
562
- @parser.parse(n3, "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug)
615
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
563
616
  end
564
617
 
565
618
  it "should create BNode for [] as statement" do
566
619
  n3 = %([:a :b] .)
567
620
  nt = %(_:bnode0 <http://a/b#a> <http://a/b#b> .)
568
- @parser.parse(n3, "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug)
621
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
569
622
  end
570
623
 
571
624
  it "should create statements with BNode subjects using [ pref obj]" do
572
625
  n3 = %(@prefix a: <http://foo/a#> . [ a:p a:v ] .)
573
626
  nt = %(_:bnode0 <http://foo/a#p> <http://foo/a#v> .)
574
- @parser.parse(n3, "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug)
627
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
575
628
  end
576
629
 
577
630
  it "should create BNode as a single object" do
@@ -581,7 +634,7 @@ describe "RDF::N3::Reader" do
581
634
  _:bnode0 <http://foo/a#qq> "2" .
582
635
  <http://foo/a#b> <http://foo/a#oneRef> _:bnode0 .
583
636
  )
584
- @parser.parse(n3, "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug)
637
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
585
638
  end
586
639
 
587
640
  it "should create a shared BNode" do
@@ -600,7 +653,7 @@ describe "RDF::N3::Reader" do
600
653
  _:bnode0 <http://foo/a#qq> "2" .
601
654
  _:a :pred _:bnode0 .
602
655
  )
603
- @parser.parse(n3, "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug)
656
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
604
657
  end
605
658
 
606
659
  it "should create nested BNodes" do
@@ -617,26 +670,26 @@ describe "RDF::N3::Reader" do
617
670
  _:bnode1 <http://foo/a#p5> "v4" .
618
671
  <http://foo/a#a> <http://foo/a#p> _:bnode1 .
619
672
  )
620
- @parser.parse(n3, "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug)
673
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
621
674
  end
622
675
 
623
676
  describe "from paths" do
624
677
  it "should create bnode for path x.p" do
625
678
  n3 = %(:x2.:y2 :p2 "3" .)
626
679
  nt = %(:x2 :y2 _:bnode0 . _:bnode0 :p2 "3" .)
627
- @parser.parse(n3, "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug)
680
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
628
681
  end
629
682
 
630
683
  it "should create bnode for path x!p" do
631
684
  n3 = %(:x2!:y2 :p2 "3" .)
632
685
  nt = %(:x2 :y2 _:bnode0 . _:bnode0 :p2 "3" .)
633
- @parser.parse(n3, "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug)
686
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
634
687
  end
635
688
 
636
689
  it "should create bnode for path x^p" do
637
690
  n3 = %(:x2^:y2 :p2 "3" .)
638
691
  nt = %(_:bnode0 :y2 :x2 . _:bnode0 :p2 "3" .)
639
- @parser.parse(n3, "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug)
692
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
640
693
  end
641
694
 
642
695
  it "should decode :joe!fam:mother!loc:office!loc:zip as Joe's mother's office's zipcode" do
@@ -651,7 +704,7 @@ describe "RDF::N3::Reader" do
651
704
  _:bnode0 <http://foo/loc#office> _:bnode1 .
652
705
  _:bnode1 <http://foo/loc#zip> _:bnode2 .
653
706
  )
654
- @parser.parse(n3, "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug)
707
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
655
708
  end
656
709
 
657
710
  it "should decode :joe!fam:mother^fam:mother Anyone whose mother is Joe's mother." do
@@ -665,7 +718,7 @@ describe "RDF::N3::Reader" do
665
718
  :joe <http://foo/fam#mother> _:bnode0 .
666
719
  _:bnode1 <http://foo/fam#mother> _:bnode0 .
667
720
  )
668
- @parser.parse(n3, "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug)
721
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
669
722
  end
670
723
 
671
724
  it "should decode path with property list." do
@@ -680,7 +733,7 @@ describe "RDF::N3::Reader" do
680
733
  _:bnode1 :q2 "4" .
681
734
  _:bnode1 :q2 "5" .
682
735
  )
683
- @parser.parse(n3, "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug)
736
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
684
737
  end
685
738
 
686
739
  it "should decode path as object(1)" do
@@ -689,7 +742,7 @@ describe "RDF::N3::Reader" do
689
742
  :a :b _:bnode .
690
743
  _:bnode :c "lit" .
691
744
  )
692
- @parser.parse(n3, "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug)
745
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
693
746
  end
694
747
 
695
748
  it "should decode path as object(2)" do
@@ -699,7 +752,7 @@ describe "RDF::N3::Reader" do
699
752
  _:bnode0 <http://a/ns#p2> _:bnode1 .
700
753
  :r :p _:bnode1 .
701
754
  )
702
- @parser.parse(n3, "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug)
755
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
703
756
  end
704
757
  end
705
758
  end
@@ -714,7 +767,7 @@ describe "RDF::N3::Reader" do
714
767
  it "should create 2 statements for simple list" do
715
768
  n3 = %(:a :b :c, :d)
716
769
  nt = %(<http://a/b#a> <http://a/b#b> <http://a/b#c> . <http://a/b#a> <http://a/b#b> <http://a/b#d> .)
717
- @parser.parse(n3, "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug)
770
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
718
771
  end
719
772
  end
720
773
 
@@ -732,7 +785,7 @@ describe "RDF::N3::Reader" do
732
785
  <http://foo/a#b> <http://foo/a#p2> <http://foo/a#v1> .
733
786
  <http://foo/a#b> <http://foo/a#p3> <http://foo/a#v2> .
734
787
  )
735
- @parser.parse(n3, "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug, :compare => :array)
788
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug, :compare => :array)
736
789
  end
737
790
  end
738
791
 
@@ -741,7 +794,7 @@ describe "RDF::N3::Reader" do
741
794
  n3 = %(@prefix :<http://example.com/>. :empty :set ().)
742
795
  nt = %(
743
796
  <http://example.com/empty> <http://example.com/set> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> .)
744
- @parser.parse(n3, "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug, :compare => :array)
797
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug, :compare => :array)
745
798
  end
746
799
 
747
800
  it "should parse list with single element" do
@@ -751,7 +804,7 @@ describe "RDF::N3::Reader" do
751
804
  _:bnode0 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> .
752
805
  <http://example.com/gregg> <http://example.com/wrote> _:bnode0 .
753
806
  )
754
- @parser.parse(n3, "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug)
807
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
755
808
  end
756
809
 
757
810
  it "should parse list with multiple elements" do
@@ -765,7 +818,7 @@ describe "RDF::N3::Reader" do
765
818
  _:bnode2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> .
766
819
  <http://example.com/gregg> <http://example.com/name> _:bnode0 .
767
820
  )
768
- @parser.parse(n3, "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug)
821
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
769
822
  end
770
823
 
771
824
  it "should parse unattached lists" do
@@ -784,13 +837,13 @@ describe "RDF::N3::Reader" do
784
837
  _:bnode2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> "3" .
785
838
  _:bnode2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> .
786
839
  )
787
- @parser.parse(n3, "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug)
840
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
788
841
  end
789
842
 
790
843
  it "should add property to nil list" do
791
844
  n3 = %(@prefix a: <http://foo/a#> . () a:prop "nilProp" .)
792
845
  nt = %(<http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> <http://foo/a#prop> "nilProp" .)
793
- @parser.parse(n3, "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug, :compare => :array)
846
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug, :compare => :array)
794
847
  end
795
848
  it "should parse with compound items" do
796
849
  n3 = %(
@@ -818,7 +871,7 @@ describe "RDF::N3::Reader" do
818
871
  <http://foo/a#a> <http://foo/a#p> _:bnode1 .
819
872
  <http://resource1> <http://foo/a#p> "value" .
820
873
  )
821
- @parser.parse(n3, "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @parser.debug)
874
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
822
875
  end
823
876
 
824
877
  end
@@ -837,28 +890,28 @@ describe "RDF::N3::Reader" do
837
890
  end
838
891
 
839
892
  describe "with AggregateGraph tests" do
840
- subject { Graph.new }
841
-
842
893
  describe "with a type" do
843
- before(:each) do
844
- subject.parse(%(
894
+ it "should have 3 namespaces" do
895
+ n3 = %(
845
896
  @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
846
897
  @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
847
898
  @prefix : <http://test/> .
848
899
  :foo a rdfs:Class.
849
900
  :bar :d :c.
850
901
  :a :d :c.
851
- ), "http://a/b")
852
- end
853
-
854
- it "should have 3 namespaces" do
855
- subject.nsbinding.keys.length.should == 3
902
+ )
903
+ nt = %(
904
+ <http://test/foo> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2000/01/rdf-schema#Class> .
905
+ <http://test/bar> <http://test/d> <http://test/c> .
906
+ <http://test/a> <http://test/d> <http://test/c> .
907
+ )
908
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
856
909
  end
857
910
  end
858
911
 
859
912
  describe "with blank clause" do
860
- before(:each) do
861
- subject.parse(%(
913
+ it "should have 4 namespaces" do
914
+ n3 = %(
862
915
  @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
863
916
  @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
864
917
  @prefix : <http://test/> .
@@ -866,32 +919,38 @@ describe "RDF::N3::Reader" do
866
919
  :foo a rdfs:Resource.
867
920
  :bar rdfs:isDefinedBy [ a log:Formula ].
868
921
  :a :d :e.
869
- ), "http://a/b")
870
- end
871
-
872
- it "should have 4 namespaces" do
873
- subject.nsbinding.keys.length.should == 4
922
+ )
923
+ nt = %(
924
+ <http://test/foo> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2000/01/rdf-schema#Resource> .
925
+ _:g2160128180 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2000/10/swap/log#Formula> .
926
+ <http://test/bar> <http://www.w3.org/2000/01/rdf-schema#isDefinedBy> _:g2160128180 .
927
+ <http://test/a> <http://test/d> <http://test/e> .
928
+ )
929
+ parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
874
930
  end
875
931
  end
876
932
 
877
933
  describe "with empty subject" do
878
934
  before(:each) do
879
- subject.parse(%(
935
+ @graph = parse(%(
880
936
  @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
881
937
  @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
882
938
  @prefix log: <http://www.w3.org/2000/10/swap/log#>.
883
939
  @prefix : <http://test/> .
884
940
  <> a log:N3Document.
885
- ), "http://test/")
941
+ ), :base_uri => "http://test/")
886
942
  end
887
943
 
888
944
  it "should have 4 namespaces" do
889
- subject.nsbinding.keys.length.should == 4
945
+ nt = %(
946
+ <http://test/> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2000/10/swap/log#N3Document> .
947
+ )
948
+ @graph.should be_equivalent_graph(nt, :about => "http://test/", :trace => @debug)
890
949
  end
891
950
 
892
951
  it "should have default subject" do
893
- subject.size.should == 1
894
- subject.triples.first.subject.should == "http://test/"
952
+ @graph.size.should == 1
953
+ @graph.statements.first.subject.to_s.should == "http://test/"
895
954
  end
896
955
  end
897
956
  end
@@ -908,21 +967,30 @@ describe "RDF::N3::Reader" do
908
967
  <http://www.w3.org/2000/10/rdf-tests/rdfcore/xmlbase/test001.nt> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2000/10/rdf-tests/rdfcore/testSchema#NT-Document> .
909
968
  <http://www.w3.org/2000/10/rdf-tests/rdfcore/xmlbase/test001.rdf> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2000/10/rdf-tests/rdfcore/testSchema#RDF-XML-Document> .
910
969
  EOF
911
- @parser.parse(sampledoc, "http://www.w3.org/2000/10/rdf-tests/rdfcore/amp-in-url/Manifest.rdf")
970
+ graph = parse(sampledoc, :base_uri => "http://www.w3.org/2000/10/rdf-tests/rdfcore/amp-in-url/Manifest.rdf")
912
971
 
913
- @parser.graph.should be_equivalent_graph(sampledoc,
972
+ graph.should be_equivalent_graph(sampledoc,
914
973
  :about => "http://www.w3.org/2000/10/rdf-tests/rdfcore/amp-in-url/Manifest.rdf",
915
- :trace => @parser.debug, :compare => :array
974
+ :trace => @debug, :compare => :array
916
975
  )
917
976
  end
977
+
978
+ def parse(input, options = {})
979
+ @debug = []
980
+ graph = RDF::Graph.new
981
+ RDF::N3::Reader.new(input, options.merge(:debug => @debug, :strict => true)).each do |statement|
982
+ graph << statement
983
+ end
984
+ graph
985
+ end
918
986
 
919
987
  def test_file(filepath)
920
988
  n3_string = File.read(filepath)
921
- @parser.parse(n3_string, "file:#{filepath}")
989
+ @graph = parse(File.open(filepath), :base_uri => "file:#{filepath}")
922
990
 
923
991
  nt_string = File.read(filepath.sub('.n3', '.nt'))
924
- @parser.graph.should be_equivalent_graph(nt_string,
992
+ @graph.should be_equivalent_graph(nt_string,
925
993
  :about => "file:#{filepath}",
926
- :trace => @parser.debug)
994
+ :trace => @debug)
927
995
  end
928
996
  end