metanorma-standoc 1.10.3.1 → 1.10.4

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: 9189fd92cd1faa176828d42a9f0e7b7b58dc995eeb945fad0d13214d41c54c0d
4
- data.tar.gz: a6fa58d732b182153c56c04b9e83df2788abd01a497d12ed9746e990662ecec1
3
+ metadata.gz: 69e06ff811f3411ddd5ddccb1bfd52b82c92b49e1458d781fcfffac4397c1062
4
+ data.tar.gz: c600a5d9e17f3f271d176cefb5c6d3f860d887369efac0f2ad03ec5bf78b01a7
5
5
  SHA512:
6
- metadata.gz: 4c5ae33422d77c5ce51e88c2d8006a61795542949687f7ceaec0e253298f15398d1e1a3bb65314e834952cb370d44d03b3af759f8be9e51487709e5d926ac6ae
7
- data.tar.gz: 341c38c603a0f7b0f7913605309f633e5b76e8051ea41a6205342ec5b54fb3e4fb8799198c2deb12871251e2956ef2d09cb842ca1106baea042a56094b0c891f
6
+ metadata.gz: 785c49c3ef49c5bdc393f1f10f44fb2cf3a59e10583b08f1b40ecf282ebe015b1b98a0c9d8f3c796c81d2495e7e1273ba28d15b5a6ad4c6b543dbbe42dbae47f
7
+ data.tar.gz: a55c32649ba87a57dd417802ea70f91efbbae57dc786b294cc08704fbfce0b2ecf03a90827578a7bcc7c138402f0cb87992309fe3aa6397702a400a426cb5640
@@ -27,6 +27,7 @@ module Asciidoctor
27
27
  preprocessor Metanorma::Plugin::Datastruct::Yaml2TextPreprocessor
28
28
  preprocessor Metanorma::Plugin::Lutaml::LutamlPreprocessor
29
29
  preprocessor Metanorma::Plugin::Lutaml::LutamlUmlAttributesTablePreprocessor
30
+ preprocessor Metanorma::Plugin::Lutaml::LutamlUmlDatamodelDescriptionPreprocessor
30
31
  inline_macro Asciidoctor::Standoc::AltTermInlineMacro
31
32
  inline_macro Asciidoctor::Standoc::DeprecatedTermInlineMacro
32
33
  inline_macro Asciidoctor::Standoc::DomainTermInlineMacro
@@ -48,6 +49,7 @@ module Asciidoctor
48
49
  inline_macro Asciidoctor::Standoc::FormSelectMacro
49
50
  inline_macro Asciidoctor::Standoc::FormOptionMacro
50
51
  inline_macro Asciidoctor::Standoc::ToCInlineMacro
52
+ inline_macro Metanorma::Plugin::Lutaml::LutamlFigureInlineMacro
51
53
  block_macro Metanorma::Plugin::Lutaml::LutamlDiagramBlockMacro
52
54
  block Asciidoctor::Standoc::ToDoAdmonitionBlock
53
55
  treeprocessor Asciidoctor::Standoc::ToDoInlineAdmonitionBlock
@@ -6,20 +6,23 @@ require "base64"
6
6
  module Asciidoctor
7
7
  module Standoc
8
8
  module Blocks
9
- def reqt_subpart(x)
9
+ def reqt_subpart(name)
10
10
  %w(specification measurement-target verification import label
11
- subject inherit classification title).include? x
11
+ component subject inherit classification title).include? name
12
12
  end
13
13
 
14
- def reqt_subpart_attrs(node)
15
- attr_code(keep_attrs(node).merge(exclude: node.option?("exclude"),
16
- type: node.attr("type")))
14
+ def reqt_subpart_attrs(node, name)
15
+ klass = node.attr("class") || "component"
16
+ attr_code(keep_attrs(node)
17
+ .merge(exclude: node.option?("exclude"),
18
+ type: node.attr("type"),
19
+ class: name == "component" ? klass : nil))
17
20
  end
18
21
 
