metanorma-iso 2.2.0 → 2.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0af0800e26b96ca0808ae0be76f68c3311325d2271c10a1c91cd112bc041dcc4
4
- data.tar.gz: 587c652c18c8845754062388caf26d4968b6d1f7742bb049a04fe41b88dae29a
3
+ metadata.gz: 64ff031dbcbae3aeb600c99c3c200b27983e96d865a49c52413245c470885824
4
+ data.tar.gz: 81ea3cfa5672feae8e31aff1341224310f15f85d74d85a0ca017e3ceba829421
5
5
  SHA512:
6
- metadata.gz: 9e0ad39b60566f4ddf7aee46f15c9cb68c32e44e61a1f55bf26a64b7ffbe5c65ab8015dc41f4b95afdf06e79fa2c0c46fe75b3ccd93a6d19ebbfb6747fbb4f85
7
- data.tar.gz: 695551d2e13d64d7b522634fcfb6e81a002e9f0a1c0440cc6ef1614b8bc53546f23d8c2b53159665644f5e31bd2dde43a610930e01fdf6a5850675deac68fcb7
6
+ metadata.gz: fdb2b2f7a30d439df33decf4e0f97fedf91f7545aa7ee7f1c43e9a4a66b21ef942ddb7e9f77520ebdbb68dcc509332e0651a866f2ec33e98835e70c67f641546
7
+ data.tar.gz: 03500425f5f236f69010d688aaa906719f52eac6695d4dbe1ed78d6b63e6d2943a8b2299f8d19a05ae18570deb6f3d22b380a6f1b69da4d386d2d817da42273e
@@ -78,3 +78,5 @@ requirements:
78
78
  modspec:
79
79
  description: Description
80
80
  provisions: Provisions
81
+ conformancetests: Conformance tests
82
+ # pending proper handling of inflection
@@ -72,3 +72,4 @@ requirements:
72
72
  modspec:
73
73
  description: Description
74
74
  provisions: Dispositions
75
+ conformancetests: Tests de conformité
@@ -5,6 +5,7 @@
5
5
  <xsl:key name="kfn" match="*[local-name() = 'fn'][not(ancestor::*[(local-name() = 'table' or local-name() = 'figure') and not(ancestor::*[local-name() = 'name'])])]" use="@reference"/>
6
6
 
7
7
  <xsl:key name="attachments" match="iso:eref[java:endsWith(java:java.lang.String.new(@bibitemid),'.exp')]" use="@bibitemid"/>
8
+ <xsl:key name="attachments2" match="iso:eref[contains(@bibitemid,'.exp_')]" use="@bibitemid"/>
8
9
 
9
10
  <xsl:variable name="namespace_full">https://www.metanorma.org/ns/iso</xsl:variable>
10
11
 
@@ -435,6 +436,15 @@
435
436
  <xsl:variable name="url" select="concat('url(file:',$basepath, @bibitemid, ')')"/>
436
437
  <pdf:embedded-file src="{$url}" filename="{@bibitemid}"/>
437
438
  </xsl:for-each>
439
+ <xsl:for-each select="//*[local-name() = 'eref'][generate-id(.)=generate-id(key('attachments2',@bibitemid)[1])]">
440
+ <xsl:variable name="bibitemid" select="@bibitemid"/>
441
+ <xsl:variable name="uri" select="normalize-space($bibitems/*[local-name() ='bibitem'][@hidden = 'true'][@id = $bibitemid][1]/*[local-name() = 'uri'][@type='citation'])"/>
442
+ <xsl:if test="$uri != ''">
443
+ <xsl:variable name="url" select="concat('url(file:',$basepath, $uri, ')')"/>
444
+ <xsl:variable name="filename" select="concat(substring-before($bibitemid, '.exp_'), '.exp')"/>
445
+ <pdf:embedded-file src="{$url}" filename="{$filename}"/>
446
+ </xsl:if>
447
+ </xsl:for-each>
438
448
  </fo:declarations>
439
449
 
440
450
  <xsl:call-template name="addBookmarks">
@@ -1948,6 +1958,28 @@
1948
1958
  </fo:inline>
1949
1959
  </xsl:template>
1950
1960
 
