class IsoDoc::Gb::Metadata

A {Converter} implementation that generates GB output, and a document schema encapsulation of the document for validation

Constants

ISO_STD_XPATH
STAGE_ABBRS

from ISO

STAGE_ABBRS_CN
STATUS_CSS

Public Class Methods

new(lang, script, labels) click to toggle source
Calls superclass method
# File lib/isodoc/gb/metadata.rb, line 9
def initialize(lang, script, labels)
  super
  set(:docmaintitlezh, "")
  set(:docsubtitlezh, "XXXX")
  set(:docparttitlezh, "")
  set(:docmaintitleen, "")
  set(:docsubtitleen, "XXXX")
  set(:docparttitleen, "")
  set(:gbequivalence, "")
  set(:isostandard, nil)
  set(:isostandardtitle, "")
  set(:doctitle, "XXXX")
  set(:obsoletes, nil)
  set(:obsoletes_part, nil)
end

Public Instance Methods

author(isoxml, _out) click to toggle source
# File lib/isodoc/gb/metadata.rb, line 60
def author(isoxml, _out)
  gbcommittee = isoxml.at(ns("//bibdata/gbcommittee"))
  set(:committee, gbcommittee&.text)
end
bibdate(isoxml, _out) click to toggle source
Calls superclass method
# File lib/isodoc/gb/metadata.rb, line 214
def bibdate(isoxml, _out)
  super
  m = get
  if @lang == "zh"
    set(:labelled_publisheddate, m[:publisheddate] + " " +
        @labels["publicationdate_lbl"])
    set(:labelled_implementeddate, m[:implementeddate] + " " +
        @labels["implementationdate_lbl"])
  else
    set(:labelled_publisheddate, @labels["publicationdate_lbl"] +
        ": " + m[:publisheddate])
    set(:labelled_implementeddate,
        @labels["implementationdate_lbl"] + ": " +
        m[:implementeddate])
  end
end
docid(isoxml, _out) click to toggle source
# File lib/isodoc/gb/metadata.rb, line 139
def docid(isoxml, _out)
  docid1(isoxml, _out)
  gb_identifier(isoxml)
  gb_library_identifier(isoxml)
  gb_equivalence(isoxml)
end
docid1(isoxml, _out) click to toggle source
# File lib/isodoc/gb/metadata.rb, line 128
def docid1(isoxml, _out)
  dn = docnumber(isoxml)
  docstatus = get[:stage]
  if docstatus
    abbr = stage_abbrev(docstatus.to_s, isoxml.at(ns("//status/iteration")),
                        isoxml.at(ns("//version/draft")))
    (docstatus.to_i < 60) && dn = abbr + " " + dn
  end
  set(:docnumber, dn)
end
docstatus(isoxml, _out) click to toggle source
# File lib/isodoc/gb/metadata.rb, line 117
def docstatus(isoxml, _out)
  docstatus = isoxml.at(ns("//status/stage"))
  if docstatus
    set(:stage, docstatus.text.to_i)
    abbr = stage_abbrev_cn(docstatus.text, isoxml.at(ns("//status/iteration")),
                           isoxml.at(ns("//version/draft")))
    set(:stageabbr, abbr)
    set(:status, STATUS_CSS[docstatus.text.to_sym])
  end
end
gb_equivalence(isoxml) click to toggle source
# File lib/isodoc/gb/metadata.rb, line 149
def gb_equivalence(isoxml)
  isostdid = isoxml.at(ns("#{ISO_STD_XPATH}/docidentifier")) || return
  set(:isostandard, isostdid.text)
  isostdtitle = isoxml.at(ns("#{ISO_STD_XPATH}/title"))
  set(:isostandardtitle, isostdtitle.text) if isostdtitle
  eq = isoxml.at(ns("//bibdata/relation/@type"))
  case eq.text
  when "equivalent" then set(:gbequivalence, "MOD")
  when "nonequivalent" then set(:gbequivalence, "NEQ")
  when "identical" then set(:gbequivalence, "IDT")
  end
