Module: RDF2JSON

Defined in:
lib/rdf2json/rdf2json.rb

Overview

Module that contains a class for transforming RDF N-Triples/N-Quads into JSON/JSON-LD as well as a command line interface implementation for user interactions.

Defined Under Namespace

Classes: Converter

Class Method Summary collapse

Class Method Details

.cliObject

Command line interface; reads parameters, outputs help, or proceeds with the transformation of RDF N-Triples/N-Quads into JSON/JSON-LD.



15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/rdf2json/rdf2json.rb', line 15

def self.cli
  options_or_exit_code = option_parser

  exit options_or_exit_code unless options_or_exit_code.kind_of?(Hash)
  options = options_or_exit_code
  
  begin
    # Why instantiate a Converter instance here? Well, for implementing parallelization later:
    Converter.new(options[:input], options[:output], options[:input_format], options[:output_format], options[:namespace], options[:prefix], !options[:silent]).convert
  rescue Interrupt
    # The user hit Ctrl-C, which is okay and does not need error reporting.
    exit 0
  end
end

.option_parser(argv = nil) ⇒ Object

Command line option parser. Returns either the set options as a hash, or, returns an integer that indicates the shell error return code.

argv

optional command line arguments (may be nil; for unit testing)



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
# File 'lib/rdf2json/rdf2json.rb', line 34

def self.option_parser(argv = nil)
  options = { :silent => false }

  parser = OptionParser.new { |opts|
    opts.banner = 'Usage: rdf2json [options] --input filename.nt --output filename.json'

    opts.separator ''
    opts.separator 'Description: Reads RDF N-Triple/N-Quads that are sorted by subject and'
    opts.separator '             append a JSON/JSON-LD document per line in a designated'
    opts.separator '             output file.'
    opts.separator ''
    opts.separator 'Notes:'
    opts.separator '             Sorting on Mac OS X & Linux:'
    opts.separator '               sort -k 1,1 UNSORTED.EXT > SORTED.EXT'
    opts.separator ''
    opts.separator '             More information on the --minimize parameter:'
    opts.separator '               https://github.com/joejimbo/rdf2json'
    opts.separator ''
    opts.separator 'Required:'

    opts.on('-i', '--input FILE', 'Input file for the conversion; either RDF N-Triples or N-Quads.') { |file|
      options[:input] = file
    }
    opts.on('-o', '--output FILE', 'Output file to which JSON-LD/JSON is appended.') { |file|
      options[:output] = file
    }

    opts.separator ''
    opts.separator 'Options:'

    opts.on('-m', '--minimize', 'Minimize JSON-LD to plain (semantically untyped) JSON.') { |minimize|
      options[:minimize] = true
    }
    opts.on('-n', '--namespace [NAMESPACE]', 'Alternative name for JSON-LD\'s "@id" key; replaces it; turns on --minimize') { |namespace|
      options[:minimize] = true
      options[:namespace] = namespace
    }
    opts.on('-p', '--prefix [PREFIX]', 'Prefix that should be removed from keys; requires --minimize.') { |prefix|
      options[:prefix] = prefix
    }
    opts.on('-t', '--triples', 'Input file is in RDF N-Triples format.') { |triples|
      options[:ntriples] = true
    }
    opts.on('-q', '--quads', 'Input file is in RDF N-Quads format.') { |quads|
      options[:nquads] = true
    }

    opts.separator ''
    opts.separator 'Common options:'

    opts.on_tail('-s', '--silent', 'Do not output summary statistics.') { |silent|
      options[:silent] = true
    }
    opts.on_tail('-h', '--help', 'Show this message.') { |help|
      puts opts
      return 0
    }
  }

  begin
    if argv then
      parser.parse! argv
    else
      parser.parse!
    end
  rescue
    puts parser
    return 1
  end

  unless options.has_key?(:input) and options.has_key?(:output) then
    puts 'Error: Requires --input and --output parameters.'
    puts ''
    puts parser
    return 2
  end

  if options.has_key?(:ntriples) and options.has_key?(:nquads) then
    puts 'Error: both --triples and --quads parameters were used.'
    puts '       Only one of the parameters may be provided for explicitly'
    puts '       setting the input fileformat.'
    puts ''
    puts parser
    return 3
  end

  extension = File.extname(options[:input])
  if options.has_key?(:ntriples) then
    options[:input_format] = :ntriples
  elsif options.has_key?(:nquads) then
    options[:input_format] = :nquads
  elsif extension == '.nt' then
    options[:input_format] = :ntriples
  elsif extension == '.nq' then
    options[:input_format] = :nquads
  else
    puts 'Error: Cannot determine input file format by filename extension.'
    puts '       Recognized fileformat extensions are .nt and .nq for N-Triples'
    puts '       and N-Quads respectively. Use --triples or --quads options to'
    puts '       explicitly set the input fileformat (ignores filename extension'
    puts '       when one of those options is given.'
    puts ''
    puts parser
    return 4
  end

  options[:output_format] = :jsonld
  options[:output_format] = :json if options[:minimize]

  unless File.exist?(options[:input]) then
    puts 'Error: Input file (--input parameter) does not seem to exist.'
    puts ''
    puts parser
    return 6
  end

  return options
end