1961
+ <xsl:template match="*[local-name() = 'eref'][contains(@bibitemid,'.exp_')]" priority="2">
1962
+ <xsl:variable name="bibitemid" select="@bibitemid"/>
1963
+ <xsl:variable name="uri" select="normalize-space($bibitems/*[local-name() ='bibitem'][@hidden = 'true'][@id = $bibitemid][1]/*[local-name() = 'uri'][@type='citation'])"/>
1964
+ <xsl:choose>
1965
+ <xsl:when test="$uri != ''">
1966
+ <xsl:variable name="filename" select="concat(substring-before($bibitemid, '.exp_'), '.exp')"/>
1967
+ <fo:inline xsl:use-attribute-sets="eref-style">
1968
+ <xsl:variable name="url" select="concat('url(embedded-file:', $filename, ')')"/>
1969
+ <fo:basic-link external-destination="{$url}" fox:alt-text="{@citeas}">
1970
+ <xsl:if test="normalize-space(@citeas) = ''">
1971
+ <xsl:attribute name="fox:alt-text"><xsl:value-of select="."/></xsl:attribute>
1972
+ </xsl:if>
1973
+ <xsl:apply-templates/>
1974
+ </fo:basic-link>
1975
+ </fo:inline>
1976
+ </xsl:when>
1977
+ <xsl:otherwise>
1978
+ <xsl:call-template name="eref"/>
1979
+ </xsl:otherwise>
1980
+ </xsl:choose>
1981
+ </xsl:template>
1982
+
1951
1983
  <!-- =================== -->
1952
1984
  <!-- Index processing -->
1953
1985
  <!-- =================== -->
@@ -9049,7 +9081,7 @@
9049
9081
  <!-- ====== -->
9050
9082
  <!-- eref -->
9051
9083
  <!-- ====== -->
9052
- <xsl:template match="*[local-name() = 'eref']">
9084
+ <xsl:template match="*[local-name() = 'eref']" name="eref">
9053
9085
  <xsl:variable name="current_bibitemid" select="@bibitemid"/>
9054
9086
  <!-- <xsl:variable name="external-destination" select="normalize-space(key('bibitems', $current_bibitemid)/*[local-name() = 'uri'][@type = 'citation'])"/> -->
9055
9087
  <xsl:variable name="external-destination" select="normalize-space($bibitems/*[local-name() ='bibitem'][@id = $current_bibitemid]/*[local-name() = 'uri'][@type = 'citation'])"/>
@@ -5,6 +5,7 @@
5
5
  <xsl:key name="kfn" match="*[local-name() = 'fn'][not(ancestor::*[(local-name() = 'table' or local-name() = 'figure') and not(ancestor::*[local-name() = 'name'])])]" use="@reference"/>
6
6
 
7
7
  <xsl:key name="attachments" match="iso:eref[java:endsWith(java:java.lang.String.new(@bibitemid),'.exp')]" use="@bibitemid"/>
8
+ <xsl:key name="attachments2" match="iso:eref[contains(@bibitemid,'.exp_')]" use="@bibitemid"/>
8
9
 
9
10
  <xsl:variable name="namespace_full">https://www.metanorma.org/ns/iso</xsl:variable>
10
11
 
@@ -435,6 +436,15 @@
435
436
  <xsl:variable name="url" select="concat('url(file:',$basepath, @bibitemid, ')')"/>
436
437
  <pdf:embedded-file src="{$url}" filename="{@bibitemid}"/>
437
438
  </xsl:for-each>
439
+ <xsl:for-each select="//*[local-name() = 'eref'][generate-id(.)=generate-id(key('attachments2',@bibitemid)[1])]">
440
+ <xsl:variable name="bibitemid" select="@bibitemid"/>
441
+ <xsl:variable name="uri" select="normalize-space($bibitems/*[local-name() ='bibitem'][@hidden = 'true'][@id = $bibitemid][1]/*[local-name() = 'uri'][@type='citation'])"/>
442
+ <xsl:if test="$uri != ''">
443
+ <xsl:variable name="url" select="concat('url(file:',$basepath, $uri, ')')"/>
444
+ <xsl:variable name="filename" select="concat(substring-before($bibitemid, '.exp_'), '.exp')"/>
445
+ <pdf:embedded-file src="{$url}" filename="{$filename}"/>
446
+ </xsl:if>
447
+ </xsl:for-each>
438
448
  </fo:declarations>
439
449
 
440
450
  <xsl:call-template name="addBookmarks">
@@ -1948,6 +1958,28 @@
1948
1958
  </fo:inline>
1949
1959
  </xsl:template>
1950
1960
 