19
22
  def requirement_subpart(node)
20
23
  name = node.role || node.attr("style")
21
24
  noko do |xml|
22
- xml.send name, **reqt_subpart_attrs(node) do |o|
25
+ xml.send name, **reqt_subpart_attrs(node, name) do |o|
23
26
  o << node.content
24
27
  end
25
28
  end
@@ -30,14 +33,15 @@ module Asciidoctor
30
33
  HTMLEntities.new.decode(classif).split(/;\s*/).each do |c|
31
34
  c1 = c.split(/:\s*/)
32
35
  next unless c1.size == 2
33
- c1[1].split(/,\s*/).each { |v| ret << [ c1[0], v ] }
36
+
37
+ c1[1].split(/,\s*/).each { |v| ret << [c1[0], v] }
34
38
  end
35
39
  ret
36
40
  end
37
41
 
38
- def requirement_classification(classif, ex)
42
+ def requirement_classification(classif, out)
39
43
  req_classif_parse(classif).each do |r|
40
- ex.classification do |c|
44
+ out.classification do |c|
41
45
  c.tag { |t| t << r[0] }
42
46
  c.value { |v| v << r[1] }
43
47
  end
@@ -46,29 +50,37 @@ module Asciidoctor
46
50
 
47
51
  def reqt_attrs(node)
48
52
  attr_code(keep_attrs(node).merge(id_unnum_attrs(node)).merge(
49
- id: Metanorma::Utils::anchor_or_uuid(node),
50
- unnumbered: node.option?("unnumbered") ? "true" : nil,
51
- number: node.attr("number"),
52
- subsequence: node.attr("subsequence"),
53
- obligation: node.attr("obligation"),
54
- filename: node.attr("filename"),
55
- type: node.attr("type"),
56
- model: node.attr("model"),
57
- ))
53
+ id: Metanorma::Utils::anchor_or_uuid(node),
54
+ unnumbered: node.option?("unnumbered") ? "true" : nil,
55
+ number: node.attr("number"),
56
+ subsequence: node.attr("subsequence"),
57
+ obligation: node.attr("obligation"),
58
+ filename: node.attr("filename"),
59
+ type: node.attr("type"),
60
+ model: node.attr("model"),
61
+ ))
62
+ end
63
+
64
+ def requirement_elems(node, out)
65
+ node.title and out.title { |t| t << node.title }
66
+ a = node.attr("label") and out.label do |l|
67
+ l << a
68
+ end
69
+ a = node.attr("subject") and csv_split(a)&.each do |subj|
70
+ out.subject { |s| s << subj }
71
+ end
72
+ a = HTMLEntities.new.decode(node.attr("inherit")) and
73
+ csv_split(a)&.each do |i|
74
+ out.inherit { |inh| inh << i }
75
+ end
76
+ classif = node.attr("classification") and
77
+ requirement_classification(classif, out)
58
78
  end
59
79
 
60
80
  def requirement(node, obligation)
61
- classif = node.attr("classification")
62
81
  noko do |xml|
63
82
  xml.send obligation, **reqt_attrs(node) do |ex|
64
- node.title and ex.title { |t| t << node.title }
65
- node.attr("label") and ex.label { |l| l << node.attr("label") }
66
- node.attr("subject") and ex.subject { |s| s << node.attr("subject") }
67
- i = HTMLEntities.new.decode(node.attr("inherit"))
68
- i&.split(/;\s*/)&.each do |i|
69
- ex.inherit { |inh| inh << i }
70
- end
71
- requirement_classification(classif, ex) if classif
83
+ requirement_elems(node, ex)
72
84
  wrap_in_para(node, ex)
73
85
  end
74
86
  end.join("\n")
@@ -80,6 +80,7 @@
80
80
  <ref name="verification"/>
81
81
  <ref name="import"/>
82
82
  <ref name="description"/>
83
+ <ref name="component"/>
83
84
  </choice>
84
85
  </zeroOrMore>
85
86
  <optional>
