metanorma-standoc 1.10.3.1 → 1.10.4

Sign up to get free protection for your applications and to get access to all the features.
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>