metanorma-bipm 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rake.yml +44 -0
  3. data/README.adoc +44 -20
  4. data/lib/asciidoctor/bipm/bipm.rng +178 -20
  5. data/lib/asciidoctor/bipm/converter.rb +87 -14
  6. data/lib/asciidoctor/bipm/isodoc.rng +1 -43
  7. data/lib/isodoc/bipm/base_convert.rb +5 -0
  8. data/lib/isodoc/bipm/bipm.brochure.xsl +598 -194
  9. data/lib/isodoc/bipm/html/html_bipm_titlepage.html +21 -3
  10. data/lib/isodoc/bipm/html/htmlstyle.css +6 -2
  11. data/lib/isodoc/bipm/html/htmlstyle.scss +1 -1
  12. data/lib/isodoc/bipm/html/si-aspect/A_e.png +0 -0
  13. data/lib/isodoc/bipm/html/si-aspect/A_e_deltanu.png +0 -0
  14. data/lib/isodoc/bipm/html/si-aspect/K_k.png +0 -0
  15. data/lib/isodoc/bipm/html/si-aspect/K_k_deltanu_h.png +0 -0
  16. data/lib/isodoc/bipm/html/si-aspect/cd_Kcd.png +0 -0
  17. data/lib/isodoc/bipm/html/si-aspect/cd_Kcd_h_deltanu.png +0 -0
  18. data/lib/isodoc/bipm/html/si-aspect/full.png +0 -0
  19. data/lib/isodoc/bipm/html/si-aspect/kg_h.png +0 -0
  20. data/lib/isodoc/bipm/html/si-aspect/kg_h_c_deltanu.png +0 -0
  21. data/lib/isodoc/bipm/html/si-aspect/m_c.png +0 -0
  22. data/lib/isodoc/bipm/html/si-aspect/m_c_deltanu.png +0 -0
  23. data/lib/isodoc/bipm/html/si-aspect/mol_NA.png +0 -0
  24. data/lib/isodoc/bipm/html/si-aspect/s_deltanu.png +0 -0
  25. data/lib/isodoc/bipm/html_convert.rb +15 -0
  26. data/lib/isodoc/bipm/i18n-en.yaml +1 -0
  27. data/lib/isodoc/bipm/i18n-fr.yaml +1 -0
  28. data/lib/isodoc/bipm/metadata.rb +20 -4
  29. data/lib/isodoc/bipm/presentation_xml_convert.rb +88 -6
  30. data/lib/isodoc/bipm/xref.rb +131 -2
  31. data/lib/metanorma/bipm/version.rb +1 -1
  32. data/metanorma.yml +37 -0
  33. metadata +16 -5
  34. data/.github/workflows/macos.yml +0 -38
  35. data/.github/workflows/ubuntu.yml +0 -56
  36. data/.github/workflows/windows.yml +0 -40
@@ -23,12 +23,16 @@
23
23
  <span class="docyear">{{ docyear }} {{ draftinfo }}</span>
24
24
  </div>
25
25
 
26
+ <div class="coverpage-logo">
27
+ <img src="{{ logo }}"/>
28
+ </div>
29
+
26
30
  <div class="coverpage-title">
27
31
  {% if appendixtitle %}
28
32
  <span class="title-third">{{ doctitle }}</span>
29
33
  <span class="title-third">{{ docsubtitle }}</span><br/>
30
- <span class="title-first">{{ appendixid}}: {{ appendixtitle }}</span><br/>
31
- <span class="title-second">{{ appendixid_alt}}: {{ appendixsubtitle }}</span>
34
+ <span class="title-first">{% if appendixid %}{{ appendixid}}: {% endif %}{{ appendixtitle }}</span><br/>
35
+ <span class="title-second">{% if appendixid_alt %}{{ appendixid_alt}}: {% endif %}{{ appendixsubtitle }}</span>
32
36
  {% else %}
33
37
  <span class="title-first">{{ doctitle }}</span><br/>
34
38
  <span class="title-second">{{ docsubtitle }}</span>
@@ -38,10 +42,24 @@
38
42
 
39
43
  <div class="coverpage-logo">
40
44
  <span>Bureau International de Poids et Mesures {{ docyear }}</span>