@@ -138,6 +139,12 @@
138
139
  <ref name="RequirementSubpart"/>
139
140
  </element>
140
141
  </define>
142
+ <define name="component">
143
+ <element name="component">
144
+ <attribute name="class"/>
145
+ <ref name="RequirementSubpart"/>
146
+ </element>
147
+ </define>
141
148
  <define name="reqt_references">
142
149
  <element name="references">
143
150
  <oneOrMore>
@@ -42,7 +42,8 @@ module Asciidoctor
42
42
  root.xpath("//clause | //annex | //foreword | //introduction | "\
43
43
  "//acknowledgements").each do |c|
44
44
  next unless c.at("./clause")
45
- next if c.elements.select { |n| n.name != "clause" }.empty?
45
+ next if c.elements.reject { |n| %w(clause title).include? n.name }.empty?
46
+
46
47
  style_warning(c, "Hanging paragraph in clause")
47
48
  end
48
49
  end
@@ -19,6 +19,6 @@ module Metanorma
19
19
  end
20
20
 
21
21
  module Standoc
22
- VERSION = "1.10.3.1".freeze
22
+ VERSION = "1.10.4".freeze
23
23
  end
24
24
  end
@@ -264,6 +264,8 @@ RSpec.describe Asciidoctor::Standoc do
264
264
  </sections>
265
265
  </standard-document>
266
266
  OUTPUT
267
+ expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
268
+ .to be_equivalent_to xmlpp(output)
267
269
  end
268
270
 
269
271
  it "processes review blocks if document is in draft mode" do
@@ -1173,7 +1175,7 @@ RSpec.describe Asciidoctor::Standoc do
1173
1175
  it "processes recommendation" do
1174
1176
  input = <<~"INPUT"
1175
1177
  #{ASCIIDOC_BLANK_HDR}
1176
- [.recommendation,label="/ogc/recommendation/wfs/2",subject="user",inherit="/ss/584/2015/level/1; /ss/584/2015/level/2",options="unnumbered",type=verification,model=ogc]
1178
+ [.recommendation,label="/ogc/recommendation/wfs/2",subject="user;developer, implementer",inherit="/ss/584/2015/level/1; /ss/584/2015/level/2",options="unnumbered",type=verification,model=ogc]
1177
1179
  ====
1178
1180
  I recommend this
1179
1181
  ====
@@ -1184,6 +1186,7 @@ RSpec.describe Asciidoctor::Standoc do
1184
1186
  <recommendation id="_" unnumbered="true" type="verification" model="ogc">
1185
1187
  <label>/ogc/recommendation/wfs/2</label>
1186
1188
  <subject>user</subject>
1189
+ <subject>developer, implementer</subject>
1187
1190
  <inherit>/ss/584/2015/level/1</inherit>
1188
1191
  <inherit>/ss/584/2015/level/2</inherit>
1189
1192
  <description><p id="_">I recommend this</p></description>
@@ -1330,31 +1333,48 @@ RSpec.describe Asciidoctor::Standoc do
1330
1333
  success-response()
1331
1334
  ----
1332
1335
  --
1336
+
1337
+ [.component]
1338
+ --
1339
+ Hello
1340
+ --
1341
+
1342
+ [.component,class=condition]
1343
+ --
1344
+ If this be thus
1345
+ --
1333
1346
  ====
1334
1347
  INPUT
1335
1348
  output = <<~"OUTPUT"
