dwc-archive 0.9.6 → 0.9.10
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.
- checksums.yaml +7 -0
- data/.gitignore +30 -0
- data/.rspec +2 -0
- data/.ruby-version +1 -0
- data/.travis.yml +6 -4
- data/CHANGELOG +2 -0
- data/Gemfile +1 -15
- data/README.md +17 -5
- data/Rakefile +6 -24
- data/] +40 -0
- data/dwc-archive.gemspec +33 -0
- data/lib/dwc-archive.rb +33 -21
- data/lib/dwc-archive/archive.rb +5 -2
- data/lib/dwc-archive/classification_normalizer.rb +4 -0
- data/lib/dwc-archive/core.rb +2 -2
- data/lib/dwc-archive/expander.rb +6 -2
- data/lib/dwc-archive/generator.rb +18 -8
- data/lib/dwc-archive/generator_eml_xml.rb +16 -14
- data/lib/dwc-archive/generator_meta_xml.rb +19 -11
- data/lib/dwc-archive/ingester.rb +1 -1
- data/lib/dwc-archive/metadata.rb +8 -2
- data/lib/dwc-archive/version.rb +3 -0
- data/lib/dwc-archive/xml_reader.rb +9 -9
- data/spec/lib/classification_normalizer_spec.rb +223 -0
- data/spec/lib/core_spec.rb +98 -0
- data/spec/lib/darwin_core_spec.rb +279 -0
- data/spec/lib/generator_eml_xml_spec.rb +21 -0
- data/spec/lib/generator_meta_xml_spec.rb +21 -0
- data/spec/lib/generator_spec.rb +116 -0
- data/spec/lib/gnub_taxon_spec.rb +34 -0
- data/spec/lib/metadata_spec.rb +80 -0
- data/spec/lib/taxon_normalized_spec.rb +145 -0
- data/spec/lib/xml_reader_spec.rb +13 -10
- data/spec/spec_helper.rb +72 -3
- metadata +133 -62
- data/Gemfile.lock +0 -155
- data/VERSION +0 -1
- data/lib/dwc-archive/.expander.rb.swo +0 -0
- data/lib/dwc-archive/utf_regex_ruby18.rb +0 -10
- data/spec/lib/dwc-archive_spec.rb +0 -250
- data/spec/spec.opts +0 -1
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 8e8c929203d1b652f8ba345b0c4c39cfc87a0369
|
4
|
+
data.tar.gz: 739a064221bf52523990bfea38749f11b4d986c0
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: adfd46bea84e301ceca6de355f189b884bc6a9a22eb8d98e3976f17e3407d2de7f15963ec0d6f29958de057de9d579c81d8007d72c38fc1b9f9ada9295381152
|
7
|
+
data.tar.gz: 2e188f828d0bbe28baf5f1d8aa7aab12ca330000bf3f5ee145501d78961f9ca5e696be1171998a433952cf84546a8d5fd61c6cf45958576a7e0800fbf4542dae
|
data/.gitignore
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
## MAC OS
|
2
|
+
.DS_Store
|
3
|
+
|
4
|
+
## TEXTMATE
|
5
|
+
*.tmproj
|
6
|
+
tmtags
|
7
|
+
|
8
|
+
## EMACS
|
9
|
+
*~
|
10
|
+
\#*
|
11
|
+
.\#*
|
12
|
+
|
13
|
+
## VIM
|
14
|
+
*.swp
|
15
|
+
|
16
|
+
## PROJECT::GENERAL
|
17
|
+
coverage
|
18
|
+
rdoc
|
19
|
+
pkg
|
20
|
+
install
|
21
|
+
Gemfile.lock
|
22
|
+
|
23
|
+
## PROJECT::SPECIFIC
|
24
|
+
tags
|
25
|
+
bin
|
26
|
+
.bundle
|
27
|
+
bundle_bin
|
28
|
+
Gemfile.lock
|
29
|
+
|
30
|
+
|
data/.rspec
ADDED
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.0.0-p353
|
data/.travis.yml
CHANGED
@@ -1,10 +1,12 @@
|
|
1
1
|
rvm:
|
2
|
-
- 1.9.3
|
3
|
-
- 2.0.0
|
2
|
+
- 1.9.3-p448
|
3
|
+
- 2.0.0-p353
|
4
4
|
before_install:
|
5
5
|
- sudo apt-get update
|
6
|
-
-
|
7
|
-
bundler_args: --without development
|
6
|
+
- gem install debugger
|
7
|
+
# bundler_args: --without development
|
8
|
+
services:
|
9
|
+
- redis-server
|
8
10
|
script:
|
9
11
|
- bundle exec cucumber
|
10
12
|
- bundle exec rake
|
data/CHANGELOG
CHANGED
data/Gemfile
CHANGED
@@ -1,17 +1,3 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
|
3
|
-
|
4
|
-
gem 'parsley-store', '~> 0.3.2'
|
5
|
-
gem 'archive-tar-minitar', '~> 0.5'
|
6
|
-
|
7
|
-
group :development do
|
8
|
-
gem 'debugger', '~> 1.3'
|
9
|
-
end
|
10
|
-
|
11
|
-
group :test do
|
12
|
-
gem 'rspec', '~> 2.13'
|
13
|
-
gem 'cucumber', '~> 1.3'
|
14
|
-
gem 'bundler', '~> 1.3'
|
15
|
-
gem 'jeweler', '~> 1.8'
|
16
|
-
gem 'jazz_hands', '~> 0.5'
|
17
|
-
end
|
3
|
+
gemspec
|
data/README.md
CHANGED
@@ -3,18 +3,25 @@ Darwin Core Archive
|
|
3
3
|
|
4
4
|
[![Gem Version][1]][2]
|
5
5
|
[![Continuous Integration Status][3]][4]
|
6
|
-
[![
|
6
|
+
[![Coverage Status][5]][6]
|
7
|
+
[![CodePolice][7]][8]
|
8
|
+
[![Dependency Status][9]][10]
|
7
9
|
|
8
10
|
Darwin Core Archive format is a current standard for information exchange
|
9
11
|
between Global Names Architecture modules. This gem allows to work with
|
10
12
|
Darwin Core Archive data compressed to either zip or tar.gz files.
|
11
|
-
More information about Darwing Core Archive can be found on a [GBIF page:][
|
13
|
+
More information about Darwing Core Archive can be found on a [GBIF page:][11]
|
12
14
|
|
13
15
|
Installation
|
14
16
|
------------
|
15
17
|
|
16
18
|
sudo gem install dwc-archive
|
17
19
|
|
20
|
+
### System Requirements
|
21
|
+
|
22
|
+
You need [Redis Server][12] and unzip library installed
|
23
|
+
|
24
|
+
|
18
25
|
Usage
|
19
26
|
-----
|
20
27
|
|
@@ -174,6 +181,11 @@ Copyright (c) 2010-2013 Marine Biological Laboratory. See LICENSE for details.
|
|
174
181
|
[2]: http://badge.fury.io/rb/dwc-archive
|
175
182
|
[3]: https://secure.travis-ci.org/GlobalNamesArchitecture/dwc-archive.png
|
176
183
|
[4]: http://travis-ci.org/GlobalNamesArchitecture/dwc-archive
|
177
|
-
[5]: https://
|
178
|
-
[6]: https://
|
179
|
-
[7]:
|
184
|
+
[5]: https://coveralls.io/repos/GlobalNamesArchitecture/dwc-archive/badge.png
|
185
|
+
[6]: https://coveralls.io/r/GlobalNamesArchitecture/dwc-archive
|
186
|
+
[7]: https://codeclimate.com/github/GlobalNamesArchitecture/dwc-archive.png
|
187
|
+
[8]: https://codeclimate.com/github/GlobalNamesArchitecture/dwc-archive
|
188
|
+
[9]: https://gemnasium.com/GlobalNamesArchitecture/dwc-archive.png
|
189
|
+
[10]: https://gemnasium.com/GlobalNamesArchitecture/dwc-archive
|
190
|
+
[11]: http://bit.ly/2IxcBA
|
191
|
+
[12]: http://redis.io/topics/quickstart
|
data/Rakefile
CHANGED
@@ -1,28 +1,10 @@
|
|
1
|
-
require
|
2
|
-
require 'rake'
|
1
|
+
require "bundler/gem_tasks"
|
3
2
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
gem.description = 'Darwin Core Archive is the current standard exchange ' +
|
10
|
-
'format for GLobal Names Architecture modules. ' +
|
11
|
-
'This gem makes it easy to incorporate files in ' +
|
12
|
-
'Darwin Core Archive format into a ruby project.'
|
13
|
-
gem.email = "dmozzherin at gmail dot com"
|
14
|
-
gem.homepage = "http://github.com/GlobalNamesArchitecture/dwc-archive"
|
15
|
-
gem.authors = ["Dmitry Mozzherin"]
|
16
|
-
#gem.add_dependency "fastercsv" if RUBY_VERSION.match /^1.8/
|
17
|
-
gem.add_dependency 'parsley-store', ">= 0.3.0"
|
18
|
-
gem.add_development_dependency "rspec", ">= 1.2.9"
|
19
|
-
gem.add_development_dependency "cucumber", ">= 0"
|
20
|
-
end
|
21
|
-
Jeweler::GemcutterTasks.new
|
22
|
-
rescue LoadError
|
23
|
-
puts 'Jeweler (or a dependency) not available. ' +
|
24
|
-
'Install it with: gem install jeweler'
|
25
|
-
end
|
3
|
+
# Bundler::GemHelper.install_tasks
|
4
|
+
# require 'bundler/gem_tasks'
|
5
|
+
# require 'rake/testtasks'
|
6
|
+
# require 'rubygems'
|
7
|
+
# require 'rake'
|
26
8
|
|
27
9
|
require 'rspec/core/rake_task'
|
28
10
|
RSpec::Core::RakeTask.new(:spec) do |spec|
|
data/]
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
|
3
|
+
describe DarwinCore::Core do
|
4
|
+
subject(:dwca) { DarwinCore.new(file_path) }
|
5
|
+
subject(:core) { DarwinCore::Core.new(dwca) }
|
6
|
+
let(:file_path) { File.join(File.expand_path('../../files', __FILE__),
|
7
|
+
file_name) }
|
8
|
+
let(:file_name) { 'data.tar.gz' }
|
9
|
+
|
10
|
+
|
11
|
+
describe '.new' do
|
12
|
+
it 'creates new core' do
|
13
|
+
expect(core).to be_kind_of DarwinCore::Core
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe '#id' do
|
18
|
+
|
19
|
+
it 'returns core id' do
|
20
|
+
expect(core.id[:index]).to eq 0
|
21
|
+
expect(core.id[:term]).to eq 'http://rs.tdwg.org/dwc/terms/TaxonID'
|
22
|
+
end
|
23
|
+
|
24
|
+
context 'no coreid' do
|
25
|
+
let(:file_name) { 'empty_coreid.tar.gz' }
|
26
|
+
|
27
|
+
it 'does not return coreid' do
|
28
|
+
expect(core.id[:index]).to eq 0
|
29
|
+
expect(core.id[:term]).to be_nil
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'reads core file from archive' do
|
35
|
+
|
36
|
+
core.read
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
data/dwc-archive.gemspec
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
require File.expand_path('../lib/dwc-archive/version', __FILE__)
|
2
|
+
|
3
|
+
Gem::Specification.new do |gem|
|
4
|
+
gem.name = "dwc-archive"
|
5
|
+
gem.version = DarwinCore::VERSION
|
6
|
+
gem.authors = ["Dmitry Mozzherin"]
|
7
|
+
gem.email = ["dmozzherin at gmail dot com"]
|
8
|
+
gem.description = %q{Darwin Core Archive is the current standard exchange
|
9
|
+
format for GLobal Names Architecture modules.
|
10
|
+
This gem makes it easy to incorporate files in
|
11
|
+
Darwin Core Archive format into a ruby project.}
|
12
|
+
gem.summary = %q{Handler of Darwin Core Archive files}
|
13
|
+
gem.homepage = "http://github.com/GlobalNamesArchitecture/dwc-archive"
|
14
|
+
gem.license = "MIT"
|
15
|
+
|
16
|
+
gem.files = `git ls-files`.split($/)
|
17
|
+
gem.executables = gem.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
19
|
+
gem.require_paths = ["lib"]
|
20
|
+
|
21
|
+
gem.add_runtime_dependency 'nokogiri', '~> 1.6'
|
22
|
+
gem.add_runtime_dependency 'parsley-store', '~> 0.3'
|
23
|
+
gem.add_runtime_dependency 'archive-tar-minitar', '~> 0.5'
|
24
|
+
|
25
|
+
gem.add_development_dependency 'rake', '~> 10.1'
|
26
|
+
gem.add_development_dependency 'bundler', '~> 1.3'
|
27
|
+
gem.add_development_dependency 'rspec', '~> 2.14'
|
28
|
+
gem.add_development_dependency 'cucumber', '~> 1.3'
|
29
|
+
gem.add_development_dependency 'coveralls', '~> 0.7'
|
30
|
+
gem.add_development_dependency 'debugger', '~> 1.6'
|
31
|
+
gem.add_development_dependency 'git', '~> 1.2'
|
32
|
+
end
|
33
|
+
|
data/lib/dwc-archive.rb
CHANGED
@@ -1,34 +1,36 @@
|
|
1
1
|
# encoding: UTF-8
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
2
|
+
|
3
|
+
recent_ruby = RUBY_VERSION >= '1.9.1'
|
4
|
+
raise "IMPORTANT: dwc-archive gem requires ruby >= 1.9.1" unless recent_ruby
|
5
|
+
|
6
6
|
require 'fileutils'
|
7
7
|
require 'ostruct'
|
8
8
|
require 'digest'
|
9
9
|
require 'csv'
|
10
10
|
require 'logger'
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
11
|
+
require_relative 'dwc-archive/xml_reader'
|
12
|
+
require_relative 'dwc-archive/ingester'
|
13
|
+
require_relative 'dwc-archive/errors'
|
14
|
+
require_relative 'dwc-archive/expander'
|
15
|
+
require_relative 'dwc-archive/archive'
|
16
|
+
require_relative 'dwc-archive/core'
|
17
|
+
require_relative 'dwc-archive/extension'
|
18
|
+
require_relative 'dwc-archive/metadata'
|
19
|
+
require_relative 'dwc-archive/generator'
|
20
|
+
require_relative 'dwc-archive/generator_meta_xml'
|
21
|
+
require_relative 'dwc-archive/generator_eml_xml'
|
22
|
+
require_relative 'dwc-archive/classification_normalizer'
|
23
|
+
require_relative 'dwc-archive/version'
|
23
24
|
|
24
25
|
class DarwinCore
|
25
26
|
|
26
|
-
VERSION =
|
27
|
+
VERSION = DarwinCore::VERSION
|
28
|
+
DEFAULT_TMP_DIR = "/tmp"
|
27
29
|
|
28
|
-
attr_reader :archive, :core, :metadata, :extensions,
|
30
|
+
attr_reader :archive, :core, :metadata, :extensions,
|
31
|
+
:classification_normalizer
|
29
32
|
alias :eml :metadata
|
30
33
|
|
31
|
-
DEFAULT_TMP_DIR = "/tmp"
|
32
34
|
|
33
35
|
def self.nil_field?(field)
|
34
36
|
return true if [nil, '', '/N'].include?(field)
|
@@ -68,10 +70,20 @@ class DarwinCore
|
|
68
70
|
@extensions = get_extensions
|
69
71
|
end
|
70
72
|
|
71
|
-
|
73
|
+
def file_name
|
74
|
+
File.split(@dwc_path).last
|
75
|
+
end
|
76
|
+
|
77
|
+
def path
|
78
|
+
File.expand_path(@dwc_path)
|
79
|
+
end
|
80
|
+
|
81
|
+
# generates a hash from a classification data with path to each node,
|
82
|
+
# list of synonyms and vernacular names.
|
72
83
|
def normalize_classification
|
73
84
|
return nil unless has_parent_id?
|
74
|
-
@classification_normalizer ||= DarwinCore::ClassificationNormalizer.
|
85
|
+
@classification_normalizer ||= DarwinCore::ClassificationNormalizer.
|
86
|
+
new(self)
|
75
87
|
@classification_normalizer.normalize
|
76
88
|
end
|
77
89
|
|
data/lib/dwc-archive/archive.rb
CHANGED
@@ -8,8 +8,11 @@ class DarwinCore
|
|
8
8
|
@expander = DarwinCore::Expander.new(@archive_path, @tmp_dir)
|
9
9
|
@expander.unpack
|
10
10
|
if valid?
|
11
|
-
@meta = DarwinCore::XmlReader.
|
12
|
-
|
11
|
+
@meta = DarwinCore::XmlReader.
|
12
|
+
from_xml(open(File.join(@expander.path, 'meta.xml')))
|
13
|
+
@eml = files.include?("eml.xml") ?
|
14
|
+
DarwinCore::XmlReader.
|
15
|
+
from_xml(open(File.join(@expander.path, 'eml.xml'))) : nil
|
13
16
|
else
|
14
17
|
clean
|
15
18
|
raise InvalidArchiveError
|
data/lib/dwc-archive/core.rb
CHANGED
@@ -8,9 +8,9 @@ class DarwinCore
|
|
8
8
|
@path = @archive.files_path
|
9
9
|
root_key = @archive.meta.keys[0]
|
10
10
|
@data = @archive.meta[root_key][:core]
|
11
|
-
raise DarwinCore::CoreFileError.
|
11
|
+
raise DarwinCore::CoreFileError.
|
12
|
+
new("Cannot find core in meta.xml, is meta.xml valid?") unless @data
|
12
13
|
@id = @data[:id][:attributes]
|
13
|
-
# raise DarwinCore::CoreFileError.new("Cannot find core identifier") unless @id
|
14
14
|
get_attributes(DarwinCore::CoreFileError)
|
15
15
|
end
|
16
16
|
end
|
data/lib/dwc-archive/expander.rb
CHANGED
@@ -43,12 +43,16 @@ class DarwinCore
|
|
43
43
|
if file_type.match(/tar.*gzip/i)
|
44
44
|
return proc do |tmp_path, archive_path|
|
45
45
|
FileUtils.mkdir tmp_path
|
46
|
-
|
46
|
+
path = esc(archive_path)
|
47
|
+
system("tar -zxf #{path} -C #{tmp_path} > /dev/null 2>&1")
|
47
48
|
end
|
48
49
|
end
|
49
50
|
|
50
51
|
if file_type.match(/Zip/)
|
51
|
-
return proc
|
52
|
+
return proc do |tmp_path, archive_path|
|
53
|
+
path = esc(archive_path)
|
54
|
+
system("unzip -qq -d #{tmp_path} #{path} > /dev/null 2>&1")
|
55
|
+
end
|
52
56
|
end
|
53
57
|
|
54
58
|
return nil
|
@@ -8,7 +8,8 @@ class DarwinCore
|
|
8
8
|
@path = File.join(tmp_dir, 'dwc_' + rand(10000000000).to_s)
|
9
9
|
FileUtils.mkdir(@path)
|
10
10
|
@meta_xml_data = {:extensions => []}
|
11
|
-
@eml_xml_data = {:id => nil, :title => nil,
|
11
|
+
@eml_xml_data = {:id => nil, :title => nil,
|
12
|
+
:authors => [], :abstract => nil, :citation => nil, :url => nil}
|
12
13
|
@write = 'w:utf-8'
|
13
14
|
end
|
14
15
|
|
@@ -22,27 +23,36 @@ class DarwinCore
|
|
22
23
|
header = data.shift
|
23
24
|
fields = header.map do |f|
|
24
25
|
f.strip!
|
25
|
-
|
26
|
-
f.
|
26
|
+
err = 'No header in core data, or header fields are not urls'
|
27
|
+
raise DarwinCore::GeneratorError.new(err) unless f.match(/^http:\/\//)
|
28
|
+
f.split('/')[-1]
|
27
29
|
end
|
28
30
|
data.unshift(fields) if keep_headers
|
29
31
|
ignore_header_lines = keep_headers ? 1 : 0
|
30
|
-
@meta_xml_data[:core] = {:
|
32
|
+
@meta_xml_data[:core] = { fields: header,
|
33
|
+
ignoreHeaderLines: ignore_header_lines,
|
34
|
+
location:file_name }
|
31
35
|
data.each {|d| c << d}
|
32
36
|
c.close
|
33
37
|
end
|
34
38
|
|
35
|
-
def add_extension(data, file_name,
|
39
|
+
def add_extension(data, file_name,
|
40
|
+
keep_headers = true,
|
41
|
+
row_type = 'http://rs.tdwg.org/dwc/terms/Taxon')
|
36
42
|
c = CSV.open(File.join(@path,file_name), @write)
|
37
43
|
header = data.shift
|
38
44
|
fields = header.map do |f|
|
39
45
|
f.strip!
|
40
|
-
|
41
|
-
f.
|
46
|
+
err = 'No header in core data, or header fields are not urls'
|
47
|
+
raise DarwinCore::GeneratorError.new(err) unless f.match(/^http:\/\//)
|
48
|
+
f.split('/')[-1]
|
42
49
|
end
|
43
50
|
data.unshift(fields) if keep_headers
|
44
51
|
ignore_header_lines = keep_headers ? 1 : 0
|
45
|
-
@meta_xml_data[:extensions] << { :
|
52
|
+
@meta_xml_data[:extensions] << { fields: header,
|
53
|
+
ignoreHeaderLines: ignore_header_lines,
|
54
|
+
location: file_name,
|
55
|
+
rowType: row_type }
|
46
56
|
data.each { |d| c << d }
|
47
57
|
c.close
|
48
58
|
end
|
@@ -9,26 +9,28 @@ class DarwinCore
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def create
|
12
|
+
eml_uri = 'eml://ecoinformatics.org/eml-2.1.1' +
|
13
|
+
' http://rs.gbif.org/schema/eml-gbif-profile/1.0.1/eml.xsd'
|
12
14
|
builder = Nokogiri::XML::Builder.new do |xml|
|
13
|
-
xml.eml(:
|
14
|
-
:
|
15
|
-
:'xml:lang'
|
16
|
-
:'xmlns:eml'
|
17
|
-
:'xmlns:md'
|
18
|
-
:'xmlns:proj'
|
19
|
-
:'xmlns:d'
|
20
|
-
:'xmlns:res'
|
21
|
-
:'xmlns:dc'
|
22
|
-
:'xmlns:xsi'
|
23
|
-
:'xsi:schemaLocation' =>
|
24
|
-
xml.dataset(:
|
15
|
+
xml.eml(packageId: "%s/%s" % [@data[:id], timestamp],
|
16
|
+
system: @data[:system] || 'http://globalnames.org',
|
17
|
+
:'xml:lang' => 'en',
|
18
|
+
:'xmlns:eml' => 'eml://ecoinformatics.org/eml-2.1.1',
|
19
|
+
:'xmlns:md' => 'eml://ecoinformatics.org/methods-2.1.1',
|
20
|
+
:'xmlns:proj' => 'eml://ecoinformatics.org/project-2.1.1',
|
21
|
+
:'xmlns:d' => 'eml://ecoinformatics.org/dataset-2.1.1',
|
22
|
+
:'xmlns:res' => 'eml://ecoinformatics.org/resource-2.1.1',
|
23
|
+
:'xmlns:dc' => 'http://purl.org/dc/terms/',
|
24
|
+
:'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
|
25
|
+
:'xsi:schemaLocation' => 'eml_uri') do
|
26
|
+
xml.dataset(id: @data[:id]) do
|
25
27
|
xml.title(@data[:title])
|
26
28
|
xml.license(@data[:license])
|
27
29
|
contacts = []
|
28
30
|
@data[:authors].each_with_index do |a, i|
|
29
31
|
creator_id = i + 1
|
30
32
|
contacts << creator_id
|
31
|
-
xml.creator(:
|
33
|
+
xml.creator(id: creator_id, scope: 'document') do
|
32
34
|
xml.individualName do
|
33
35
|
xml.givenName(a[:first_name])
|
34
36
|
xml.surName(a[:last_name])
|
@@ -77,7 +79,7 @@ class DarwinCore
|
|
77
79
|
private
|
78
80
|
def timestamp
|
79
81
|
t = Time.now.getutc.to_a[0..5].reverse
|
80
|
-
t[0..2].join('-') +
|
82
|
+
t[0..2].join('-') + '::' + t[-3..-1].join(':')
|
81
83
|
end
|
82
84
|
end
|
83
85
|
end
|