45
+ {% if metadata_extensions["si-aspect"] %}
46
+ <br/>
47
+ {% for item in si_aspect_index %}
48
+ {% if item == metadata_extensions["si-aspect"] %}
49
+ <img src="{{ si_aspect_paths[forloop.index0] }}" width="310px" height="310px"/>
50
+ {% endif %}
51
+ {% endfor %}
52
+ {% endif %}
41
53
  </div>
42
54
 
55
+ {% for item in metadata_extensions["editorialgroup"]["committee"]["variant_language"] %}
56
+ {% if item == lang %}
57
+ {% assign committee = metadata_extensions["editorialgroup"]["committee"]["variant"][forloop.index0] %}
58
+ {% endif %}
59
+ {% endfor %}
60
+
43
61
  <div class="coverpage-tc-name">
44
- <span>{{ tc }}</span>
62
+ <span>{{ metadata_extensions["editorialgroup"]["committee_acronym"] }}{% if metadata_extensions["editorialgroup"]["committee_acronym"] and committee %}: {% endif %}{{ committee }}</span>
45
63
  </div>
46
64
  </div>
47
65
 
@@ -112,16 +112,20 @@ b, strong {
112
112
  div.document-stage-band, div.document-type-band {
113
113
  background-color: #333333; }
114
114
 
115
+ a.FootnoteRef + a.FootnoteRef:before {
116
+ content: ", ";
117
+ vertical-align: super; }
118
+
115
119
  #brochure-band {
116
120
  background-color: #0AC442; }
117
121
 
118
122
  #brochure {
119
123
  border-bottom: solid 3px #0AC442; }
120
124
 
121
- #mis-en-pratique-band {
125
+ #mise-en-pratique-band {
122
126
  background-color: #540D6E; }
123
127
 
124
- #mis-en-pratique {
128
+ #mise-en-pratique {
125
129
  border-bottom: solid 3px #540D6E; }
126
130
 
127
131
  #rapport-band {
@@ -9,7 +9,7 @@
9
9
 
10
10
  $doctype-colors-list: (
11
11
  brochure: #0AC442,
12
- mis-en-pratique: #540D6E,
12
+ mise-en-pratique: #540D6E,
13
13
  rapport: #D183C9,
14
14
  monographie: #65AFFF,
15
15
  guide: #3A405A,
@@ -7,6 +7,21 @@ module IsoDoc
7
7
  module BIPM
8
8
  class HtmlConvert < IsoDoc::Generic::HtmlConvert
9
9
 
10
+ def middle(isoxml, out)
11
+ super
12
+ doccontrol isoxml, out
13
+ end
14
+
15
+ def doccontrol(isoxml, out)
16
+ c = isoxml.at(ns("//doccontrol")) or return
17
+ out.div **attr_code(class: "doccontrol") do |div|
18
+ clause_parse_title(c, div, c.at(ns("./title")), out)
19
+ c.children.reject { |c1| c1.name == "title" }.each do |c1|
20
+ parse(c1, div)
21
+ end
22
+ end
23
+ end
24
+
10
25
  include BaseConvert
11
26
  include Init
12
27
  end
@@ -1 +1,2 @@
1
1
  annex: Appendix
2
+ see: see
@@ -1,4 +1,5 @@
1
1
  annex: Annexe
2
+ see: voir
2
3
  doctype_dict:
3
4
  brochure: brochure
4
5
  mise-en-pratique: mise-en-pratique
@@ -7,17 +7,33 @@ module IsoDoc
7
7
  Metanorma::BIPM.configuration
8
8
  end
9
9
 
10
+ SI_ASPECT = %w(A_e_deltanu A_e cd_Kcd_h_deltanu cd_Kcd full K_k_deltanu
11
+ K_k kg_h_c_deltanu kg_h m_c_deltanu m_c mol_NA s_deltanu).freeze
12
+
13
+ def initialize(lang, script, labels)
14
+ super
15
+ here = File.join(File.dirname(__FILE__), "html", "si-aspect")
16
+ si_paths = []
17
+ SI_ASPECT.each do |s|
18
+ si_paths << File.expand_path(File.join(here, "#{s}.png"))
19
+ end
20
+ set(:si_aspect_index, SI_ASPECT)
21
+ set(:si_aspect_paths, si_paths)
22
+ end
23
+
24
+ TITLE = "//bibdata/title".freeze
25
+
10
26
  def title(isoxml, _out)
11
27
  lang1 = @lang == "fr" ? "fr" : "en"
12
28
  lang2 = @lang == "fr" ? "en" : "fr"
13
29
  set(:doctitle, @c.encode(isoxml&.at(
14
- ns("//bibdata/title[@type='main'][@language='#{lang1}']"))&.text || ""))
30
+ ns("#{TITLE}[@type='main'][@language='#{lang1}']"))&.text || ""))
15
31
  set(:docsubtitle, @c.encode(isoxml&.at(
16
- ns("//bibdata/title[@type='main'][@language='#{lang2}']"))&.text || ""))
32
+ ns("#{TITLE}[@type='main'][@language='#{lang2}']"))&.text || ""))
17
33
  set(:appendixtitle, @c.encode(isoxml&.at(
18
- ns("//bibdata/title[@type='appendix'][@language='#{lang1}']"))&.text || ""))
34
+ ns("#{TITLE}[@type='appendix'][@language='#{lang1}']"))&.text || ""))
19
35
  set(:appendixsubtitle, @c.encode(isoxml&.at(
20
- ns("//bibdata/title[@type='appendix'][@language='#{lang2}']"))&.text || ""))
36
+ ns("#{TITLE}[@type='appendix'][@language='#{lang2}']"))&.text || ""))
21
37
  end
