@@ -46,6 +46,8 @@ def run(input, **options)
4646 SPARQL ::Grammar . parse ( input , **options )
4747 end
4848
49+ query = query . optimize if options [ :optimize ]
50+
4951 puts ( "\n SSE:\n " + query . to_sse ) if options [ :debug ]
5052
5153 if options [ :parse_only ]
@@ -70,37 +72,41 @@ rescue LoadError
7072 $stderr. puts "Running SPARQL server requires Rack and Sinatra to be in environment: #{ $!. message } "
7173end
7274
75+ cmd , input = ARGV . shift , nil
76+
77+ OPT_ARGS = [
78+ [ "--dataset" , GetoptLong ::REQUIRED_ARGUMENT , "File containing RDF graph or dataset" ] ,
79+ [ "--debug" , GetoptLong ::NO_ARGUMENT , "Debugging output" ] ,
80+ [ "--execute" , "-e" , GetoptLong ::REQUIRED_ARGUMENT , "Run against source in argument" ] ,
81+ [ "--format" , GetoptLong ::REQUIRED_ARGUMENT , "Output format for results (json, xml, csv, tsv, html, sparql, sse, or another RDF format)" ] ,
82+ [ "--help" , "-?" , GetoptLong ::NO_ARGUMENT , "print this message" ] ,
83+ [ "--optimize" , GetoptLong ::NO_ARGUMENT , "Perform query optimizations" ] ,
84+ [ "--port" , "-p" , GetoptLong ::REQUIRED_ARGUMENT , "Port on which to run server; defaults to 9292" ] ,
85+ [ "--sse" , GetoptLong ::NO_ARGUMENT , "Query input is in SSE format" ] ,
86+ [ "--update" , GetoptLong ::NO_ARGUMENT , "Process query as a SPARQL Update" ] ,
87+ [ "--verbose" , GetoptLong ::NO_ARGUMENT , "Verbose output" ] ,
88+ ]
89+
7390def usage
7491 puts "Usage: #{ File . basename ( $0) } execute [options] query-file Execute a query against the specified dataset"
7592 puts " #{ File . basename ( $0) } parse [options] query-file Parse a query into SPARQL S-Expressions (SSE)"
7693 puts " #{ File . basename ( $0) } query [options] end-point query-file Run the query against a remote end-point"
7794 puts " #{ File . basename ( $0) } server [options] dataset-file Start a server initialized from the specified dataset"
7895 puts "Options:"
79- puts " --dataset: File containing RDF graph or dataset"
80- puts " --debug: Display detailed debug output"
81- puts " --execute,-e: Use option argument as the SPARQL input if no query-file given"
82- puts " --format: Output format for results (json, xml, csv, tsv, html, sparql, sse, or another RDF format)"
83- puts " --port,-p Port on which to run server; defaults to 9292"
84- puts " --sse: Query input is in SSE format"
85- puts " --update: Process query as a SPARQL Update"
86- puts " --verbose: Display details of processing"
87- puts " --help,-?: This message"
96+ width = OPT_ARGS . map do |o |
97+ l = o . first . length
98+ l += o [ 1 ] . length + 2 if o [ 1 ] . is_a? ( String )
99+ l
100+ end . max
101+ OPT_ARGS . each do |o |
102+ s = " %-*s " % [ width , ( o [ 1 ] . is_a? ( String ) ? "#{ o [ 0 , 2 ] . join ( ', ' ) } " : o [ 0 ] ) ]
103+ s += o . last
104+ puts s
105+ end
88106 exit ( 0 )
89107end
90108
91- cmd , input = ARGV . shift , nil
92-
93- opts = GetoptLong . new (
94- [ "--dataset" , GetoptLong ::REQUIRED_ARGUMENT ] ,
95- [ "--debug" , GetoptLong ::NO_ARGUMENT ] ,
96- [ "--execute" , "-e" , GetoptLong ::REQUIRED_ARGUMENT ] ,
97- [ "--format" , GetoptLong ::REQUIRED_ARGUMENT ] ,
98- [ "--port" , "-p" , GetoptLong ::REQUIRED_ARGUMENT ] ,
99- [ "--sse" , GetoptLong ::NO_ARGUMENT ] ,
100- [ "--update" , GetoptLong ::NO_ARGUMENT ] ,
101- [ "--verbose" , GetoptLong ::NO_ARGUMENT ] ,
102- [ "--help" , "-?" , GetoptLong ::NO_ARGUMENT ]
103- )
109+ opts = GetoptLong . new ( *OPT_ARGS . map { |o | o [ 0 ..-2 ] } )
104110
105111logger = Logger . new ( STDERR )
106112logger . level = Logger ::WARN
@@ -117,6 +123,7 @@ opts.each do |opt, arg|
117123 when '--debug' then options [ :debug ] = true ; logger . level = Logger ::DEBUG
118124 when '--execute' then input = arg
119125 when '--format' then options [ :format ] = arg . to_sym
126+ when '--optimize' then options [ :optimize ] = true
120127 when '--port' then options [ :port ] = arg . to_i
121128 when '--sse' then options [ :sse ] = true
122129 when '--update' then options [ :update ] = true
0 commit comments