metanorma-standoc 1.10.2 → 1.10.4.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.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/lib/asciidoctor/standoc/base.rb +13 -5
  3. data/lib/asciidoctor/standoc/blocks.rb +35 -31
  4. data/lib/asciidoctor/standoc/cleanup.rb +61 -0
  5. data/lib/asciidoctor/standoc/cleanup_block.rb +6 -3
  6. data/lib/asciidoctor/standoc/cleanup_reqt.rb +59 -14
  7. data/lib/asciidoctor/standoc/converter.rb +4 -0
  8. data/lib/asciidoctor/standoc/datamodel/diagram_preprocessor.rb +22 -21
  9. data/lib/asciidoctor/standoc/isodoc.rng +12 -0
  10. data/lib/asciidoctor/standoc/lists.rb +9 -6
  11. data/lib/asciidoctor/standoc/macros.rb +18 -0
  12. data/lib/asciidoctor/standoc/ref.rb +60 -56
  13. data/lib/asciidoctor/standoc/reqt.rb +39 -27
  14. data/lib/asciidoctor/standoc/reqt.rng +15 -4
  15. data/lib/asciidoctor/standoc/validate_section.rb +2 -1
  16. data/lib/isodoc/base.standard.xsl +6003 -0
  17. data/lib/isodoc/pdf_convert.rb +20 -0
  18. data/lib/metanorma-standoc.rb +1 -0
  19. data/lib/metanorma/standoc/processor.rb +5 -1
  20. data/lib/metanorma/standoc/version.rb +1 -1
  21. data/metanorma-standoc.gemspec +1 -1
  22. data/spec/asciidoctor/base_spec.rb +6 -0
  23. data/spec/asciidoctor/blocks_spec.rb +45 -25
  24. data/spec/asciidoctor/cleanup_sections_spec.rb +899 -864
  25. data/spec/asciidoctor/cleanup_spec.rb +136 -2
  26. data/spec/asciidoctor/macros_plantuml_spec.rb +165 -104
  27. data/spec/asciidoctor/macros_spec.rb +208 -0
  28. data/spec/asciidoctor/validate_spec.rb +4 -0
  29. data/spec/examples/datamodel/address_class_profile.adoc +1 -0
  30. data/spec/examples/datamodel/address_component_profile.adoc +1 -0
  31. data/spec/examples/datamodel/blank_definition_profile.adoc +1 -0
  32. data/spec/examples/datamodel/common_models_diagram.adoc +2 -1
  33. data/spec/examples/datamodel/top_down_diagram.adoc +2 -1
  34. data/spec/fixtures/datamodel_description_sections_tree.xml +327 -0
  35. data/spec/fixtures/test.xmi +9250 -0
  36. data/spec/metanorma/processor_spec.rb +50 -50
  37. data/spec/support/shared_examples/structured_data_2_text_preprocessor.rb +34 -34
  38. data/spec/vcr_cassettes/dated_iso_ref_joint_iso_iec.yml +50 -50
  39. data/spec/vcr_cassettes/isobib_get_123.yml +11 -11
  40. data/spec/vcr_cassettes/isobib_get_123_1.yml +23 -23
  41. data/spec/vcr_cassettes/isobib_get_123_1_fr.yml +35 -35
  42. data/spec/vcr_cassettes/isobib_get_123_2001.yml +12 -12
  43. data/spec/vcr_cassettes/isobib_get_124.yml +11 -11
  44. data/spec/vcr_cassettes/rfcbib_get_rfc8341.yml +14 -14
  45. data/spec/vcr_cassettes/separates_iev_citations_by_top_level_clause.yml +46 -46
  46. metadata +8 -4
@@ -1131,6 +1131,105 @@ RSpec.describe Asciidoctor::Standoc do
1131
1131
  .to be_equivalent_to xmlpp(output)
1132
1132
  end
1133
1133
 