22
38
 
23
39
  def status_print(status)
@@ -13,15 +13,97 @@ module IsoDoc
13
13
  end
14
14
 
15
15
  def annex1(f)
16
- lbl = @xrefs.anchor(f['id'], :label)
17
- if t = f.at(ns("./title"))
18
- t.children = "<strong>#{t.children.to_xml}</strong>"
16
+ return if f["unnumbered"] == "true"
17
+ lbl = @xrefs.anchor(f['id'], :label)
18
+ if t = f.at(ns("./title"))
19
+ t.children = "<strong>#{t.children.to_xml}</strong>"
20
+ end
21
+ prefix_name(f, ".<tab/>", lbl, "title")
22
+ end
23
+
24
+ def clause1(f)
25
+ return if f["unnumbered"] == "true"
26
+ return if f.at(("./ancestor::*[@unnumbered = 'true']"))
27
+ super
28
+ end
29
+
30
+ def conversions(docxml)
31
+ super
32
+ doccontrol docxml
33
+ end
34
+
35
+ def doccontrol docxml
36
+ return unless docxml.at(ns("//bibdata/relation[@type = 'supersedes']"))
37
+ clause = <<~END
38
+ <doccontrol>
39
+ <title>Document Control</title>
40
+ <table unnumbered="true"><tbody>
41
+ <tr><td>Authors:</td><td/><td>#{list_authors(docxml)}</td></tr>
42
+ <tr>#{list_draft(docxml, 1)&.map { |x| "<td>#{x}</td>" }&.join }
43
+ <td>#{list_cochairs(docxml)}</td></tr>
44
+ <tr>#{list_draft(docxml, 2)&.map { |x| "<td>#{x}</td>" }&.join }
45
+ <td>#{list_chairs(docxml)}</td></tr>
46
+ #{list_drafts(docxml)}
47
+ </tbody></table></doccontrol>
48
+ END
49
+ docxml.root << clause
50
+ end
51
+
52
+ def list_drafts(xml)
53
+ ret = ""
54
+ i = 3
55
+ while a = list_draft(xml, i)
56
+ ret += "<tr>#{list_draft(xml, i).map { |x| "<td>#{x}</td>" }.join }"\
57
+ "<td/></tr>"
58
+ i += 1
59
+ end
60
+ ret
61
+ end
62
+
63
+ def list_draft(xml, i)
64
+ return unless d =
65
+ xml.at(ns("//bibdata/relation[@type = 'supersedes'][#{i}]/bibitem"))
66
+ date = d&.at(ns("./date"))&.text
67
+ draft = d&.at(ns("./version/draft"))&.text and
68
+ draft = "Draft #{draft}"
69
+ edn = d&.at(ns("./edition"))&.text and
70
+ edn = "Edition #{edn}"
71
+ [date, [draft, edn].join(" ")]
72
+ end
73
+
74
+ def list_authors(xml)
75
+ ret = list_people(xml, "//bibdata/contributor[xmlns:role/@type = 'author']/person")
76
+ @i18n.multiple_and(ret, @i18n.get["and"])
77
+ end
78
+
79
+ def list_cochairs(xml)
80
+ ret = list_people(xml, "//bibdata/contributor[xmlns:role[contains(text(),'co-chair')]]/person")
81
+ role = xml&.at(ns("//bibdata/contributor[xmlns:role[contains(text(),'co-chair')]]/role"))&.text
82
+ label = ret.size > 1 && role ? "#{role}s" : role
83
+ "#{label}: #{@i18n.multiple_and(ret, @i18n.get["and"])}"
84
+ end
85
+
86
+ def list_chairs(xml)
87
+ ret = list_people(xml, "//bibdata/contributor[xmlns:role[contains(text(),'chair')][not(contains(text(),'co-chair'))]]/person")
88
+ role = xml&.at(ns("//bibdata/contributor[xmlns:role[contains(text(),'chair')][not(contains(text(),'co-chair'))]]/role"))&.text
89
+ label = ret.size > 1 && role ? "#{role}s" : role
90
+ "#{label}: #{@i18n.multiple_and(ret, @i18n.get["and"])}"
91
+ end
92
+
93
+ def list_people(xml, xpath)
94
+ ret = []
95
+ xml.xpath(ns(xpath)).each do |p|
96
+ name = p&.at(ns("./name/completename"))&.text
97
+ aff = p&.at(ns("./affiliation/organization/abbreviation"))&.text ||
98
+ p&.at(ns("./affiliation/organization/name"))&.text
99
+ c = name || ""
100
+ aff and c += " (#{aff})"
101
+ ret << c
102
+ end
103
+ ret
19
104
  end