end
gb_identifier(isoxml) click to toggle source
# File lib/isodoc/gb/metadata.rb, line 162
def gb_identifier(isoxml)
  scope = isoxml.at(ns("//gbscope"))&.text || "national"
  mandate = isoxml.at(ns("//gbmandate"))&.text || "mandatory"
  prefix = isoxml.at(ns("//gbprefix"))&.text || "XXX"
  docyear = isoxml&.at(ns("//copyright/from"))&.text
  issuer = isoxml&.at(ns("//bibdata/contributor[role/@type = 'issuer']/"\
                         "organization/name"))&.text || "GB"
  @agencies = GbAgencies::Agencies.new(@lang, @labels, issuer)
  #set(:docidentifier, @agencies.docidentifier(scope, prefix, mandate, docyear, get[:docnumber]))
  set(:docidentifier, @agencies.docidentifier(nil, nil, nil, docyear, get[:docnumber]))
  set(:issuer, issuer)
  set(:standard_class, @agencies.standard_class(scope, prefix, mandate))
  set(:standard_agency, @agencies.standard_agency(scope, prefix, mandate))
  if scope == "local"
    set(:gbprefix, "DB")
    set(:gblocalcode, prefix)
  else
    set(:gbprefix, prefix)
  end 
  set(:gbscope, scope)
end
gb_library_identifier(isoxml) click to toggle source
# File lib/isodoc/gb/metadata.rb, line 196
def gb_library_identifier(isoxml)
  ics = []
  ccs = []
  isoxml.xpath(ns("//bibdata/ics/code")).each { |i| ics << i.text }
  isoxml.xpath(ns("//bibdata/ccs")).each { |i| ccs << i.text }
  p = isoxml.at(ns("//bibdata/plannumber"))
  set(:libraryid_ics, ics.empty? ? "XXX" : ics.join(", "))
  set(:libraryid_ccs, ccs.empty? ? "XXX" : ccs.join(", "))
  set(:libraryid_plan, p ? p.text : "XXX")
end
part_label(partnumber, lang) click to toggle source
# File lib/isodoc/gb/metadata.rb, line 207
def part_label(partnumber, lang)
  case lang
  when "en" then "Part #{partnumber}"
  when "zh" then "第#{partnumber}部分"
  end
end
set_doctitle() click to toggle source
# File lib/isodoc/gb/metadata.rb, line 37
def set_doctitle
  if @lang == "zh"
    set(:doctitle, get[:docmaintitlezh] + 
                 get[:docsubtitlezh] + get[:docparttitlezh])
  else
    set(:doctitle, get[:docmaintitleen] + 
                 get[:docsubtitleen] + get[:docparttitleen])
  end
end
stage_abbrev(stage, iter, draft) click to toggle source
# File lib/isodoc/gb/metadata.rb, line 102
def stage_abbrev(stage, iter, draft)
  stage = STAGE_ABBRS[stage.to_sym] || "??"
  stage += iter.text if iter
  stage = "Pre" + stage if draft&.text =~ /^0\./
  stage
end
stage_abbrev_cn(stage, iter, draft) click to toggle source
# File lib/isodoc/gb/metadata.rb, line 109
def stage_abbrev_cn(stage, iter, draft)
  return stage_abbrev(stage, iter, draft) if @lang != "zh"
  stage = STAGE_ABBRS_CN[stage.to_sym] || "??"
  stage = "#{iter.text.to_i.localize(:zh).spellout}次#{stage}" if iter
  stage = "Pre" + stage if draft&.text =~ /^0\./
  stage
end
subtitle(isoxml, _out) click to toggle source
# File lib/isodoc/gb/metadata.rb, line 47
def subtitle(isoxml, _out)
  intro = isoxml.at(ns("//title-intro[@language='en']"))
  main = isoxml.at(ns("//title-main[@language='en']"))
  part = isoxml.at(ns("//title-part[@language='en']"))
  partnumber = isoxml.at(ns("//project-number/@part"))
  intro.nil? || set(:docmaintitleen, intro.text + "&mdash;")
  main.nil? || set(:docsubtitleen, main.text)
  partnum = partnumber ? "#{part_label(partnumber, 'en')}: " : ""
  part.nil? || set(:docparttitleen,
                            "&mdash;#{partnum} #{part.text}")
  set_doctitle
end
title(isoxml, _out) click to toggle source
# File lib/isodoc/gb/metadata.rb, line 25
def title(isoxml, _out)
  intro = isoxml.at(ns("//title-intro[@language='zh']"))
  main = isoxml.at(ns("//title-main[@language='zh']"))
  part = isoxml.at(ns("//title-part[@language='zh']"))
  partnumber = isoxml.at(ns("//project-number/@part"))
  intro.nil? || set(:docmaintitlezh, intro.text + "&nbsp;")
  main.nil? || set(:docsubtitlezh, main.text)
  partnum = partnumber ? "#{part_label(partnumber, 'zh')}:" : ""
  part.nil? || set(:docparttitlezh,
                            "&nbsp;#{partnum}#{part.text}")
end