metanorma-ogc 1.0.8 → 1.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/macos.yml +0 -1
  3. data/.github/workflows/ubuntu.yml +10 -7
  4. data/.github/workflows/windows.yml +0 -1
  5. data/Rakefile +2 -0
  6. data/lib/asciidoctor/ogc/biblio.rng +1 -1
  7. data/lib/asciidoctor/ogc/converter.rb +11 -16
  8. data/lib/asciidoctor/ogc/isodoc.rng +427 -0
  9. data/lib/asciidoctor/ogc/reqt.rng +23 -0
  10. data/lib/isodoc/ogc.rb +2 -0
  11. data/lib/isodoc/ogc/base_convert.rb +11 -55
  12. data/lib/isodoc/ogc/html/_coverpage.css +195 -0
  13. data/lib/isodoc/ogc/html/htmlstyle.css +1084 -0
  14. data/lib/isodoc/ogc/html/ogc.css +835 -0
  15. data/lib/isodoc/ogc/html/wordstyle.css +1253 -0
  16. data/lib/isodoc/ogc/html/wordstyle.scss +0 -1
  17. data/lib/isodoc/ogc/html_convert.rb +0 -5
  18. data/lib/isodoc/ogc/ogc.abstract-specification-topic.xsl +874 -310
  19. data/lib/isodoc/ogc/ogc.best-practice.xsl +874 -310
  20. data/lib/isodoc/ogc/ogc.change-request-supporting-document.xsl +874 -310
  21. data/lib/isodoc/ogc/ogc.community-practice.xsl +874 -310
  22. data/lib/isodoc/ogc/ogc.community-standard.xsl +874 -310
  23. data/lib/isodoc/ogc/ogc.discussion-paper.xsl +874 -310
  24. data/lib/isodoc/ogc/ogc.engineering-report.xsl +874 -310
  25. data/lib/isodoc/ogc/ogc.other.xsl +874 -310
  26. data/lib/isodoc/ogc/ogc.policy.xsl +874 -310
  27. data/lib/isodoc/ogc/ogc.reference-model.xsl +874 -310
  28. data/lib/isodoc/ogc/ogc.release-notes.xsl +874 -310
  29. data/lib/isodoc/ogc/ogc.standard.xsl +874 -310
  30. data/lib/isodoc/ogc/ogc.test-suite.xsl +874 -310
  31. data/lib/isodoc/ogc/ogc.user-guide.xsl +874 -310
  32. data/lib/isodoc/ogc/ogc.white-paper.xsl +874 -310
  33. data/lib/isodoc/ogc/pdf_convert.rb +0 -13
  34. data/lib/isodoc/ogc/presentation_xml_convert.rb +10 -0
  35. data/lib/isodoc/ogc/reqt.rb +10 -5
  36. data/lib/isodoc/ogc/sections.rb +9 -8
  37. data/lib/isodoc/ogc/word_convert.rb +4 -9
  38. data/lib/isodoc/ogc/{reqt_xref.rb → xref.rb} +67 -5
  39. data/lib/metanorma/ogc/processor.rb +6 -8
  40. data/lib/metanorma/ogc/version.rb +1 -1
  41. data/metanorma-ogc.gemspec +2 -1
  42. metadata +28 -10
@@ -19,19 +19,6 @@ module IsoDoc
19
19
  standard user-guide test-suite white-paper).include? doctype
20
20
  "ogc.#{doctype}.xsl"
21
21
  end
22
-
23
- def convert(filename, file = nil, debug = false)
24
- file = File.read(filename, encoding: "utf-8") if file.nil?
25
- docxml, outname_html, dir = convert_init(file, filename, debug)
26
- /\.xml$/.match(filename) or
27
- filename = Tempfile.open([outname_html, ".xml"], encoding: "utf-8") do |f|
28
- f.write file
29
- f.path
30
- end
31
- FileUtils.rm_rf dir
32
- ::Metanorma::Output::XslfoPdf.new.convert(
33
- filename, outname_html + ".pdf", File.join(@libdir, pdf_stylesheet(docxml)))
34
- end
35
22
  end