20
- prefix_name(f, ".<tab/>", lbl, "title")
21
- end
22
105
 
23
106
  include Init
24
107
  end
25
108
  end
26
109
  end
27
-
@@ -1,10 +1,139 @@
1
1
  module IsoDoc
2
2
  module BIPM
3
3
  class Xref < IsoDoc::Xref
4
+ def clause_names(docxml, sect_num)
5
+ sect_num = 0
6
+ docxml.xpath(ns("//sections/clause[not(@unnumbered = 'true')] | "\
7
+ "//sections/terms[not(@unnumbered = 'true')] | "\
8
+ "//sections/definitions[not(@unnumbered = 'true')]")).
9
+ each_with_index do |c, i|
10
+ section_names(c, (i + sect_num), 1)
11
+ end
12
+ docxml.xpath(ns("//sections/clause[@unnumbered = 'true'] | "\
13
+ "//sections/terms[@unnumbered = 'true'] | "\
14
+ "//sections/definitions[@unnumbered = 'true']")).
15
+ each do |c|
16
+ unnumbered_section_names(c, 1)
17
+ end
18
+ end
19
+
20
+ NUMBERED_SUBCLAUSES = "./clause[not(@unnumbered = 'true')] | "\
21
+ "./references[not(@unnumbered = 'true')] | "\
22
+ "./term[not(@unnumbered = 'true')] | "\
23
+ "./terms[not(@unnumbered = 'true')] | "\
24
+ "./definitions[not(@unnumbered = 'true')]".freeze
25
+
26
+ UNNUMBERED_SUBCLAUSES = "./clause[@unnumbered = 'true'] | "\
27
+ "./references[@unnumbered = 'true'] | "\
28
+ "./term[@unnumbered = 'true'] | "\
29
+ "./terms[@unnumbered = 'true'] | "\
30
+ "./definitions[@unnumbered = 'true']".freeze
31
+
32
+ def section_names(clause, num, lvl)
33
+ return num if clause.nil?
34
+ num = num + 1
35
+ @anchors[clause["id"]] =
36
+ { label: num.to_s, xref: l10n("#{@labels["clause"]} #{num}"),
37
+ level: lvl, type: "clause" }
38
+ clause.xpath(ns(NUMBERED_SUBCLAUSES)).each_with_index do |c, i|
39
+ section_names1(c, "#{num}.#{i + 1}", lvl + 1)
40
+ end
41
+ clause.xpath(ns(UNNUMBERED_SUBCLAUSES)).each_with_index do |c, i|
42
+ unnumbered_section_names1(c, lvl + 1)
43
+ end
44
+ num
45
+ end
46
+
47
+ def unnumbered_section_names(clause, lvl)
48
+ return if clause.nil?
49
+ lbl = clause&.at(ns("./title"))&.text || "[#{clause["id"]}]"
50
+ @anchors[clause["id"]] =
51
+ { label: lbl, xref: l10n(%{"#{lbl}"}), level: lvl, type: "clause" }
52
+ clause.xpath(ns(SUBCLAUSES)).each_with_index do |c, i|
53
+ unnumbered_section_names1(c, lvl + 1)
54
+ end
55
+ end
56
+
57
+ def section_names1(clause, num, level)
58
+ @anchors[clause["id"]] =
59
+ { label: num, level: level, xref: l10n("#{@labels["clause"]} #{num}"),
60
+ type: "clause" }
61
+ clause.xpath(ns(NUMBERED_SUBCLAUSES)).each_with_index do |c, i|
62
+ section_names1(c, "#{num}.#{i + 1}", level + 1)
63
+ end
64
+ clause.xpath(ns(UNNUMBERED_SUBCLAUSES)).each_with_index do |c, i|
65
+ unnumbered_section_names1(c, lvl + 1)
66
+ end
67
+ end
68
+
69
+ def unnumbered_section_names1(clause, level)
70
+ lbl = clause&.at(ns("./title"))&.text || "[#{clause["id"]}]"
71
+ @anchors[clause["id"]] =
72
+ { label: lbl, xref: l10n(%{"#{lbl}"}), level: level, type: "clause" }
73
+ clause.xpath(ns(SUBCLAUSES)).each do |c|
74
+ unnumbered_section_names1(c, level + 1)
75
+ end
76
+ end
77
+
4
78
  def back_anchor_names(docxml)