1961
+ <xsl:template match="*[local-name() = 'eref'][contains(@bibitemid,'.exp_')]" priority="2">
1962
+ <xsl:variable name="bibitemid" select="@bibitemid"/>
1963
+ <xsl:variable name="uri" select="normalize-space($bibitems/*[local-name() ='bibitem'][@hidden = 'true'][@id = $bibitemid][1]/*[local-name() = 'uri'][@type='citation'])"/>
1964
+ <xsl:choose>
1965
+ <xsl:when test="$uri != ''">
1966
+ <xsl:variable name="filename" select="concat(substring-before($bibitemid, '.exp_'), '.exp')"/>
1967
+ <fo:inline xsl:use-attribute-sets="eref-style">
1968
+ <xsl:variable name="url" select="concat('url(embedded-file:', $filename, ')')"/>
1969
+ <fo:basic-link external-destination="{$url}" fox:alt-text="{@citeas}">
1970
+ <xsl:if test="normalize-space(@citeas) = ''">
1971
+ <xsl:attribute name="fox:alt-text"><xsl:value-of select="."/></xsl:attribute>
1972
+ </xsl:if>
1973
+ <xsl:apply-templates/>
1974
+ </fo:basic-link>
1975
+ </fo:inline>
1976
+ </xsl:when>
1977
+ <xsl:otherwise>
1978
+ <xsl:call-template name="eref"/>
1979
+ </xsl:otherwise>
1980
+ </xsl:choose>
1981
+ </xsl:template>
1982
+
1951
1983
  <!-- =================== -->
1952
1984
  <!-- Index processing -->
1953
1985
  <!-- =================== -->
@@ -9049,7 +9081,7 @@
9049
9081
  <!-- ====== -->
9050
9082
  <!-- eref -->
9051
9083
  <!-- ====== -->
9052
- <xsl:template match="*[local-name() = 'eref']">
9084
+ <xsl:template match="*[local-name() = 'eref']" name="eref">
9053
9085
  <xsl:variable name="current_bibitemid" select="@bibitemid"/>
9054
9086
  <!-- <xsl:variable name="external-destination" select="normalize-space(key('bibitems', $current_bibitemid)/*[local-name() = 'uri'][@type = 'citation'])"/> -->
9055
9087
  <xsl:variable name="external-destination" select="normalize-space($bibitems/*[local-name() ='bibitem'][@id = $current_bibitemid]/*[local-name() = 'uri'][@type = 'citation'])"/>
@@ -1,3 +1,5 @@
1
+ require_relative "xref_section"
2
+
1
3
  module IsoDoc
2
4
  module Iso
3
5
  class Counter < IsoDoc::XrefGen::Counter
@@ -17,11 +19,10 @@ module IsoDoc
17
19
 
18
20
  def initial_anchor_names_amd(doc)
19
21
  if @parse_settings.empty? || @parse_settings[:clauses]
20
- doc.xpath(ns("//preface/*")).each do |c|
21
- c.element? and preface_names(c)
22
- end
23
- doc.xpath(ns("//sections/clause")).each do |c|
24
- c.element? and preface_names(c)
22
+ ["//preface/*", "//sections/clause"].each do |xpath|
23
+ doc.xpath(ns(xpath)).each do |c|
24
+ c.element? and preface_names(c)
25
+ end
25
26
  end
26
27
  end
27
28
  end
@@ -49,76 +50,6 @@ module IsoDoc
49
50
  end
50
51
  end
51
52
 
