Class: IsoDoc::Gb::Metadata
- Inherits:
-
Iso::Metadata
- Object
- Iso::Metadata
- IsoDoc::Gb::Metadata
- Defined in:
- lib/isodoc/gb/metadata.rb
Overview
A Converter implementation that generates GB output, and a document schema encapsulation of the document for validation
Constant Summary collapse
- STAGE_ABBRS_CN =
{ "00": "新工作项目建议", "10": "新工作项目", "20": "标准草案工作组讨论稿", "30": "标准草案征求意见稿", "40": "标准草案送审稿", "50": "标准草案报批稿", "60": "国家标准", "90": "(Review)", "95": "(Withdrawal)", }.freeze
- STATUS_CSS =
{ "00": "working-draft", "10": "working-draft", "20": "working-draft", "30": "committee-draft", "40": "draft-standard", "50": "draft-standard", "60": "standard", "90": "standard", "95": "obsolete", }
- ISO_STD_XPATH =
"//bibdata/relation[xmlns:description[text() = 'equivalent' or "\ "text() = 'identical' or text() = 'nonequivalent']]/bibitem".freeze
Instance Method Summary collapse
- #author(isoxml, _out) ⇒ Object
- #bibdate(isoxml, _out) ⇒ Object
- #docid(isoxml, _out) ⇒ Object
- #docid1(isoxml, _out) ⇒ Object
- #docstatus(isoxml, _out) ⇒ Object
- #gb_equivalence(isoxml) ⇒ Object
- #gb_identifier(isoxml) ⇒ Object
- #gb_library_identifier(isoxml) ⇒ Object
-
#initialize(lang, script, i18n) ⇒ Metadata
constructor
A new instance of Metadata.
- #part_label(partnumber, lang) ⇒ Object
- #set_doctitle ⇒ Object
- #standard_class(scope, prefix, mandate) ⇒ Object
- #standard_logo(gbprefix) ⇒ Object
- #status_abbrev_cn(stage, _substage, iter, draft, doctype) ⇒ Object
- #subtitle(isoxml, _out) ⇒ Object
- #title(isoxml, _out) ⇒ Object
- #unpublished(status) ⇒ Object
Constructor Details
#initialize(lang, script, i18n) ⇒ Metadata
Returns a new instance of Metadata.
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/isodoc/gb/metadata.rb', line 11 def initialize(lang, script, i18n) 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) set(:publisheddate, "XXX") set(:implementeddate, "XXX") end |
Instance Method Details
#author(isoxml, _out) ⇒ Object
64 65 66 67 |
# File 'lib/isodoc/gb/metadata.rb', line 64 def (isoxml, _out) gbcommittee = isoxml.at(ns("//bibdata/ext/gbcommittee")) set(:committee, gbcommittee&.text) end |
#bibdate(isoxml, _out) ⇒ Object
207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 |
# File 'lib/isodoc/gb/metadata.rb', line 207 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) ⇒ Object
129 130 131 132 133 134 |
# File 'lib/isodoc/gb/metadata.rb', line 129 def docid(isoxml, _out) docid1(isoxml, _out) gb_identifier(isoxml) gb_library_identifier(isoxml) gb_equivalence(isoxml) end |
#docid1(isoxml, _out) ⇒ Object
124 125 126 127 |
# File 'lib/isodoc/gb/metadata.rb', line 124 def docid1(isoxml, _out) dn = isoxml.at(ns("//bibdata/docidentifier[@type = 'gb']")) set(:docnumber, dn&.text) end |
#docstatus(isoxml, _out) ⇒ Object
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
# File 'lib/isodoc/gb/metadata.rb', line 103 def docstatus(isoxml, _out) docstatus = isoxml.at(ns("//bibdata/status/stage")) set(:unpublished, true) if docstatus set(:stage, docstatus.text.to_i) set(:unpublished, unpublished(docstatus.text)) set(:statusabbr, status_abbrev_cn(docstatus["abbreviation"], isoxml&.at(ns("//bibdata/status/substage"))&.text, isoxml&.at(ns("//bibdata/status/iteration"))&.text, isoxml&.at(ns("//version/draft"))&.text, isoxml&.at(ns("//bibdata/ext/doctype"))&.text)) set(:status, STATUS_CSS[docstatus.text.to_sym]) unpublished(docstatus.text) and set(:stageabbr, docstatus["abbreviation"]) end end |
#gb_equivalence(isoxml) ⇒ Object
139 140 141 142 143 144 145 146 147 148 149 150 |
# File 'lib/isodoc/gb/metadata.rb', line 139 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/description")) 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) ⇒ Object
159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 |
# File 'lib/isodoc/gb/metadata.rb', line 159 def gb_identifier(isoxml) scope = isoxml.at(ns("//bibdata/ext/gbtype/gbscope"))&.text || "national" mandate = isoxml.at(ns("//bibdata/ext/gbtype/gbmandate"))&.text || "mandatory" prefix = isoxml.at(ns("//bibdata/ext/gbtype/gbprefix"))&.text || "XXX" docyear = isoxml&.at(ns("//bibdata/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, get[:docnumber]) set(:issuer, issuer) set(:standard_class, 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) ⇒ Object
192 193 194 195 196 197 198 |
# File 'lib/isodoc/gb/metadata.rb', line 192 def gb_library_identifier(isoxml) ccs = [] isoxml.xpath(ns("//bibdata/ext/ccs")).each { |i| ccs << i.text } p = isoxml.at(ns("//bibdata/ext/plannumber")) set(:libraryid_ccs, ccs.empty? ? "XXX" : ccs.join(", ")) set(:libraryid_plan, p ? p.text : "XXX") end |
#part_label(partnumber, lang) ⇒ Object
200 201 202 203 204 205 |
# File 'lib/isodoc/gb/metadata.rb', line 200 def part_label(partnumber, lang) case lang when "en" then "Part #{partnumber}" when "zh" then "第#{partnumber}部分" end end |
#set_doctitle ⇒ Object
41 42 43 44 45 46 47 48 49 |
# File 'lib/isodoc/gb/metadata.rb', line 41 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 |
#standard_class(scope, prefix, mandate) ⇒ Object
152 153 154 155 156 157 |
# File 'lib/isodoc/gb/metadata.rb', line 152 def standard_class(scope, prefix, mandate) standardclassimg = get[:standardclassimg] ret = @agencies.standard_class(scope, prefix, mandate) return "<img class='logo' src='#{standardclassimg}' alt='#{ret}'></img>" if standardclassimg ret end |
#standard_logo(gbprefix) ⇒ Object
180 181 182 183 184 185 186 187 188 189 190 |
# File 'lib/isodoc/gb/metadata.rb', line 180 def standard_logo(gbprefix) return nil unless gbprefix case gbprefix.downcase when "db" then "gb-standard-db" when "gb" then "gb-standard-gb" when "gjb" then "gb-standard-gjb" when "gm" then "gb-standard-gm" when "jjf" then "gb-standard-jjf" when "zb" then "gb-standard-zb" end end |
#status_abbrev_cn(stage, _substage, iter, draft, doctype) ⇒ Object
93 94 95 96 97 98 99 100 101 |
# File 'lib/isodoc/gb/metadata.rb', line 93 def status_abbrev_cn(stage, _substage, iter, draft, doctype) return status_abbrev(stage, _substage, iter, draft, doctype) if @lang != "zh" stage_num = stage == "PRF" ? "60" : (Asciidoctor::Gb::Converter::STAGE_ABBRS&.invert[stage]&.to_s || "??") stage = STAGE_ABBRS_CN[stage_num.to_sym] || "??" stage = "#{iter.to_i.localize(:zh).spellout.force_encoding("UTF-8")}次#{stage}" if iter stage = "Pre" + HTMLEntities.new.encode(stage, :hexadecimal) if draft =~ /^0\./ stage end |
#subtitle(isoxml, _out) ⇒ Object
51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/isodoc/gb/metadata.rb', line 51 def subtitle(isoxml, _out) intro = isoxml.at(ns("//bibdata//title[@type='title-intro' and @language='en']")) main = isoxml.at(ns("//bibdata//title[@type='title-main' and @language='en']")) part = isoxml.at(ns("//bibdata//title[@type='title-part' and @language='en']")) partnumber = isoxml.at(ns("//bibdata/ext/structuredidentifier/project-number/@part")) intro.nil? || set(:docmaintitleen, intro.text + "—") main.nil? || set(:docsubtitleen, main.text) partnum = partnumber ? "#{part_label(partnumber, 'en')}: " : "" part.nil? || set(:docparttitleen, "—#{partnum} #{part.text}") set_doctitle end |
#title(isoxml, _out) ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/isodoc/gb/metadata.rb', line 29 def title(isoxml, _out) intro = isoxml.at(ns("//bibdata//title[@type='title-intro' and @language='zh']")) main = isoxml.at(ns("//bibdata//title[@type='title-main' and @language='zh']")) part = isoxml.at(ns("//bibdata//title[@type='title-part' and @language='zh']")) partnumber = isoxml.at(ns("//bibdata/ext/structuredidentifier/project-number/@part")) intro.nil? || set(:docmaintitlezh, intro.text + " ") main.nil? || set(:docsubtitlezh, main.text) partnum = partnumber ? "#{part_label(partnumber, 'zh')}:" : "" part.nil? || set(:docparttitlezh, " #{partnum}#{part.text}") end |
#unpublished(status) ⇒ Object
120 121 122 |
# File 'lib/isodoc/gb/metadata.rb', line 120 def unpublished(status) status.to_i < 60 end |