5
79
  super
6
- docxml.xpath(ns("//annex")).each_with_index do |c, i|
7
- annex_names(c, (i+1).to_s)
80
+ docxml.xpath(ns("//annex[not(@unnumbered = 'true')]")).
81
+ each_with_index { |c, i| annex_names(c, (i+1).to_s) }
82
+ docxml.xpath(ns("//annex[@unnumbered = 'true']")).
83
+ each { |c| unnumbered_annex_names(c) }
84
+ end
85
+
86
+ def annex_names(clause, num)
87
+ @anchors[clause["id"]] =
88
+ { label: annex_name_lbl(clause, num), type: "clause", value: num.to_s,
89
+ xref: "#{@labels["annex"]} #{num}", level: 1 }
90
+ if a = single_annex_special_section(clause)
91
+ annex_names1(a, "#{num}", 1)
92
+ else
93
+ clause.xpath(ns(NUMBERED_SUBCLAUSES)).each_with_index do |c, i|
94
+ annex_names1(c, "#{num}.#{i + 1}", 2)
95
+ end
96
+ clause.xpath(ns(UNNUMBERED_SUBCLAUSES)).each do |c|
97
+ unnumbered_annex_names1(c, 2)
98
+ end
99
+ end
100
+ hierarchical_asset_names(clause, num)
101
+ end
102
+
103
+ def unnumbered_annex_names(clause)
104
+ lbl = clause&.at(ns("./title"))&.text || "[#{clause["id"]}]"
105
+ @anchors[clause["id"]] =
106
+ { label: lbl, type: "clause", value: "",
107
+ xref: l10n(%{"#{lbl}"}), level: 1 }
108
+ if a = single_annex_special_section(clause)
109
+ annex_names1(a, "#{num}", 1)
110
+ else
111
+ clause.xpath(ns(SUBCLAUSES)).each do |c|
112
+ unnumbered_annex_names1(c, 2)
113
+ end
114
+ end
115
+ hierarchical_asset_names(clause, lbl)
116
+ end
117
+
118
+ def annex_names1(clause, num, level)
119
+ @anchors[clause["id"]] =
120
+ { label: num, xref: "#{@labels["annex"]} #{num}",
121
+ level: level, type: "clause" }
122
+ clause.xpath(ns(NUMBERED_SUBCLAUSES)).each_with_index do |c, i|
123
+ annex_names1(c, "#{num}.#{i + 1}", level + 1)
124
+ end
125
+ clause.xpath(ns(UNNUMBERED_SUBCLAUSES)).each do |c|
126
+ unnumbered_annex_names1(c, level + 1)
127
+ end
128
+ end
129
+
130
+ def unnumbered_annex_names1(clause, level)
131
+ lbl = clause&.at(ns("./title"))&.text || "[#{clause["id"]}]"
132
+ @anchors[clause["id"]] =
133
+ { label: lbl, xref: l10n(%{"#{lbl}"}),
134
+ level: level, type: "clause" }
135
+ clause.xpath(ns(SUBCLAUSES)).each do |c|
136
+ unnumbered_annex_names1(c, level + 1)
8
137
  end