52
- # we can reference 0-number clauses in introduction
53
- def introduction_names(clause)
54
- return if clause.nil?
55
-
56
- clause.at(ns("./clause")) and
57
- @anchors[clause["id"]] = { label: "0", level: 1, type: "clause",
58
- xref: clause.at(ns("./title"))&.text }
59
- i = Counter.new
60
- clause.xpath(ns("./clause")).each do |c|
61
- i.increment(c)
62
- section_names1(c, "0.#{i.print}", 2)
63
- end
64
- end
65
-
66
- def annex_names(clause, num)
67
- appendix_names(clause, num)
68
- super
69
- end
70
-
71
- def appendix_names(clause, _num)
72
- i = Counter.new
73
- clause.xpath(ns("./appendix")).each do |c|
74
- i.increment(c)
75
- @anchors[c["id"]] =
76
- anchor_struct(i.print, nil, @labels["appendix"],
77
- "clause").merge(level: 2, subtype: "annex",
78
- container: clause["id"])
79
- j = Counter.new
80
- c.xpath(ns("./clause | ./references")).each do |c1|
81
- j.increment(c1)
82
- lbl = "#{@labels['appendix']} #{i.print}.#{j.print}"
83
- appendix_names1(c1, l10n(lbl), 3, clause["id"])
84
- end
85
- end
86
- end
87
-
88
- # subclauses are not prefixed with "Clause"
89
- # retaining subtype for the semantics
90
- def section_names1(clause, num, level)
91
- @anchors[clause["id"]] =
92
- { label: num, level: level, xref: num, subtype: "clause" }
93
- i = Counter.new
94
- clause.xpath(ns("./clause | ./terms | ./term | ./definitions | "\
95
- "./references"))
96
- .each do |c|
97
- i.increment(c)
98
- section_names1(c, "#{num}.#{i.print}", level + 1)
99
- end
100
- end
101
-
102
- def annex_names1(clause, num, level)
103
- @anchors[clause["id"]] = { label: num, xref: num, level: level,
104
- subtype: "annex" }
105
- i = Counter.new
106
- clause.xpath(ns("./clause | ./references")).each do |c|
107
- i.increment(c)
108
- annex_names1(c, "#{num}.#{i.print}", level + 1)
109
- end
110
- end
111
-
112
- def appendix_names1(clause, num, level, container)
113
- @anchors[clause["id"]] = { label: num, xref: num, level: level,
114
- container: container }
115
- i = Counter.new
116
- clause.xpath(ns("./clause | ./references")).each do |c|
117
- i.increment(c)
118
- appendix_names1(c, "#{num}.#{i.print}", level + 1, container)
119
- end
120
- end
121
-
122
53
  def hierarchical_formula_names(clause, num)
123
54
  c = IsoDoc::XrefGen::Counter.new
124
55
  clause.xpath(ns(".//formula")).each do |t|
@@ -132,10 +63,10 @@ module IsoDoc
132
63
  end
133
64
  end
134
65
 
135
- def figure_anchor(elem, sublabel, label)
66
+ def figure_anchor(elem, sublabel, label, klass)
136
67
  @anchors[elem["id"]] = anchor_struct(
137
68
  (sublabel ? "#{label} #{sublabel}" : label),
138
- nil, @labels["figure"], "figure", elem["unnumbered"]
69
+ nil, @labels[klass] || klass.capitalize, klass, elem["unnumbered"]
139
70
  )
140
71
  sublabel && elem["unnumbered"] != "true" and
141
72
  @anchors[elem["id"]][:label] = sublabel
@@ -143,27 +74,49 @@ module IsoDoc
143
74
 
144
75
  def sequential_figure_names(clause)
145
76
  j = 0
146
- clause.xpath(ns(".//figure | .//sourcecode[not(ancestor::example)]"))
77
+ clause.xpath(ns(FIGURE_NO_CLASS)).noblank
147
78
  .each_with_object(IsoDoc::XrefGen::Counter.new) do |t, c|
148
79
  j = subfigure_increment(j, c, t)
149
80
  sublabel = j.zero? ? nil : "#{(j + 96).chr})"
150
- next if blank?(t["id"])
81
+ figure_anchor(t, sublabel, c.print, "figure")
82
+ end
83
+ sequential_figure_class_names(clause)
84
+ end
151
85
 
152
- figure_anchor(t, sublabel, c.print)
86
+ def sequential_figure_class_names(clause)
87
+ c = {}
88
+ j = 0
89
+ clause.xpath(ns(".//figure[@class][not(@class = 'pseudocode')]"))
90
+ .each do |t|
91
+ c[t["class"]] ||= IsoDoc::XrefGen::Counter.new
92
+ j = subfigure_increment(j, c[t["class"]], t)
93
+ sublabel = j.zero? ? nil : "#{(j + 96).chr})"
94
+ figure_anchor(t, sublabel, c.print, t["class"])
153
95
  end
154
96
  end
155
97
 
156
98
  def hierarchical_figure_names(clause, num)
157
99
  c = IsoDoc::XrefGen::Counter.new
158
100
  j = 0
159
- clause.xpath(ns(".//figure | .//sourcecode[not(ancestor::example)]"))
160
- .each do |t|
101
+ clause.xpath(ns(FIGURE_NO_CLASS)).noblank.each do |t|
161
102
  j = subfigure_increment(j, c, t)
162
103
  label = "#{num}#{hiersep}#{c.print}"
163
104
  sublabel = j.zero? ? nil : "#{(j + 96).chr})"
164
- next if blank?(t["id"])
105
+ figure_anchor(t, sublabel, label, "figure")
106
+ end
107
+ hierarchical_figure_class_names(clause, num)
108
+ end
165
109
 
