lutaml-xmi 0.1.1 → 0.2.0

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: 0e858e6db1ba319029749472712e560d0b674c09f50fc1a6f0140a31b336fd0b
4
- data.tar.gz: b0f73e57fc490d434bdb038bad499717d826e0044f1df6600b7acf98030a375e
3
+ metadata.gz: a8097eb270cce873bbed9f698a85383bc579844db4729be05923d2866bb2d47a
4
+ data.tar.gz: 327a2b1dfe675de37dc5ba0cffeb502581c8889dc62193ac0fa96ad166bea477
5
5
  SHA512:
6
- metadata.gz: 0adb4d6ccb24ca5b22d0c96d28f32c50b1ba7595b18d5842b97b0c5f2007e53f27a3319f8d9291035e5d7b9e17106367acf028912b53f048fd8f601b0b0c964f
7
- data.tar.gz: 02cb13ff769e592f7ad0fef6aa6147420584bdacd36218bbdec6922dff26a7ae85bd0d0596f54c6a7c75b54ede39c4736f46123956deab595a806befa890f4ff
6
+ metadata.gz: b222a705723f2f07767955f17f4a3789dce863697d865937708c3abdf0c59fa100dfdd754f188930a131950e9ab5e033ebb3be8d447ddf06f9c400157837f984
7
+ data.tar.gz: 8772040cc940d2de1389592ea7a3fb3b06c2d114d17511072d8bb4abe748d26111d58b4bcff626e1d3b55bb6b98a9ba017a52572b6853be399dfd650721d36ba
data/Makefile ADDED
@@ -0,0 +1,2 @@
1
+ fix-lint-staged:
2
+ git status --short | egrep '^(A|M)' | awk '{ print $$2}' | grep -v db/schema.rb | xargs bundle exec rubocop -a
@@ -7,17 +7,17 @@ module Lutaml
7
7
  module Parsers
8
8
  # Class for parsing .xmi schema files into ::Lutaml::Uml::Document
9
9
  class XML
10
- ATTRIBUTE_MAPPINGS = {
11
- "uml:LiteralInteger" => "1",
12
- "uml:LiteralUnlimitedNatural" => "*"
13
- }
10
+ LOVER_VALUE_MAPPINGS = {
11
+ "0" => "C",
12
+ "1" => "M",
13
+ }.freeze
14
14
  attr_reader :main_model, :xmi_cache
15
15
 
16
16
  # @param [String] io - file object with path to .xmi file
17
17
  # [Hash] options - options for parsing
18
18
  #
19
19
  # @return [Lutaml::XMI::Model::Document]
20
- def self.parse(io, options = {})
20
+ def self.parse(io, _options = {})
21
21
  new.parse(Nokogiri::XML(io.read))
22
22
  end
23
23
 
@@ -31,20 +31,25 @@ module Lutaml
31
31
  private
32
32
 
33
33
  def serialize_to_hash(xmi_doc)
34
- main_model = xmi_doc.xpath('//uml:Model[@xmi:type="uml:Model"]').first
34
+ model = xmi_doc.xpath('//uml:Model[@xmi:type="uml:Model"]').first
35
35
  {
36
- name: main_model["name"],
37
- packages: serialize_model_packages(main_model)
36
+ name: model["name"],
37
+ packages: serialize_model_packages(model)
38
38
  }
39
39
  end
40
40
 
41
- def serialize_model_packages(main_model)
42
- main_model.xpath('./packagedElement[@xmi:type="uml:Package"]').map do |package|
41
+ def serialize_model_packages(model)
42
+ model.xpath('./packagedElement[@xmi:type="uml:Package"]').map do |package|
43
43
  {
44
+ xmi_id: package["xmi:id"],
44
45
  name: package["name"],
45
- packages: serialize_model_packages(package),
46
46
  classes: serialize_model_classes(package),
47
- enums: serialize_model_enums(package)
47
+ enums: serialize_model_enums(package),
48
+ data_types: serialize_model_data_types(package),
49
+ diagrams: serialize_model_diagrams(package),
50
+ packages: serialize_model_packages(package),
51
+ definition: doc_node_attribute_value(package, "documentation"),
52
+ stereotype: doc_node_attribute_value(package, "stereotype")
48
53
  }
49
54
  end
50
55
  end
@@ -52,12 +57,17 @@ module Lutaml
52
57
  def serialize_model_classes(model)
53
58
  model.xpath('./packagedElement[@xmi:type="uml:Class"]').map do |klass|
54
59
  {
55
- xmi_id: klass['xmi:id'],
56
- xmi_uuid: klass['xmi:uuid'],
57
- name: klass['name'],
60
+ xmi_id: klass["xmi:id"],
61
+ xmi_uuid: klass["xmi:uuid"],
62
+ name: klass["name"],
63
+ package: model,
58
64
  attributes: serialize_class_attributes(klass),
59
65
  associations: serialize_model_associations(klass),
60
- definition: lookup_model_definition(klass)
66
+ operations: serialize_class_operations(klass),
67
+ constraints: serialize_class_constraints(klass),
68
+ is_abstract: doc_node_attribute_value(klass, "isAbstract"),
69
+ definition: doc_node_attribute_value(klass, "documentation"),
70
+ stereotype: doc_node_attribute_value(klass, "stereotype")
61
71
  }
62
72
  end
63
73
  end
@@ -65,63 +75,235 @@ module Lutaml
65
75
  def serialize_model_enums(model)
66
76
  model.xpath('./packagedElement[@xmi:type="uml:Enumeration"]').map do |enum|
67
77
  attributes = enum
68
- .xpath('.//ownedLiteral[@xmi:type="uml:EnumerationLiteral"]')
69
- .map do |attribute|
70
- {
71
- # TODO: xmi_id
72
- # xmi_id: enum['xmi:id'],
73
- type: attribute['name'],
74
- }
75
- end
78
+ .xpath('.//ownedLiteral[@xmi:type="uml:EnumerationLiteral"]')
79
+ .map do |value|
80
+ type = value.xpath(".//type").first || {}
81
+ {
82
+ name: value["name"],
83
+ type: lookup_entity_name(type["xmi:idref"]) || type["xmi:idref"],
84
+ definition: lookup_attribute_definition(value),
85
+ }
86
+ end
76
87
  {
77
- xmi_id: enum['xmi:id'],
78
- xmi_uuid: enum['xmi:uuid'],
79
- name: enum['name'],
80
- attributes: attributes
88
+ xmi_id: enum["xmi:id"],
89
+ xmi_uuid: enum["xmi:uuid"],
90
+ name: enum["name"],
91
+ values: attributes,
92
+ definition: doc_node_attribute_value(enum, "documentation"),
93
+ stereotype: doc_node_attribute_value(enum, "stereotype"),
81
94
  }
82
95
  end
83
96
  end
84
97
 
85
- def serialize_model_associations(klass)
86
- return unless klass.attributes['name']
98
+ def serialize_model_data_types(model)
99
+ model.xpath('./packagedElement[@xmi:type="uml:DataType"]').map do |klass|
100
+ {
101
+ xmi_id: klass["xmi:id"],
102
+ xmi_uuid: klass["xmi:uuid"],
103
+ name: klass["name"],
104
+ attributes: serialize_class_attributes(klass),
105
+ operations: serialize_class_operations(klass),
106
+ associations: serialize_model_associations(klass),
107
+ constraints: serialize_class_constraints(klass),
108
+ is_abstract: doc_node_attribute_value(klass, "isAbstract"),
109
+ definition: doc_node_attribute_value(klass, "documentation"),
110
+ stereotype: doc_node_attribute_value(klass, "stereotype"),
111
+ }
112
+ end
113
+ end
87
114
 
