@@ -5,9 +5,9 @@ require "bundler/setup"
55require 'rdf/rdfxml'
66require 'rdf/turtle'
77require 'rdf/ntriples'
8+ require 'rdf/ordered_repo'
89require 'getoptlong'
910require 'logger'
10- require 'open-uri'
1111
1212def run ( input , **options )
1313 reader_class = RDF ::Reader . for ( options [ :input_format ] . to_sym )
@@ -17,10 +17,12 @@ def run(input, **options)
1717 num = 0
1818
1919 if options [ :output_format ] == :ntriples || options [ :quiet ]
20- reader_class . new ( input , **options ) . each do |statement |
20+ reader_class . new ( input , **options [ :parser_options ] ) . each do |statement |
2121 num += 1
22- if options [ :quiet ]
23- #print "."
22+ if options [ :errors ] && statement . invalid?
23+ $stderr. puts "Invalid statement #{ statement . inspect } "
24+ elsif options [ :quiet ]
25+ print "." if options [ :quiet ] == 1
2426 else
2527 options [ :output ] . puts statement . to_ntriples
2628 end
@@ -31,63 +33,108 @@ def run(input, **options)
3133 options [ :output ] . puts statement . inspect
3234 end
3335 else
34- r = reader_class . new ( input , **options )
35- g = RDF ::Repository . new << r
36+ r = reader_class . new ( input , **options [ :parser_options ] )
37+ g = RDF ::OrderedRepo . new << r
3638 num = g . count
37- STDERR . puts "graph: #{ g . dump ( :ttl ) } " if options [ :verbose ]
38- options [ :output ] . puts g . dump ( options [ :output_format ] , options . merge ( prefixes : r . prefixes ) )
39+ options [ :output ] . puts g . dump ( options [ :output_format ] , prefixes : r . prefixes , **options [ :writer_options ] )
3940 end
40- STDERR . puts
41+ $stderr . puts
4142 secs = Time . new - start
42- STDERR . puts "Parsed #{ num } statements in #{ secs } seconds @ #{ num /secs } statements/second."
43- rescue
43+ $stderr . puts "Parsed #{ num } statements in #{ secs } seconds @ #{ num /secs } statements/second."
44+ rescue Exception => e
4445 fname = input . respond_to? ( :path ) ? input . path : "-stdin-"
45- STDERR . puts ( "Error in #{ fname } " )
46- raise
46+ $stderr. puts ( "Error in #{ fname } : #{ e . message } " )
47+ $stderr. puts "Backtrace: " + e . backtrace . join ( "\n " )
48+ raise e
4749end
4850
4951logger = Logger . new ( STDERR )
5052logger . level = Logger ::WARN
5153logger . formatter = lambda { |severity , datetime , progname , msg | "#{ severity } : #{ msg } \n " }
5254
55+ parser_options = {
56+ base_uri : nil ,
57+ validate : false ,
58+ logger : logger ,
59+ }
60+
61+ writer_options = {
62+ base_uri : nil ,
63+ standard_prefixes : true ,
64+ logger : logger ,
65+ }
66+
5367options = {
68+ parser_options : parser_options ,
69+ writer_options : writer_options ,
5470 input_format : :rdfxml ,
55- output : STDOUT ,
5671 output_format : :ntriples ,
72+ output : STDOUT ,
5773 strict : true ,
5874 validate : false ,
5975 verbose : false ,
60- logger : logger
6176}
77+
6278input = nil
6379
64- opts = GetoptLong . new (
65- [ "--dbg" , GetoptLong ::NO_ARGUMENT ] ,
66- [ "--execute" , "-e" , GetoptLong ::REQUIRED_ARGUMENT ] ,
67- [ "--format" , GetoptLong ::REQUIRED_ARGUMENT ] ,
68- [ "--input-format" , GetoptLong ::REQUIRED_ARGUMENT ] ,
69- [ "--output" , "-o" , GetoptLong ::REQUIRED_ARGUMENT ] ,
70- [ "--quiet" , GetoptLong ::NO_ARGUMENT ] ,
71- [ "--template" , GetoptLong ::REQUIRED_ARGUMENT ] ,
72- [ "--uri" , GetoptLong ::REQUIRED_ARGUMENT ] ,
73- [ "--validate" , GetoptLong ::NO_ARGUMENT ] ,
74- [ "--verbose" , GetoptLong ::NO_ARGUMENT ] ,
75- )
80+ OPT_ARGS = [
81+ [ "--canonicalize" , GetoptLong ::NO_ARGUMENT , "Canonize all terms" ] ,
82+ [ "--debug" , GetoptLong ::NO_ARGUMENT , "Debugging output" ] ,
83+ [ "--errors" , GetoptLong ::NO_ARGUMENT , "Display invalid statements" ] ,
84+ [ "--execute" , "-e" , GetoptLong ::REQUIRED_ARGUMENT , "Run against source in argument" ] ,
85+ [ "--format" , GetoptLong ::REQUIRED_ARGUMENT , "Output format, any RDF format symbol, sxp, or inspect" ] ,
86+ [ "--help" , "-?" , GetoptLong ::NO_ARGUMENT , "print this message" ] ,
87+ [ "--input-format" , GetoptLong ::REQUIRED_ARGUMENT , "Format of the input file, defaults to ttl" ] ,
88+ [ "--info" , GetoptLong ::NO_ARGUMENT , "Show progress on execution" ] ,
89+ [ "--output" , "-o" , GetoptLong ::REQUIRED_ARGUMENT , "Save output to file" ] ,
90+ [ "--quiet" , GetoptLong ::NO_ARGUMENT , "Do not show parser output" ] ,
91+ [ "--stream" , GetoptLong ::NO_ARGUMENT , "Use streaming writer" ] ,
92+ [ "--template" , GetoptLong ::REQUIRED_ARGUMENT , "Haml template for writer" ] ,
93+ [ "--uri" , GetoptLong ::REQUIRED_ARGUMENT , "Default base URI" ] ,
94+ [ "--validate" , GetoptLong ::NO_ARGUMENT , "Run parser in strict validation mode" ] ,
95+ [ "--verbose" , GetoptLong ::NO_ARGUMENT , "Verbose output" ] ,
96+ ]
97+
98+ def usage
99+ STDERR . puts %{
100+ RDF::RDFXML version #{ RDF ::RDFXML ::VERSION }
101+
102+ Usage: #{ $0} [options] file ...
103+ } . gsub ( /^ / , '' )
104+ width = OPT_ARGS . map do |o |
105+ l = o . first . length
106+ l += o [ 1 ] . length + 2 if o [ 1 ] . is_a? ( String )
107+ l
108+ end . max
109+ OPT_ARGS . each do |o |
110+ s = " %-*s " % [ width , ( o [ 1 ] . is_a? ( String ) ? "#{ o [ 0 , 2 ] . join ( ', ' ) } " : o [ 0 ] ) ]
111+ s += o . last
112+ STDERR . puts s
113+ end
114+ exit ( 1 )
115+ end
116+
117+ opts = GetoptLong . new ( *OPT_ARGS . map { |o | o [ 0 ..-2 ] } )
118+
76119opts . each do |opt , arg |
77120 case opt
78- when '--dbg' then logger . level = Logger ::DEBUG
79- when '--execute' then input = arg
80- when '--format' then options [ :output_format ] = arg . to_sym
81- when '--input-format' then options [ :input_format ] = arg . to_sym
82- when '--output' then options [ :output ] = File . open ( arg , "w" )
121+ when '--debug' then logger . level = Logger ::DEBUG
122+ when '--canonicalize' then parser_options [ :canonicalize ] = true
123+ when '--errors' then options [ :errors ] = true
124+ when '--execute' then input = arg
125+ when '--format' then options [ :output_format ] = arg . to_sym
126+ when "--help" then usage ( )
127+ when '--input-format' then options [ :input_format ] = arg . to_sym
128+ when '--output' then options [ :output ] = File . open ( arg , "w" )
129+ when '--rdfstar' then parser_options [ :rdfstar ] = true
83130 when '--quiet'
84- options [ :quiet ] = true
131+ options [ :quiet ] = options [ :quiet ] . to_i + 1
85132 logger . level = Logger ::FATAL
86- when '--template' then options [ :haml ] = arg . to_sym
87- when '--uri' then options [ :base_uri ] = arg
88- when '--validate' then options [ :validate ] = true
89- when '--verbose' then options [ :verbose ] = true
90- when '--version' then options [ :version ] = arg
133+ when '--template' then options [ :haml ] = arg . to_sym
134+ when '--uri' then parser_options [ :base_uri ] = writer_options [ :base_uri ] = arg
135+ when '--validate' then parser_options [ :validate ] = true
136+ when '--verbose' then options [ :verbose ] = true
137+ when '--version' then options [ :version ] = arg
91138 end
92139end
93140
99146 run ( Kernel . open ( test_file ) , **options )
100147 end
101148end
149+ puts
0 commit comments