166
- figure_anchor(t, sublabel, label)
110
+ def hierarchical_figure_class_names(clause, num)
111
+ c = {}
112
+ j = 0
113
+ clause.xpath(ns(".//figure[@class][not(@class = 'pseudocode')]"))
114
+ .noblank.each do |t|
115
+ c[t["class"]] ||= IsoDoc::XrefGen::Counter.new
116
+ j = subfigure_increment(j, c[t["class"]], t)
117
+ label = "#{num}#{hiersep}#{c.print}"
118
+ sublabel = j.zero? ? nil : "#{(j + 96).chr})"
119
+ figure_anchor(t, sublabel, label, t["class"])
167
120
  end
168
121
  end
169
122
 
@@ -180,10 +133,6 @@ module IsoDoc
180
133
  end
181
134
  end
182
135
 
183
- def annex_name_lbl(clause, num)
184
- super.sub(%r{<br/>(.*)$}, "<br/><span class='obligation'>\\1</span>")
185
- end
186
-
187
136
  def list_anchor_names(sections)
188
137
  sections.each do |s|
189
138
  notes = s.xpath(ns(".//ol")) - s.xpath(ns(".//clause//ol")) -
@@ -0,0 +1,79 @@
1
+ module IsoDoc
2
+ module Iso
3
+ class Xref < IsoDoc::Xref
4
+ # we can reference 0-number clauses in introduction
5
+ def introduction_names(clause)
6
+ return if clause.nil?
7
+
8
+ clause.at(ns("./clause")) and
9
+ @anchors[clause["id"]] = { label: "0", level: 1, type: "clause",
10
+ xref: clause.at(ns("./title"))&.text }
11
+ i = Counter.new
12
+ clause.xpath(ns("./clause")).each do |c|
13
+ i.increment(c)
14
+ section_names1(c, "0.#{i.print}", 2)
15
+ end
16
+ end
17
+
18
+ def annex_names(clause, num)
19
+ appendix_names(clause, num)
20
+ super
21
+ end
22
+
23
+ def appendix_names(clause, _num)
24
+ i = Counter.new
25
+ clause.xpath(ns("./appendix")).each do |c|
26
+ i.increment(c)
27
+ @anchors[c["id"]] =
28
+ anchor_struct(i.print, nil, @labels["appendix"],
29
+ "clause").merge(level: 2, subtype: "annex",
30
+ container: clause["id"])
31
+ j = Counter.new
32
+ c.xpath(ns("./clause | ./references")).each do |c1|
33
+ j.increment(c1)
34
+ lbl = "#{@labels['appendix']} #{i.print}.#{j.print}"
35
+ appendix_names1(c1, l10n(lbl), 3, clause["id"])
36
+ end
37
+ end
38
+ end
39
+
40
+ # subclauses are not prefixed with "Clause"
41
+ # retaining subtype for the semantics
42
+ def section_names1(clause, num, level)
43
+ @anchors[clause["id"]] =
44
+ { label: num, level: level, xref: num, subtype: "clause" }
45
+ i = Counter.new
46
+ clause.xpath(ns("./clause | ./terms | ./term | ./definitions | "\
47
+ "./references"))
48
+ .each do |c|
49
+ i.increment(c)
50
+ section_names1(c, "#{num}.#{i.print}", level + 1)
51
+ end
52
+ end
53
+
54
+ def annex_names1(clause, num, level)
55
+ @anchors[clause["id"]] = { label: num, xref: num, level: level,
56
+ subtype: "annex" }
57
+ i = Counter.new
58
+ clause.xpath(ns("./clause | ./references")).each do |c|
59
+ i.increment(c)
60
+ annex_names1(c, "#{num}.#{i.print}", level + 1)
61
+ end
62
+ end
63
+
64
+ def appendix_names1(clause, num, level, container)
65
+ @anchors[clause["id"]] = { label: num, xref: num, level: level,
66
+ container: container }
67
+ i = Counter.new
68
+ clause.xpath(ns("./clause | ./references")).each do |c|
69
+ i.increment(c)
70
+ appendix_names1(c, "#{num}.#{i.print}", level + 1, container)
71
+ end
72
+ end
73
+
74
+ def annex_name_lbl(clause, num)
75
+ super.sub(%r{<br/>(.*)$}, "<br/><span class='obligation'>\\1</span>")
76
+ end
77
+ end
78
+ end
79
+ end
@@ -205,6 +205,15 @@
205
205
  <data type="boolean"/>
206
206
  </attribute>
207
207
  </optional>