88
- klass.xpath('.//ownedAttribute/type').map do |assoc|
89
- if assoc.attributes && assoc.attributes['idref']
90
- id_ref = assoc.attributes['idref'].value
91
- member_end = lookup_entity_name(id_ref)
115
+ def serialize_model_diagrams(node)
116
+ main_model.xpath(%(//diagrams/diagram/model[@package="#{node['xmi:id']}"])).map do |diagram_model|
117
+ diagram = diagram_model.parent
118
+ properties = diagram.children.find {|n| n.name == 'properties' }
119
+ {
120
+ xmi_id: diagram["xmi:id"],
121
+ name: properties["name"],
122
+ definition: properties.attributes['documentation']&.value
123
+ }
124
+ end
125
+ end
126
+
127
+ def serialize_model_associations(klass)
128
+ xmi_id = klass["xmi:id"]
129
+ main_model.xpath(%(//element[@xmi:idref="#{xmi_id}"]/links/*)).map do |link|
130
+ member_end, member_end_type, member_end_cardinality, member_end_attribute_name = serialize_member_type(xmi_id, link)
131
+ owned_end_cardinality, owned_end_attribute_name = serialize_owned_type(xmi_id, link)
132
+ if member_end && ((member_end_type != 'aggregation') || (member_end_type == 'aggregation' && member_end_attribute_name))
133
+ definition_node = main_model.xpath(%(//connector[@xmi:idref="#{link['xmi:id']}"]/target/documentation)).first
134
+ definition = definition_node.attributes['value']&.value if definition_node
135
+ {
136
+ xmi_id: link["xmi:id"],
137
+ member_end: member_end,
138
+ member_end_type: member_end_type,
139
+ member_end_cardinality: member_end_cardinality,
140
+ member_end_attribute_name: member_end_attribute_name,
141
+ definition: definition
142
+ }
92
143
  end
93
- if member_end
144
+ end
145
+ end
146
+
147
+ def serialize_class_operations(klass)
148
+ klass.xpath('.//ownedOperation').map do |attribute|
149
+ type = attribute.xpath(".//type").first || {}
150
+ if attribute.attributes["association"].nil?
94
151
  {
95
- xmi_id: assoc['xmi:id'],
96
- xmi_uuid: assoc['xmi:uuid'],
97
- name: assoc['name'],
98
- member_end: member_end
152
+ # TODO: xmi_id
153
+ # xmi_id: klass['xmi:id'],
154
+ name: attribute["name"],
155
+ definition: lookup_attribute_definition(attribute),
99
156
  }
100
157
  end
101
158
  end.compact
102
159
  end
103
160
 
104
- def serialize_class_attributes(klass)
105
- klass.xpath('.//ownedAttribute[@xmi:type="uml:Property"]').map do |attribute|
106
- type = attribute.xpath('.//type').first || {}
107
- lowerValue = attribute.xpath('.//lowerValue').first || {}
108
- upperValue = attribute.xpath('.//upperValue').first || {}
161
+ def serialize_class_constraints(klass)
162
+ class_element_metadata(klass).xpath("./constraints/constraint").map do |constraint|
109
163
  {
110
- # TODO: xmi_id
111
- # xmi_id: klass['xmi:id'],
112
- name: attribute['name'],
113
- type: lookup_entity_name(type['xmi:idref']) || type['xmi:idref'],
114
- cardinality: [ATTRIBUTE_MAPPINGS[lowerValue["xmi:type"]], ATTRIBUTE_MAPPINGS[upperValue["xmi:type"]]].compact
164
+ xmi_id: constraint["xmi:id"],
165
+ body: constraint["name"],
115
166
  }
116
167
  end
117
168
  end
118
169
 
119
- def lookup_model_definition(klass)
120
- xmi_id = klass['xmi:id']
121
- node = main_model.xpath(%Q(//element[@xmi:idref="#{xmi_id}"]/properties)).first
122
- return unless node
170
+ def serialize_owned_type(owned_xmi_id, link)
171
+ return if link.name == 'NoteLink'
172
+ return generalization_association(owned_xmi_id, link) if link.name == "Generalization"
173
+
174
+ xmi_id = link.attributes["start"].value
175
+
176
+ if link.name == "Association"
177
+ assoc_connector = main_model.xpath(%(//connector[@xmi:idref="#{link['xmi:id']}"]/source)).first
178
+ if assoc_connector
179
+ connector_type = assoc_connector.children.find { |node| node.name == 'type' }
180
+ if connector_type && connector_type.attributes['multiplicity']
181
+ cardinality = connector_type.attributes['multiplicity']&.value&.split('..')
182
+ cardinality.unshift('1') if cardinality.length == 1
183
+ min, max = cardinality
184
+ end
185
+ connector_role = assoc_connector.children.find { |node| node.name == 'role' }
186
+ if connector_role
187
+ owned_attribute_name = connector_role.attributes["name"]&.value
188
+ end
189
+ owned_cardinality = { "min" => LOVER_VALUE_MAPPINGS[min], "max" => max }
190
+ end
191
+ else
192
+ owned_node = main_model.xpath(%(//ownedAttribute[@association]/type[@xmi:idref="#{xmi_id}"])).first
193
+ if owned_node
194
+ assoc = owned_node.parent
195
+ owned_cardinality = { "min" => cardinality_min_value(assoc), "max" => cardinality_max_value(assoc) }
196
+ owned_attribute_name = assoc.attributes["name"]&.value
197
+ end
198
+ end
199
+
200
+ [owned_cardinality, owned_attribute_name]
201
+ end
202
+
203
+ def serialize_member_type(owned_xmi_id, link)
204
+ return if link.name == 'NoteLink'
205
+ return generalization_association(owned_xmi_id, link) if link.name == "Generalization"
206
+
207
+ xmi_id = link.attributes["start"].value
208
+ member_end = lookup_entity_name(xmi_id) || connector_source_name(xmi_id)
209
+
210
+ if link.name == "Association"
211
+ assoc_connector = main_model.xpath(%(//connector[@xmi:idref="#{link['xmi:id']}"]/target)).first
212
+ if assoc_connector
213
+ connector_type = assoc_connector.children.find { |node| node.name == 'type' }
214
+ if connector_type && connector_type.attributes['multiplicity']
215
+ cardinality = connector_type.attributes['multiplicity']&.value&.split('..')
216
+ cardinality.unshift('1') if cardinality.length == 1
217
+ min, max = cardinality
218
+ end
219
+ connector_role = assoc_connector.children.find { |node| node.name == 'role' }
220
+ if connector_role
221
+ member_end_attribute_name = connector_role.attributes["name"]&.value
222
+ end
223
+ member_end_cardinality = { "min" => LOVER_VALUE_MAPPINGS[min], "max" => max }
224
+ end
225
+ else
226
+ member_end_node = main_model.xpath(%(//ownedAttribute[@association]/type[@xmi:idref="#{xmi_id}"])).first
227
+ if member_end_node
228
+ assoc = member_end_node.parent
229
+ member_end_cardinality = { "min" => cardinality_min_value(assoc), "max" => cardinality_max_value(assoc) }
230
+ member_end_attribute_name = assoc.attributes["name"]&.value
231
+ end
232
+ end
123
233
 
124
- node.attributes['documentation']&.value
234
+ [member_end, "aggregation", member_end_cardinality, member_end_attribute_name]
235
+ end
236
+
237
+ def generalization_association(owned_xmi_id, link)
238
+ if link.attributes["start"].value == owned_xmi_id
239
+ xmi_id = link.attributes["end"].value
240
+ member_end_type = "inheritance"
241
+ member_end = lookup_entity_name(xmi_id) || connector_target_name(xmi_id)
242
+ else
243
+ xmi_id = link.attributes["start"].value
244
+ member_end_type = "generalization"
245
+ member_end = lookup_entity_name(xmi_id) || connector_source_name(xmi_id)
246
+ end
247
+
248
+ member_end_node = main_model.xpath(%(//ownedAttribute[@association]/type[@xmi:idref="#{xmi_id}"])).first
249
+ if member_end_node
250
+ assoc = member_end_node.parent
251
+ member_end_cardinality = { "min" => cardinality_min_value(assoc), "max" => cardinality_max_value(assoc) }
252
+ end
253
+
254
+ [member_end, member_end_type, member_end_cardinality, nil]
255
+ end
256
+
257
+ def class_element_metadata(klass)
258
+ main_model.xpath(%(//element[@xmi:idref="#{klass['xmi:id']}"]))
259
+ end
260
+
261
+ def serialize_class_attributes(klass)
262
+ klass.xpath('.//ownedAttribute[@xmi:type="uml:Property"]').map do |attribute|
263
+ type = attribute.xpath(".//type").first || {}
264
+ if attribute.attributes["association"].nil?
265
+ {
266
+ # TODO: xmi_id
267
+ # xmi_id: klass['xmi:id'],
268
+ name: attribute["name"],
269
+ type: lookup_entity_name(type["xmi:idref"]) || type["xmi:idref"],
270
+ is_derived: attribute["isDerived"],
271
+ cardinality: { "min" => cardinality_min_value(attribute), "max" => cardinality_max_value(attribute) },
272
+ definition: lookup_attribute_definition(attribute),
273
+ }
274
+ end
275
+ end.compact
276
+ end
277
+
278
+ def cardinality_min_value(node)
279
+ lower_value_node = node.xpath(".//lowerValue").first
280
+ return unless lower_value_node
281
+
282
+ lower_value = lower_value_node.attributes["value"]&.value
283
+ LOVER_VALUE_MAPPINGS[lower_value]
284
+ end
285
+
286
+ def cardinality_max_value(node)
287
+ upper_value_node = node.xpath(".//upperValue").first
288
+ return unless upper_value_node
289
+
290
+ upper_value_node.attributes["value"]&.value
291
+ end
292
+
293
+ def doc_node_attribute_value(node, attr_name)
294
+ xmi_id = node["xmi:id"]
295
+ doc_node = main_model.xpath(%(//element[@xmi:idref="#{xmi_id}"]/properties)).first
296
+ return unless doc_node
297
+
298
+ doc_node.attributes[attr_name]&.value
299
+ end
300
+
301
+ def lookup_attribute_definition(node)
302
+ xmi_id = node["xmi:id"]
303
+ doc_node = main_model.xpath(%(//attribute[@xmi:idref="#{xmi_id}"]/documentation)).first
304
+ return unless doc_node
305
+
306
+ doc_node.attributes["value"]&.value
125
307
  end
126
308
 
127
309
  def lookup_entity_name(xmi_id)
@@ -129,13 +311,27 @@ module Lutaml
129
311
  xmi_cache[xmi_id]
130
312
  end
131
313
 
314
+ def connector_source_name(xmi_id)
315
+ node = main_model.xpath(%(//source[@xmi:idref="#{xmi_id}"]/model)).first
316
+ return unless node
317
+
318
+ node.attributes["name"]&.value
319
+ end
320
+
321
+ def connector_target_name(xmi_id)
322
+ node = main_model.xpath(%(//target[@xmi:idref="#{xmi_id}"]/model)).first
323
+ return unless node
324
+
325
+ node.attributes["name"]&.value
326
+ end
327
+
132
328
  def model_node_name_by_xmi_id(xmi_id)
133
- node = main_model.xpath(%Q(//*[@xmi:id="#{xmi_id}"])).first
329
+ node = main_model.xpath(%(//*[@xmi:id="#{xmi_id}"])).first
134
330
  return unless node
135
331
 
136
- node.attributes['name']&.value
332
+ node.attributes["name"]&.value
137
333
  end
138
334
  end
139
335
  end
140
336
  end
141
- end
337
+ end
@@ -1,5 +1,5 @@
1
1
  module Lutaml
2
2
  module XMI
3
- VERSION = "0.1.1"
3
+ VERSION = "0.2.0"
4
4
  end
5
5
  end
data/lutaml-xmi.gemspec CHANGED
@@ -26,10 +26,10 @@ Gem::Specification.new do |spec|
26
26
  spec.add_runtime_dependency "hashie", "~> 4.1.0"
27
27
  spec.add_runtime_dependency "thor", "~> 1.0"
28
28
  spec.add_runtime_dependency "lutaml-uml"
29
+ spec.add_runtime_dependency "nokogiri", "~> 1.10"
29
30
 
30
31
  spec.add_development_dependency "bundler", "~> 2.0"
31
32
  spec.add_development_dependency "byebug"
32
- spec.add_development_dependency "nokogiri", "~> 1.10"
33
33
  spec.add_development_dependency "pry", "~> 0.12.2"
34
34
  spec.add_development_dependency "rake", "~> 10.0"
35
35
  spec.add_development_dependency "rspec", "~> 3.0"
@@ -244,6 +244,41 @@
244
244
  <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="EAID_LI000064_49E6_4725_AC7B_382A34BB8935" value="1"/>
245
245
  </ownedAttribute>
246
246
  </packagedElement>
247
+ <packagedElement xmi:type="uml:Association" xmi:id="EAID_7F310A6F_F068_4c1d_8FFD_B01FE62D6D1C">
248
+ <memberEnd xmi:idref="EAID_dst310A6F_F068_4c1d_8FFD_B01FE62D6D1C"/>
249
+ <ownedEnd xmi:type="uml:Property" xmi:id="EAID_dst310A6F_F068_4c1d_8FFD_B01FE62D6D1C" association="EAID_7F310A6F_F068_4c1d_8FFD_B01FE62D6D1C">
250
+ <type xmi:idref="EAID_60A00B1F_43C3_433b_8060_2EB473EEE6BA"/>
251
+ </ownedEnd>
252
+ <memberEnd xmi:idref="EAID_src310A6F_F068_4c1d_8FFD_B01FE62D6D1C"/>
253
+ </packagedElement>
254
+ <packagedElement xmi:type="uml:Class" xmi:id="EAID_37BF1557_0370_435d_94BB_8FCC4574561B" name="TemporalGeometricPrimitive" isAbstract="true">
255
+ <ownedAttribute xmi:type="uml:Property" xmi:id="EAID_43D3DBAC_3887_4b74_8DBB_949F1AFDE20E" name="spatialDimension">
256
+ <type xmi:idref="EAID_12886CE2_182E_4081_8D05_E09B06F51177"/>
257
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="EAID_LI000011_3887_4b74_8DBB_949F1AFDE20E" value="1"/>
258
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="EAID_LI000012_3887_4b74_8DBB_949F1AFDE20E" value="1"/>
259
+ </ownedAttribute>
260
+ <ownedAttribute xmi:type="uml:Property" xmi:id="EAID_5085D691_2244_4232_ACA0_CB0C32654079" name="temporalDimension">
261
+ <type xmi:idref="EAID_12886CE2_182E_4081_8D05_E09B06F51177"/>
262
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="EAID_LI000013_2244_4232_ACA0_CB0C32654079" value="1"/>
263
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="EAID_LI000014_2244_4232_ACA0_CB0C32654079" value="1"/>
264
+ </ownedAttribute>
265
+ <generalization xmi:type="uml:Generalization" xmi:id="EAID_84688F21_D758_44ab_870D_69D890029769" general="EAID_AF08B23A_D40E_4e8a_B258_60C53D27E384"/>
266
+ <generalization xmi:type="uml:Generalization" xmi:id="EAID_AD6CE071_3261_4681_B8E1_25AE657BBCD2" general="EAID_82DA65AB_212B_44fd_BCDC_232A2AA22542"/>
267
+ </packagedElement>
268
+ <packagedElement xmi:type="uml:Association" xmi:id="EAID_25C1510D_9559_406f_867E_2A350C45C8A5" name="Realisation">
269
+ <memberEnd xmi:idref="EAID_dstC1510D_9559_406f_867E_2A350C45C8A5"/>
270
+ <memberEnd xmi:idref="EAID_srcC1510D_9559_406f_867E_2A350C45C8A5"/>
271
+ <ownedEnd xmi:type="uml:Property" xmi:id="EAID_srcC1510D_9559_406f_867E_2A350C45C8A5" name="topology" association="EAID_25C1510D_9559_406f_867E_2A350C45C8A5">
272
+ <type xmi:idref="EAID_AE0137BF_A059_4c07_B438_75C5D3A3705D"/>
273
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="EAID_LI000015__9559_406f_867E_2A350C45C8A5" value="0"/>
274
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="EAID_LI000016__9559_406f_867E_2A350C45C8A5" value="*"/>
275
+ </ownedEnd>
276
+ <ownedEnd xmi:type="uml:Property" xmi:id="EAID_dstC1510D_9559_406f_867E_2A350C45C8A5" name="geometry" association="EAID_25C1510D_9559_406f_867E_2A350C45C8A5">
277
+ <type xmi:idref="EAID_37BF1557_0370_435d_94BB_8FCC4574561B"/>
278
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="EAID_LI000029__9559_406f_867E_2A350C45C8A5" value="0"/>
279
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="EAID_LI000030__9559_406f_867E_2A350C45C8A5" value="1"/>
280
+ </ownedEnd>
281
+ </packagedElement>
247
282
  </packagedElement>
248
283
  <packagedElement xmi:type="uml:Package" xmi:id="EAPK_6FEDD31A_6F40_4ed8_9230_600BB66D2296" name="Common Spatio-temporal Classes">
249
284
  <packagedElement xmi:type="uml:Package" xmi:id="EAPK_C93A8CD8_53C7_4d95_8BC7_591AE2BB7563" name="Temporal and Zonal Geometry">
@@ -1216,6 +1251,377 @@
1216
1251
  <appliedProfile xmi:type="uml:Profile" href="http://www.sparxsystems.com/profiles/thecustomprofile/1.0#thecustomprofile"/>
1217
1252
  </profileApplication>
1218
1253
  </uml:Model>
1254
+ <xmi:Extension extender="Enterprise Architect" extenderID="6.5">
1255
+ <elements>
1256
+ <element xmi:idref="EAID_60A00B1F_43C3_433b_8060_2EB473EEE6BA" xmi:type="uml:Class" name="TemporalGeometricComplex" scope="public">
1257
+ <model package="EAPK_A6E46DCC_4D34_4dc0_AD3E_D006699DC90B" tpos="8" ea_localid="195" ea_eleType="element"/>
1258
+ <properties documentation="&lt;b&gt;Temporal Geometric Complex&lt;/b&gt; implements geometric &lt;b&gt;Complex&lt;/b&gt; for &lt;b&gt;Temporal Geometry.&lt;/b&gt;" isSpecification="false" sType="Class" nType="0" scope="public" stereotype="interface" isRoot="false" isLeaf="false" isAbstract="true" isActive="false"/>
1259
+ <project author="Gibb Robert" version="1.0" phase="1.0" created="2019-12-28 17:33:48" modified="2020-12-04 15:29:48" complexity="1" status="Proposed"/>
1260
+ <code gentype="Java"/>
1261
+ <style appearance="BackColor=-1;BorderColor=-1;BorderWidth=-1;FontColor=-1;VSwimLanes=1;HSwimLanes=1;BorderStyle=0;"/>
1262
+ <tags>
1263
+ <tag xmi:id="EAID_1538380D_5A39_4652_A61F_E3A59A665D40" name="callableElement" modelElement="EAID_60A00B1F_43C3_433b_8060_2EB473EEE6BA"/>
1264
+ <tag xmi:id="EAID_99754119_9123_4fff_B8D8_4A3959990702" name="documentation" modelElement="EAID_60A00B1F_43C3_433b_8060_2EB473EEE6BA"/>
1265
+ <tag xmi:id="EAID_D30569CC_A71F_406c_8270_173E28C03FBC" name="implementationRef" modelElement="EAID_60A00B1F_43C3_433b_8060_2EB473EEE6BA"/>
1266
+ <tag xmi:id="EAID_36A4E32B_02A7_4ba2_B8DF_2C05DDD08030" name="operationRefs" modelElement="EAID_60A00B1F_43C3_433b_8060_2EB473EEE6BA"/>
1267
+ </tags>
1268
+ <xrefs value="$XREFPROP=$XID={0FF4F100-7C89-4d8e-85B8-2A94D1E7D5B1}$XID;$NAM=Stereotypes$NAM;$TYP=element property$TYP;$VIS=Public$VIS;$PAR=0$PAR;$DES=@STEREO;Name=interface;GUID={5053837D-425B-435d-8D8B-C0487035B858};@ENDSTEREO;$DES;$CLT={60A00B1F-43C3-433b-8060-2EB473EEE6BA}$CLT;$SUP=&lt;none&gt;$SUP;$ENDXREF;"/>
1269
+ <extendedProperties tagged="0" package_name="Temporal Geometry and Topology"/>
1270
+ <links>
1271
+ <Generalization xmi:id="EAID_FBC084CC_4070_4dd5_8276_8A47DE1A72CD" start="EAID_60A00B1F_43C3_433b_8060_2EB473EEE6BA" end="EAID_66ADAA69_93B4_4837_A00D_1AE9BB6FB53B"/>
1272
+ <Association xmi:id="EAID_7EB3B4C8_5C04_473c_A4D8_DE460008BE7F" start="EAID_00ACADD9_EF9A_4ac8_8257_3DB6227AF948" end="EAID_60A00B1F_43C3_433b_8060_2EB473EEE6BA"/>
1273
+ <Aggregation xmi:id="EAID_7F310A6F_F068_4c1d_8FFD_B01FE62D6D1C" start="EAID_37BF1557_0370_435d_94BB_8FCC4574561B" end="EAID_60A00B1F_43C3_433b_8060_2EB473EEE6BA"/>
1274
+ <Aggregation xmi:id="EAID_F502A1E3_E24C_4549_8B9F_8AF1E3F428C6" start="EAID_B1233577_2573_4def_A92F_1C0E83443842" end="EAID_60A00B1F_43C3_433b_8060_2EB473EEE6BA"/>
1275
+ </links>
1276
+ </element>
1277
+ <element xmi:idref="EAID_66ADAA69_93B4_4837_A00D_1AE9BB6FB53B" xmi:type="uml:Class" name="TemporalGeometricCollection" scope="public">
1278
+ <model package="EAPK_A6E46DCC_4D34_4dc0_AD3E_D006699DC90B" tpos="9" ea_localid="201" ea_eleType="element"/>
1279
+ <properties documentation="&lt;b&gt;Temporal Geometric Collection&lt;/b&gt; implements geometric &lt;b&gt;Collection&lt;/b&gt; for &lt;b&gt;Temporal Geometry.&lt;/b&gt;&#xA;" isSpecification="false" sType="Class" nType="0" scope="public" stereotype="interface" isRoot="false" isLeaf="false" isAbstract="true" isActive="false"/>
1280
+ <project author="Gibb Robert" version="1.0" phase="1.0" created="2020-02-18 09:35:33" modified="2020-12-04 15:29:52" complexity="1" status="Proposed"/>
1281
+ <code gentype="Java"/>
1282
+ <style appearance="BackColor=-1;BorderColor=-1;BorderWidth=-1;FontColor=-1;VSwimLanes=1;HSwimLanes=1;BorderStyle=0;"/>
1283
+ <tags>
1284
+ <tag xmi:id="EAID_70343355_16F7_406d_82A7_D63CA70124F7" name="callableElement" modelElement="EAID_66ADAA69_93B4_4837_A00D_1AE9BB6FB53B"/>
1285
+ <tag xmi:id="EAID_9F0A2876_7854_4928_A1F7_B7F0CB465185" name="documentation" modelElement="EAID_66ADAA69_93B4_4837_A00D_1AE9BB6FB53B"/>
1286
+ <tag xmi:id="EAID_DAEED741_8AB5_4e19_8B96_2DBD158591E3" name="implementationRef" modelElement="EAID_66ADAA69_93B4_4837_A00D_1AE9BB6FB53B"/>
1287
+ <tag xmi:id="EAID_B9494DCD_1447_4e75_9679_BA9F22C0C8F5" name="operationRefs" modelElement="EAID_66ADAA69_93B4_4837_A00D_1AE9BB6FB53B"/>
1288
+ </tags>
1289
+ <xrefs value="$XREFPROP=$XID={53451E9A-C43C-4342-BA8D-969F2BAACB3A}$XID;$NAM=Stereotypes$NAM;$TYP=element property$TYP;$VIS=Public$VIS;$PAR=0$PAR;$DES=@STEREO;Name=interface;GUID={5053837D-425B-435d-8D8B-C0487035B858};@ENDSTEREO;$DES;$CLT={66ADAA69-93B4-4837-A00D-1AE9BB6FB53B}$CLT;$SUP=&lt;none&gt;$SUP;$ENDXREF;"/>
1290
+ <extendedProperties tagged="0" package_name="Temporal Geometry and Topology"/>
1291
+ <links>
1292
+ <Generalization xmi:id="EAID_3B3D9500_1668_4529_A500_03753B605AA9" start="EAID_66ADAA69_93B4_4837_A00D_1AE9BB6FB53B" end="EAID_82DA65AB_212B_44fd_BCDC_232A2AA22542"/>
1293
+ <Aggregation xmi:id="EAID_AD3FB2D7_370B_45ea_A98B_40B5B296E946" start="EAID_82DA65AB_212B_44fd_BCDC_232A2AA22542" end="EAID_66ADAA69_93B4_4837_A00D_1AE9BB6FB53B"/>
1294
+ <Generalization xmi:id="EAID_FBC084CC_4070_4dd5_8276_8A47DE1A72CD" start="EAID_60A00B1F_43C3_433b_8060_2EB473EEE6BA" end="EAID_66ADAA69_93B4_4837_A00D_1AE9BB6FB53B"/>
1295
+ </links>
1296
+ </element>
1297
+ </elements>
1298
+ <element xmi:idref="EAID_37BF1557_0370_435d_94BB_8FCC4574561B" xmi:type="uml:Class" name="TemporalGeometricPrimitive" scope="public">
1299
+ <model package="EAPK_A6E46DCC_4D34_4dc0_AD3E_D006699DC90B" tpos="5" ea_localid="200" ea_eleType="element"/>
1300
+ <properties documentation="&lt;b&gt;Temporal Geometric Primitive &lt;/b&gt;implements geometric &lt;b&gt;Primitive &lt;/b&gt;for &lt;b&gt;Temporal Geometry.&lt;/b&gt;" isSpecification="false" sType="Class" nType="0" scope="public" stereotype="interface" isRoot="false" isLeaf="false" isAbstract="true" isActive="false"/>
1301
+ <project version="2006" phase="IS" created="2020-03-09 13:56:11" modified="2020-12-04 15:28:44" complexity="2" status="Approved"/>
1302
+ <code/>
1303
+ <style appearance="BackColor=-1;BorderColor=-1;BorderWidth=-1;FontColor=-1;VSwimLanes=1;HSwimLanes=1;BorderStyle=0;"/>
1304
+ <tags>
1305
+ <tag xmi:id="EAID_F96414D6_F8FE_4936_8DC7_D9B30AED6A66" name="callableElement" modelElement="EAID_37BF1557_0370_435d_94BB_8FCC4574561B"/>
1306
+ <tag xmi:id="EAID_5CE471BA_BDEB_4b9b_B372_B503E8873A6B" name="documentation" modelElement="EAID_37BF1557_0370_435d_94BB_8FCC4574561B"/>
1307
+ <tag xmi:id="EAID_268A14D8_E953_4ca3_9CCF_E0C12A3156B4" name="implementationRef" modelElement="EAID_37BF1557_0370_435d_94BB_8FCC4574561B"/>
1308
+ <tag xmi:id="EAID_0A68E48A_B8F4_4012_8D7C_B0EA4CDA134A" name="operationRefs" modelElement="EAID_37BF1557_0370_435d_94BB_8FCC4574561B"/>
1309
+ <tag xmi:id="EAID_2B2032F4_C702_40ce_8058_A02DBBF614CD" name="persistence" value="persistent" modelElement="EAID_37BF1557_0370_435d_94BB_8FCC4574561B"/>
1310
+ </tags>
1311
+ <xrefs value="$XREFPROP=$XID={6A6ED87F-D2CD-406e-940C-7AE9E61D24FB}$XID;$NAM=Stereotypes$NAM;$TYP=element property$TYP;$VIS=Public$VIS;$PAR=0$PAR;$DES=@STEREO;Name=interface;GUID={5053837D-425B-435d-8D8B-C0487035B858};@ENDSTEREO;$DES;$CLT={37BF1557-0370-435d-94BB-8FCC4574561B}$CLT;$SUP=&lt;none&gt;$SUP;$ENDXREF;$XREFPROP=$XID={93706A91-553C-4a70-9F58-5D3E7B865678}$XID;$NAM=CustomProperties$NAM;$TYP=element property$TYP;$VIS=Public$VIS;$DES=@PROP=@NAME=isActive@ENDNAME;@TYPE=Boolean@ENDTYPE;@VALU=@ENDVALU;@PRMT=@ENDPRMT;@ENDPROP;$DES;$CLT={37BF1557-0370-435d-94BB-8FCC4574561B}$CLT;$SUP=&lt;none&gt;$SUP;$ENDXREF;"/>
1312
+ <extendedProperties tagged="0" package_name="Temporal Geometry and Topology" persistence="Persistent"/>
1313
+ <attributes>
1314
+ <attribute xmi:idref="EAID_43D3DBAC_3887_4b74_8DBB_949F1AFDE20E" name="spatialDimension" scope="Public">
1315
+ <initial/>
1316
+ <documentation value="Dimension of its spatial geometry component."/>
1317
+ <model ea_localid="417" ea_guid="{43D3DBAC-3887-4b74-8DBB-949F1AFDE20E}"/>
1318
+ <properties type="Integer" derived="0" precision="0" collection="false" length="0" static="0" duplicates="0" changeability="changeable"/>
1319
+ <coords ordered="0" scale="0"/>
1320
+ <containment containment="Not Specified" position="0"/>
1321
+ <stereotype/>
1322
+ <bounds lower="1" upper="1"/>
1323
+ <options/>
1324
+ <style/>
1325
+ <styleex value="volatile=0;union=0;"/>
1326
+ <tags/>
1327
+ <xrefs/>
1328
+ </attribute>
1329
+ <attribute xmi:idref="EAID_5085D691_2244_4232_ACA0_CB0C32654079" name="temporalDimension" scope="Public">
1330
+ <initial/>
1331
+ <documentation value="Dimension of its temporal geometry component."/>
1332
+ <model ea_localid="418" ea_guid="{5085D691-2244-4232-ACA0-CB0C32654079}"/>
1333
+ <properties type="Integer" derived="0" precision="0" collection="false" length="0" static="0" duplicates="0" changeability="changeable"/>
1334
+ <coords ordered="0" scale="0"/>
1335
+ <containment containment="Not Specified" position="1"/>
1336
+ <stereotype/>
1337
+ <bounds lower="1" upper="1"/>
1338
+ <options/>
1339
+ <style/>
1340
+ <styleex value="volatile=0;union=0;"/>
1341
+ <tags/>
1342
+ <xrefs/>
1343
+ </attribute>
1344
+ </attributes>
1345
+ <constraints>
1346
+ <constraint name="self.coordinateDimension &lt;= 1&#xA;&#xA;" type="Invariant" weight="0.00" status="Approved"/>
1347
+ <constraint name="self.rsid.CoordinateSystem = TemporalCS" type="Invariant" weight="0.00" status="Approved"/>
1348
+ <constraint name="self.spatialDimension.isEmpty = True" type="Invariant" weight="0.00" status="Approved"/>
1349
+ <constraint name="self.type.in{point,line} = True" type="Invariant" weight="0.00" status="Approved"/>
1350
+ </constraints>
1351
+ <links>
1352
+ <Aggregation xmi:id="EAID_7F310A6F_F068_4c1d_8FFD_B01FE62D6D1C" start="EAID_37BF1557_0370_435d_94BB_8FCC4574561B" end="EAID_60A00B1F_43C3_433b_8060_2EB473EEE6BA"/>
1353
+ <Generalization xmi:id="EAID_84688F21_D758_44ab_870D_69D890029769" start="EAID_37BF1557_0370_435d_94BB_8FCC4574561B" end="EAID_AF08B23A_D40E_4e8a_B258_60C53D27E384"/>
1354
+ <Generalization xmi:id="EAID_AD6CE071_3261_4681_B8E1_25AE657BBCD2" start="EAID_37BF1557_0370_435d_94BB_8FCC4574561B" end="EAID_82DA65AB_212B_44fd_BCDC_232A2AA22542"/>
1355
+ <Association xmi:id="EAID_25C1510D_9559_406f_867E_2A350C45C8A5" start="EAID_AE0137BF_A059_4c07_B438_75C5D3A3705D" end="EAID_37BF1557_0370_435d_94BB_8FCC4574561B"/>
1356
+ <Generalization xmi:id="EAID_60129D98_D599_4e3c_9DC3_37724601FFD7" start="EAID_37ED45D9_A247_40c2_A156_6546916DA8BB" end="EAID_37BF1557_0370_435d_94BB_8FCC4574561B"/>
1357
+ <Generalization xmi:id="EAID_F43854F6_4D07_4e42_834F_434CCAAF0E4B" start="EAID_60BA6F15_2E36_4995_B3A8_C5389797D9A2" end="EAID_37BF1557_0370_435d_94BB_8FCC4574561B"/>
1358
+ </links>
1359
+ </element>
1360
+ <connector xmi:idref="EAID_84688F21_D758_44ab_870D_69D890029769">
1361
+ <source xmi:idref="EAID_37BF1557_0370_435d_94BB_8FCC4574561B">
1362
+ <model ea_localid="200" type="Class" name="TemporalGeometricPrimitive"/>
1363
+ <role visibility="Public" targetScope="instance"/>
1364
+ <type aggregation="none" containment="Unspecified"/>
1365
+ <constraints/>
1366
+ <modifiers isOrdered="false" changeable="none" isNavigable="false"/>
1367
+ <style value="Union=0;Derived=0;AllowDuplicates=0;"/>
1368
+ <documentation/>
1369
+ <xrefs/>
1370
+ <tags/>
1371
+ </source>
1372
+ <target xmi:idref="EAID_AF08B23A_D40E_4e8a_B258_60C53D27E384">
1373
+ <model ea_localid="898" type="Interface" name="Primitive"/>
1374
+ <role visibility="Public" targetScope="instance"/>
1375
+ <type aggregation="none" containment="Unspecified"/>
1376
+ <constraints/>
1377
+ <modifiers isOrdered="false" changeable="none" isNavigable="true"/>
1378
+ <style value="Union=0;Derived=0;AllowDuplicates=0;"/>
1379
+ <documentation/>
1380
+ <xrefs/>
1381
+ <tags/>
1382
+ </target>
1383
+ <model ea_localid="729"/>
1384
+ <properties ea_type="Generalization" direction="Source -&gt; Destination"/>
1385
+ <parameterSubstitutions/>
1386
+ <documentation/>
1387
+ <appearance linemode="3" linecolor="-1" linewidth="0" seqno="0" headStyle="0" lineStyle="0"/>
1388
+ <labels/>
1389
+ <extendedProperties virtualInheritance="0"/>
1390
+ <style/>
1391
+ <xrefs/>
1392
+ <tags/>
1393
+ </connector>
1394
+ <connector xmi:idref="EAID_AD6CE071_3261_4681_B8E1_25AE657BBCD2">
1395
+ <source xmi:idref="EAID_37BF1557_0370_435d_94BB_8FCC4574561B">
1396
+ <model ea_localid="200" type="Class" name="TemporalGeometricPrimitive"/>
1397
+ <role visibility="Public" targetScope="instance"/>
1398
+ <type aggregation="none" containment="Unspecified"/>
1399
+ <constraints/>
1400
+ <modifiers isOrdered="false" changeable="none" isNavigable="false"/>
1401
+ <style value="Union=0;Derived=0;AllowDuplicates=0;"/>
1402
+ <documentation/>
1403
+ <xrefs/>
1404
+ <tags/>
1405
+ </source>
1406
+ <target xmi:idref="EAID_82DA65AB_212B_44fd_BCDC_232A2AA22542">
1407
+ <model ea_localid="199" type="Class" name="TemporalGeometry"/>
1408
+ <role visibility="Public" targetScope="instance"/>
1409
+ <type aggregation="none" containment="Unspecified"/>
1410
+ <constraints/>
1411
+ <modifiers isOrdered="false" changeable="none" isNavigable="true"/>
1412
+ <style value="Union=0;Derived=0;AllowDuplicates=0;"/>
1413
+ <documentation/>
1414
+ <xrefs/>
1415
+ <tags/>
1416
+ </target>
1417
+ <model ea_localid="734"/>
1418
+ <properties ea_type="Generalization" direction="Source -&gt; Destination"/>
1419
+ <parameterSubstitutions/>
1420
+ <documentation/>
1421
+ <appearance linemode="3" linecolor="-1" linewidth="0" seqno="0" headStyle="0" lineStyle="0"/>
1422
+ <labels/>
1423
+ <extendedProperties virtualInheritance="0"/>
1424
+ <style/>
1425
+ <xrefs/>
1426
+ <tags/>
1427
+ </connector>
1428
+ <connector xmi:idref="EAID_60129D98_D599_4e3c_9DC3_37724601FFD7">
1429
+ <source xmi:idref="EAID_37ED45D9_A247_40c2_A156_6546916DA8BB">
1430
+ <model ea_localid="194" type="Class" name="Interval"/>
1431
+ <role visibility="Public" targetScope="instance"/>
1432
+ <type aggregation="none" containment="Unspecified"/>
1433
+ <constraints/>
1434
+ <modifiers isOrdered="false" changeable="none" isNavigable="false"/>
1435
+ <style value="Union=0;Derived=0;AllowDuplicates=0;"/>
1436
+ <documentation/>
1437
+ <xrefs/>
1438
+ <tags/>
1439
+ </source>
1440
+ <target xmi:idref="EAID_37BF1557_0370_435d_94BB_8FCC4574561B">
1441
+ <model ea_localid="200" type="Class" name="TemporalGeometricPrimitive"/>
1442
+ <role visibility="Public" targetScope="instance"/>
1443
+ <type aggregation="none" containment="Unspecified"/>
1444
+ <constraints/>
1445
+ <modifiers isOrdered="false" changeable="none" isNavigable="true"/>
1446
+ <style value="Union=0;Derived=0;AllowDuplicates=0;"/>
1447
+ <documentation/>
1448
+ <xrefs/>
1449
+ <tags/>
1450
+ </target>
1451
+ <model ea_localid="746"/>
1452
+ <properties ea_type="Generalization" direction="Source -&gt; Destination"/>
1453
+ <parameterSubstitutions/>
1454
+ <documentation/>
1455
+ <appearance linemode="3" linecolor="-1" linewidth="0" seqno="0" headStyle="0" lineStyle="0"/>
1456
+ <labels/>
1457
+ <extendedProperties virtualInheritance="0"/>
1458
+ <style/>
1459
+ <xrefs/>
1460
+ <tags/>
1461
+ </connector>
1462
+ <connector xmi:idref="EAID_F43854F6_4D07_4e42_834F_434CCAAF0E4B">
1463
+ <source xmi:idref="EAID_60BA6F15_2E36_4995_B3A8_C5389797D9A2">
1464
+ <model ea_localid="196" type="Class" name="Instant"/>
1465
+ <role visibility="Public" targetScope="instance"/>
1466
+ <type aggregation="none" containment="Unspecified"/>
1467
+ <constraints/>
1468
+ <modifiers isOrdered="false" changeable="none" isNavigable="false"/>
1469
+ <style value="Union=0;Derived=0;AllowDuplicates=0;"/>
1470
+ <documentation/>
1471
+ <xrefs/>
1472
+ <tags/>
1473
+ </source>
1474
+ <target xmi:idref="EAID_37BF1557_0370_435d_94BB_8FCC4574561B">
1475
+ <model ea_localid="200" type="Class" name="TemporalGeometricPrimitive"/>
1476
+ <role visibility="Public" targetScope="instance"/>
1477
+ <type aggregation="none" containment="Unspecified"/>
1478
+ <constraints/>
1479
+ <modifiers isOrdered="false" changeable="none" isNavigable="true"/>
1480
+ <style value="Union=0;Derived=0;AllowDuplicates=0;"/>
1481
+ <documentation/>
1482
+ <xrefs/>
1483
+ <tags/>
1484
+ </target>
1485
+ <model ea_localid="741"/>
1486
+ <properties ea_type="Generalization" direction="Source -&gt; Destination"/>
1487
+ <parameterSubstitutions/>
1488
+ <documentation/>
1489
+ <appearance linemode="3" linecolor="-1" linewidth="0" seqno="0" headStyle="0" lineStyle="0"/>
1490
+ <labels/>
1491
+ <extendedProperties virtualInheritance="0"/>
1492
+ <style/>
1493
+ <xrefs/>
1494
+ <tags/>
1495
+ </connector>
1496
+ <diagrams>
1497
+ <diagram xmi:id="EAID_E9201FDF_B8D6_48cb_B683_3A3FE2170BDD">
1498
+ <model package="EAPK_04AA6D68_5225_400f_818D_4772E5A132EB" localID="1" owner="EAPK_04AA6D68_5225_400f_818D_4772E5A132EB" tpos="0"/>
1499
+ <properties name="Fig: DGGS Package Diagram" type="Logical" documentation="this is a documentation"/>
1500
+ <project author="Robert Gibb" version="2019" created="2019-10-21 16:18:34" modified="2020-12-05 23:55:38"/>
1501
+ <style1 value="ShowPrivate=1;ShowProtected=1;ShowPublic=1;HideRelationships=0;Locked=0;Border=0;HighlightForeign=1;PackageContents=0;SequenceNotes=0;ScalePrintImage=0;PPgs.cx=0;PPgs.cy=0;DocSize.cx=795;DocSize.cy=1138;ShowDetails=0;Orientation=P;Zoom=100;ShowTags=0;OpParams=1;VisibleAttributeDetail=0;ShowOpRetType=1;ShowIcons=1;CollabNums=0;HideProps=0;ShowReqs=0;ShowCons=0;PaperSize=9;HideParents=0;UseAlias=0;HideAtts=1;HideOps=1;HideStereo=1;HideElemStereo=1;ShowTests=0;ShowMaint=0;ConnectorNotation=UML 2.1;ExplicitNavigability=0;ShowShape=1;AllDockable=0;AdvancedElementProps=1;AdvancedFeatureProps=1;AdvancedConnectorProps=0;m_bElementClassifier=1;SPT=1;ShowNotes=0;SuppressBrackets=0;SuppConnectorLabels=0;PrintPageHeadFoot=0;ShowAsList=0;HideConnStereotype=1;ShowFQN=1;"/>
1502
+ <style2 value="ExcludeRTF=0;DocAll=0;HideQuals=0;AttPkg=1;ShowTests=0;ShowMaint=0;SuppressFOC=1;MatrixActive=0;SwimlanesActive=1;KanbanActive=0;MatrixLineWidth=1;MatrixLineClr=0;MatrixLocked=0;TConnectorNotation=UML 2.1;TExplicitNavigability=0;AdvancedElementProps=1;AdvancedFeatureProps=1;AdvancedConnectorProps=0;m_bElementClassifier=1;SPT=1;MDGDgm=;STBLDgm=;ShowNotes=0;VisibleAttributeDetail=0;ShowOpRetType=1;SuppressBrackets=0;SuppConnectorLabels=0;PrintPageHeadFoot=0;ShowAsList=0;HideConnStereotype=1;ShowFQN=1;SuppressedCompartments=;Theme=Monochrome for printing:119;HideFeatLink=1;SaveTag=FF8D95FE;"/>
1503
+ <swimlanes value="locked=false;orientation=0;width=0;inbar=false;names=false;color=0;bold=false;fcol=0;tcol=16777215;ofCol=-1;ufCol=-1;hl=0;ufh=0;hh=0;cls=0;bw=0;hli=0;SwimlaneFont=lfh:-10,lfw:0,lfi:0,lfu:0,lfs:0,lfface:Carlito,lfe:0,lfo:0,lfchar:1,lfop:0,lfcp:0,lfq:0,lfpf=0,lfWidth=0;"/>
1504
+ <matrixitems value="locked=false;matrixactive=false;swimlanesactive=true;kanbanactive=false;width=1;clrLine=0;"/>
1505
+ <extendedProperties/>
1506
+ <elements>
1507
+ <element geometry="Left=90;Top=890;Right=195;Bottom=949;imgL=98;imgT=906;imgR=203;imgB=965;" subject="EAID_D87CFCD1_E6FA_40b1_8DF4_582457AAE03E" seqno="1" style="NSL=0;BCol=-1;BFol=-1;LCol=-1;LWth=-1;fontsz=0;bold=0;black=0;italic=0;ul=0;charset=0;pitch=0;DUID=A614872E;"/>
1508
+ <element geometry="Left=600;Top=890;Right=686;Bottom=947;imgL=608;imgT=906;imgR=694;imgB=963;" subject="EAID_AC202A78_2895_4f28_B947_B92AF0AD3051" seqno="2" style="NSL=0;BCol=-1;BFol=-1;LCol=-1;LWth=-1;fontsz=0;bold=0;black=0;italic=0;ul=0;charset=0;pitch=0;DUID=99DF6365;"/>
1509
+ <element geometry="Left=715;Top=890;Right=809;Bottom=949;imgL=723;imgT=906;imgR=817;imgB=965;" subject="EAID_0D462D6E_4097_44ae_AAEC_FA91FD6F6988" seqno="3" style="NSL=0;BCol=-1;BFol=-1;LCol=-1;fontsz=0;bold=0;black=0;italic=0;ul=0;charset=0;pitch=0;LWth=0;DUID=56F0EC08;"/>
1510
+ <element geometry="Left=73;Top=283;Right=322;Bottom=324;imgL=81;imgT=299;imgR=330;imgB=340;" subject="EAID_91372B9D_392D_4e8f_8935_AF840790A1D3" seqno="4" style=" DUID=A2D3ACE3;NSL=0;bold=0;black=0;italic=0;ul=0;charset=0;LCol=3329330;BFol=0;font=Calibri;BCol=16777215;LWth=2;fontsz=90;pitch=34;DUID=414AD010;"/>
1511
+ <element geometry="Left=465;Top=706;Right=753;Bottom=746;imgL=473;imgT=722;imgR=761;imgB=762;" subject="EAID_AC035E38_542D_4eca_87EB_CE687A3C69D7" seqno="5" style=" DUID=EC55C00E;NSL=0;BCol=-1;BFol=-1;LCol=-1;bold=0;black=0;italic=0;ul=0;charset=0;AttPro=0;AttPri=0;AttPub=0;AttPkg=0;OpPro=0;OpPri=0;OpPub=0;OpPkg=0;AttCustom=0;OpCustom=0;RzO=1;LWth=0;font=Calibri;fontsz=90;pitch=34;DUID=F8049856;"/>
1512
+ <element geometry="Left=90;Top=560;Right=347;Bottom=601;imgL=98;imgT=576;imgR=355;imgB=617;" subject="EAID_C93A8CD8_53C7_4d95_8BC7_591AE2BB7563" seqno="6" style=" DUID=7C7D5F0D;NSL=0;BCol=-1;BFol=-1;LCol=-1;bold=0;black=0;italic=0;ul=0;charset=0;AttPro=0;AttPri=0;AttPub=0;AttPkg=0;OpPro=0;OpPri=0;OpPub=0;OpPkg=0;AttCustom=0;OpCustom=0;RzO=1;pitch=34;font=Calibri;LWth=2;fontsz=90;DUID=9AA052D2;"/>
1513
+ <element geometry="Left=90;Top=460;Right=347;Bottom=501;imgL=98;imgT=476;imgR=355;imgB=517;" subject="EAID_308C1C4A_8DC9_4e2c_88CD_2B08506CABF6" seqno="7" style=" DUID=D015E04E;NSL=0;BCol=-1;BFol=-1;LCol=-1;bold=0;black=0;italic=0;ul=0;charset=0;AttPro=0;AttPri=0;AttPub=0;AttPkg=0;OpPro=0;OpPri=0;OpPub=0;OpPkg=0;AttCustom=0;OpCustom=0;RzO=1;pitch=34;font=Calibri;LWth=2;fontsz=90;DUID=1BDF6B75;"/>
1514
+ <element geometry="Left=60;Top=411;Right=376;Bottom=651;imgL=68;imgT=427;imgR=384;imgB=667;" subject="EAID_6FEDD31A_6F40_4ed8_9230_600BB66D2296" seqno="8" style=" DUID=28200C96;NSL=0;BCol=-1;LCol=-1;bold=0;black=0;italic=0;ul=0;charset=0;BFol=0;font=Calibri;AttPro=0;AttPri=0;AttPub=0;AttPkg=0;OpPro=0;OpPri=0;OpPub=0;OpPkg=0;AttCustom=0;OpCustom=0;RzO=1;LWth=0;fontsz=90;pitch=34;DUID=225AD012;"/>
1515
+ <element geometry="Left=462;Top=524;Right=774;Bottom=587;imgL=470;imgT=540;imgR=782;imgB=603;" subject="EAID_48946985_6B5B_4ed9_B66D_C3AE45D93CA2" seqno="9" style=" DUID=FBD0AD13;NSL=0;BCol=-1;BFol=-1;LCol=-1;bold=0;black=0;italic=0;ul=0;charset=0;LWth=0;AttPro=0;AttPri=0;AttPub=0;AttPkg=0;OpPro=0;OpPri=0;OpPub=0;OpPkg=0;AttCustom=0;OpCustom=0;pitch=34;RzO=2;font=Calibri;fontsz=90;DUID=46FDB905;"/>
1516
+ <element geometry="Left=485;Top=19;Right=790;Bottom=60;imgL=493;imgT=35;imgR=798;imgB=76;" subject="EAID_6F4DCF8C_E51D_4645_B579_A802BF70796D" seqno="10" style=" DUID=1DCA28CD;NSL=0;bold=0;black=0;italic=0;ul=0;charset=0;AttPro=0;AttPri=0;AttPub=0;AttPkg=0;OpPro=0;OpPri=0;OpPub=0;OpPkg=0;AttCustom=0;OpCustom=0;PType=0;RzO=1;BCol=16777215;BFol=0;LWth=2;pitch=34;font=Calibri;LCol=3107669;fontsz=90;DUID=AED27AB9;"/>
1517
+ <element geometry="Left=466;Top=780;Right=754;Bottom=822;imgL=474;imgT=796;imgR=762;imgB=838;" subject="EAID_7C88ECAD_27B4_4211_83D4_ED24E5CF4E84" seqno="11" style=" DUID=1D3BA107;NSL=0;BCol=-1;BFol=-1;LCol=-1;LWth=-1;bold=0;black=0;italic=0;ul=0;charset=0;AttPro=0;AttPri=0;AttPub=0;AttPkg=0;OpPro=0;OpPri=0;OpPub=0;OpPkg=0;AttCustom=0;OpCustom=0;PType=0;RzO=1;pitch=34;font=Calibri;fontsz=90;DUID=C0A13AD6;"/>
1518
+ <element geometry="Left=465;Top=630;Right=753;Bottom=671;imgL=473;imgT=646;imgR=761;imgB=687;" subject="EAID_8EBFE6FE_6049_4b85_9A81_1EF5B098BAFB" seqno="12" style=" DUID=A705F8CF;NSL=0;BCol=-1;BFol=-1;LCol=-1;bold=0;black=0;italic=0;ul=0;charset=0;AttPro=0;AttPri=0;AttPub=0;AttPkg=0;OpPro=0;OpPri=0;OpPub=0;OpPkg=0;AttCustom=0;OpCustom=0;PType=0;RzO=1;pitch=34;LWth=0;font=Calibri;fontsz=90;DUID=36F9BF02;"/>
1519
+ <element geometry="Left=430;Top=483;Right=791;Bottom=859;imgL=438;imgT=499;imgR=799;imgB=875;" subject="EAID_30110D27_B617_47d1_B6F0_6F1A3E9D9AA4" seqno="13" style=" DUID=65DCE573;NSL=0;BCol=-1;BFol=-1;LCol=-1;bold=0;black=0;italic=0;ul=0;charset=0;AttPro=0;AttPri=0;AttPub=0;AttPkg=0;OpPro=0;OpPri=0;OpPub=0;OpPkg=0;AttCustom=0;OpCustom=0;PType=0;RzO=1;pitch=34;LWth=2;font=Calibri;fontsz=90;DUID=641BB11A;"/>
1520
+ <element geometry="Left=73;Top=186;Right=322;Bottom=227;imgL=81;imgT=202;imgR=330;imgB=243;" subject="EAID_A6E1BC79_B072_451f_AAD5_D914E44B941A" seqno="14" style=" DUID=FD6FF5AF;NSL=0;bold=0;black=0;italic=0;ul=0;charset=0;BFol=0;LWth=2;AttPro=0;AttPri=0;AttPub=0;AttPkg=0;OpPro=0;OpPri=0;OpPub=0;OpPkg=0;AttCustom=0;OpCustom=0;PType=0;RzO=1;LCol=6717674;pitch=34;font=Calibri;BCol=16777215;fontsz=90;DUID=89C9883D;"/>
1521
+ <element geometry="Left=73;Top=102;Right=322;Bottom=143;imgL=81;imgT=118;imgR=330;imgB=159;" subject="EAID_1BD723DA_7A8F_4092_8396_B9AB3C916ADE" seqno="15" style=" NSL=0;bold=0;black=0;italic=0;ul=0;charset=0;AttPro=0;AttPri=0;AttPub=0;AttPkg=0;OpPro=0;OpPri=0;OpPub=0;OpPkg=0;AttCustom=0;OpCustom=0;PType=0;RzO=1;LCol=16734039;BFol=0;pitch=34;font=Calibri;BCol=16777215;LWth=2;fontsz=90;DUID=A8EB1B43;"/>
1522
+ <element geometry="Left=485;Top=102;Right=790;Bottom=143;imgL=493;imgT=118;imgR=798;imgB=159;" subject="EAID_877217FC_8B39_4d2d_87D9_B7116CA4109E" seqno="16" style="NSL=0;AttPro=0;AttPri=0;AttPub=0;AttPkg=0;OpPro=0;OpPri=0;OpPub=0;OpPkg=0;AttCustom=0;OpCustom=0;PType=0;RzO=1;LCol=3329330;BFol=0;bold=0;black=0;italic=0;ul=0;charset=0;pitch=34;font=Calibri;BCol=16777215;LWth=2;fontsz=90;DUID=26308E53;"/>
1523
+ <element geometry="Left=485;Top=185;Right=790;Bottom=226;imgL=493;imgT=201;imgR=798;imgB=242;" subject="EAID_E1339BBA_2C02_4df1_ABA9_EB9DE78622CE" seqno="17" style="NSL=0;AttPro=0;AttPri=0;AttPub=0;AttPkg=0;OpPro=0;OpPri=0;OpPub=0;OpPkg=0;AttCustom=0;OpCustom=0;PType=0;RzO=1;LCol=3329330;BFol=0;bold=0;black=0;italic=0;ul=0;charset=0;pitch=34;font=Calibri;BCol=16777215;LWth=2;fontsz=90;DUID=29194FDD;"/>
1524
+ <element geometry="Left=73;Top=19;Right=322;Bottom=60;imgL=81;imgT=35;imgR=330;imgB=76;" subject="EAID_BACD4C75_AA34_4201_B129_E5D8533F8DC8" seqno="18" style="NSL=0;AttPro=0;AttPri=0;AttPub=0;AttPkg=0;OpPro=0;OpPri=0;OpPub=0;OpPkg=0;AttCustom=0;OpCustom=0;PType=0;RzO=1;LCol=3329330;BFol=0;bold=0;black=0;italic=0;ul=0;charset=0;pitch=34;font=Calibri;BCol=16777215;LWth=2;fontsz=90;DUID=16290BBA;"/>
1525
+ <element geometry="Left=485;Top=267;Right=790;Bottom=324;imgL=493;imgT=283;imgR=798;imgB=340;" subject="EAID_97DF41C5_745A_4794_8FA4_288EF531AD7D" seqno="19" style=" DUID=DFF9D1D0;NSL=0;bold=0;black=0;italic=0;ul=0;charset=0;BFol=0;AttPro=0;AttPri=0;AttPub=0;AttPkg=0;OpPro=0;OpPri=0;OpPub=0;OpPkg=0;AttCustom=0;OpCustom=0;PType=0;RzO=1;LCol=-1;BCol=5301246;pitch=34;font=Calibri;fontsz=90;LWth=0;DUID=E17F0DCC;"/>
1526
+ <element geometry="Left=485;Top=407;Right=792;Bottom=466;imgL=493;imgT=423;imgR=800;imgB=482;" subject="EAID_A603DED3_3EF2_4ad5_AD2C_E724773DA860" seqno="20" style=" DUID=78DE671C;bold=0;black=0;italic=0;ul=0;charset=0;pitch=34;BFol=0;AttPro=0;AttPri=0;AttPub=0;AttPkg=0;OpPro=0;OpPri=0;OpPub=0;OpPkg=0;AttCustom=0;OpCustom=0;PType=0;RzO=1;LWth=2;font=Calibri;fontsz=90;DUID=E878E011;"/>
1527
+ <element geometry="Left=45;Top=366;Right=810;Bottom=880;imgL=53;imgT=382;imgR=818;imgB=896;" subject="EAID_04AA6D68_5225_400f_818D_4772E5A132EB" seqno="21" style=" DUID=407A9D7B;NSL=0;BCol=-1;BFol=-1;LCol=-1;bold=0;black=0;italic=0;ul=0;charset=0;AttPro=0;AttPri=0;AttPub=0;AttPkg=0;AttCustom=0;OpCustom=0;RzO=1;pitch=34;font=Calibri;LWth=4;fontsz=90;DUID=84120163;"/>
1528
+ <element geometry="Left=224;Top=890;Right=329;Bottom=949;imgL=232;imgT=906;imgR=337;imgB=965;" subject="EAID_1CB40178_1C4B_4fe9_9164_60277DDBE8C9" seqno="22" style="NSL=0;BCol=-1;BFol=-1;LCol=-1;LWth=-1;fontsz=0;bold=0;black=0;italic=0;ul=0;charset=0;pitch=0;DUID=0313BEC0;"/>
1529
+ <element geometry="Left=358;Top=890;Right=446;Bottom=949;imgL=366;imgT=906;imgR=454;imgB=965;" subject="EAID_83CE8700_5125_43f8_A2AC_732E0332D8B0" seqno="23" style="NSL=0;BCol=-1;BFol=-1;LCol=-1;LWth=-1;fontsz=0;bold=0;black=0;italic=0;ul=0;charset=0;pitch=0;DUID=CFADB72C;"/>
1530
+ <element geometry="Left=475;Top=890;Right=571;Bottom=949;imgL=483;imgT=906;imgR=579;imgB=965;" subject="EAID_D585DDCF_D101_47de_ABA6_1DEDFD2781FF" seqno="24" style="NSL=0;BCol=-1;BFol=-1;LCol=-1;LWth=-1;fontsz=0;bold=0;black=0;italic=0;ul=0;charset=0;pitch=0;DUID=B1095BCA;"/>
1531
+ <element geometry="Left=50;Top=909;Right=190;Bottom=949;imgL=58;imgT=925;imgR=198;imgB=965;" subject="EAID_84245574_3005_4626_89CE_CAF1B29F159A" seqno="25" style="LCol=16777215;DUID=57E555C3;"/>
1532
+ <element geometry=" 1908, 611, 54, 661,;EDGE=3;SX=31;SY=-5;EX=31;EY=-5;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=;" subject="EAID_C7D219C2_5DDC_4e27_9DF7_C5B9AAD61BAA" style="Mode=2;Color=-1;LWidth=0;SOID=29194FDD;EOID=26308E53;Hidden=1;"/>
1533
+ <element geometry="SX=0;SY=-7;EX=0;EY=-13;EDGE=4;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=27:-587$27:-316$;" subject="EAID_79BA4C65_14E1_4545_82D1_B940BE09BBD8" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=9AA052D2;EOID=414AD010;Hidden=0;"/>
1534
+ <element geometry="SX=0;SY=-3;EX=0;EY=-13;EDGE=2;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=380:-483$380:-316$;" subject="EAID_68020FA0_9BD2_409d_9B77_A4A79729E6CC" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=1BDF6B75;EOID=414AD010;Hidden=0;"/>
1535
+ <element geometry="SX=-1;SY=-16;EX=-2;EY=8;EDGE=4;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=401:-579$401:-570$;" subject="EAID_60D5446C_1B6E_42f3_80CC_1DA77A7D6098" style="Mode=1;Color=-1;LWidth=0;SOID=46FDB905;EOID=9AA052D2;Hidden=0;"/>
1536
+ <element geometry="SX=0;SY=-11;EX=0;EY=-16;EDGE=4;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=402:-566$402:-496$;" subject="EAID_859DDADE_39C5_4448_A842_DE38F9F6924A" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=46FDB905;EOID=1BDF6B75;Hidden=0;"/>
1537
+ <element geometry="SX=0;SY=-4;EX=0;EY=-11;EDGE=2;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=781:-654$781:-566$;" subject="EAID_ADD4CE1F_C175_410d_8653_DC9FEF4BCCA2" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=36F9BF02;EOID=46FDB905;Hidden=0;"/>
1538
+ <element geometry="SX=-168;SY=0;EX=0;EY=-15;EDGE=1;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=603:-561$;" subject="EAID_A66E48D5_955B_4163_82F7_53F3F5B8DC2D" style="Mode=3;Color=0;LWidth=0;TREE=OS;SOID=641BB11A;EOID=46FDB905;Hidden=1;"/>
1539
+ <element geometry="SX=0;SY=-9;EX=0;EY=-24;EDGE=4;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=437:-735$437:-579$;" subject="EAID_BBD43D58_63B4_447c_8112_AFE932D329AF" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=F8049856;EOID=46FDB905;Hidden=0;"/>
1540
+ <element geometry="SX=23;SY=1;EX=-35;EY=-16;EDGE=3;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=;" subject="EAID_2D0A8A53_1233_43d0_AC93_AEE320786982" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=E878E011;EOID=46FDB905;Hidden=0;"/>
1541
+ <element geometry="SX=0;SY=3;EX=0;EY=-12;EDGE=4;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=419:-552$419:-51$;" subject="EAID_AD2F75AD_A76F_4a42_A12A_A5B0D004A57F" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=46FDB905;EOID=AED27AB9;Hidden=0;"/>
1542
+ <element geometry="SX=0;SY=-7;EX=0;EY=-10;EDGE=2;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=385:-487$385:-216$;" subject="EAID_831A9407_E7B2_41af_80EF_2B7E4C8860F0" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=1BDF6B75;EOID=89C9883D;Hidden=0;"/>
1543
+ <element geometry="SX=0;SY=-15;EX=0;EY=-7;EDGE=4;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=17:-741$17:-129$;" subject="EAID_8349BC7D_5A79_4813_A9C8_7CA791416343" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=F8049856;EOID=A8EB1B43;Hidden=0;"/>
1544
+ <element geometry="EDGE=3;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=;" subject="EAID_9BE0DFD4_BEA9_465a_B70C_A22E35136D6F" style="Mode=3;Color=-1;LWidth=0;SOID=16290BBA;EOID=414AD010;Hidden=1;"/>
1545
+ <element geometry="SX=0;SY=-12;EX=0;EY=-14;EDGE=2;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=389:-492$389:-136$;" subject="EAID_FC1C2A04_5C04_4483_BD6F_316B63C1D961" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=1BDF6B75;EOID=A8EB1B43;Hidden=0;"/>
1546
+ <element geometry="EDGE=4;EX=-76;EY=0;SX=0;SY=-8;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=333:-781$;" subject="EAID_30995DCB_E854_4993_8DEE_99E0B0ABFD39" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=C0A13AD6;EOID=641BB11A;Hidden=1;"/>
1547
+ <element geometry="SX=0;SY=-13;EX=0;EY=-10;EDGE=4;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=451:-449$451:-132$;" subject="EAID_1BACFF38_7714_4ba6_A560_D5DA1E9BBD0E" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=E878E011;EOID=26308E53;Hidden=0;"/>
1548
+ <element geometry=" 1434, 611, 696, 661,;EDGE=3;SX=-1;SY=0;EX=0;EY=-1;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=73:-123$;" subject="EAID_8D5F3DB1_4D9D_4fc0_B044_272F36C71167" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=16290BBA;EOID=26308E53;Hidden=1;"/>
1549
+ <element geometry="EDGE=2;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=;" subject="EAID_EA827FFC_A874_459d_8636_4113B59553EE" style="Mode=3;Color=-1;LWidth=0;SOID=414AD010;EOID=26308E53;Hidden=1;"/>
1550
+ <element geometry=" 1488, 218, 410, 54,;EDGE=3;SX=2;SY=9;EX=2;EY=9;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=;" subject="EAID_7D9D4C1B_3E79_49bf_A50C_6E13615C6221" style="Mode=2;Color=-1;LWidth=0;SOID=16290BBA;EOID=29194FDD;Hidden=1;"/>
1551
+ <element geometry="SX=0;SY=-9;EX=0;EY=-11;EDGE=4;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=454:-445$454:-216$;" subject="EAID_B0FCE72D_E3D0_4c2e_89E3_89241094B044" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=E878E011;EOID=29194FDD;Hidden=0;"/>
1552
+ <element geometry=" 1488, 218, 410, 54,;SX=2;SY=-7;EX=2;EY=-7;EDGE=1;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=;" subject="EAID_2FD79E8A_8C87_4be2_AE91_ADF297622808" style="Mode=2;Color=-1;LWidth=0;SOID=29194FDD;EOID=16290BBA;Hidden=1;"/>
1553
+ <element geometry="SX=0;SY=-1;EX=0;EY=-13;EDGE=4;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=416:-556$416:-52$;" subject="EAID_0C5D0603_FB2C_4b84_AE3A_9A945414BA2C" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=46FDB905;EOID=16290BBA;Hidden=0;"/>
1554
+ <element geometry="SX=0;SY=-11;EX=0;EY=-12;EDGE=2;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=834:-661$834:-307$;" subject="EAID_54F3C9AD_BB0F_4c2e_9B3F_0350EF4CC994" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=36F9BF02;EOID=E17F0DCC;Hidden=0;"/>
1555
+ <element geometry="SX=0;SY=-8;EX=0;EY=2;EDGE=2;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=838:-809$838:-293$;" subject="EAID_7BAD95D2_AC1C_4128_BBFF_362A0C1907EB" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=C0A13AD6;EOID=E17F0DCC;Hidden=0;"/>
1556
+ <element geometry="SX=0;SY=-27;EX=0;EY=-13;EDGE=2;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=823:-322$823:-449$;" subject="EAID_CF7DC355_4D6C_4d92_AAEA_8CC59FBB2726" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=E17F0DCC;EOID=E878E011;Hidden=0;"/>
1557
+ <element geometry="SX=0;SY=-2;EX=0;EY=-19;EDGE=2;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=781:-803$781:-669$;" subject="EAID_16E25BEA_7582_4763_B9E5_D1577608CEC2" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=C0A13AD6;EOID=36F9BF02;Hidden=0;"/>
1558
+ <element geometry="SX=0;SY=-10;EX=-91;EY=0;EDGE=4;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=319:-633$;" subject="EAID_15B546ED_EE91_42ce_BFB9_9F12D9528240" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=36F9BF02;EOID=641BB11A;Hidden=1;"/>
1559
+ <element geometry="SX=0;SY=-10;EX=0;EY=-15;EDGE=4;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=24:-590$24:-137$;" subject="EAID_79B744E8_144A_4a02_BD1F_84E93F0155B0" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=9AA052D2;EOID=A8EB1B43;Hidden=0;"/>
1560
+ </elements>
1561
+ </diagram>
1562
+ <diagram xmi:id="EAID_9A40024C_98DA_4a01_8F0B_CB65A4208AFA">
1563
+ <model package="EAPK_04AA6D68_5225_400f_818D_4772E5A132EB" localID="2" owner="EAPK_04AA6D68_5225_400f_818D_4772E5A132EB" tpos="1"/>
1564
+ <properties name="Fig: Context for Temporal Geometry and Topology" type="Logical"/>
1565
+ <project author="Gibb Robert" version="2019" created="2020-01-28 10:19:25" modified="2020-11-08 14:14:17"/>
1566
+ <style1 value="ShowPrivate=1;ShowProtected=1;ShowPublic=1;HideRelationships=0;Locked=0;Border=1;HighlightForeign=1;PackageContents=0;SequenceNotes=0;ScalePrintImage=1;PPgs.cx=1;PPgs.cy=1;DocSize.cx=1000;DocSize.cy=1000;ShowDetails=0;Orientation=P;Zoom=100;ShowTags=0;OpParams=1;VisibleAttributeDetail=0;ShowOpRetType=1;ShowIcons=0;CollabNums=1;HideProps=1;ShowReqs=0;ShowCons=0;PaperSize=1;HideParents=1;UseAlias=0;HideAtts=1;HideOps=1;HideStereo=0;HideElemStereo=0;ShowTests=0;ShowMaint=0;ConnectorNotation=UML 2.1;ExplicitNavigability=0;ShowShape=1;AllDockable=0;AdvancedElementProps=1;AdvancedFeatureProps=1;AdvancedConnectorProps=1;m_bElementClassifier=1;SPT=1;ShowNotes=0;SuppressBrackets=0;SuppConnectorLabels=0;PrintPageHeadFoot=0;ShowAsList=0;"/>
1567
+ <style2 value="ExcludeRTF=0;DocAll=0;HideQuals=0;AttPkg=1;ShowTests=0;ShowMaint=0;SuppressFOC=1;MatrixActive=0;SwimlanesActive=1;KanbanActive=0;MatrixLineWidth=1;MatrixLineClr=0;MatrixLocked=0;TConnectorNotation=UML 2.1;TExplicitNavigability=0;AdvancedElementProps=1;AdvancedFeatureProps=1;AdvancedConnectorProps=1;m_bElementClassifier=1;SPT=1;MDGDgm=;STBLDgm=;ShowNotes=0;VisibleAttributeDetail=0;ShowOpRetType=1;SuppressBrackets=0;SuppConnectorLabels=0;PrintPageHeadFoot=0;ShowAsList=0;SuppressedCompartments=;Theme=:119;SaveTag=4C82CA42;"/>
1568
+ <swimlanes value="locked=false;orientation=0;width=0;inbar=false;names=false;color=0;bold=false;fcol=0;tcol=16777215;ofCol=-1;ufCol=-1;hl=1;ufh=0;hh=0;cls=0;bw=0;hli=0;SwimlaneFont=lfh:-10,lfw:0,lfi:0,lfu:0,lfs:0,lfface:Carlito,lfe:0,lfo:0,lfchar:1,lfop:0,lfcp:0,lfq:0,lfpf=0,lfWidth=0;"/>
1569
+ <matrixitems value="locked=false;matrixactive=false;swimlanesactive=true;kanbanactive=false;width=1;clrLine=0;"/>
1570
+ <extendedProperties/>
1571
+ <elements>
1572
+ <element geometry="Left=441;Top=480;Right=535;Bottom=539;imgL=451;imgT=480;imgR=545;imgB=539;" subject="EAID_0D462D6E_4097_44ae_AAEC_FA91FD6F6988" seqno="1" style="NSL=0;DUID=D60311E4;"/>
1573
+ <element geometry="Left=446;Top=274;Right=591;Bottom=314;imgL=456;imgT=274;imgR=601;imgB=314;" subject="EAID_37BF1557_0370_435d_94BB_8FCC4574561B" seqno="2" style="NSL=0;LWth=2;ImageID=0;LCol=-1;BCol=-1;fontsz=0;bold=0;black=0;italic=0;ul=0;charset=0;pitch=0;DUID=A3BC5E9A;"/>
1574
+ <element geometry="Left=680;Top=146;Right=825;Bottom=186;imgL=690;imgT=146;imgR=835;imgB=186;" subject="EAID_00ACADD9_EF9A_4ac8_8257_3DB6227AF948" seqno="3" style="NSL=0;LWth=2;ImageID=0;LCol=-1;BCol=-1;fontsz=0;bold=0;black=0;italic=0;ul=0;charset=0;pitch=0;DUID=6986BBE2;"/>
1575
+ <element geometry="Left=446;Top=146;Right=591;Bottom=186;imgL=456;imgT=146;imgR=601;imgB=186;" subject="EAID_AE0137BF_A059_4c07_B438_75C5D3A3705D" seqno="4" style="NSL=0;LWth=2;fontsz=0;bold=0;black=0;italic=0;ul=0;charset=0;pitch=0;ImageID=0;LCol=-1;BCol=-1;DUID=4763B4B4;"/>
1576
+ <element geometry="Left=680;Top=342;Right=825;Bottom=382;imgL=690;imgT=342;imgR=835;imgB=382;" subject="EAID_66ADAA69_93B4_4837_A00D_1AE9BB6FB53B" seqno="5" style="LWth=2;fontsz=0;bold=0;black=0;italic=0;ul=0;charset=0;pitch=0;DUID=6E5CED2A;"/>
1577
+ <element geometry="Left=563;Top=434;Right=708;Bottom=474;imgL=573;imgT=434;imgR=718;imgB=474;" subject="EAID_82DA65AB_212B_44fd_BCDC_232A2AA22542" seqno="6" style="LWth=2;DUID=A81F3A31;"/>
1578
+ <element geometry="Left=680;Top=275;Right=825;Bottom=315;imgL=690;imgT=275;imgR=835;imgB=315;" subject="EAID_60A00B1F_43C3_433b_8060_2EB473EEE6BA" seqno="7" style="LWth=2;DUID=786A6260;"/>
1579
+ <element geometry="Left=23;Top=273;Right=154;Bottom=313;imgL=33;imgT=273;imgR=164;imgB=313;" subject="EAID_01B77106_CDCD_48b5_B2C4_7F7D7BA580B0" seqno="8" style="NSL=0;BCol=-1;BFol=-1;fontsz=0;bold=0;black=0;italic=0;ul=0;charset=0;pitch=0;LCol=13434880;LWth=2;DUID=41A330B2;"/>
1580
+ <element geometry="Left=25;Top=342;Right=156;Bottom=382;imgL=35;imgT=342;imgR=166;imgB=382;" subject="EAID_F6BDF73A_8DA5_46a3_A9A3_2A7FD1A2C8F8" seqno="9" style="NSL=0;LCol=13434880;LWth=2;DUID=E4FF4727;"/>
1581
+ <element geometry="Left=165;Top=42;Right=296;Bottom=82;imgL=175;imgT=42;imgR=306;imgB=82;" subject="EAID_AC45299B_86E2_47eb_927D_7FE310183720" seqno="10" style="LCol=13434880;LWth=2;DUID=2F28AF81;"/>
1582
+ <element geometry="Left=161;Top=434;Right=292;Bottom=474;imgL=171;imgT=434;imgR=302;imgB=474;" subject="EAID_DACE19A6_B083_45f1_94BB_C21991A59743" seqno="11" style="LCol=13434880;LWth=2;DUID=E150D01C;"/>
1583
+ <element geometry="Left=256;Top=146;Right=387;Bottom=186;imgL=266;imgT=146;imgR=397;imgB=186;" subject="EAID_D945EB6B_A750_4c1e_8D82_3887CB767926" seqno="12" style="LCol=13434880;LWth=2;DUID=A06A9902;"/>
1584
+ <element geometry="Left=23;Top=145;Right=154;Bottom=185;imgL=33;imgT=145;imgR=164;imgB=185;" subject="EAID_651CCB2E_D9C9_4f7e_A86C_9F838844FB82" seqno="13" style="LCol=13434880;LWth=2;DUID=8B25BE79;"/>
1585
+ <element geometry="Left=258;Top=274;Right=389;Bottom=314;imgL=268;imgT=274;imgR=399;imgB=314;" subject="EAID_AF08B23A_D40E_4e8a_B258_60C53D27E384" seqno="14" style="LCol=13434880;LWth=2;DUID=7974BD9C;"/>
1586
+ <element geometry="Left=15;Top=35;Right=415;Bottom=482;imgL=25;imgT=35;imgR=425;imgB=482;" subject="EAID_2D12FCDB_B942_481b_B734_C7FCD5A69ED4" seqno="15" style="LCol=13434880;LWth=2;BCol=16777215;DUID=A90123E2;"/>
1587
+ <element geometry="Left=563;Top=41;Right=708;Bottom=81;imgL=573;imgT=41;imgR=718;imgB=81;" subject="EAID_F11508A8_6635_4f8f_B49D_A398A8FEF552" seqno="16" style="LWth=2;DUID=98422238;"/>
1588
+ <element geometry="Left=331;Top=480;Right=436;Bottom=539;imgL=341;imgT=480;imgR=446;imgB=539;" subject="EAID_D87CFCD1_E6FA_40b1_8DF4_582457AAE03E" seqno="17" style="NSL=0;DUID=8DA5B6F0;"/>
1589
+ <element geometry="Left=300;Top=498;Right=436;Bottom=539;imgL=310;imgT=498;imgR=446;imgB=539;" subject="EAID_4BBD93AA_D52B_4dbf_830E_D139E6D357B5" seqno="18" style="NSL=0;LCol=16777215;DUID=42AF37DB;"/>
1590
+ <element geometry="SX=-53;SY=-8;EX=-53;EY=-8;EDGE=3;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=;" subject="EAID_26E10788_3269_4006_81AB_2A129D7712EF" style="Mode=3;Color=-1;LWidth=0;SOID=98422238;EOID=A81F3A31;Hidden=1;"/>
1591
+ <element geometry="SX=7;SY=-1;EX=7;EY=-1;EDGE=3;$LLB=CX=17:CY=14:OX=0:OY=0:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;LLT=CX=41:CY=14:OX=0:OY=0:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;LMT=CX=44:CY=14:OX=-36:OY=8:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;LMB=;LRT=CX=45:CY=14:OX=0:OY=0:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;LRB=CX=17:CY=14:OX=0:OY=0:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;IRHS=;ILHS=;Path=;" subject="EAID_25C1510D_9559_406f_867E_2A350C45C8A5" style="Mode=3;Color=-1;LWidth=0;SOID=4763B4B4;EOID=A3BC5E9A;Hidden=0;"/>
1592
+ <element geometry="EDGE=3;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=;" subject="EAID_4F8C2F5C_1CA1_4bef_8D51_3FD8FAB35372" style="Mode=3;Color=-1;LWidth=0;SOID=41A330B2;EOID=E4FF4727;Hidden=0;"/>
1593
+ <element geometry="SX=-8;SY=3;EX=0;EY=0;EDGE=3;$LLB=CX=17:CY=14:OX=-2:OY=-2:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;LLT=CX=41:CY=14:OX=-3:OY=-4:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;LMT=CX=44:CY=14:OX=-34:OY=14:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;LMB=;LRT=CX=45:CY=14:OX=62:OY=1:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;LRB=CX=17:CY=14:OX=-32:OY=3:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;IRHS=;ILHS=;Path=;" subject="EAID_418BE1AF_A85D_414f_BFE5_80D5049C6F1F" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=8B25BE79;EOID=41A330B2;Hidden=0;"/>
1594
+ <element geometry="SX=0;SY=0;EDGE=4;$LLB=CX=56:CY=14:OX=-3:OY=3:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;LLT=CX=39:CY=14:OX=-3:OY=2:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=;" subject="EAID_E84CD5B2_B1B4_44c9_9A37_84FB39C5D005" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=7974BD9C;EOID=41A330B2;Hidden=0;"/>
1595
+ <element geometry="SCTR=1;SCME=1;SX=0;SY=0;EX=0;EY=0;EDGE=2;SCTR.LEFT=153;SCTR.TOP=-293;SCTR.RIGHT=184;SCTR.BOTTOM=-278;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=154:-293$184:-293$184:-278$154:-278$;" subject="EAID_C6CF49BF_D770_45f3_9987_BB6C45B69CD3" style="Mode=3;Color=-1;LWidth=0;SOID=41A330B2;EOID=41A330B2;Hidden=1;"/>
1596
+ <element geometry="EDGE=4;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=;" subject="EAID_0C675C03_2E90_4df7_9F5E_33654F1BC174" style="Mode=3;Color=-1;LWidth=0;SOID=98422238;EOID=2F28AF81;Hidden=1;"/>
1597
+ <element geometry="SX=0;SY=0;EX=0;EY=0;EDGE=2;$LLB=CX=56:CY=14:OX=0:OY=0:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;LLT=CX=39:CY=14:OX=0:OY=0:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=;" subject="EAID_7F310A6F_F068_4c1d_8FFD_B01FE62D6D1C" style="Mode=3;Color=-1;LWidth=0;SOID=A3BC5E9A;EOID=786A6260;Hidden=0;"/>
1598
+ <element geometry="SX=4;SY=0;EX=-3;EY=0;EDGE=1;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=325:-109$227:-109$;" subject="EAID_7DBD7567_3726_49de_B154_DD048B3872A4" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=A06A9902;EOID=2F28AF81;Hidden=0;"/>
1599
+ <element geometry="EX=0;EY=0;SX=7;SY=0;EDGE=3;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=525:-403$635:-403$;" subject="EAID_AD6CE071_3261_4681_B8E1_25AE657BBCD2" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=A3BC5E9A;EOID=A81F3A31;Hidden=0;"/>
1600
+ <element geometry="SX=0;SY=0;EX=1;EY=0;EDGE=3;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=752:-403$636:-403$;" subject="EAID_3B3D9500_1668_4529_A500_03753B605AA9" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=6E5CED2A;EOID=A81F3A31;Hidden=0;"/>
1601
+ <element geometry="SX=0;SY=-1;EX=0;EY=-1;SCME=0;SCTR=0;EDGE=4;$LLB=;LLT=;LMT=;LMB=;LRT=CX=24:CY=14:OX=-5:OY=0:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;LRB=CX=17:CY=14:OX=-4:OY=0:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;IRHS=;ILHS=;Path=434:-62$434:-455$;" subject="EAID_95DCF977_3EB4_46dd_B0F5_152B18F6B749" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=98422238;EOID=A81F3A31;Hidden=0;"/>
1602
+ <element geometry="SX=0;SY=4;EX=37;EY=0;EDGE=2;$LLB=CX=17:CY=14:OX=18:OY=-2:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;LLT=CX=39:CY=14:OX=16:OY=1:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=789:-450$;" subject="EAID_AD3FB2D7_370B_45ea_A98B_40B5B296E946" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=A81F3A31;EOID=6E5CED2A;Hidden=0;"/>
1603
+ <element geometry="SX=-2;SY=0;EX=0;EY=8;EDGE=3;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=;" subject="EAID_FBC084CC_4070_4dd5_8276_8A47DE1A72CD" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=786A6260;EOID=6E5CED2A;Hidden=0;"/>
1604
+ <element geometry="SX=0;SY=0;EX=0;EY=0;EDGE=2;$LLB=CX=17:CY=14:OX=0:OY=0:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;LLT=CX=39:CY=14:OX=0:OY=0:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;LMT=CX=35:CY=14:OX=20:OY=26:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=;" subject="EAID_BCE15BAC_CC31_4dbd_8D10_5FED82BC83D0" style="Mode=3;Color=-1;LWidth=0;SOID=4763B4B4;EOID=6986BBE2;Hidden=0;"/>
1605
+ <element geometry="SX=0;SY=0;EX=0;EY=0;EDGE=3;$LLB=CX=17:CY=14:OX=0:OY=0:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;LLT=CX=41:CY=14:OX=0:OY=0:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;LMT=CX=44:CY=14:OX=30:OY=7:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;LMB=;LRT=CX=45:CY=14:OX=0:OY=0:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;LRB=CX=17:CY=14:OX=0:OY=0:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;IRHS=;ILHS=;Path=;" subject="EAID_7EB3B4C8_5C04_473c_A4D8_DE460008BE7F" style="Mode=3;Color=-1;LWidth=0;SOID=6986BBE2;EOID=786A6260;Hidden=0;"/>
1606
+ <element geometry="SX=0;SY=0;EX=0;EY=0;EDGE=2;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=;" subject="EAID_342FB517_D9A8_493f_84CB_FF20C2C49703" style="Mode=3;Color=-1;LWidth=0;SOID=A06A9902;EOID=A06A9902;Hidden=1;"/>
1607
+ <element geometry="EDGE=1;SX=6;SY=0;EX=1;EY=0;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=524:-113$636:-113$;" subject="EAID_C764348C_3F86_457b_B81A_3CF2A18495A7" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=4763B4B4;EOID=98422238;Hidden=0;"/>
1608
+ <element geometry="SX=0;SY=0;EX=0;EY=0;EDGE=4;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=;" subject="EAID_84688F21_D758_44ab_870D_69D890029769" style="Mode=3;Color=-1;LWidth=0;SOID=A3BC5E9A;EOID=7974BD9C;Hidden=1;"/>
1609
+ <element geometry="SCTR=1;SCME=1;SX=0;SY=0;EX=0;EY=0;EDGE=2;SCTR.LEFT=388;SCTR.TOP=-299;SCTR.RIGHT=419;SCTR.BOTTOM=-284;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=389:-299$419:-299$419:-284$389:-284$;" subject="EAID_DDA4933C_60B6_4438_8A66_D43E7E158EEE" style="Mode=3;Color=-1;LWidth=0;SOID=7974BD9C;EOID=7974BD9C;Hidden=1;"/>
1610
+ <element geometry=" 1008, 560, 713, 54,;EDGE=4;SX=0;SY=-1;EX=0;EY=-1;$LLB=CX=17:CY=14:OX=0:OY=0:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=0:DIR=0:ROT=0;LLT=CX=39:CY=14:OX=0:OY=0:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=0:DIR=0:ROT=0;LMT=CX=35:CY=14:OX=-11:OY=15:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=0:DIR=0:ROT=0;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=;" subject="EAID_CCDA7037_E124_4f24_B640_1101A2EAD20B" style="Mode=3;Color=-1;LWidth=0;SOID=A06A9902;EOID=8B25BE79;Hidden=0;"/>
1611
+ <element geometry=" 2245, 544, 525, 166,;EDGE=4;SCTR=1;SCME=1;SX=0;SY=0;EX=0;EY=0;SCTR.LEFT=-72;SCTR.TOP=-170;SCTR.RIGHT=96;SCTR.BOTTOM=-153;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=23:-153$-72:-153$-72:-170$23:-170$;" subject="EAID_25E1654C_081D_40e4_BAD6_D7CFCDA4D7CF" style="Mode=3;Color=-1;LWidth=0;SOID=8B25BE79;EOID=8B25BE79;Hidden=1;"/>
1612
+ <element geometry="SX=0;SY=0;EX=-3;EY=0;EDGE=1;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=88:-109$227:-109$;" subject="EAID_C489F217_9243_4465_A2E7_0031EEE43FF7" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=8B25BE79;EOID=2F28AF81;Hidden=0;"/>
1613
+ <element geometry=" 304, 851, 54, 458,;EDGE=1;SX=1;SY=18;EX=3;EY=-19;$LLB=CX=17:CY=14:OX=-25:OY=2:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=0:DIR=0:ROT=0;LLT=CX=45:CY=14:OX=56:OY=0:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=0:DIR=0:ROT=0;LMT=CX=44:CY=14:OX=27:OY=9:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=0:DIR=0:ROT=0;LMB=;LRT=CX=41:CY=14:OX=57:OY=-2:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=0:DIR=0:ROT=0;LRB=CX=17:CY=14:OX=-31:OY=-4:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=0:DIR=0:ROT=0;IRHS=;ILHS=;Path=;" subject="EAID_4CD5EE6F_45C8_4128_963A_1E1174556192" style="Mode=3;Color=-1;LWidth=0;SOID=7974BD9C;EOID=A06A9902;Hidden=0;"/>
1614
+ <element geometry="EDGE=1;SX=-3;SY=0;EX=0;EY=0;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=749:-113$635:-113$;" subject="EAID_2DD1F079_8C74_49d3_82B5_984A3AE10DF5" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=6986BBE2;EOID=98422238;Hidden=0;"/>
1615
+ <element geometry="EDGE=2;SX=0;SY=-3;EX=0;EY=1;$LLB=;LLT=;LMT=;LMB=;LRT=CX=37:CY=14:OX=0:OY=0:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;LRB=CX=17:CY=14:OX=0:OY=0:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;IRHS=;ILHS=;Path=402:-65$402:-453$;" subject="EAID_ECA16392_6B77_4555_8D79_386CD1E0E920" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=2F28AF81;EOID=E150D01C;Hidden=0;"/>
1616
+ <element geometry="SX=3;SY=0;EX=2;EY=0;EDGE=3;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=326:-405$228:-405$;" subject="EAID_D8EC6DF9_2F7E_4011_8AF9_399FB8FDD5C3" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=7974BD9C;EOID=E150D01C;Hidden=0;"/>
1617
+ <element geometry="SX=0;SY=0;EX=0;EY=0;EDGE=2;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=;" subject="EAID_C745CC59_CA14_4859_9264_F77798F25D24" style="Mode=3;Color=-1;LWidth=0;SOID=E150D01C;EOID=E150D01C;Hidden=1;"/>
1618
+ <element geometry="SX=-22;SY=0;EX=0;EY=2;EDGE=3;$LLB=;LLT=;LMT=;LMB=;LRT=CX=39:CY=14:OX=-13:OY=3:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=0:DIR=0:ROT=0;LRB=CX=17:CY=14:OX=-17:OY=-1:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=0:DIR=0:ROT=0;IRHS=;ILHS=;Path=68:-452$;" subject="EAID_BE3E23F1_C488_4145_ABE9_5316AA296387" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=E4FF4727;EOID=E150D01C;Hidden=0;"/>
1619
+ <element geometry="SX=1;SY=0;EX=2;EY=0;EDGE=3;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=91:-405$228:-405$;" subject="EAID_F30CF839_83A9_4154_B274_6AA69EFFF811" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=E4FF4727;EOID=E150D01C;Hidden=0;"/>
1620
+ <element geometry="SX=8;SY=-21;EX=8;EY=-21;EDGE=4;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=;" subject="EAID_E250C61E_661C_4f55_8BDF_2467B454E385" style="Mode=3;Color=-1;LWidth=0;SOID=A81F3A31;EOID=E150D01C;Hidden=1;"/>
1621
+ <element geometry="SX=0;SY=0;EX=0;EY=0;EDGE=3;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=;" subject="EAID_DC71C19F_9309_41ec_954B_B0B1847F386F" style="Mode=3;Color=-1;LWidth=0;SOID=2F28AF81;EOID=8B25BE79;Hidden=1;"/>
1622
+ </elements>
1623
+ </diagram>
1624
+ </xmi:Extension>
1219
1625
  <thecustomprofile:Bibliography base_Class="EAID_D832D6D8_0518_43f7_9166_7A4E3E8605AA"/>
1220
1626
  <thecustomprofile:BasicDoc base_Class="EAID_10AD8D60_9972_475a_AB7E_FA40212D5297"/>
1221
1627
  <thecustomprofile:enumeration base_Enumeration="EAID_E497ABDA_05EF_416a_A461_03535864970D"/>
@@ -16,6 +16,7 @@ RSpec.describe Lutaml::XMI::Parsers::XML do
16
16
  Requirement
17
17
  RequirementSubpart
18
18
  RequirementType
19
+ TemporalGeometricPrimitive
19
20
  ]
20
21
  end
21
22
  let(:expected_class_xmi_ids) do
@@ -28,6 +29,7 @@ RSpec.describe Lutaml::XMI::Parsers::XML do
28
29
  EAID_2AC20C81_1E83_400d_B098_BAB784395E06
29
30
  EAID_035D8176_5E9E_42c8_B447_64411AE96F57
30
31
  EAID_C1155D80_E68B_46d5_ADE5_F5639486163D
32
+ EAID_37BF1557_0370_435d_94BB_8FCC4574561B
31
33
  ]
32
34
  end
33
35
  let(:expected_enum_names) { ["ObligationType"] }
@@ -84,6 +86,15 @@ RSpec.describe Lutaml::XMI::Parsers::XML do
84
86
  EAJava_RequirementSubpart_0..___
85
87
  ]
86
88
  end
89
+ let(:expected_association_names) do
90
+ %w[
91
+ TemporalGeometricPrimitive
92
+ Primitive
93
+ TemporalGeometry
94
+ Interval
95
+ Instant
96
+ ]
97
+ end
87
98
  let(:first_package) { parse.packages.first }
88
99
  let(:first_nested_package) { parse.packages.first.packages.first }
89
100
 
@@ -116,8 +127,24 @@ RSpec.describe Lutaml::XMI::Parsers::XML do
116
127
  end
117
128
 
118
129
  it "correctly parses associations for class" do
119
- klass = first_nested_package.classes.find { |entity| entity.name == 'BibliographicItem' }
120
- expect(klass.associations.map(&:member_end)).to(eq(['RequirementType']))
130
+ klass = first_nested_package.classes.find { |entity| entity.name == 'TemporalGeometricPrimitive' }
131
+ expect(klass.associations.map(&:member_end).compact).to(eq(expected_association_names))
132
+
133
+ inheritance = klass.associations.find { |entity| entity.member_end == 'TemporalGeometry' }
134
+ expect(inheritance.member_end_type).to eq('inheritance')
135
+ expect(inheritance.member_end_cardinality).to eq({"min"=>"C", "max"=>"*"})
136
+
137
+ aggregation = klass.associations.find { |entity| entity.member_end == 'TemporalGeometricPrimitive' }
138
+ expect(aggregation.member_end_attribute_name).to eq('element')
139
+ expect(aggregation.member_end_type).to eq('aggregation')
140
+ expect(aggregation.member_end_cardinality).to eq({"min"=>"C", "max"=>"*"})
141
+ end
142
+
143
+ it "correctly parses diagrams for package" do
144
+ root_package = parse.packages.first
145
+ expect(root_package.diagrams.length).to(eq(2))
146
+ expect(root_package.diagrams.map(&:name)).to(eq(['Fig: DGGS Package Diagram', 'Fig: Context for Temporal Geometry and Topology']))
147
+ expect(root_package.diagrams.map(&:definition)).to(eq(['this is a documentation', '']))
121
148
  end
122
149
  end
123
150
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lutaml-xmi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-03-28 00:00:00.000000000 Z
11
+ date: 2021-06-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hashie
@@ -53,47 +53,47 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: bundler
56
+ name: nokogiri
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '2.0'
62
- type: :development
61
+ version: '1.10'
62
+ type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '2.0'
68
+ version: '1.10'
69
69
  - !ruby/object:Gem::Dependency
70
- name: byebug
70
+ name: bundler
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ">="
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0'
75
+ version: '2.0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ">="
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '0'
82
+ version: '2.0'
83
83
  - !ruby/object:Gem::Dependency
84
- name: nokogiri
84
+ name: byebug
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - "~>"
87
+ - - ">="
88
88
  - !ruby/object:Gem::Version
89
- version: '1.10'
89
+ version: '0'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - "~>"
94
+ - - ">="
95
95
  - !ruby/object:Gem::Version
96
- version: '1.10'
96
+ version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: pry
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -165,6 +165,7 @@ files:
165
165
  - ".rspec"
166
166
  - CODE_OF_CONDUCT.md
167
167
  - Gemfile
168
+ - Makefile
168
169
  - README.adoc
169
170
  - Rakefile
170
171
  - bin/console
@@ -201,7 +202,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
201
202
  - !ruby/object:Gem::Version
202
203
  version: '0'
203
204
  requirements: []
204
- rubygems_version: 3.0.3
205
+ rubygems_version: 3.1.6
205
206
  signing_key:
206
207
  specification_version: 4
207
208
  summary: XML Metadata Interchange (XMI) Specification parser in Ruby, tools for accessing