Class: CSVRDF::Translator

Inherits:
Object
  • Object
show all
Defined in:
lib/csvrdf.rb

Instance Method Summary collapse

Constructor Details

#initialize(iterator, schema) ⇒ Translator

Returns a new instance of Translator.



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/csvrdf.rb', line 8

def initialize(iterator, schema)
  @iterator = iterator
  @schema   = schema
  @prefix   = RDF::URI.new(@schema['prefix'])
  @type     = RDF::URI.new(@schema['type'])
  @schemata = []
  @schema['schemata'].each do |column|
    if column.nil?
      @schemata << nil
    else
      predicate = RDF::URI.new(column[0])

      if column.size == 1
        column_parser = Proc.new do |subject, object|
          [subject, predicate, RDF::Literal.new(object)]
        end
      end

      if column.size > 1
        case column[1]
        when 'integer'
          column_parser = Proc.new do |subject, object|
            [subject, predicate, RDF::Literal.new(Integer(object))]
          end
        when 'date'
          column_parser = Proc.new do |subject, object|
            [
             subject,
             predicate,
             RDF::Literal.new(Date.strptime(object, column[2] || '%Y-%m-%d'))
            ]
          end
        end
      end
      
      @schemata << column_parser
    end
  end
end

Instance Method Details

#run(rows, format) ⇒ Object



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/csvrdf.rb', line 48

def run(rows, format)
  graph = RDF::Graph.new

  rows.each do |row|
    @iterator = @iterator.next

    resource = @prefix.join(@iterator.to_s)
    
    graph << [resource, RDF.type, @type]

    row.each_index do |i|
      unless @schemata[i].nil? or row[i].nil?
        graph << @schemata[i].call(resource, row[i].strip)
      end
    end
  end

  graph.dump(format)
end