csvrdf 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. checksums.yaml +7 -0
  2. data/bin/csvrdf +15 -0
  3. data/lib/csvrdf.rb +69 -0
  4. metadata +46 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 576c7d46ab56d1923d4845164ac2aae4500c92f5
4
+ data.tar.gz: 894f4603e919bc2d2781a8041129271480cc64e2
5
+ SHA512:
6
+ metadata.gz: 1cfedbc8923bff07d2e3401ea3a3fa7dd40e1cea0dccfa397ec0b3164678e3cd37909e0d50f95775765056a0a160b0fe1c843e8b8770449bc70c24ce8a54a8f8
7
+ data.tar.gz: 028f9eb5a89c0b8e7e072b31cafad6df6b10b1ab699a2ec8f36d21481876f0435108a8d2c30a88333e9c8f45cc923330e1fada4668fdd9cef7487669889ee596
data/bin/csvrdf ADDED
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'json'
4
+ require 'csv'
5
+ require 'csvrdf'
6
+
7
+ if ARGV.size != 2
8
+ puts 'Usage:'
9
+ puts 'ruby parser.rb schema.json file.csv > file.nt'
10
+ exit 1
11
+ end
12
+
13
+ translator = CSVRDF::Translator.new(0, JSON.parse(File.open(ARGV[0]).read))
14
+
15
+ puts translator.run(CSV.new(File.open(ARGV[1])), :ntriples)
data/lib/csvrdf.rb ADDED
@@ -0,0 +1,69 @@
1
+ require 'rdf'
2
+ require 'rdf/ntriples'
3
+
4
+ module CSVRDF
5
+ include RDF
6
+
7
+ class Translator
8
+ def initialize(iterator, schema)
9
+ @iterator = iterator
10
+ @schema = schema
11
+ @prefix = RDF::URI.new(@schema['prefix'])
12
+ @type = RDF::URI.new(@schema['type'])
13
+ @schemata = []
14
+ @schema['schemata'].each do |column|
15
+ if column.nil?
16
+ @schemata << nil
17
+ else
18
+ predicate = RDF::URI.new(column[0])
19
+
20
+ if column.size == 1
21
+ column_parser = Proc.new do |subject, object|
22
+ [subject, predicate, RDF::Literal.new(object)]
23
+ end
24
+ end
25
+
26
+ if column.size > 1
27
+ case column[1]
28
+ when 'integer'
29
+ column_parser = Proc.new do |subject, object|
30
+ [subject, predicate, RDF::Literal.new(Integer(object))]
31
+ end
32
+ when 'date'
33
+ column_parser = Proc.new do |subject, object|
34
+ [
35
+ subject,
36
+ predicate,
37
+ RDF::Literal.new(Date.strptime(object, column[2] || '%Y-%m-%d'))
38
+ ]
39
+ end
40
+ end
41
+ end
42
+
43
+ @schemata << column_parser
44
+ end
45
+ end
46
+ end
47
+
48
+ def run(rows, format)
49
+ graph = RDF::Graph.new
50
+
51
+ rows.each do |row|
52
+ @iterator = @iterator.next
53
+
54
+ resource = @prefix.join(@iterator.to_s)
55
+
56
+ graph << [resource, RDF.type, @type]
57
+
58
+ row.each_index do |i|
59
+ unless @schemata[i].nil? or row[i].nil?
60
+ graph << @schemata[i].call(resource, row[i].strip)
61
+ end
62
+ end
63
+ end
64
+
65
+ graph.dump(format)
66
+ end
67
+ end
68
+
69
+ end
metadata ADDED
@@ -0,0 +1,46 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: csvrdf
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Daniel Hernandez
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-01-10 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: A simple translator of CSV files into RDF
14
+ email: daniel@degu.cl
15
+ executables:
16
+ - csvrdf
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - bin/csvrdf
21
+ - lib/csvrdf.rb
22
+ homepage: https://gitlab.com/danielhz/csv2rdf-ruby
23
+ licenses:
24
+ - CC0-1.0
25
+ metadata: {}
26
+ post_install_message:
27
+ rdoc_options: []
28
+ require_paths:
29
+ - lib
30
+ required_ruby_version: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ required_rubygems_version: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ requirements: []
41
+ rubyforge_project:
42
+ rubygems_version: 2.5.1
43
+ signing_key:
44
+ specification_version: 4
45
+ summary: CSV to RDF
46
+ test_files: []