1134
+ it "processes ToC form macros" do
1135
+ input = <<~INPUT
1136
+ #{ASCIIDOC_BLANK_HDR}
1137
+
1138
+ [[clause1]]
1139
+ == Clause 1
1140
+
1141
+ [[clause1A]]
1142
+ === Clause 1A
1143
+
1144
+ [[clause1Aa]]
1145
+ ==== Clause 1Aa
1146
+
1147
+ [[clause1Ab]]
1148
+ ==== Clause 1Ab
1149
+
1150
+ [[clause1B]]
1151
+ === Clause 1B
1152
+
1153
+ [[clause1Ba]]
1154
+ ==== Clause 1Ba
1155
+
1156
+ [[clause2]]
1157
+ == Clause 2
1158
+
1159
+ And introducing:
1160
+ toc:["//clause[@id = 'clause1'\\]/clause/title","//clause[@id = 'clause1'\\]/clause/clause/title:2"]
1161
+
1162
+ toc:["//clause[@id = 'clause1'\\]/clause/title"]
1163
+ INPUT
1164
+ output = <<~OUTPUT
1165
+ #{BLANK_HDR}
1166
+ <sections>
1167
+ <clause id='clause1' inline-header='false' obligation='normative'>
1168
+ <title>Clause 1</title>
1169
+ <clause id='clause1A' inline-header='false' obligation='normative'>
1170
+ <title>Clause 1A</title>
1171
+ <clause id='clause1Aa' inline-header='false' obligation='normative'>
1172
+ <title>Clause 1Aa</title>
1173
+ </clause>
1174
+ <clause id='clause1Ab' inline-header='false' obligation='normative'>
1175
+ <title>Clause 1Ab</title>
1176
+ </clause>
1177
+ </clause>
1178
+ <clause id='clause1B' inline-header='false' obligation='normative'>
1179
+ <title>Clause 1B</title>
1180
+ <clause id='clause1Ba' inline-header='false' obligation='normative'>
1181
+ <title>Clause 1Ba</title>
1182
+ </clause>
1183
+ </clause>
1184
+ </clause>
1185
+ <clause id='clause2' inline-header='false' obligation='normative'>
1186
+ <title>Clause 2</title>
1187
+ <p id='_'>And introducing: </p>
1188
+ <toc>
1189
+ <ul id='_'>
1190
+ <li>
1191
+ <xref target='clause1A'>Clause 1A</xref>
1192
+ </li>
1193
+ <li>
1194
+ <ul id='_'>
1195
+ <li>
1196
+ <xref target='clause1Aa'>Clause 1Aa</xref>
1197
+ </li>
1198
+ <li>
1199
+ <xref target='clause1Ab'>Clause 1Ab</xref>
1200
+ </li>
1201
+ </ul>
1202
+ </li>
1203
+ <li>
1204
+ <xref target='clause1B'>Clause 1B</xref>
1205
+ </li>
1206
+ <li>
1207
+ <ul id='_'>
1208
+ <li>
1209
+ <xref target='clause1Ba'>Clause 1Ba</xref>
1210
+ </li>
1211
+ </ul>
1212
+ </li>
1213
+ </ul>
1214
+ </toc>
1215
+ <toc>
1216
+ <ul id='_'>
1217
+ <li>
1218
+ <xref target='clause1A'>Clause 1A</xref>
1219
+ </li>
1220
+ <li>
1221
+ <xref target='clause1B'>Clause 1B</xref>
1222
+ </li>
1223
+ </ul>
1224
+ </toc>
1225
+ </clause>
1226
+ </sections>
1227
+ </standard-document>
1228
+ OUTPUT
1229
+ expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
1230
+ .to be_equivalent_to xmlpp(output)
1231
+ end
1232
+
1134
1233
  describe "term inline macros" do
1135
1234
  subject(:convert) do