208
+ <optional>
209
+ <attribute name="style">
210
+ <choice>
211
+ <value>basic</value>
212
+ <value>full</value>
213
+ <value>short</value>
214
+ </choice>
215
+ </attribute>
216
+ </optional>
208
217
  <ref name="XrefBody"/>
209
218
  </element>
210
219
  </define>
@@ -508,6 +508,9 @@
508
508
  </define>
509
509
  <define name="stagename">
510
510
  <element name="stagename">
511
+ <optional>
512
+ <attribute name="abbreviation"/>
513
+ </optional>
511
514
  <text/>
512
515
  </element>
513
516
  </define>
@@ -27,7 +27,7 @@ module Metanorma
27
27
  end
28
28
  end
29
29
 
30
- # ISO/IEC DIR 2, 15.5.3
30
+ # ISO/IEC DIR 2, 15.5.3, 20.2
31
31
  # does not deal with preceding text marked up
32
32
  def see_xrefs_validate(root)
33
33
  root.xpath("//xref").each do |t|
@@ -1,5 +1,5 @@
1
1
  module Metanorma
2
2
  module ISO
3
- VERSION = "2.2.0".freeze
3
+ VERSION = "2.2.1".freeze
4
4
  end
5
5
  end
@@ -18,9 +18,9 @@ module Metanorma
18
18
  return lbl unless title &&
19
19
  elem.ancestors("requirement, recommendation, permission").empty?
20
20
 
21
- lbl += l10n(": ") if lbl
21
+ lbl += ": " if lbl
22
22
  lbl += title.children.to_xml
23
- lbl
23
+ l10n(lbl)
24
24
  end
25
25
 
26
26
  # ISO labels modspec reqt as table, with reqt label as title
@@ -38,7 +38,8 @@ module Metanorma
38
38
  def requirement_component_parse(node, out)
39
39
  if node["exclude"] != "true" && node.name == "description"
40
40
  lbl = "statement"
41
- lbl = "description" if recommend_class(node.parent) == "recommendclass"
41
+ recommend_class(node.parent) == "recommendclass" and
42
+ lbl = "description"
42
43
  out << "<tr><td>#{@labels['modspec'][lbl]}</td>"\
43
44
  "<td>#{node.children.to_xml}</td></tr>"
44
45
  else
@@ -46,11 +47,13 @@ module Metanorma
46
47
  end
47
48
  end
48
49
 
49
- def requirement_table_cleanup(table)
50
+ def requirement_table_cleanup(node, table)
50
51
  return table unless table["type"] == "recommendclass"
51
52
 
53
+ label = if node["type"] == "conformanceclass" then "conformancetests"
54
+ else "provisions" end
52
55
  ins = table.at(ns("./tbody/tr[td/table]")) or return table
