rdf-n3 0.2.1 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +10 -0
- data/VERSION +1 -1
- data/lib/rdf/n3.rb +1 -1
- data/lib/rdf/n3/patches/literal_normalization.rb +19 -8
- data/lib/rdf/n3/patches/qname_hacks.rb +1 -1
- data/lib/rdf/n3/patches/seq.rb +2 -2
- data/lib/rdf/n3/patches/uri_hacks.rb +10 -0
- data/lib/rdf/n3/reader.rb +29 -30
- data/lib/rdf/n3/version.rb +1 -1
- data/lib/rdf/n3/writer.rb +4 -2
- data/rdf-n3.gemspec +5 -4
- data/script/console +3 -1
- data/script/parse +1 -1
- data/script/tc +53 -0
- data/spec/cwm_spec.rb +1 -0
- data/spec/format_spec.rb +1 -0
- data/spec/literal_spec.rb +187 -3
- data/spec/matchers.rb +39 -10
- data/spec/n3reader_spec.rb +74 -47
- data/spec/spec_helper.rb +23 -0
- data/spec/swap_spec.rb +7 -0
- data/spec/turtle_spec.rb +1 -0
- data/spec/writer_spec.rb +12 -2
- metadata +24 -4
data/spec/matchers.rb
CHANGED
@@ -1,17 +1,40 @@
|
|
1
|
+
require 'rdf/isomorphic'
|
2
|
+
|
1
3
|
module Matchers
|
2
4
|
class BeEquivalentGraph
|
3
5
|
Info = Struct.new(:about, :information, :trace, :compare, :inputDocument, :outputDocument)
|
4
6
|
def normalize(graph)
|
5
|
-
case
|
6
|
-
when
|
7
|
-
|
8
|
-
RDF::Graph
|
7
|
+
case @info.compare
|
8
|
+
when :array
|
9
|
+
array = case graph
|
10
|
+
when RDF::Graph
|
11
|
+
raise ":compare => :array used with Graph"
|
12
|
+
when Array
|
13
|
+
graph.sort
|
14
|
+
else
|
15
|
+
graph.to_s.split("\n").
|
16
|
+
map {|t| t.gsub(/^\s*(.*)\s*$/, '\1')}.
|
17
|
+
reject {|t2| t2.match(/^\s*$/)}.
|
18
|
+
compact.
|
19
|
+
sort.
|
20
|
+
uniq
|
21
|
+
end
|
22
|
+
|
23
|
+
# Implement to_ntriples on array, to simplify logic later
|
24
|
+
def array.to_ntriples; self.join("\n") + "\n"; end
|
25
|
+
array
|
9
26
|
else
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
27
|
+
case graph
|
28
|
+
when RDF::Graph then graph
|
29
|
+
when IO, StringIO
|
30
|
+
RDF::Graph.new.load(graph, :base_uri => @info.about)
|
31
|
+
else
|
32
|
+
# Figure out which parser to use
|
33
|
+
g = RDF::Graph.new
|
34
|
+
reader_class = RDF::Reader.for(detect_format(graph))
|
35
|
+
reader_class.new(graph, :base_uri => @info.about).each {|s| g << s}
|
36
|
+
g
|
37
|
+
end
|
15
38
|
end
|
16
39
|
end
|
17
40
|
|
@@ -31,7 +54,11 @@ module Matchers
|
|
31
54
|
|
32
55
|
def matches?(actual)
|
33
56
|
@actual = normalize(actual)
|
34
|
-
@
|
57
|
+
if @info.compare == :array
|
58
|
+
@actual == @expected
|
59
|
+
else
|
60
|
+
@actual.isomorphic_with?(@expected)
|
61
|
+
end
|
35
62
|
end
|
36
63
|
|
37
64
|
def failure_message_for_should
|
@@ -48,6 +75,8 @@ module Matchers
|
|
48
75
|
(@info.outputDocument ? "Output file: #{@info.outputDocument}\n" : "") +
|
49
76
|
"Unsorted Expected:\n#{@expected.to_ntriples}" +
|
50
77
|
"Unsorted Results:\n#{@actual.to_ntriples}" +
|
78
|
+
# "Unsorted Expected Dump:\n#{@expected.dump}\n" +
|
79
|
+
# "Unsorted Results Dump:\n#{@actual.dump}" +
|
51
80
|
(@info.trace ? "\nDebug:\n#{@info.trace}" : "")
|
52
81
|
end
|
53
82
|
def negative_failure_message
|
data/spec/n3reader_spec.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# coding: utf-8
|
2
|
+
$:.unshift "."
|
2
3
|
require File.join(File.dirname(__FILE__), 'spec_helper')
|
3
4
|
|
4
5
|
describe "RDF::N3::Reader" do
|
@@ -148,7 +149,6 @@ describe "RDF::N3::Reader" do
|
|
148
149
|
statement = parse(n3).statements.first
|
149
150
|
statement.object.value.should == "\u{15678}another"
|
150
151
|
else
|
151
|
-
lambda { parse(n3) }.should raise_error(RDF::ReaderError, "Long Unicode escapes no supported in Ruby 1.8")
|
152
152
|
pending("Not supported in Ruby 1.8")
|
153
153
|
end
|
154
154
|
end
|
@@ -267,17 +267,17 @@ describe "RDF::N3::Reader" do
|
|
267
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" .),
|
268
268
|
}.each_pair do |n3, nt|
|
269
269
|
it "for '#{n3}'" do
|
270
|
-
parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug
|
270
|
+
parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
|
271
271
|
end
|
272
272
|
end
|
273
273
|
|
274
274
|
{
|
275
275
|
%(<#Dürst> a "URI straight in UTF8".) => %(<http://a/b#D\\u00FCrst> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> "URI straight in UTF8" .),
|
276
|
-
|
276
|
+
#%(:a :related :ひらがな .) => %(<http://a/b#a> <http://a/b#related> <http://a/b#\\u3072\\u3089\\u304C\\u306A> .),
|
277
277
|
}.each_pair do |n3, nt|
|
278
278
|
it "for '#{n3}'" do
|
279
279
|
begin
|
280
|
-
parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug
|
280
|
+
parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
|
281
281
|
rescue
|
282
282
|
if defined?(::Encoding)
|
283
283
|
raise
|
@@ -289,7 +289,7 @@ describe "RDF::N3::Reader" do
|
|
289
289
|
end
|
290
290
|
end
|
291
291
|
|
292
|
-
it "should create
|
292
|
+
it "should create URIs" do
|
293
293
|
n3doc = "<http://example.org/joe> <http://xmlns.com/foaf/0.1/knows> <http://example.org/jane> ."
|
294
294
|
statement = parse(n3doc).statements.first
|
295
295
|
statement.subject.class.should == RDF::URI
|
@@ -338,9 +338,9 @@ describe "RDF::N3::Reader" do
|
|
338
338
|
it "should use <> as a prefix and as a triple node" do
|
339
339
|
n3 = %(@prefix : <> . <> a :a.)
|
340
340
|
nt = %(
|
341
|
-
<http://a/b> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://a/
|
341
|
+
<http://a/b> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://a/ba> .
|
342
342
|
)
|
343
|
-
parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug
|
343
|
+
parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
|
344
344
|
end
|
345
345
|
|
346
346
|
it "should use <#> as a prefix and as a triple node" do
|
@@ -348,31 +348,31 @@ describe "RDF::N3::Reader" do
|
|
348
348
|
nt = %(
|
349
349
|
<http://a/b#> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://a/b#a> .
|
350
350
|
)
|
351
|
-
parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug
|
351
|
+
parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
|
352
352
|
end
|
353
353
|
|
354
354
|
it "should generate rdf:type for 'a'" do
|
355
355
|
n3 = %(@prefix a: <http://foo/a#> . a:b a <http://www.w3.org/2000/01/rdf-schema#resource> .)
|
356
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> .)
|
357
|
-
parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug
|
357
|
+
parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
|
358
358
|
end
|
359
359
|
|
360
360
|
it "should generate rdf:type for '@a'" do
|
361
361
|
n3 = %(@prefix a: <http://foo/a#> . a:b @a <http://www.w3.org/2000/01/rdf-schema#resource> .)
|
362
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> .)
|
363
|
-
parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug
|
363
|
+
parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
|
364
364
|
end
|
365
365
|
|
366
366
|
it "should generate inverse predicate for 'is xxx of'" do
|
367
367
|
n3 = %("value" is :prop of :b . :b :prop "value" .)
|
368
368
|
nt = %(<http://a/b#b> <http://a/b#prop> "value" .)
|
369
|
-
parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug
|
369
|
+
parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
|
370
370
|
end
|
371
371
|
|
372
372
|
it "should generate inverse predicate for '@is xxx @of'" do
|
373
373
|
n3 = %("value" @is :prop @of :b . :b :prop "value" .)
|
374
374
|
nt = %(<http://a/b#b> <http://a/b#prop> "value" .)
|
375
|
-
parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug
|
375
|
+
parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
|
376
376
|
end
|
377
377
|
|
378
378
|
it "should generate inverse predicate for 'is xxx of' with object list" do
|
@@ -381,19 +381,19 @@ describe "RDF::N3::Reader" do
|
|
381
381
|
<http://a/b#b> <http://a/b#prop> "value" .
|
382
382
|
<http://a/b#c> <http://a/b#prop> "value" .
|
383
383
|
)
|
384
|
-
parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug
|
384
|
+
parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
|
385
385
|
end
|
386
386
|
|
387
387
|
it "should generate predicate for 'has xxx'" do
|
388
388
|
n3 = %(@prefix a: <http://foo/a#> . a:b has :pred a:c .)
|
389
389
|
nt = %(<http://foo/a#b> <http://a/b#pred> <http://foo/a#c> .)
|
390
|
-
parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug
|
390
|
+
parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
|
391
391
|
end
|
392
392
|
|
393
393
|
it "should generate predicate for '@has xxx'" do
|
394
394
|
n3 = %(@prefix a: <http://foo/a#> . a:b @has :pred a:c .)
|
395
395
|
nt = %(<http://foo/a#b> <http://a/b#pred> <http://foo/a#c> .)
|
396
|
-
|
396
|
+
parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
|
397
397
|
end
|
398
398
|
|
399
399
|
it "should create log:implies predicate for '=>'" do
|
@@ -433,13 +433,13 @@ describe "RDF::N3::Reader" do
|
|
433
433
|
it "should accept empty localname" do
|
434
434
|
n3 = %(: : : .)
|
435
435
|
nt = %(<http://a/b#> <http://a/b#> <http://a/b#> .)
|
436
|
-
parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug
|
436
|
+
parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
|
437
437
|
end
|
438
438
|
|
439
439
|
it "should accept prefix with empty local name" do
|
440
440
|
n3 = %(@prefix foo: <http://foo/bar#> . foo: foo: foo: .)
|
441
441
|
nt = %(<http://foo/bar#> <http://foo/bar#> <http://foo/bar#> .)
|
442
|
-
parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug
|
442
|
+
parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
|
443
443
|
end
|
444
444
|
|
445
445
|
it "should do something for @forAll"
|
@@ -448,13 +448,37 @@ describe "RDF::N3::Reader" do
|
|
448
448
|
end
|
449
449
|
|
450
450
|
describe "namespaces" do
|
451
|
+
it "should not append # for http://foo/bar" do
|
452
|
+
n3 = %(@prefix : <http://foo/bar> . :a : :b .)
|
453
|
+
nt = %(
|
454
|
+
<http://foo/bara> <http://foo/bar> <http://foo/barb> .
|
455
|
+
)
|
456
|
+
parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
|
457
|
+
end
|
458
|
+
|
459
|
+
it "should not append # for http://foo/bar/" do
|
460
|
+
n3 = %(@prefix : <http://foo/bar/> . :a : :b .)
|
461
|
+
nt = %(
|
462
|
+
<http://foo/bar/a> <http://foo/bar/> <http://foo/bar/b> .
|
463
|
+
)
|
464
|
+
parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
|
465
|
+
end
|
466
|
+
|
467
|
+
it "should not append # for http://foo/bar#" do
|
468
|
+
n3 = %(@prefix : <http://foo/bar#> . :a : :b .)
|
469
|
+
nt = %(
|
470
|
+
<http://foo/bar#a> <http://foo/bar#> <http://foo/bar#b> .
|
471
|
+
)
|
472
|
+
parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
|
473
|
+
end
|
474
|
+
|
451
475
|
it "should set absolute base" do
|
452
476
|
n3 = %(@base <http://foo/bar> . <> :a <b> . <#c> :d </e>.)
|
453
477
|
nt = %(
|
454
|
-
<http://foo/bar> <http://foo/
|
455
|
-
<http://foo/bar#c> <http://foo/
|
478
|
+
<http://foo/bar> <http://foo/bar#a> <http://foo/b> .
|
479
|
+
<http://foo/bar#c> <http://foo/bar#d> <http://foo/e> .
|
456
480
|
)
|
457
|
-
parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug
|
481
|
+
parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
|
458
482
|
end
|
459
483
|
|
460
484
|
it "should set absolute base (trailing /)" do
|
@@ -463,16 +487,16 @@ describe "RDF::N3::Reader" do
|
|
463
487
|
<http://foo/bar/> <http://foo/bar/a> <http://foo/bar/b> .
|
464
488
|
<http://foo/bar/#c> <http://foo/bar/d> <http://foo/e> .
|
465
489
|
)
|
466
|
-
parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug
|
490
|
+
parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
|
467
491
|
end
|
468
492
|
|
469
493
|
it "should set absolute base (trailing #)" do
|
470
494
|
n3 = %(@base <http://foo/bar#> . <> :a <b> . <#c> :d </e>.)
|
471
495
|
nt = %(
|
472
|
-
<http://foo/bar
|
496
|
+
<http://foo/bar#> <http://foo/bar#a> <http://foo/b> .
|
473
497
|
<http://foo/bar#c> <http://foo/bar#d> <http://foo/e> .
|
474
498
|
)
|
475
|
-
parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug
|
499
|
+
parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
|
476
500
|
end
|
477
501
|
|
478
502
|
it "should set relative base" do
|
@@ -492,7 +516,7 @@ describe "RDF::N3::Reader" do
|
|
492
516
|
<http://example.org/products/> <http://example.org/products/a> <http://example.org/products/d> .
|
493
517
|
<http://example.org/products/> <http://example.org/products/a> <http://example.org/products/#e> .
|
494
518
|
)
|
495
|
-
parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug
|
519
|
+
parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
|
496
520
|
end
|
497
521
|
end
|
498
522
|
|
@@ -522,7 +546,7 @@ describe "RDF::N3::Reader" do
|
|
522
546
|
%(:c :a t) => %(<http://a/b#c> <http://a/b#a> <http://a/b#t> .),
|
523
547
|
}.each_pair do |n3, nt|
|
524
548
|
it "should use default_ns for '#{n3}'" do
|
525
|
-
parse("@keywords . #{n3}", :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug
|
549
|
+
parse("@keywords . #{n3}", :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
|
526
550
|
end
|
527
551
|
end
|
528
552
|
|
@@ -535,7 +559,7 @@ describe "RDF::N3::Reader" do
|
|
535
559
|
%(@keywords has. :a has :b :c.) => %(<http://a/b#a> <http://a/b#b> <http://a/b#c> .),
|
536
560
|
} .each_pair do |n3, nt|
|
537
561
|
it "should use keyword for '#{n3}'" do
|
538
|
-
parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug
|
562
|
+
parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
|
539
563
|
end
|
540
564
|
end
|
541
565
|
|
@@ -573,7 +597,7 @@ describe "RDF::N3::Reader" do
|
|
573
597
|
<http://host/A#b> <http://host/A#p> <http://host/A#v> .
|
574
598
|
<http://host/Z#b> <http://host/Z#p> <http://host/Z#v> .
|
575
599
|
)
|
576
|
-
parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug
|
600
|
+
parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
|
577
601
|
end
|
578
602
|
|
579
603
|
it "should process sequential @base declarations (swap base.n3)" do
|
@@ -583,11 +607,11 @@ describe "RDF::N3::Reader" do
|
|
583
607
|
@prefix : <#>. <d3> :b3 <e3>.
|
584
608
|
)
|
585
609
|
nt = %(
|
586
|
-
<http://example.com/a> <http://example.com/
|
610
|
+
<http://example.com/a> <http://example.com/ontolgies#b> <http://example.com/foo/bar#baz> .
|
587
611
|
<http://example.com/path/DFFERENT/a2> <http://example.com/path/DFFERENT/b2> <http://example.com/path/DFFERENT/foo/bar#baz2> .
|
588
612
|
<http://example.com/path/DFFERENT/d3> <http://example.com/path/DFFERENT/#b3> <http://example.com/path/DFFERENT/e3> .
|
589
613
|
)
|
590
|
-
parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug
|
614
|
+
parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
|
591
615
|
end
|
592
616
|
end
|
593
617
|
|
@@ -600,13 +624,15 @@ describe "RDF::N3::Reader" do
|
|
600
624
|
it "should create BNode for [] as subject" do
|
601
625
|
n3 = %(@prefix a: <http://foo/a#> . [] a:p a:v .)
|
602
626
|
nt = %(_:bnode0 <http://foo/a#p> <http://foo/a#v> .)
|
603
|
-
parse(n3, :base_uri => "http://a/b")
|
627
|
+
g = parse(n3, :base_uri => "http://a/b")
|
628
|
+
normalize_bnodes(g, "bnode0").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug, :compare => :array)
|
604
629
|
end
|
605
630
|
|
606
631
|
it "should create BNode for [] as predicate" do
|
607
632
|
n3 = %(@prefix a: <http://foo/a#> . a:s [] a:o .)
|
608
633
|
nt = %(<http://foo/a#s> _:bnode0 <http://foo/a#o> .)
|
609
|
-
parse(n3, :base_uri => "http://a/b")
|
634
|
+
g = parse(n3, :base_uri => "http://a/b")
|
635
|
+
normalize_bnodes(g, "bnode0").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug, :compare => :array, :anon => "bnode")
|
610
636
|
end
|
611
637
|
|
612
638
|
it "should create BNode for [] as object" do
|
@@ -785,7 +811,7 @@ describe "RDF::N3::Reader" do
|
|
785
811
|
<http://foo/a#b> <http://foo/a#p2> <http://foo/a#v1> .
|
786
812
|
<http://foo/a#b> <http://foo/a#p3> <http://foo/a#v2> .
|
787
813
|
)
|
788
|
-
parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug
|
814
|
+
parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
|
789
815
|
end
|
790
816
|
end
|
791
817
|
|
@@ -794,7 +820,7 @@ describe "RDF::N3::Reader" do
|
|
794
820
|
n3 = %(@prefix :<http://example.com/>. :empty :set ().)
|
795
821
|
nt = %(
|
796
822
|
<http://example.com/empty> <http://example.com/set> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> .)
|
797
|
-
parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug
|
823
|
+
parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
|
798
824
|
end
|
799
825
|
|
800
826
|
it "should parse list with single element" do
|
@@ -843,7 +869,7 @@ describe "RDF::N3::Reader" do
|
|
843
869
|
it "should add property to nil list" do
|
844
870
|
n3 = %(@prefix a: <http://foo/a#> . () a:prop "nilProp" .)
|
845
871
|
nt = %(<http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> <http://foo/a#prop> "nilProp" .)
|
846
|
-
parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug
|
872
|
+
parse(n3, :base_uri => "http://a/b").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug)
|
847
873
|
end
|
848
874
|
it "should parse with compound items" do
|
849
875
|
n3 = %(
|
@@ -857,21 +883,22 @@ describe "RDF::N3::Reader" do
|
|
857
883
|
<http://resource1> a:p "value" .
|
858
884
|
)
|
859
885
|
nt = %(
|
860
|
-
|
861
|
-
_:bnode1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> _:bnode0 .
|
862
|
-
_:bnode1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:bnode2 .
|
863
|
-
_:bnode2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://resource1> .
|
864
|
-
_:bnode2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:bnode3 .
|
865
|
-
_:bnode3 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://resource2> .
|
866
|
-
_:bnode4 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> "inner list" .
|
867
|
-
_:bnode4 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> .
|
868
|
-
_:bnode3 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:bnode5 .
|
886
|
+
<http://foo/a#a> <http://foo/a#p> _:bnode5 .
|
869
887
|
_:bnode5 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> _:bnode4 .
|
870
|
-
_:bnode5 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest>
|
871
|
-
|
888
|
+
_:bnode5 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:bnode2 .
|
889
|
+
_:bnode4 <http://foo/a#p2> "v1" .
|
890
|
+
_:bnode2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://resource1> .
|
872
891
|
<http://resource1> <http://foo/a#p> "value" .
|
892
|
+
_:bnode2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:bnode1 .
|
893
|
+
_:bnode1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://resource2> .
|
894
|
+
_:bnode1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> _:bnode0 .
|
895
|
+
_:bnode0 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> _:bnode3 .
|
896
|
+
_:bnode0 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> .
|
897
|
+
_:bnode3 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> "inner list" .
|
898
|
+
_:bnode3 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> .
|
873
899
|
)
|
874
|
-
parse(n3, :base_uri => "http://a/b")
|
900
|
+
g = parse(n3, :base_uri => "http://a/b")
|
901
|
+
normalize_bnodes(g, "bnode0").should be_equivalent_graph(nt, :about => "http://a/b", :trace => @debug, :compare => :array)
|
875
902
|
end
|
876
903
|
|
877
904
|
end
|
@@ -971,7 +998,7 @@ EOF
|
|
971
998
|
|
972
999
|
graph.should be_equivalent_graph(sampledoc,
|
973
1000
|
:about => "http://www.w3.org/2000/10/rdf-tests/rdfcore/amp-in-url/Manifest.rdf",
|
974
|
-
:trace => @debug
|
1001
|
+
:trace => @debug
|
975
1002
|
)
|
976
1003
|
end
|
977
1004
|
|
data/spec/spec_helper.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
$:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
$:.unshift(File.join(File.dirname(__FILE__), '..', '..', 'rdf-rdfxml', 'lib'))
|
2
3
|
$:.unshift File.dirname(__FILE__)
|
3
4
|
|
4
5
|
require 'rubygems'
|
@@ -24,6 +25,13 @@ module RDF
|
|
24
25
|
end
|
25
26
|
end
|
26
27
|
end
|
28
|
+
def dump
|
29
|
+
b = []
|
30
|
+
self.each_statement do |statement|
|
31
|
+
b << statement.to_triple.inspect
|
32
|
+
end
|
33
|
+
b.join("\n")
|
34
|
+
end
|
27
35
|
end
|
28
36
|
end
|
29
37
|
|
@@ -31,6 +39,21 @@ Spec::Runner.configure do |config|
|
|
31
39
|
config.include(RDF::Spec::Matchers)
|
32
40
|
end
|
33
41
|
|
42
|
+
|
43
|
+
# Serialize graph and replace bnodes with predictable versions, return as sorted array
|
44
|
+
def normalize_bnodes(graph, anon = "a")
|
45
|
+
anon_ctx = {}
|
46
|
+
# Find and replace all BNodes within graph string
|
47
|
+
g_str = graph.to_ntriples
|
48
|
+
anon_entries = g_str.scan(/_:g\d+/).sort.uniq
|
49
|
+
anon_entries.each do |a|
|
50
|
+
anon_ctx[a] = "_:#{anon}"
|
51
|
+
anon = anon.succ
|
52
|
+
end
|
53
|
+
|
54
|
+
g_str.gsub(/_:g\d+/) { |bn| anon_ctx[bn] }.split("\n").sort
|
55
|
+
end
|
56
|
+
|
34
57
|
# Heuristically detect the input stream
|
35
58
|
def detect_format(stream)
|
36
59
|
# Got to look into the file to see
|
data/spec/swap_spec.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
$:.unshift "."
|
1
2
|
require File.join(File.dirname(__FILE__), 'spec_helper')
|
2
3
|
|
3
4
|
describe RDF::N3::Reader do
|
@@ -42,6 +43,10 @@ describe RDF::N3::Reader do
|
|
42
43
|
pending("check visually, graph compare times too long")
|
43
44
|
elsif %w(n3_10010).include?(t.name)
|
44
45
|
pending("Not supported in Ruby 1.8")
|
46
|
+
elsif %w(n3_10008 n3_10013).include?(t.name)
|
47
|
+
pending("Isomorphic compare issue")
|
48
|
+
elsif %w(n3_10016).include?(t.name)
|
49
|
+
pending("RDF.rb allows literal as predicate")
|
45
50
|
else
|
46
51
|
raise
|
47
52
|
end
|
@@ -79,6 +84,8 @@ describe RDF::N3::Reader do
|
|
79
84
|
pending("formulae not yet implemented")
|
80
85
|
elsif %w(n3_20000).include?(t.name)
|
81
86
|
pending("figure out how to tell that these are errors")
|
87
|
+
elsif %w(n3_20004).include?(t.name)
|
88
|
+
pending("RDF.rb allows literal as predicate")
|
82
89
|
else
|
83
90
|
raise
|
84
91
|
end
|