1136
1235
  xmlpp(
@@ -1442,4 +1541,113 @@ RSpec.describe Asciidoctor::Standoc do
1442
1541
  end
1443
1542
  end
1444
1543
  end
1544
+
1545
+ describe "lutaml_figure macro" do
1546
+ let(:example_file) { fixtures_path("test.xmi") }
1547
+ let(:input) do
1548
+ <<~TEXT
1549
+ = Document title
1550
+ Author
1551
+ :docfile: test.adoc
1552
+ :nodoc:
1553
+ :novalid:
1554
+ :no-isobib:
1555
+ :imagesdir: spec/assets
1556
+
1557
+ [lutaml_uml_datamodel_description,#{example_file}]
1558
+ --
1559
+ --
1560
+
1561
+ This is lutaml_figure::[package="Wrapper root package", name="Fig B1 Full model"] figure
1562
+ TEXT
1563
+ end
1564
+ let(:output) do
1565
+ '<xref target="figure-EAID_0E029ABF_C35A_49e3_9EEA_FFD4F32780A8">'
1566
+ end
1567
+
1568
+ it "correctly renders input" do
1569
+ expect(strip_src(xml_string_conent(metanorma_process(input))))
1570
+ .to(include(output))
1571
+ end
1572
+ end
1573
+
1574
+ describe "lutaml_uml_datamodel_description macro" do
1575
+ subject(:convert) do
1576
+ xmlpp(
1577
+ strip_guid(
1578
+ Asciidoctor.convert(
1579
+ input, *OPTIONS
1580
+ ),
1581
+ ),
1582
+ )
1583
+ end
1584
+
1585
+ let(:example_file) { fixtures_path("test.xmi") }
1586
+ let(:input) do
1587
+ <<~TEXT
1588
+ = Document title
1589
+ Author
1590
+ :docfile: test.adoc
1591
+ :nodoc:
1592
+ :novalid:
1593
+ :no-isobib:
1594
+ :imagesdir: spec/assets
1595
+
1596
+ [lutaml_uml_datamodel_description,#{example_file}]
1597
+ --
1598
+ [.diagram_include_block, base_path="requirements/"]
1599
+ ...
1600
+ Diagram text
1601
+ ...
1602
+
1603
+ [.include_block, package="Another", base_path="spec/fixtures/"]
1604
+ ...
1605
+ my text
1606
+ ...
1607
+
1608
+ [.include_block, base_path="spec/fixtures/"]
1609
+ ...
1610
+ my text
1611
+ ...
1612
+
1613
+ [.before]
1614
+ ...
1615
+ mine text
1616
+ ...
1617
+
1618
+ [.before, package="Another"]
1619
+ ...
1620
+ text before Another package
1621
+ ...
1622
+
1623
+ [.after, package="Another"]
1624
+ ...
1625
+ text after Another package
1626
+ ...
1627
+
1628
+ [.after, package="CityGML"]
1629
+ ...
1630
+ text after CityGML package
1631
+ ...
1632
+
1633
+ [.after]
1634
+ ...
1635
+ footer text
1636
+ ...
1637
+ --
1638
+ TEXT
1639
+ end
1640
+ let(:output) do
1641
+ <<~TEXT
1642
+ #{BLANK_HDR}
1643
+ #{File.read(fixtures_path('datamodel_description_sections_tree.xml'))}
1644
+ </standard-document>
1645
+ TEXT
1646
+ end
1647
+
1648
+ it "correctly renders input" do
1649
+ expect(convert)
1650
+ .to(be_equivalent_to(xmlpp(output)))
1651
+ end
1652
+ end
1445
1653
  end
@@ -22,6 +22,7 @@ RSpec.describe Asciidoctor::Standoc do
22
22
  Author
23
23
  :docfile: test.adoc
24
24
  :nodoc:
25
+ :no-pdf:
25
26
 
26
27
  [[abc]]
27
28
  == Clause 1
@@ -258,6 +259,7 @@ RSpec.describe Asciidoctor::Standoc do
258
259
  = Document title
259
260
  Author
260
261
  :docfile: test.adoc
262
+ :no-pdf:
261
263
 
262
264
  [bibliography]
263
265
  == Normative References
@@ -285,6 +287,7 @@ RSpec.describe Asciidoctor::Standoc do
285
287
  = Document title
286
288
  Author
287
289
  :docfile: test.adoc
290
+ :no-pdf:
288
291
 
289
292
  [bibliography]
290
293
  == Normative References
@@ -443,6 +446,7 @@ RSpec.describe Asciidoctor::Standoc do
443
446
  = Document title
444
447
  Author
445
448
  :docfile: test.adoc
449
+ :no-pdf:
446
450
 
447
451
  footnoteblock:[id1]
448
452
 
@@ -1,4 +1,5 @@
1
1
  = Document title
2
2
  Author
3
+ :no-pdf:
3
4
 
4
5
  [datamodel_attributes_table,models/models/AddressClassProfile.yml]
@@ -1,4 +1,5 @@
1
1
  = Document title
2
2
  Author
3
+ :no-pdf:
3
4
 
4
5
  [datamodel_attributes_table,models/models/AddressComponentProfile.yml]
@@ -1,4 +1,5 @@
1
1
  = Document title
2
2
  Author
3
+ :no-pdf:
3
4
 
4
5
  [datamodel_attributes_table,models/models/SignatureBlankDefinition.yml]
@@ -1,4 +1,5 @@
1
1
  = Document title
2
2
  Author
3
+ :no-pdf:
3
4
 
4
- [datamodel_diagram,models/views/CommonModels.yml]
5
+ [datamodel_diagram,models/views/CommonModels.yml]
@@ -1,4 +1,5 @@
1
1
  = Document title
2
2
  Author
3
+ :no-pdf:
3
4
 
4
- [datamodel_diagram,models/views/TopDown.yml]
5
+ [datamodel_diagram,models/views/TopDown.yml]
@@ -0,0 +1,327 @@
1
+ <preface>
2
+ <foreword id='_' obligation='informative'>
3
+ <title>Foreword</title>
4
+ <p id='_'>mine text</p>
5
+ </foreword>
6
+ </preface>
7
+ <sections>
8
+ <clause id='_' inline-header='false' obligation='normative'>
9
+ <title>Wrapper nested package package</title>
10
+ <clause id='_' inline-header='false' obligation='normative'>
11
+ <title>Wrapper nested package overview</title>
12
+ <p id='_'>Diagram text</p>
13
+ <figure id='figure-EAID_0E029ABF_C35A_49e3_9EEA_FFD4F32780A8'>
14
+ <name>Fig B1 Full model</name>
15
+ <image src='spec/assets/requirements//EAID_0E029ABF_C35A_49e3_9EEA_FFD4F32780A8.png' id='_' mimetype='image/png' height='auto' width='auto'/>
16
+ </figure>
17
+ <p id='_'>The Wrapper nested package package is organized into 1 packages:</p>
18
+ <ol id='_' type='arabic'>
19
+ <li>
20
+ <p id='_'>ISO 19135 Procedures for item registration XML package</p>
21
+ </li>
22
+ </ol>
23
+ <p id='_'>mine text</p>
24
+ </clause>
25
+ <clause id='_' inline-header='false' obligation='normative'>
26
+ <title>ISO 19135 Procedures for item registration XML package</title>
27
+ <clause id='_' inline-header='false' obligation='normative'>
28
+ <title>ISO 19135 Procedures for item registration XML overview</title>
29
+ <p id='_'>Diagram text</p>
30
+ <figure id='figure-EAID_0E029ABF_C35A_49e3_9EEA_FFD4F32780A8'>
31
+ <name>Fig B1 Full model</name>
32
+ <image src='spec/assets/requirements//EAID_0E029ABF_C35A_49e3_9EEA_FFD4F32780A8.png' id='_' mimetype='image/png' height='auto' width='auto'/>
33
+ </figure>
34
+ </clause>
35
+ <clause id='_' inline-header='false' obligation='normative'>
36
+ <title>Defining tables</title>
37
+ <table id='tab-P-iso_19135_procedures_for_item_registration_xml-C-re_register' width='100%'>
38
+ <name>Elements of ISO 19135 Procedures for item registration XML::RE_Register</name>
39
+ <tbody>
40
+ <tr>
41
+ <th valign='top' align='left'>Name:</th>
42
+ <td colspan='7' valign='top' align='left'>
43
+ <p id='_'>RE_Register</p>
44
+ </td>
45
+ </tr>
46
+ <tr>
47
+ <th valign='top' align='left'>Definition:</th>
48
+ <td colspan='7' valign='top' align='left'>
49
+ <p id='_'>
50
+ The class &#8220;RE_Register&#8221; specifies information
51
+ about the register itself. It is a subtype of the Register
52
+ class in the core profile.
53
+ </p>
54
+ </td>
55
+ </tr>
56
+ <tr>
57
+ <th valign='top' align='left'>Stereotype:</th>
58
+ <td colspan='7' valign='top' align='left'>
59
+ <p id='_'>interface</p>
60
+ </td>
61
+ </tr>
62
+ <tr>
63
+ <th valign='top' align='left'>Inheritance from:</th>
64
+ <td colspan='7' valign='top' align='left'>
65
+ <p id='_'>Register</p>
66
+ </td>
67
+ </tr>
68
+ <tr>
69
+ <th valign='top' align='left'>Generalization of:</th>
70
+ <td colspan='7' valign='top' align='left'>
71
+ <p id='_'>TermRegister, CL_ClassificationRegister, LC_LCMLRegister</p>
72
+ </td>
73
+ </tr>
74
+ <tr>
75
+ <th valign='top' align='left'>Abstract:</th>
76
+ <td colspan='7' valign='top' align='left'>
77
+ <p id='_'>false</p>
78
+ </td>
79
+ </tr>
80
+ <tr>
81
+ <th valign='top' rowspan='2' align='left'>Associations:</th>
82
+ <td colspan='4' valign='top' align='left'>
83
+ <p id='_'>
84
+ <em>Association with:</em>
85
+ </p>
86
+ </td>
87
+ <td valign='top' align='left'>
88
+ <p id='_'>
89
+ <em>Obligation</em>
90
+ </p>
91
+ </td>
92
+ <td valign='top' align='left'>
93
+ <p id='_'>
94
+ <em>Maximum occurrence</em>
95
+ </p>
96
+ </td>
97
+ <td valign='top' align='left'>
98
+ <p id='_'>
99
+ <em>Provides:</em>
100
+ </p>
101
+ </td>
102
+ </tr>
103
+ <tr>
104
+ <td colspan='4' valign='top' align='left'>
105
+ <p id='_'>RE_ReferenceSource</p>
106
+ </td>
107
+ <td valign='top' align='left'>
108
+ <p id='_'>C</p>
109
+ </td>
110
+ <td valign='top' align='left'>
111
+ <p id='_'>*</p>
112
+ </td>
113
+ <td valign='top' align='left'>
114
+ <p id='_'>citation</p>
115
+ </td>
116
+ </tr>
117
+ <tr>
118
+ <th valign='top' rowspan='6' align='left'>Public attributes:</th>
119
+ <td valign='top' align='left'>
120
+ <p id='_'>
121
+ <em>Name</em>
122
+ </p>
123
+ </td>
124
+ <td colspan='2' valign='top' align='left'>
125
+ <p id='_'>
126
+ <em>Definition</em>
127
+ </p>
128
+ </td>
129
+ <td valign='top' align='left'>
130
+ <p id='_'>
131
+ <em>Derived</em>
132
+ </p>
133
+ </td>
134
+ <td valign='top' align='left'>
135
+ <p id='_'>
136
+ <em>Obligation</em>
137
+ </p>
138
+ </td>
139
+ <td valign='top' align='left'>
140
+ <p id='_'>
141
+ <em>Maximum occurrence</em>
142
+ </p>
143
+ </td>
144
+ <td valign='top' align='left'>
145
+ <p id='_'>
146
+ <em>Data type</em>
147
+ </p>
148
+ </td>
149
+ </tr>
150
+ <tr>
151
+ <td valign='top' align='left'>
152
+ <p id='_'>alternativeLanguages</p>
153
+ </td>
154
+ <td colspan='2' valign='top' align='left'>
155
+ <p id='_'>
156
+ The attribute &#8220;alternativeLanguages&#8221; supports
157
+ cultural and linguistic adaptability, individual items in a
158
+ register may provide elements of information in additional
159
+ languages other than the operating language of the register.
160
+ The attribute
161
+ <em>alternativeLanguages</em>
162
+ shall be represented as a set of instances of RE_Locale,
163
+ each specifying an additional unique locale used by items in
164
+ the register. Every member of the set shall be used by at
165
+ least one item in the register. The
166
+ <em>locale</em>
167
+ of every
168
+ <em>alternativeExpression</em>
169
+ used by any item in the register shall be included in this
170
+ set of RE_Locales. This attribute provides a summary of
171
+ alternative locales used by items in a register. Register
172
+ owners shall specify and publish their policy as to whether
173
+ all or only some of the items in a register shall have
174
+ alternative expressions.
175
+ </p>
176
+ </td>
177
+ <td valign='top' align='left'/>
178
+ <td valign='top' align='left'>
179
+ <p id='_'>C</p>
180
+ </td>
181
+ <td valign='top' align='left'>
182
+ <p id='_'>1</p>
183
+ </td>
184
+ <td valign='top' align='left'>
185
+ <p id='_'>Set&lt;RE_Locale&gt;</p>
186
+ </td>
187
+ </tr>
188
+ <tr>
189
+ <td valign='top' align='left'>
190
+ <p id='_'>contentSummary</p>
191
+ </td>
192
+ <td colspan='2' valign='top' align='left'>
193
+ <p id='_'>
194
+ The attribute &#8220;contentSummary&#8221; is be represented
195
+ as a CharacterString containing a general statement of the
196
+ purpose for which items in the register are made available
197
+ to potential users. It should also specify any limits to the
198
+ scope of the register and identify the types of applications
199
+ for which the items are intended. NOTE The scope of a
200
+ register could be limited by theme, by region, by language
201
+ or other criteria. EXAMPLE The scope of a terminology
202
+ register could be limited to Spanish terms used to describe
203
+ landforms in Latin America.
204
+ </p>
205
+ </td>
206
+ <td valign='top' align='left'/>
207
+ <td valign='top' align='left'>
208
+ <p id='_'>M</p>
209
+ </td>
210
+ <td valign='top' align='left'>
211
+ <p id='_'>1</p>
212
+ </td>
213
+ <td valign='top' align='left'>
214
+ <p id='_'>CharacterString</p>
215
+ </td>
216
+ </tr>
217
+ <tr>
218
+ <td valign='top' align='left'>
219
+ <p id='_'>name</p>
220
+ </td>
221
+ <td colspan='2' valign='top' align='left'>
222
+ <p id='_'>
223
+ The attribute &#8220;name&#8221; is be represented as a
224
+ CharacterString containing a compact and human-readable
225
+ designator that is used to uniquely denote that register
226
+ within the set of registers maintained by the register
227
+ owner. In the case of a hierarchical register, the &#8220;
228
+ <em>name&#8221;</em>
229
+ of a subregister shall uniquely identify that subregister
230
+ within the scope EXAMPLE &#239;&#191;&#189;ISO/TC 211
231
+ Register of Feature Data Dictionaries and Feature
232
+ Catalogues&#239;&#191;&#189; might be the name of the
233
+ principal register of of all registers established by the
234
+ owner of the principal register. a hierarchical register.
235
+ &#239;&#191;&#189;DGIWG FACC Data
236
+ Dictionary&#239;&#191;&#189; and &#239;&#191;&#189;IHO S-57
237
+ Object Dictionary&#239;&#191;&#189; might be the names of
238
+ subregisters within the hierarchy.
239
+ </p>
240
+ </td>
241
+ <td valign='top' align='left'/>
242
+ <td valign='top' align='left'>
243
+ <p id='_'>M</p>
244
+ </td>
245
+ <td valign='top' align='left'>
246
+ <p id='_'>1</p>
247
+ </td>
248
+ <td valign='top' align='left'>
249
+ <p id='_'>CharacterString</p>
250
+ </td>
251
+ </tr>
252
+ <tr>
253
+ <td valign='top' align='left'>
254
+ <p id='_'>operatingLanguage</p>
255
+ </td>
256
+ <td colspan='2' valign='top' align='left'>
257
+ <p id='_'>
258
+ The attribute &#8220;operatingLanguage&#8221; is represented
259
+ as an instance of class RE_Locale that is used to specify
260
+ language, country information and character encoding for the
261
+ proper interpretation of the content of character strings in
262
+ the register. The values of all character strings in the
263
+ register shall be in accordance with the value of
264
+ &#8220;operatingLanguage&#8221;, unless otherwise stated.
265
+ </p>
266
+ </td>
267
+ <td valign='top' align='left'/>
268
+ <td valign='top' align='left'>
269
+ <p id='_'>M</p>
270
+ </td>
271
+ <td valign='top' align='left'>
272
+ <p id='_'>1</p>
273
+ </td>
274
+ <td valign='top' align='left'>
275
+ <p id='_'>EAID_3996125E_4828_4f3c_93BD_605E9059DE05</p>
276
+ </td>
277
+ </tr>
278
+ <tr>
279
+ <td valign='top' align='left'>
280
+ <p id='_'>uniformResourceIdentifier</p>
281
+ </td>
282
+ <td colspan='2' valign='top' align='left'>
283
+ <p id='_'>
284
+ The attribute &#8220;uniformResourceIdentifier&#8221; takes
285
+ as its value a set of URI&#8217;s, each referencing
286
+ information about online resources associated with the
287
+ register. EXAMPLE
288
+ &#239;&#191;&#189;http://www.digest.org/Navigate2.htm&#239;&#191;&#189; and &#239;&#191;&#189;http://www.epa.gov/opppmsd1/PPISdata/index.html&#239;&#191;&#189; are sample valuescorresponding value of the attribute
289
+ <em>OnLineResource.linkage</em>
290
+ specifies a resource providing access to the complete
291
+ content of the register. EXAMPLE
292
+ &#239;&#191;&#189;http://www.digest.org/Navigate2.htm&#239;&#191;&#189; and &#239;&#191;&#189;http://www.epa.gov/opppmsd1/PPISdata/index.html&#239;&#191;&#189; are sample values of
293
+ <em>OnLineResource.linkage</em>
294
+ .
295
+ </p>
296
+ </td>
297
+ <td valign='top' align='left'/>
298
+ <td valign='top' align='left'>
299
+ <p id='_'>M</p>
300
+ </td>
301
+ <td valign='top' align='left'>
302
+ <p id='_'>*</p>
303
+ </td>
304
+ <td valign='top' align='left'>
305
+ <p id='_'>URI</p>
306
+ </td>
307
+ </tr>
308
+ <tr>
309
+ <td valign='top' align='left'>
310
+ <p id='_'>
311
+ <strong>Constraints:</strong>
312
+ </p>
313
+ </td>
314
+ <td colspan='7' valign='top' align='left'>
315
+ <p id='_'>
316
+ <tt>count(self.version +self.dateOfLastChange) &gt;= 1</tt>
317
+ </p>
318
+ </td>
319
+ </tr>
320
+ </tbody>
321
+ </table>
322
+ <p id='_'>footer text</p>
323
+ <p id='_'>footer text</p>
324
+ </clause>
325
+ </clause>
326
+ </clause>
327
+ </sections>