53
- ins.replace("<tr><td>#{@labels['modspec']['provisions']}</td>" +
56
+ ins.replace("<tr><td>#{@labels['modspec'][label]}</td>" +
54
57
  "<td>#{nested_tables_names(table)}</td></tr>")
55
58
  table.xpath(ns("./tbody/tr[td/table]")).each(&:remove)
56
59
  table
@@ -67,8 +70,8 @@ module Metanorma
67
70
  super
68
71
  anchor[:xref_reqt2reqt] = anchor[:xref_bare]
69
72
  if l = block.at(ns("./title"))
70
- anchor[:xref_reqt2reqt] +=
71
- l10n(": ") + l.children.to_xml.strip
73
+ anchor[:xref_reqt2reqt] =
74
+ l10n("#{anchor[:xref_reqt2reqt]}: #{l.children.to_xml.strip}")
72
75
  end
73
76
  anchor
74
77
  end
@@ -1005,7 +1005,7 @@ RSpec.describe Metanorma::ISO do
1005
1005
  <uri type='obp'>https://www.iso.org/obp/ui/#!iso:std:23281:en</uri>
1006
1006
  <uri type='rss'>https://www.iso.org/contents/data/standard/02/32/23281.detail.rss</uri>
1007
1007
  <docidentifier type='ISO' primary="true">ISO 123:2001</docidentifier>
1008
- <docidentifier type='URN'>urn:iso:std:iso:123:stage-90.93:ed-3</docidentifier>
1008
+ <docidentifier type='URN'>urn:iso:std:iso:123:ed-3</docidentifier>
1009
1009
  <docnumber>123</docnumber>
1010
1010
  <date type='published'><on>2001-05</on></date>
1011
1011
  <contributor>
@@ -1078,7 +1078,7 @@ RSpec.describe Metanorma::ISO do
1078
1078
  <uri type='obp'>https://www.iso.org/obp/ui/#!iso:std:72849:en</uri>
1079
1079
  <uri type='rss'>https://www.iso.org/contents/data/standard/07/28/72849.detail.rss</uri>
1080
1080
  <docidentifier type='ISO' primary="true">ISO 125</docidentifier>
1081
- <docidentifier type='URN'>urn:iso:std:iso:125:stage-60.60:ed-7</docidentifier>
1081
+ <docidentifier type='URN'>urn:iso:std:iso:125:ed-7</docidentifier>
1082
1082
  <docnumber>125</docnumber>
1083
1083
  <contributor>
1084
1084
  <role type='publisher'/>
@@ -1130,7 +1130,7 @@ RSpec.describe Metanorma::ISO do
1130
1130
  <uri type='obp'>https://www.iso.org/obp/ui/#!iso:std:72849:en</uri>
1131
1131
  <uri type='rss'>https://www.iso.org/contents/data/standard/07/28/72849.detail.rss</uri>
1132
1132
  <docidentifier type='ISO' primary="true">ISO 125:2020</docidentifier>
1133
- <docidentifier type='URN'>urn:iso:std:iso:125:stage-60.60:ed-7</docidentifier>
1133
+ <docidentifier type='URN'>urn:iso:std:iso:125:ed-7</docidentifier>
1134
1134
  <docnumber>125</docnumber>
1135
1135
  <date type='published'>
1136
1136
  <on>2020-02</on>
@@ -78,7 +78,7 @@ RSpec.describe Metanorma::ISO do
78
78
  <uri type="src">https://www.iso.org/standard/81720.html</uri>
79
79
  <uri type="rss">https://www.iso.org/contents/data/standard/08/17/81720.detail.rss</uri>
80
80
  <docidentifier type="ISO">ISO/FDIS 17664-1</docidentifier>
81
- <docidentifier type="URN">urn:iso:std:iso-fdis:17664:-1:stage-50.00:ed-1:fr</docidentifier>
81
+ <docidentifier type="URN">urn:iso:std:iso-fdis:17664:-1:ed-1:fr</docidentifier>
82
82
  <docnumber>17664</docnumber>
83
83
  <contributor>
84
84
  <role type="publisher"/>
@@ -127,7 +127,7 @@ RSpec.describe Metanorma::ISO do
127
127
  <uri type="src">https://www.iso.org/standard/81720.html</uri>
128
128
  <uri type="rss">https://www.iso.org/contents/data/standard/08/17/81720.detail.rss</uri>
129
129
  <docidentifier type="ISO">ISO/FDIS 17664-1</docidentifier>
130
- <docidentifier type="URN">urn:iso:std:iso-fdis:17664:-1:stage-50.00:ed-1:fr</docidentifier>
130
+ <docidentifier type="URN">urn:iso:std:iso-fdis:17664:-1:ed-1:fr</docidentifier>
131
131
  <docnumber>17664</docnumber>
132
132
  <contributor>
133
133
  <role type="publisher"/>
@@ -410,7 +410,7 @@ RSpec.describe Metanorma::ISO do
410
410
  <uri type='src'>https://www.iso.org/standard/2405.html</uri>
411
411
  <uri type='rss'>https://www.iso.org/contents/data/standard/00/24/2405.detail.rss</uri>
412
412
  <docidentifier type='ISO' primary='true'>ISO 31-0</docidentifier>
413
- <docidentifier type='URN'>urn:iso:std:iso:31:-0:stage-95.99:ed-1</docidentifier>
413
+ <docidentifier type='URN'>urn:iso:std:iso:31:-0:ed-1</docidentifier>
414
414
  <docnumber>31</docnumber>
415
415
  <contributor>
416
416
  <role type='publisher'/>
@@ -447,7 +447,7 @@ RSpec.describe Metanorma::ISO do
447
447
  <uri type='src'>https://www.iso.org/standard/2405.html</uri>
448
448
  <uri type='rss'>https://www.iso.org/contents/data/standard/00/24/2405.detail.rss</uri>
449
449
  <docidentifier type='ISO' primary='true'>ISO 31-0:1974</docidentifier>
450
- <docidentifier type='URN'>urn:iso:std:iso:31:-0:stage-95.99:ed-1</docidentifier>
450
+ <docidentifier type='URN'>urn:iso:std:iso:31:-0:ed-1</docidentifier>
451
451
  <docnumber>31</docnumber>
452
452
  <date type='published'>
453
453
  <on>1974-01</on>
@@ -494,7 +494,7 @@ RSpec.describe Metanorma::ISO do
494
494
  <uri type='src'>https://www.iso.org/standard/76389.html</uri>
495
495
  <uri type='rss'>https://www.iso.org/contents/data/standard/07/63/76389.detail.rss</uri>
496
496
  <docidentifier type='ISO' primary='true'>ISO 683-3:2019</docidentifier>
497
- <docidentifier type='URN'>urn:iso:std:iso:683:-3:stage-95.99:ed-3</docidentifier>
497
+ <docidentifier type='URN'>urn:iso:std:iso:683:-3:ed-3</docidentifier>
498
498
  <docnumber>683</docnumber>
499
499
  <date type='published'>
500
500
  <on>2019-01</on>
@@ -589,7 +589,7 @@ RSpec.describe Metanorma::ISO do
589
589
  <uri type="src">https://www.iso.org/standard/81720.html</uri>
590
590
  <uri type="rss">https://www.iso.org/contents/data/standard/08/17/81720.detail.rss</uri>
591
591
  <docidentifier type="ISO">ISO/FDIS 17664-1</docidentifier>
592
- <docidentifier type="URN">urn:iso:std:iso-fdis:17664:-1:stage-50.00:ed-1:fr</docidentifier>
592
+ <docidentifier type="URN">urn:iso:std:iso-fdis:17664:-1:ed-1:fr</docidentifier>
593
593
  <docnumber>17664</docnumber>
594
594
  <contributor>
595
595
  <role type="publisher"/>
@@ -630,7 +630,7 @@ RSpec.describe Metanorma::ISO do
630
630
  <uri type="src">https://www.iso.org/standard/81720.html</uri>
631
631
  <uri type="rss">https://www.iso.org/contents/data/standard/08/17/81720.detail.rss</uri>
632
632
  <docidentifier type="ISO">ISO/FDIS 17664-1</docidentifier>
633
- <docidentifier type="URN">urn:iso:std:iso-fdis:17664:-1:stage-50.00:ed-1:fr</docidentifier>
633
+ <docidentifier type="URN">urn:iso:std:iso-fdis:17664:-1:ed-1:fr</docidentifier>
634
634
  <docnumber>17664</docnumber>
635
635
  <contributor>
636
636
  <role type="publisher"/>
@@ -544,7 +544,7 @@ RSpec.describe Metanorma::Requirements::Iso::Modspec do
544
544
  <td>Conformance test</td>
545
545
  <td>
546
546
  <xref target='A2'>
547
- Requirement test 1:
547
+ Conformance test 1:
548
548
  Second
549
549
  </xref>
550
550
  </td>
@@ -552,7 +552,7 @@ RSpec.describe Metanorma::Requirements::Iso::Modspec do
552
552
  </tbody>
553
553
  </table>
554
554
  <table id='A2' class='modspec' type='recommendtest'>
555
- <name>Table 2 — Requirement test 1: Second</name>
555
+ <name>Table 2 — Conformance test 1: Second</name>
556
556
  <tbody>
557
557
  <tr>
558
558
  <td>Identifier</td>
@@ -693,7 +693,7 @@ RSpec.describe Metanorma::Requirements::Iso::Modspec do
693
693
  <foreword id='A' displayorder='1'>
694
694
  <title>Preface</title>
695
695
  <table id='A1' class='modspec' type='recommendtest'>
696
- <name>Table 1 — Permission test 1: First</name>
696
+ <name>Table 1 — Conformance test 1: First</name>
697
697
  <tbody>
698
698
  <tr>
699
699
  <td>Identifier</td>
@@ -1058,7 +1058,7 @@ RSpec.describe Metanorma::Requirements::Iso::Modspec do
1058
1058
  </td>
1059
1059
  </tr>
1060
1060
  <tr>
1061
- <td>Provisions</td>
1061
+ <td>Conformance tests</td>
1062
1062
  <td>
1063
1063
  <xref target='B2'>
1064
1064
  Permission 1:
@@ -1198,7 +1198,7 @@ RSpec.describe Metanorma::Requirements::Iso::Modspec do
1198
1198
  </td>
1199
1199
  </tr>
1200
1200
  <tr>
1201
- <td>Dispositions</td>
1201
+ <td>Tests de conformité</td>
1202
1202
  <td>
1203
1203
  <xref target='B2'>
1204
1204
  Autorisation 1&#xa0;: