metanorma-iso 2.2.1 → 2.2.2
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 +4 -4
- data/.github/workflows/automerge.yml +31 -0
- data/lib/isodoc/iso/html/style-human.css +1 -1
- data/lib/isodoc/iso/html/style-iso.css +1 -1
- data/lib/isodoc/iso/i18n-en.yaml +9 -4
- data/lib/isodoc/iso/i18n-fr.yaml +9 -3
- data/lib/isodoc/iso/i18n-ru.yaml +9 -2
- data/lib/isodoc/iso/i18n-zh-Hans.yaml +1 -2
- data/lib/isodoc/iso/iso.amendment.xsl +21 -3
- data/lib/isodoc/iso/iso.international-standard.xsl +21 -3
- data/lib/isodoc/iso/presentation_xref.rb +10 -7
- data/lib/isodoc/iso/sections.rb +1 -1
- data/lib/metanorma/iso/basicdoc.rng +0 -27
- data/lib/metanorma/iso/biblio-standoc.rng +164 -0
- data/lib/metanorma/iso/biblio.rng +45 -18
- data/lib/metanorma/iso/isodoc.rng +22 -194
- data/lib/metanorma/iso/isostandard-amd.rng +3 -54
- data/lib/metanorma/iso/isostandard-compile.rng +7 -0
- data/lib/metanorma/iso/isostandard.rng +1 -195
- data/lib/metanorma/iso/relaton-iso.rng +225 -0
- data/lib/metanorma/iso/validate.rb +6 -6
- data/lib/metanorma/iso/version.rb +1 -1
- data/lib/metanorma/requirements/modspec.rb +22 -38
- data/spec/isodoc/inline_spec.rb +1 -1
- data/spec/metanorma/validate_spec.rb +55 -55
- data/spec/requirements/requirement_components_spec.rb +51 -63
- data/spec/requirements/requirements_spec.rb +177 -262
- data/spec/vcr_cassettes/withdrawn_iso.yml +29 -29
- metadata +6 -2
@@ -0,0 +1,225 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
|
3
|
+
<include href="biblio-standoc.rng">
|
4
|
+
<define name="BibDataExtensionType">
|
5
|
+
<optional>
|
6
|
+
<attribute name="schema-version"/>
|
7
|
+
</optional>
|
8
|
+
<ref name="doctype"/>
|
9
|
+
<optional>
|
10
|
+
<ref name="docsubtype"/>
|
11
|
+
</optional>
|
12
|
+
<optional>
|
13
|
+
<ref name="horizontal"/>
|
14
|
+
</optional>
|
15
|
+
<ref name="editorialgroup"/>
|
16
|
+
<optional>
|
17
|
+
<ref name="approvalgroup"/>
|
18
|
+
</optional>
|
19
|
+
<zeroOrMore>
|
20
|
+
<ref name="ics"/>
|
21
|
+
</zeroOrMore>
|
22
|
+
<ref name="structuredidentifier"/>
|
23
|
+
<optional>
|
24
|
+
<ref name="stagename"/>
|
25
|
+
</optional>
|
26
|
+
<optional>
|
27
|
+
<ref name="updates_document_type"/>
|
28
|
+
</optional>
|
29
|
+
</define>
|
30
|
+
<define name="bdate">
|
31
|
+
<element name="date">
|
32
|
+
<attribute name="type">
|
33
|
+
<choice>
|
34
|
+
<ref name="BibliographicDateType"/>
|
35
|
+
<text/>
|
36
|
+
</choice>
|
37
|
+
</attribute>
|
38
|
+
<choice>
|
39
|
+
<group>
|
40
|
+
<element name="from">
|
41
|
+
<ref name="ISO8601Date"/>
|
42
|
+
</element>
|
43
|
+
<optional>
|
44
|
+
<element name="to">
|
45
|
+
<ref name="ISO8601Date"/>
|
46
|
+
</element>
|
47
|
+
</optional>
|
48
|
+
</group>
|
49
|
+
<element name="on">
|
50
|
+
<choice>
|
51
|
+
<ref name="ISO8601Date"/>
|
52
|
+
<value>--</value>
|
53
|
+
<value>–</value>
|
54
|
+
</choice>
|
55
|
+
</element>
|
56
|
+
</choice>
|
57
|
+
</element>
|
58
|
+
</define>
|
59
|
+
<define name="organization">
|
60
|
+
<element name="organization">
|
61
|
+
<oneOrMore>
|
62
|
+
<ref name="orgname"/>
|
63
|
+
</oneOrMore>
|
64
|
+
<optional>
|
65
|
+
<ref name="abbreviation"/>
|
66
|
+
</optional>
|
67
|
+
<optional>
|
68
|
+
<ref name="uri"/>
|
69
|
+
</optional>
|
70
|
+
<zeroOrMore>
|
71
|
+
<ref name="org-identifier"/>
|
72
|
+
</zeroOrMore>
|
73
|
+
<zeroOrMore>
|
74
|
+
<ref name="contact"/>
|
75
|
+
</zeroOrMore>
|
76
|
+
<optional>
|
77
|
+
<ref name="technical-committee"/>
|
78
|
+
</optional>
|
79
|
+
<optional>
|
80
|
+
<ref name="subcommittee"/>
|
81
|
+
</optional>
|
82
|
+
<optional>
|
83
|
+
<ref name="workgroup"/>
|
84
|
+
</optional>
|
85
|
+
<optional>
|
86
|
+
<ref name="secretariat"/>
|
87
|
+
</optional>
|
88
|
+
</element>
|
89
|
+
</define>
|
90
|
+
<define name="DocumentType">
|
91
|
+
<choice>
|
92
|
+
<value>international-standard</value>
|
93
|
+
<value>technical-specification</value>
|
94
|
+
<value>technical-report</value>
|
95
|
+
<value>publicly-available-specification</value>
|
96
|
+
<value>international-workshop-agreement</value>
|
97
|
+
<value>guide</value>
|
98
|
+
<value>amendment</value>
|
99
|
+
<value>technical-corrigendum</value>
|
100
|
+
<value>directive</value>
|
101
|
+
</choice>
|
102
|
+
</define>
|
103
|
+
<define name="DocumentSubtype">
|
104
|
+
<choice>
|
105
|
+
<value>specification</value>
|
106
|
+
<value>method-of-test</value>
|
107
|
+
<value>vocabulary</value>
|
108
|
+
<value>code-of-practice</value>
|
109
|
+
</choice>
|
110
|
+
</define>
|
111
|
+
<define name="structuredidentifier">
|
112
|
+
<element name="structuredidentifier">
|
113
|
+
<optional>
|
114
|
+
<attribute name="type"/>
|
115
|
+
</optional>
|
116
|
+
<group>
|
117
|
+
<ref name="documentnumber"/>
|
118
|
+
<optional>
|
119
|
+
<ref name="tc-documentnumber"/>
|
120
|
+
</optional>
|
121
|
+
</group>
|
122
|
+
</element>
|
123
|
+
</define>
|
124
|
+
<define name="editorialgroup">
|
125
|
+
<element name="editorialgroup">
|
126
|
+
<ref name="ISOProjectGroup"/>
|
127
|
+
</element>
|
128
|
+
</define>
|
129
|
+
</include>
|
130
|
+
<define name="updates_document_type">
|
131
|
+
<element name="updates-document-type">
|
132
|
+
<ref name="DocumentType"/>
|
133
|
+
</element>
|
134
|
+
</define>
|
135
|
+
<define name="ISOProjectGroup">
|
136
|
+
<zeroOrMore>
|
137
|
+
<ref name="agency"/>
|
138
|
+
</zeroOrMore>
|
139
|
+
<oneOrMore>
|
140
|
+
<ref name="technical-committee"/>
|
141
|
+
</oneOrMore>
|
142
|
+
<zeroOrMore>
|
143
|
+
<ref name="subcommittee"/>
|
144
|
+
</zeroOrMore>
|
145
|
+
<zeroOrMore>
|
146
|
+
<ref name="workgroup"/>
|
147
|
+
</zeroOrMore>
|
148
|
+
<optional>
|
149
|
+
<ref name="secretariat"/>
|
150
|
+
</optional>
|
151
|
+
</define>
|
152
|
+
<define name="approvalgroup">
|
153
|
+
<element name="approvalgroup">
|
154
|
+
<ref name="ISOProjectGroup"/>
|
155
|
+
</element>
|
156
|
+
</define>
|
157
|
+
<define name="agency">
|
158
|
+
<element name="agency">
|
159
|
+
<text/>
|
160
|
+
</element>
|
161
|
+
</define>
|
162
|
+
<define name="horizontal">
|
163
|
+
<element name="horizontal">
|
164
|
+
<data type="boolean"/>
|
165
|
+
</element>
|
166
|
+
</define>
|
167
|
+
<define name="documentnumber">
|
168
|
+
<element name="project-number">
|
169
|
+
<optional>
|
170
|
+
<attribute name="part">
|
171
|
+
<data type="int"/>
|
172
|
+
</attribute>
|
173
|
+
</optional>
|
174
|
+
<optional>
|
175
|
+
<attribute name="subpart">
|
176
|
+
<data type="int"/>
|
177
|
+
</attribute>
|
178
|
+
</optional>
|
179
|
+
<optional>
|
180
|
+
<attribute name="amendment">
|
181
|
+
<data type="int"/>
|
182
|
+
</attribute>
|
183
|
+
</optional>
|
184
|
+
<optional>
|
185
|
+
<attribute name="corrigendum">
|
186
|
+
<data type="int"/>
|
187
|
+
</attribute>
|
188
|
+
</optional>
|
189
|
+
<optional>
|
190
|
+
<attribute name="origyr">
|
191
|
+
<ref name="ISO8601Date"/>
|
192
|
+
</attribute>
|
193
|
+
</optional>
|
194
|
+
<text/>
|
195
|
+
</element>
|
196
|
+
</define>
|
197
|
+
<define name="tc-documentnumber">
|
198
|
+
<element name="tc-document-number">
|
199
|
+
<data type="int"/>
|
200
|
+
</element>
|
201
|
+
</define>
|
202
|
+
<define name="subcommittee">
|
203
|
+
<element name="subcommittee">
|
204
|
+
<ref name="IsoWorkgroup"/>
|
205
|
+
</element>
|
206
|
+
</define>
|
207
|
+
<define name="workgroup">
|
208
|
+
<element name="workgroup">
|
209
|
+
<ref name="IsoWorkgroup"/>
|
210
|
+
</element>
|
211
|
+
</define>
|
212
|
+
<define name="secretariat">
|
213
|
+
<element name="secretariat">
|
214
|
+
<text/>
|
215
|
+
</element>
|
216
|
+
</define>
|
217
|
+
<define name="stagename">
|
218
|
+
<element name="stagename">
|
219
|
+
<optional>
|
220
|
+
<attribute name="abbreviation"/>
|
221
|
+
</optional>
|
222
|
+
<text/>
|
223
|
+
</element>
|
224
|
+
</define>
|
225
|
+
</grammar>
|
@@ -66,7 +66,7 @@ module Metanorma
|
|
66
66
|
if /^(ISO|IEC)/.match?(t["citeas"]) &&
|
67
67
|
!/: ?(\d+{4}|–)$/.match?(t["citeas"])
|
68
68
|
@log.add("Style", t,
|
69
|
-
"undated reference #{t['citeas']} should not contain "\
|
69
|
+
"undated reference #{t['citeas']} should not contain " \
|
70
70
|
"specific elements")
|
71
71
|
end
|
72
72
|
end
|
@@ -79,7 +79,7 @@ module Metanorma
|
|
79
79
|
# https://www.iso.org/ISO-house-style.html#iso-hs-s-text-r-r-ref_clause3
|
80
80
|
def term_xrefs_validate(xmldoc)
|
81
81
|
termids = xmldoc
|
82
|
-
.xpath("//sections/terms | //sections/clause[.//terms] | "\
|
82
|
+
.xpath("//sections/terms | //sections/clause[.//terms] | " \
|
83
83
|
"//annex[.//terms]").each_with_object({}) do |t, m|
|
84
84
|
t.xpath(".//*/@id").each { |a| m[a.text] = true }
|
85
85
|
t.name == "terms" and m[t["id"]] = true
|
@@ -93,11 +93,11 @@ module Metanorma
|
|
93
93
|
closest_id = xref.xpath("./ancestor::*[@id]")&.last or return
|
94
94
|
(termids[xref["target"]] && !termids[closest_id["id"]]) and
|
95
95
|
@log.add("Style", xref,
|
96
|
-
"only terms clauses can cross-reference terms clause "\
|
96
|
+
"only terms clauses can cross-reference terms clause " \
|
97
97
|
"(#{xref['target']})")
|
98
98
|
(!termids[xref["target"]] && termids[closest_id["id"]]) and
|
99
99
|
@log.add("Style", xref,
|
100
|
-
"non-terms clauses cannot cross-reference terms clause "\
|
100
|
+
"non-terms clauses cannot cross-reference terms clause " \
|
101
101
|
"(#{xref['target']})")
|
102
102
|
end
|
103
103
|
|
@@ -179,7 +179,7 @@ module Metanorma
|
|
179
179
|
xmldoc.xpath("//bibitem[date/on = '–']").each do |b|
|
180
180
|
b.at("./note[@type = 'Unpublished-Status']") or
|
181
181
|
@log.add("Style", b,
|
182
|
-
"Reference #{b&.at('./@id')&.text} does not have an "\
|
182
|
+
"Reference #{b&.at('./@id')&.text} does not have an " \
|
183
183
|
"associated footnote indicating unpublished status")
|
184
184
|
end
|
185
185
|
end
|
@@ -191,7 +191,7 @@ module Metanorma
|
|
191
191
|
when "amendment", "technical-corrigendum" # @amd
|
192
192
|
"isostandard-amd.rng"
|
193
193
|
else
|
194
|
-
"isostandard.rng"
|
194
|
+
"isostandard-compile.rng"
|
195
195
|
end
|
196
196
|
schema_validate(formattedstr_strip(doc.dup),
|
197
197
|
File.join(File.dirname(__FILE__), schema))
|
@@ -29,41 +29,28 @@ module Metanorma
|
|
29
29
|
out
|
30
30
|
end
|
31
31
|
|
32
|
-
def
|
33
|
-
|
34
|
-
out.add_child("<tr><td>#{@labels['modspec']['identifier']}</td>"\
|
35
|
-
"<td><tt>#{label.children.to_xml}</tt></td>")
|
36
|
-
end
|
37
|
-
|
38
|
-
def requirement_component_parse(node, out)
|
39
|
-
if node["exclude"] != "true" && node.name == "description"
|
40
|
-
lbl = "statement"
|
41
|
-
recommend_class(node.parent) == "recommendclass" and
|
42
|
-
lbl = "description"
|
43
|
-
out << "<tr><td>#{@labels['modspec'][lbl]}</td>"\
|
44
|
-
"<td>#{node.children.to_xml}</td></tr>"
|
45
|
-
else
|
46
|
-
super
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
def requirement_table_cleanup(node, table)
|
51
|
-
return table unless table["type"] == "recommendclass"
|
52
|
-
|
53
|
-
label = if node["type"] == "conformanceclass" then "conformancetests"
|
54
|
-
else "provisions" end
|
32
|
+
def requirement_table_nested_cleanup(node, table)
|
33
|
+
table["type"] == "recommendclass" or return table
|
55
34
|
ins = table.at(ns("./tbody/tr[td/table]")) or return table
|
56
|
-
ins.replace(
|
57
|
-
"<td>#{nested_tables_names(table)}</td></tr>")
|
35
|
+
ins.replace(requirement_table_cleanup_nested_replacement(node, table))
|
58
36
|
table.xpath(ns("./tbody/tr[td/table]")).each(&:remove)
|
59
37
|
table
|
60
38
|
end
|
61
39
|
|
40
|
+
def requirement_table_cleanup_nested_replacement(node, table)
|
41
|
+
label = "provision"
|
42
|
+
node["type"] == "conformanceclass" and label = "conformancetest"
|
43
|
+
n = nested_tables_names(table)
|
44
|
+
hdr = @i18n.inflect(@labels["modspec"][label],
|
45
|
+
number: n.size == 1 ? "sg" : "pl")
|
46
|
+
"<tr><th>#{hdr}</th><td>#{n.join('<br/>')}</td></tr>"
|
47
|
+
end
|
48
|
+
|
62
49
|
def nested_tables_names(table)
|
63
50
|
table.xpath(ns("./tbody/tr/td/table"))
|
64
51
|
.each_with_object([]) do |t, m|
|
65
52
|
m << t.at(ns("./name")).children.to_xml
|
66
|
-
end
|
53
|
+
end
|
67
54
|
end
|
68
55
|
|
69
56
|
def postprocess_anchor_struct(block, anchor)
|
@@ -86,20 +73,17 @@ module Metanorma
|
|
86
73
|
end
|
87
74
|
end
|
88
75
|
|
89
|
-
def
|
90
|
-
|
91
|
-
|
92
|
-
next unless %w(conformanceclass
|
93
|
-
verification).include?(r["type"])
|
76
|
+
def reqt_links_test1(reqt, acc)
|
77
|
+
return unless %w(conformanceclass
|
78
|
+
verification).include?(reqt["type"])
|
94
79
|
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
80
|
+
subj = reqt_extract_target(reqt)
|
81
|
+
id = reqt.at(ns("./identifier")) or return
|
82
|
+
lbl = @xrefs.anchor(@reqt_ids[id.text.strip][:id], :xref_reqt2reqt,
|
83
|
+
false)
|
84
|
+
return unless subj
|
100
85
|
|
101
|
-
|
102
|
-
end
|
86
|
+
acc[subj.text] = { lbl: lbl, id: reqt["id"] }
|
103
87
|
end
|
104
88
|
|
105
89
|
def reqt_links_class(docxml)
|
data/spec/isodoc/inline_spec.rb
CHANGED
@@ -118,7 +118,7 @@ RSpec.describe IsoDoc do
|
|
118
118
|
|
119
119
|
it "processes AsciiMath and MathML" do
|
120
120
|
output = IsoDoc::Iso::HtmlConvert.new({}).convert("test", <<~"INPUT", true)
|
121
|
-
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
121
|
+
<iso-standard xmlns="http://riboseinc.com/isoxml" xmlns:m="http://www.w3.org/1998/Math/MathML">
|
122
122
|
<preface>
|
123
123
|
<foreword>
|
124
124
|
<p>
|