1336
- #{BLANK_HDR}
1337
- <sections>
1338
- <recommendation id="ABC" obligation="permission,recommendation" filename="reqt1.rq"><label>/ogc/recommendation/wfs/2</label><subject>user</subject>
1339
- <classification><tag>control-class</tag><value>Technical</value></classification><classification><tag>priority</tag><value>P0</value></classification><classification><tag>family</tag><value>System &amp; Communications Protection</value></classification><classification><tag>family</tag><value>System and Communications Protocols</value></classification>
1340
- <description><p id="_">I recommend <em>this</em>.</p>
1341
- </description><specification exclude="false" type="tabular" keep-with-next="true" keep-lines-together="true"><p id="_">This is the object of the recommendation:</p><table id="_"> <tbody> <tr> <td valign="top" align="left">Object</td> <td valign="top" align="left">Value</td> </tr> <tr> <td valign="top" align="left">Mission</td> <td valign="top" align="left">Accomplished</td> </tr> </tbody></table></specification><description>
1342
- <p id="_">As for the measurement targets,</p>
1343
- </description><measurement-target exclude="false"><p id="_">The measurement target shall be measured as:</p><formula id="_"> <stem type="MathML"><math xmlns="http://www.w3.org/1998/Math/MathML"><mfrac>
1344
- <mrow>
1345
- <mi>r</mi>
1346
- </mrow>
1347
- <mrow>
1348
- <mn>1</mn>
1349
- </mrow>
1350
- </mfrac><mo>=</mo><mn>0</mn></math></stem></formula></measurement-target>
1351
- <verification exclude="false"><p id="_">The following code will be run for verification:</p><sourcecode lang="CoreRoot" id="_">CoreRoot(success): HttpResponse
1352
- if (success)
1353
- recommendation(label: success-response)
1354
- end</sourcecode></verification>
1355
- <import exclude="true"> <sourcecode lang="CoreRoot" id="_">success-response()</sourcecode></import></recommendation>
1356
- </sections>
1357
- </standard-document>
1349
+ #{BLANK_HDR}
1350
+ <sections>
1351
+ <recommendation id="ABC" obligation="permission,recommendation" filename="reqt1.rq"><label>/ogc/recommendation/wfs/2</label><subject>user</subject>
1352
+ <classification><tag>control-class</tag><value>Technical</value></classification><classification><tag>priority</tag><value>P0</value></classification><classification><tag>family</tag><value>System &amp; Communications Protection</value></classification><classification><tag>family</tag><value>System and Communications Protocols</value></classification>
1353
+ <description><p id="_">I recommend <em>this</em>.</p>
1354
+ </description><specification exclude="false" type="tabular" keep-with-next="true" keep-lines-together="true"><p id="_">This is the object of the recommendation:</p><table id="_"> <tbody> <tr> <td valign="top" align="left">Object</td> <td valign="top" align="left">Value</td> </tr> <tr> <td valign="top" align="left">Mission</td> <td valign="top" align="left">Accomplished</td> </tr> </tbody></table></specification><description>
1355
+ <p id="_">As for the measurement targets,</p>
1356
+ </description><measurement-target exclude="false"><p id="_">The measurement target shall be measured as:</p><formula id="_"> <stem type="MathML"><math xmlns="http://www.w3.org/1998/Math/MathML"><mfrac>
1357
+ <mrow>
1358
+ <mi>r</mi>
1359
+ </mrow>
1360
+ <mrow>
1361
+ <mn>1</mn>
1362
+ </mrow>
1363
+ </mfrac><mo>=</mo><mn>0</mn></math></stem></formula></measurement-target>
1364
+ <verification exclude="false"><p id="_">The following code will be run for verification:</p><sourcecode lang="CoreRoot" id="_">CoreRoot(success): HttpResponse
1365
+ if (success)
1366
+ recommendation(label: success-response)
1367
+ end</sourcecode></verification>
1368
+ <import exclude="true"> <sourcecode lang="CoreRoot" id="_">success-response()</sourcecode></import>
1369
+ <component exclude='false' class='component'>
1370
+ <p id='_'>Hello</p>
1371
+ </component>
1372
+ <component exclude='false' class='condition'>
1373
+ <p id='_'>If this be thus</p>
1374
+ </component>
1375
+ </recommendation>
1376
+ </sections>
1377
+ </standard-document>
1358
1378
  OUTPUT
1359
1379
 
1360
1380
  expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
@@ -1541,4 +1541,113 @@ RSpec.describe Asciidoctor::Standoc do
1541
1541
  end
1542
1542
  end
1543
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
1544
1653
  end
@@ -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>