class DarwinCore::Generator::MetaXml

Creates DarwinCore meta file

Public Class Methods

new(data, path) click to toggle source
# File lib/dwc_archive/generator_meta_xml.rb, line 5
def initialize(data, path)
  @data = data
  @path = path
  @write = "w:utf-8"
end

Public Instance Methods

create() click to toggle source
# File lib/dwc_archive/generator_meta_xml.rb, line 11
def create
  schema_uri = "http://rs.tdwg.org/dwc/terms/xsd/archive/ "\
    "http://darwincore.googlecode.com/svn/trunk/text/tdwg_dwc_text.xsd"
  builder = Nokogiri::XML::Builder.new do |xml|
    opts = { encoding: "UTF-8", fieldsTerminatedBy: ",",
             fieldsEnclosedBy: '"', linesTerminatedBy: "\n",
             rowType: "http://rs.tdwg.org/dwc/terms/Taxon" }
    build_archive(xml, opts, schema_uri)
  end
  save_meta(builder)
end

Private Instance Methods

build_archive(xml, opts, schema_uri) click to toggle source
# File lib/dwc_archive/generator_meta_xml.rb, line 32
def build_archive(xml, opts, schema_uri)
  xml.archive(xmlns: "http://rs.tdwg.org/dwc/text/",
              :"xmlns:xsi" => "http://www.w3.org/2001/XMLSchema-instance",
              :"xsi:schemaLocation" => schema_uri) do
    build_core(xml, opts)
    build_extensions(xml, opts)
  end
end
build_core(xml, opts) click to toggle source
# File lib/dwc_archive/generator_meta_xml.rb, line 41
def build_core(xml, opts)
  xml.core(opts.merge(ignoreHeaderLines:
                        @data[:core][:ignoreHeaderLines])) do
    xml.files { xml.location(@data[:core][:location]) }
    taxon_id, fields = find_taxon_id(@data[:core][:fields])
    xml.id_(index: taxon_id[1])
    fields.each { |f| xml.field(term: f[0], index: f[1]) }
  end
end
build_extensions(xml, opts) click to toggle source
# File lib/dwc_archive/generator_meta_xml.rb, line 51
def build_extensions(xml, opts)
  @data[:extensions].each do |e|
    xml.extension(opts.merge(ignoreHeaderLines: e[:ignoreHeaderLines],
                             rowType: e[:rowType])) do
      xml.files { xml.location(e[:location]) }
      taxon_id, fields = find_taxon_id(e[:fields])
      xml.coreid(index: taxon_id[1])
      fields.each { |f| xml.field(term: f[0], index: f[1]) }
    end
  end
end
find_taxon_id(data) click to toggle source
# File lib/dwc_archive/generator_meta_xml.rb, line 63
def find_taxon_id(data)
  fields = []
  data.each_with_index { |f, i| fields << [f.strip, i] }
  taxon_id, fields = fields.partition { |f| f[0].match(/\/taxonid$/i) }
  fail DarwinCore::GeneratorError if taxon_id.size != 1
  [taxon_id[0], fields]
end
save_meta(builder) click to toggle source
# File lib/dwc_archive/generator_meta_xml.rb, line 25
def save_meta(builder)
  meta_xml_data = builder.to_xml
  meta_file = open(File.join(@path, "meta.xml"), @write)
  meta_file.write(meta_xml_data)
  meta_file.close
end