36
23
  end
37
24
  end
@@ -0,0 +1,10 @@
1
+ require_relative "base_convert"
2
+ require "isodoc"
3
+
4
+ module IsoDoc
5
+ module Ogc
6
+ class PresentationXMLConvert < IsoDoc::PresentationXMLConvert
7
+ end
8
+ end
9
+ end
10
+
@@ -1,5 +1,4 @@
1
1
  require "isodoc"
2
- require_relative "reqt_xref"
3
2
 
4
3
  module IsoDoc
5
4
  module Ogc
@@ -14,7 +13,8 @@ module IsoDoc
14
13
 
15
14
  def recommend_table_attr(node)
16
15
  attr_code(id: node["id"], class: recommend_class(node),
17
- style: "border-collapse:collapse;border-spacing:0;")
16
+ style: "border-collapse:collapse;border-spacing:0;"\
17
+ "#{keep_style(node)}")
18
18
  end
19
19
 
20
20
  REQ_TBL_ATTR =
@@ -29,7 +29,7 @@ module IsoDoc
29
29
  label, title, lbl = recommendation_labels(node)
30
30
  out.p **{ class: recommendation_class(node) } do |b|
31
31
  if inject_crossreference_reqt?(node, label)
32
- lbl = anchor(@reqtlabels[label.text], :xref, false)
32
+ lbl = @xrefs.anchor(@xrefs.reqtlabels[label.text], :xref, false)
33
33
  b << (lbl.nil? ? l10n("#{type}:") : l10n("#{lbl}:"))
34
34
  else
35
35
  b << (lbl.nil? ? l10n("#{type}:") : l10n("#{type} #{lbl}:"))
@@ -58,7 +58,7 @@ module IsoDoc
58
58
  # embedded reqts xref to top level reqts via label lookup
59
59
  def inject_crossreference_reqt?(node, label)
60
60
  !node.ancestors("requirement, recommendation, permission").empty? &&
61
- @reqtlabels[label&.text]
61
+ @xrefs.reqtlabels[label&.text]
62
62
  end
63
63
 
64
64
  def recommendation_attributes1(node)
@@ -105,12 +105,17 @@ module IsoDoc
105
105
  end
106
106
  end
107
107
 
108
+ def reqt_component_attrs(node)
109
+ attr_code(style: keep_style(node))
110
+ end
111
+
108
112
  def requirement_component_parse(node, out)
109
113
  return if node["exclude"] == "true"
110
114
  node.elements.size == 1 && node.first_element_child.name == "dl" and
111
115
  return reqt_dl(node.first_element_child, out)
112
116
  out.tr do |tr|
113
- tr.td **REQ_TBL_ATTR.merge(colspan: 2) do |td|
117
+ tr.td **REQ_TBL_ATTR.merge(colspan: 2).
118
+ merge(reqt_component_attrs(node)) do |td|
114
119
  node.children.each { |n| parse(n, td) }
115
120
  end
116
121
  end
@@ -3,7 +3,7 @@ module IsoDoc
3
3
  module BaseConvert
4
4
  def annex_name(annex, name, div)
5
5
  div.h1 **{ class: "Annex" } do |t|
6
- t << "#{anchor(annex['id'], :label)} "
6
+ t << "#{@xrefs.anchor(annex['id'], :label)} "
7
7
  t.br
8
8
  t.b do |b|
9
9
  name&.children&.each { |c2| parse(c2, b) }
@@ -24,12 +24,13 @@ module IsoDoc
24
24
  end
25
25
  end
26
26
 
27
- SUBMITTINGORGS =
28
- "//bibdata/contributor[role/@type = 'author']/organization/name".freeze
27
+ def submittingorgs_path
28
+ "//bibdata/contributor[role/@type = 'author']/organization/name"
29
+ end
29
30
 
30
31
  def submittingorgs(docxml, out)
31
32
  orgs = []
32
- docxml.xpath(ns(SUBMITTINGORGS)).each { |org| orgs << org.text }
33
+ docxml.xpath(ns(submittingorgs_path)).each { |org| orgs << org.text }
33
34
  return if orgs.empty?
34
35
  @prefacenum += 1
35
36
  out.div **{ class: "Section3" } do |div|
@@ -47,7 +48,7 @@ module IsoDoc
47
48
  f = docxml.at(ns("//submitters")) || return
48
49
  @prefacenum += 1
49
50
  out.div **{ class: "Section3" } do |div|
50
- clause_name(anchor(f['id'], :label), "Submitters", div,
51
+ clause_name(@xrefs.anchor(f['id'], :label), "Submitters", div,
51
52
  class: "IntroTitle")
52
53
  f.elements.each { |e| parse(e, div) unless e.name == "title" }
53
54
  end
@@ -70,7 +71,7 @@ module IsoDoc
70
71
  @prefacenum += 1
71
72
  page_break(out)
72
73
  out.div **attr_code(id: f["id"]) do |s|
73
- clause_name(anchor(f["id"], :label), @abstract_lbl, s,
74
+ clause_name(@xrefs.anchor(f["id"], :label), @abstract_lbl, s,
74
75
  class: "AbstractTitle")
75
76
  f.elements.each { |e| parse(e, s) unless e.name == "title" }
76
77
  end
@@ -81,7 +82,7 @@ module IsoDoc
81
82
  @prefacenum += 1
82
83
  page_break(out)
83
84
  out.div **attr_code(id: f["id"]) do |s|
84
- clause_name(anchor(f["id"], :label), @foreword_lbl, s,
85
+ clause_name(@xrefs.anchor(f["id"], :label), @foreword_lbl, s,
85
86
  class: "ForewordTitle")
86
87
  f.elements.each { |e| parse(e, s) unless e.name == "title" }
87
88
  end
@@ -91,7 +92,7 @@ module IsoDoc
91
92
  f = isoxml.at(ns("//acknowledgements")) || return
92
93
  @prefacenum += 1
93
94
  out.div **{ class: "Section3", id: f["id"] } do |div|
94
- clause_name(anchor(f["id"], :label), f&.at(ns("./title")), div,
95
+ clause_name(@xrefs.anchor(f["id"], :label), f&.at(ns("./title")), div,
95
96
  class: "IntroTitle")
96
97
  f.elements.each { |e| parse(e, div) unless e.name == "title" }
97
98
  end
@@ -11,7 +11,6 @@ module IsoDoc
11
11
  class WordConvert < IsoDoc::WordConvert
12
12
  def initialize(options)
13
13
  @libdir = File.dirname(__FILE__)
14
- @reqtlabels = {}
15
14
  super
16
15
  end
17
16
 
@@ -37,10 +36,6 @@ module IsoDoc
37
36
  }
38
37
  end
39
38
 
40
- def metadata_init(lang, script, labels)
41
- @meta = Metadata.new(lang, script, labels)
42
- end
43
-
44
39
  def make_body(xml, docxml)
45
40
  body_attr = { lang: "EN-US", link: "blue", vlink: "#954F72" }
46
41
  xml.body **body_attr do |body|
@@ -72,15 +67,15 @@ module IsoDoc
72
67
  <span lang="EN-GB"><span
73
68
  style='mso-element:field-begin'></span><span
74
69
  style='mso-spacerun:yes'>&#xA0;</span>TOC
75
- \\h \\z \\t &quot;RecommendationTitle,1&quot; <span
76
- style='mso-element:field-separator'></span></span>
70
+ \\h \\z \\t &quot;RecommendationTitle,recommendationtitle&quot;
71
+ <span style='mso-element:field-separator'></span></span>
77
72
  TOC
78
73
 
79
74
  WORD_TOC_TABLE_PREFACE1 = <<~TOC.freeze
80
75
  <span lang="EN-GB"><span
81
76
  style='mso-element:field-begin'></span><span
82
77
  style='mso-spacerun:yes'>&#xA0;</span>TOC
83
- \\h \\z \\t &quot;TableTitle,1&quot; <span
78
+ \\h \\z \\t &quot;TableTitle,tabletitle&quot; <span
84
79
  style='mso-element:field-separator'></span></span>
85
80
  TOC
86
81
 
@@ -88,7 +83,7 @@ module IsoDoc
88
83
  <span lang="EN-GB"><span
89
84
  style='mso-element:field-begin'></span><span
90
85
  style='mso-spacerun:yes'>&#xA0;</span>TOC
91
- \\h \\z \\t &quot;FigureTitle,1&quot; <span
86
+ \\h \\z \\t &quot;FigureTitle,figuretitle&quot; <span
92
87
  style='mso-element:field-separator'></span></span>
93
88
  TOC
94
89
 
@@ -1,10 +1,19 @@
1
1
  module IsoDoc
2
2
  module Ogc
3
- module BaseConvert
4
- FIRST_LVL_REQ = IsoDoc::Function::XrefGen::FIRST_LVL_REQ
3
+ class Xref < IsoDoc::Xref
4
+ def initialize(lang, script, klass, labels, options)
5
+ @reqtlabels = {}
6
+ super
7
+ end
8
+
9
+ def reqtlabels
10
+ @reqtlabels
11
+ end
12
+
13
+ FIRST_LVL_REQ = IsoDoc::XrefGen::Blocks::FIRST_LVL_REQ
5
14
 
6
15
  def sequential_permission_names(clause, klass, label)
7
- c = ::IsoDoc::Function::XrefGen::Counter.new
16
+ c = ::IsoDoc::XrefGen::Counter.new
8
17
  clause.xpath(ns(".//#{klass}#{FIRST_LVL_REQ}")).each do |t|
9
18
  next if t["id"].nil? || t["id"].empty?
10
19
  id = c.increment(t).print
@@ -40,7 +49,7 @@ module IsoDoc
40
49
  end
41
50
 
42
51
  def sequential_permission_names1(block, lbl, klass, label)
43
- c = ::IsoDoc::Function::XrefGen::Counter.new
52
+ c = ::IsoDoc::XrefGen::Counter.new
44
53
  block.xpath(ns("./#{klass}")).each do |t|
45
54
  next if t["id"].nil? || t["id"].empty?
46
55
  id = "#{lbl}#{hierfigsep}#{c.increment(t).print}"
@@ -82,7 +91,7 @@ module IsoDoc
82
91
  end
83
92
 
84
93
  def hierarchical_permission_names(clause, num, klass, label)
85
- c = ::IsoDoc::Function::XrefGen::Counter.new
94
+ c = ::IsoDoc::XrefGen::Counter.new
86
95
  clause.xpath(ns(".//#{klass}#{FIRST_LVL_REQ}")).each do |t|
87
96
  next if t["id"].nil? || t["id"].empty?
88
97
  lbl = "#{num}#{hiersep}#{c.increment(t).print}"
@@ -91,6 +100,59 @@ module IsoDoc
91
100
  sequential_permission_children(t, lbl)
92
101
  end
93
102
  end
103
+
104
+ def initial_anchor_names(d)
105
+ @prefacenum = 0
106
+ preface_names_numbered(d.at(ns("//preface/abstract")))
107
+ @prefacenum += 1 if d.at(ns("//keyword"))
108
+ preface_names_numbered(d.at(ns("//foreword")))
109
+ preface_names_numbered(d.at(ns("//introduction")))
110
+ @prefacenum += 1 if d.at(ns(@klass.submittingorgs_path))
111
+ preface_names_numbered(d.at(ns("//submitters")))
112
+ d.xpath(ns("//preface/clause")).each do |c|
113
+ preface_names_numbered(c)
114
+ end
115
+ preface_names_numbered(d.at(ns("//acknowledgements")))
116
+ sequential_asset_names(d.xpath(ns(
117
+ "//preface/abstract | //foreword | //introduction | "\
118
+ "//submitters | //acknowledgements | //preface/clause")))
119
+ n = section_names(d.at(ns("//clause[title = 'Scope']")), 0, 1)
120
+ n = section_names(d.at(ns("//clause[title = 'Conformance']")), n, 1)
121
+ n = section_names(d.at(ns(
122
+ "//references[title = 'Normative References' or "\
123
+ "title = 'Normative references']")), n, 1)
124
+ n = section_names(
125
+ d.at(ns("//sections/terms | //sections/clause[descendant::terms]")),
126
+ n, 1)
127
+ n = section_names(d.at(ns("//sections/definitions")), n, 1)
128
+ middle_section_asset_names(d)
129
+ clause_names(d, n)
130
+ termnote_anchor_names(d)
131
+ termexample_anchor_names(d)
132
+ end
133
+
134
+ def middle_section_asset_names(d)
135
+ middle_sections = "//clause[title = 'Scope' or title = 'Conformance'] "\
136
+ "| //foreword | //introduction | //preface/abstract | "\
137
+ "//submitters | //acknowledgements | //preface/clause | "\
138
+ "//references[title = 'Normative References' or title = "\
139
+ "'Normative references'] | //sections/terms | "\
140
+ "//sections/definitions | //clause[parent::sections]"
141
+ sequential_asset_names(d.xpath(ns(middle_sections)))
142
+ end
143
+
144
+ def preface_names_numbered(clause)
145
+ return if clause.nil?
146
+ @prefacenum += 1
147
+ pref = RomanNumerals.to_roman(@prefacenum).downcase
148
+ @anchors[clause["id"]] =
149
+ { label: pref,
150
+ level: 1, xref: preface_clause_name(clause), type: "clause" }
151
+ clause.xpath(ns("./clause | ./terms | ./term | ./definitions | "\
152
+ "./references")).each_with_index do |c, i|
153
+ section_names1(c, "#{pref}.#{i + 1}", 2)
154
+ end
155
+ end
94
156
  end
95
157
  end
96
158
  end
@@ -30,18 +30,16 @@ module Metanorma
30
30
  "Metanorma::Ogc #{Metanorma::Ogc::VERSION}"
31
31
  end
32
32
 
33
- def input_to_isodoc(file, filename)
34
- Metanorma::Input::Asciidoc.new.process(file, filename, @asciidoctor_backend)
35
- end
36
-
37
- def output(isodoc_node, outname, format, options={})
33
+ def output(isodoc_node, inname, outname, format, options={})
38
34
  case format
39
35
  when :html
40
- IsoDoc::Ogc::HtmlConvert.new(options).convert(outname, isodoc_node)
36
+ IsoDoc::Ogc::HtmlConvert.new(options).convert(inname, isodoc_node, nil, outname)
41
37
  when :doc
42
- IsoDoc::Ogc::WordConvert.new(options).convert(outname, isodoc_node)
38
+ IsoDoc::Ogc::WordConvert.new(options).convert(inname, isodoc_node, nil, outname)
43
39
  when :pdf
44
- IsoDoc::Ogc::PdfConvert.new(options).convert(outname, isodoc_node)
40
+ IsoDoc::Ogc::PdfConvert.new(options).convert(inname, isodoc_node, nil, outname)
41
+ when :presentation
42
+ IsoDoc::Ogc::PresentationXMLConvert.new(options).convert(inname, isodoc_node, nil, outname)
45
43
  else
46
44
  super
47
45
  end
@@ -1,5 +1,5 @@
1
1
  module Metanorma
2
2
  module Ogc
3
- VERSION = "1.0.8"
3
+ VERSION = "1.1.3"
4
4
  end
5
5
  end
@@ -27,10 +27,11 @@ Gem::Specification.new do |spec|
27
27
  spec.add_dependency "htmlentities", "~> 4.3.4"
28
28
  spec.add_dependency "ruby-jing"
29
29
  spec.add_dependency "metanorma-standoc", "~> 1.4.0"
30
- spec.add_dependency "isodoc", "~> 1.0.20"
30
+ spec.add_dependency "isodoc", "~> 1.1.0"
31
31
  spec.add_dependency "iso-639"
32
32
 
33
33
  spec.add_development_dependency "byebug", "~> 9.1"
34
+ spec.add_development_dependency "sassc", "2.4.0"
34
35
  spec.add_development_dependency "equivalent-xml", "~> 0.6"
35
36
  spec.add_development_dependency "guard", "~> 2.14"
36
37
  spec.add_development_dependency "guard-rspec", "~> 4.7"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metanorma-ogc
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.8
4
+ version: 1.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-06-08 00:00:00.000000000 Z
11
+ date: 2020-07-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: htmlentities
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 1.0.20
61
+ version: 1.1.0
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 1.0.20
68
+ version: 1.1.0
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: iso-639
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: '9.1'
97
+ - !ruby/object:Gem::Dependency
98
+ name: sassc
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '='
102
+ - !ruby/object:Gem::Version
103
+ version: 2.4.0
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '='
109
+ - !ruby/object:Gem::Version
110
+ version: 2.4.0
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: equivalent-xml
99
113
  requirement: !ruby/object:Gem::Requirement
@@ -243,15 +257,19 @@ files:
243
257
  - lib/isodoc/ogc.rb
244
258
  - lib/isodoc/ogc/base_convert.rb
245
259
  - lib/isodoc/ogc/biblio.rb
260
+ - lib/isodoc/ogc/html/_coverpage.css
246
261
  - lib/isodoc/ogc/html/_coverpage.scss
247
262
  - lib/isodoc/ogc/html/header.html
248
263
  - lib/isodoc/ogc/html/html_ogc_intro.html
249
264
  - lib/isodoc/ogc/html/html_ogc_titlepage.html
265
+ - lib/isodoc/ogc/html/htmlstyle.css
250
266
  - lib/isodoc/ogc/html/htmlstyle.scss
267
+ - lib/isodoc/ogc/html/ogc.css
251
268
  - lib/isodoc/ogc/html/ogc.scss
252
269
  - lib/isodoc/ogc/html/scripts.html
253
270
  - lib/isodoc/ogc/html/word_ogc_intro.html
254
271
  - lib/isodoc/ogc/html/word_ogc_titlepage.html
272
+ - lib/isodoc/ogc/html/wordstyle.css
255
273
  - lib/isodoc/ogc/html/wordstyle.scss
256
274
  - lib/isodoc/ogc/html_convert.rb
257
275
  - lib/isodoc/ogc/i18n-en.yaml
@@ -272,10 +290,11 @@ files:
272
290
  - lib/isodoc/ogc/ogc.user-guide.xsl
273
291
  - lib/isodoc/ogc/ogc.white-paper.xsl
274
292
  - lib/isodoc/ogc/pdf_convert.rb
293
+ - lib/isodoc/ogc/presentation_xml_convert.rb
275
294
  - lib/isodoc/ogc/reqt.rb
276
- - lib/isodoc/ogc/reqt_xref.rb
277
295
  - lib/isodoc/ogc/sections.rb
278
296
  - lib/isodoc/ogc/word_convert.rb
297
+ - lib/isodoc/ogc/xref.rb
279
298
  - lib/metanorma-ogc.rb
280
299
  - lib/metanorma/ogc.rb
281
300
  - lib/metanorma/ogc/processor.rb
@@ -285,7 +304,7 @@ homepage: https://github.com/metanorma/metanorma-ogc
285
304
  licenses:
286
305
  - BSD-2-Clause
287
306
  metadata: {}
288
- post_install_message:
307
+ post_install_message:
289
308
  rdoc_options: []
290
309
  require_paths:
291
310
  - lib
@@ -300,9 +319,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
300
319
  - !ruby/object:Gem::Version
301
320
  version: '0'
302
321
  requirements: []
303
- rubyforge_project:
304
- rubygems_version: 2.7.6
305
- signing_key:
322
+ rubygems_version: 3.0.3
323
+ signing_key:
306
324
  specification_version: 4
307
325
  summary: Metanorma for the Open Geospatial Consortium.
308
326
  test_files: []