11
11
require 'getoptlong'
12
12
require 'json'
13
13
require 'json/ld/preloaded'
14
+ require 'rdf/isomorphic'
15
+ require 'rdf/vocab'
14
16
require 'nokogiri'
15
17
require 'linkeddata'
16
18
require 'fileutils'
@@ -304,6 +306,17 @@ def save_example(examples:, element:, title:, example_number:, error:, warn:)
304
306
args = [ ]
305
307
content = ex [ :content ]
306
308
309
+ options = ex [ :options ] . to_s . split ( ',' ) . inject ( { } ) do |memo , pair |
310
+ k , v = pair . split ( '=' )
311
+ v = case v
312
+ when 'true' then true
313
+ when 'false' then false
314
+ else v
315
+ end
316
+ memo . merge ( k . to_sym => v )
317
+ end
318
+ options [ :validate ] = true unless options . key? ( :validate )
319
+
307
320
$stderr. puts "example #{ ex [ :number ] } : #{ ex . select { |k , v | k != :content } . to_json ( JSON ::LD ::JSON_STATE ) } " if verbose
308
321
$stderr. puts "content: #{ ex [ :content ] } " if verbose
309
322
@@ -332,6 +345,7 @@ def save_example(examples:, element:, title:, example_number:, error:, warn:)
332
345
rescue JSON ::ParserError => exception
333
346
errors << "Example #{ ex [ :number ] } at line #{ ex [ :line ] } parse error: #{ exception . message } "
334
347
$stdout. write "F" . colorize ( :red )
348
+ $stderr. puts exception . backtrace . join ( "\n " ) if verbose
335
349
next
336
350
end
337
351
when 'html'
@@ -355,30 +369,33 @@ def save_example(examples:, element:, title:, example_number:, error:, warn:)
355
369
rescue Nokogiri ::XML ::SyntaxError => exception
356
370
errors << "Example #{ ex [ :number ] } at line #{ ex [ :line ] } parse error: #{ exception . message } "
357
371
$stdout. write "F" . colorize ( :red )
372
+ $stderr. puts exception . backtrace . join ( "\n " ) if verbose
358
373
next
359
374
end
360
375
when 'table'
361
376
content = Nokogiri ::HTML . parse ( content )
362
377
when 'ttl' , 'trig'
363
378
begin
364
379
reader_errors = [ ]
365
- RDF ::Repository . new << RDF ::TriG ::Reader . new ( content , validate : true , logger : reader_errors )
380
+ RDF ::Repository . new << RDF ::TriG ::Reader . new ( content , logger : reader_errors , ** options )
366
381
rescue
367
382
reader_errors . each do |er |
368
383
errors << "Example #{ ex [ :number ] } at line #{ ex [ :line ] } parse error: #{ er } "
369
384
end
370
385
$stdout. write "F" . colorize ( :red )
386
+ $stderr. puts $!. backtrace . join ( "\n " ) if verbose
371
387
next
372
388
end
373
389
when 'nq'
374
390
begin
375
391
reader_errors = [ ]
376
- RDF ::Repository . new << RDF ::NQuads ::Reader . new ( content , validate : true , logger : reader_errors )
392
+ RDF ::Repository . new << RDF ::NQuads ::Reader . new ( content , logger : reader_errors , ** options )
377
393
rescue
378
394
reader_errors . each do |er |
379
395
errors << "Example #{ ex [ :number ] } at line #{ ex [ :line ] } parse error: #{ er } "
380
396
end
381
397
$stdout. write "F" . colorize ( :red )
398
+ $stderr. puts $!. backtrace . join ( "\n " ) if verbose
382
399
next
383
400
end
384
401
end
@@ -389,17 +406,6 @@ def save_example(examples:, element:, title:, example_number:, error:, warn:)
389
406
content . define_singleton_method ( :content_type ) { ex [ :content_type ] } if ex [ :content_type ]
390
407
end
391
408
392
- options = ex [ :options ] . to_s . split ( ',' ) . inject ( { } ) do |memo , pair |
393
- k , v = pair . split ( '=' )
394
- v = case v
395
- when 'true' then true
396
- when 'false' then false
397
- else v
398
- end
399
- memo . merge ( k . to_sym => v )
400
- end
401
- options [ :validate ] = true
402
-
403
409
# Set API to use
404
410
method = case
405
411
when ex [ :compact ] then :compact
@@ -549,22 +555,26 @@ def save_example(examples:, element:, title:, example_number:, error:, warn:)
549
555
result = case method
550
556
when nil then nil
551
557
when :fromRdf
552
- args [ 0 ] = RDF ::Reader . for ( file_extension : ext ) . new ( args [ 0 ] )
553
- JSON ::LD ::API . fromRdf ( *args )
558
+ args [ 0 ] = RDF ::Reader . for ( file_extension : ext ) . new ( args [ 0 ] , **options )
559
+ opts = args . last . is_a? ( Hash ) ? args . pop : { }
560
+ JSON ::LD ::API . fromRdf ( *args , **opts )
554
561
when :toRdf
555
- RDF ::Dataset . new statements : JSON ::LD ::API . toRdf ( *args )
562
+ opts = args . last . is_a? ( Hash ) ? args . pop : { }
563
+ RDF ::Repository . new << JSON ::LD ::API . toRdf ( *args , **opts )
556
564
else
557
- JSON ::LD ::API . method ( method ) . call ( *args )
565
+ opts = args . last . is_a? ( Hash ) ? args . pop : { }
566
+ JSON ::LD ::API . method ( method ) . call ( *args , **opts )
558
567
end
559
568
rescue
560
569
errors << "Example #{ ex [ :number ] } at line #{ ex [ :line ] } parse error generating result: #{ $!} "
561
570
$stdout. write "F" . colorize ( :red )
571
+ $stderr. puts $!. backtrace . join ( "\n " ) if verbose
562
572
next
563
573
end
564
574
565
575
if verbose
566
- if result . is_a? ( RDF ::Dataset )
567
- $stderr. puts "result:\n " + result . to_trig
576
+ if result . is_a? ( RDF ::Enumerable )
577
+ $stderr. puts "result:\n " + result . to_nquads
568
578
else
569
579
$stderr. puts "result:\n " + result . to_json ( JSON ::LD ::JSON_STATE )
570
580
end
@@ -575,24 +585,26 @@ def save_example(examples:, element:, title:, example_number:, error:, warn:)
575
585
# Compare to expected to result
576
586
case ex [ :ext ]
577
587
when 'ttl' , 'trig' , 'nq' , 'html'
578
- reader = RDF ::Reader . for ( file_extension : ex [ :ext ] ) . new ( content )
579
- expected = RDF ::Dataset . new ( statements : reader )
580
- $stderr. puts "expected:\n " + expected . to_trig if verbose
588
+ reader = RDF ::Reader . for ( file_extension : ex [ :ext ] ) . new ( content , ** options )
589
+ expected = RDF ::Repository . new << reader
590
+ $stderr. puts "expected:\n " + expected . to_nquads if verbose
581
591
when 'table'
582
592
expected = begin
583
593
table_to_dataset ( content . xpath ( '/html/body/table' ) )
584
594
rescue
585
595
errors << "Example #{ ex [ :number ] } at line #{ ex [ :line ] } raised error reading table: #{ $!} "
586
- RDF ::Dataset . new
596
+ $stderr. puts $!. backtrace . join ( "\n " ) if verbose
597
+ RDF ::Repository . new
587
598
end
588
599
589
600
if verbose
590
- $stderr. puts "expected:\n " + expected . to_trig
601
+ $stderr. puts "expected:\n " + expected . to_nquads
591
602
$stderr. puts "result table:\n " + begin
592
603
dataset_to_table ( result )
593
604
rescue
594
605
errors << "Example #{ ex [ :number ] } at line #{ ex [ :line ] } raised error turning into table: #{ $!} "
595
606
""
607
+ $stderr. puts $!. backtrace . join ( "\n " ) if verbose
596
608
end
597
609
end
598
610
else
@@ -601,14 +613,8 @@ def save_example(examples:, element:, title:, example_number:, error:, warn:)
601
613
end
602
614
603
615
# Perform appropriate comparsion
604
- if expected . is_a? ( RDF ::Dataset )
605
- expected_norm = RDF ::Normalize . new ( expected ) . map ( &:to_nquads )
606
- result_norm = RDF ::Normalize . new ( result ) . map ( &:to_nquads )
607
- if expected_norm . sort != result_norm . sort
608
- if verbose
609
- $stderr. puts "expected_norm:\n " + expected_norm . sort . join ( "" )
610
- $stderr. puts "result_norm:\n " + result_norm . sort . join ( "" )
611
- end
616
+ if expected . is_a? ( RDF ::Enumerable )
617
+ if !expected . isomorphic_with? ( result )
612
618
errors << "Example #{ ex [ :number ] } at line #{ ex [ :line ] } not isomorphic with #{ examples [ ex [ :result_for ] ] [ :number ] } "
613
619
$stdout. write "F" . colorize ( :red )
614
620
next
@@ -637,6 +643,7 @@ def save_example(examples:, element:, title:, example_number:, error:, warn:)
637
643
rescue
638
644
errors << "Example #{ ex [ :number ] } at line #{ ex [ :line ] } parse error comparing result: #{ $!} "
639
645
$stdout. write "F" . colorize ( :red )
646
+ $stderr. puts $!. backtrace . join ( "\n " ) if verbose
640
647
next
641
648
end
642
649
0 commit comments