module RelatonIev

Constants

VERSION

Public Class Methods

already_contains_ref(xmldoc, part, date) click to toggle source
# File lib/relaton_iev.rb, line 57
def already_contains_ref(xmldoc, part, date)
  xmldoc.at("//bibliography//bibitem[not(ancestor::bibitem)]/"\
            "docidentifier[@type = 'IEC']"\
            "[text() = 'IEC 60050-#{part}:#{date}']")
end
iev_cleanup(xmldoc, bibdb = nil) click to toggle source

@param xmldoc [Nokogiri::XML::Document] @param bibdb [Relaton::Db, NilClass] @return [Nokogiri::XML::Element]

# File lib/relaton_iev.rb, line 66
def iev_cleanup(xmldoc, bibdb = nil)
  iev = xmldoc.at("//bibitem[docidentifier = 'IEC 60050:2011']") || return
  parts = linksIev2iec60050part(xmldoc)
  refsIev2iec60050part(xmldoc, parts, iev, bibdb)
end
linksIev2iec60050part(xmldoc) click to toggle source

converts generic IEV citation to citation of IEC 60050-n assumes IEV citations are of form <eref type=“inline” bibitemid=“a” citeas=“IEC 60050”> <locality type=“clause”><referenceFrom>101-01-01</referenceFrom></locality></eref>

@param xmldoc [Nokogiri::XML::Documet] @return [Set<String>]

# File lib/relaton_iev.rb, line 15
def linksIev2iec60050part(xmldoc)
  parts = Set.new
  xmldoc.xpath("//eref[@citeas = 'IEC 60050:2011'] | "\
               "//origin[@citeas = 'IEC 60050:2011']").each do |x|
    cl = x&.at(".//locality[@type = 'clause']/referenceFrom")&.text || next
    m = /^(\d+)/.match cl || next
    parts << m[0]
    x["citeas"] = x["citeas"].sub(/60050/, "60050-#{m[0]}")
    x["bibitemid"] = "IEC60050-#{m[0]}"
  end
  parts
end
refsIev2iec60050part(xmldoc, parts, iev, bibdb = nil) click to toggle source

replace generic IEV reference with references to all extracted IEV parts

@param xmodoc [Nokogiri::XML::Document] @param parts [Set<String>] @param iev [Nokogiri::XML::Element] @param bibdb [Relaton::Db, NilClass] @return [Nokogiri::XML::Element]

# File lib/relaton_iev.rb, line 36
def refsIev2iec60050part(xmldoc, parts, iev, bibdb = nil)
  new_iev = ""
  parts.sort.each do |p|
    hit = bibdb&.fetch("IEC 60050-#{p}", nil, keep_year: true) || next
    date = hit.date[0].on(:year)
    new_iev += refsIev2iec60050part1(xmldoc, p, hit)
    xmldoc.xpath("//*[@citeas = 'IEC 60050-#{p}:2011']").each do |x|
      x["citeas"] = x["citeas"].sub(/:2011$/, ":#{date}")
    end
  end
  iev.replace(new_iev)
end
refsIev2iec60050part1(xmldoc, part, hit) click to toggle source
# File lib/relaton_iev.rb, line 49
def refsIev2iec60050part1(xmldoc, part, hit)
  date = hit.date[0].on(:year)
  return "" if already_contains_ref(xmldoc, part, date)

  id = xmldoc.at("//bibitem[@id = 'IEC60050-#{part}']") ? "-1" : ""
  hit.to_xml.sub(/ id="[^"]+"/, %{ id="IEC60050-#{part}#{id}"})
end