9
138
  end
10
139
 
@@ -1,5 +1,5 @@
1
1
  module Metanorma
2
2
  module BIPM
3
- VERSION = "0.0.2"
3
+ VERSION = "0.0.3"
4
4
  end
5
5
  end
@@ -3,6 +3,8 @@ organization_name_short: BIPM
3
3
  organization_name_long: Bureau International des poids et mesures
4
4
  document_namespace: https://www.metanorma.org/ns/bipm
5
5
  xml_root_tag: 'bipm-standard'
6
+ html_bodyfont: Times New Roman
7
+ html_headerfont: Times New Roman
6
8
  logo_path: lib/isodoc/bipm/html/logo.png
7
9
  i18nyaml:
8
10
  en: lib/isodoc/bipm/i18n-en.yaml
@@ -39,23 +41,57 @@ doctypes:
39
41
  default_doctype: brochure
40
42
  committees:
41
43
  - CGPM
44
+ - General Conference on Weights and Measures
45
+ - Conférence générale des poids et mesures
42
46
  - CIPM
47
+ - International Committee for Weights and Measures
48
+ - Comité international des poids et mesures
43
49
  - BIPM
50
+ - International Bureau of Weights and Measures
51
+ - Bureau International des Poids et Mesures
44
52
  - CCAUV
53
+ - Consultative Committee for Acoustics, Ultrasound and Vibration
54
+ - Comité consultatif de l'acoustique, des ultrasons et des vibrations
45
55
  - CCEM
56
+ - Consultative Committee for Electricity and Magnetism
57
+ - Comité consultatif d'électricité et magnétisme
46
58
  - CCL
59
+ - Consultative Committee for Length
60
+ - Comité consultatif des longueurs
47
61
  - CCM
62
+ - Consultative Committee for Mass and Related Quantities
63
+ - Comité consultatif pour la masse et les grandeurs apparentées
48
64
  - CCPR
65
+ - Consultative Committee for Photometry and Radiometry
66
+ - Comité consultatif de photométrie et radiométrie
49
67
  - CCQM
68
+ - "Consultative Committee for Amount of Substance: Metrology in Chemistry and Biology"
69
+ - "Comité consultatif pour la quantité de matière : métrologie en chimie et biologie"
50
70
  - CCRI
71
+ - Consultative Committee for Ionizing Radiation
72
+ - Comité consultatif des rayonnements ionisants
51
73
  - CCT
74
+ - Consultative Committee for Thermometry
75
+ - Comité consultatif de thermométrie
52
76
  - CCTF
77
+ - Consultative Committee for Time and Frequency
78
+ - Comité consultatif du temps et des fréquences
53
79
  - CCU
80
+ - Consultative Committee for Units
81
+ - Comité consultatif des unités
54
82
  - CCL-CCT
83
+ - Frequency Standards Working Group
55
84
  - JCGM
85
+ - Joint Committee for Guides in Metrology
86
+ - Comité commun pour les guides en métrologie
56
87
  - JCRB
88
+ - Joint Committee of the Regional Metrology Organizations and the BIPM
89
+ - Comité mixte des organisations régionales de métrologie et du BIPM
57
90
  - JCTLM
91
+ - Joint Committee for Traceability in Laboratory Medicine
92
+ - Comité commun pour la traçabilité en médecine de laboratoire
58
93
  - INetQI
94
+ - International Network on Quality Infrastructure
59
95
  metadata_extensions:
60
96
  comment-period:
61
97
  comment-period-from:
@@ -63,6 +99,7 @@ metadata_extensions:
63
99
  comment-period-to:
64
100
  _output: to
65
101
  si-aspect:
102
+ meeting-note:
66
103
  structuredidentifier:
67
104
  docnumber:
68
105
  partnumber: