activefacts-metamodel 1.9.20 → 1.9.22

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.
@@ -6,6 +6,7 @@ module ActiveFacts
6
6
  identified_by :guid
7
7
  one_to_one :guid, mandatory: true # Component has Guid, see Guid#component
8
8
  maybe :has_absolute_name # Has Absolute Name
9
+ has_one :injection_annotation, class: "Annotation" # Component has injection-Annotation, see Annotation#all_component_as_injection_annotation
9
10
  has_one :name # Component projects Name, see Name#all_component
10
11
  has_one :ordinal # Component has Ordinal rank, see Ordinal#all_component
11
12
  has_one :parent, class: Component, counterpart: :member # Member belongs to Parent, see Component#all_member
@@ -13,77 +14,34 @@ module ActiveFacts
13
14
 
14
15
  class Mapping < Component
15
16
  has_one :object_type, mandatory: true # Mapping represents Object Type, see ObjectType#all_mapping
17
+ one_to_one :full_absorption # Mapping creates Full Absorption, see FullAbsorption#mapping
16
18
  has_one :native_type_name, class: "Name" # Mapping uses native- type Name, see Name#all_mapping_as_native_type_name
19
+ one_to_one :reverse_mapping, class: Mapping, counterpart: :forward_mapping # forward-Mapping is matched by reverse-Mapping, see Mapping#forward_mapping
17
20
  end
18
21
 
19
- class AccessPath
20
- identified_by :guid
21
- one_to_one :guid, mandatory: true # Access Path has Guid, see Guid#access_path
22
- has_one :composite, mandatory: true # Access Path is to Composite, see Composite#all_access_path
23
- has_one :name # Access Path is called Name, see Name#all_access_path
24
- end
25
-
26
- class Name < String
27
- value_type length: 64
22
+ class NestingMode < String
23
+ value_type
28
24
  end
29
25
 
30
- class CompositeGroup
31
- identified_by :name
32
- one_to_one :name, mandatory: true # Composite Group has Name, see Name#composite_group
26
+ class Description < String
27
+ value_type
33
28
  end
34
29
 
35
30
  class Guid < ::Guid
36
31
  value_type
37
32
  end
38
33
 
39
- class Composition
40
- identified_by :guid
41
- one_to_one :guid, mandatory: true # Composition has Guid, see Guid#composition
42
- has_one :compositor_name, mandatory: true, class: Name # Composition is by compositor-Name, see Name#all_composition_as_compositor_name
43
- one_to_one :name, mandatory: true # Composition is called Name, see Name#composition
44
- end
45
-
46
- class Constraint
47
- identified_by :concept
48
- one_to_one :concept, mandatory: true # Constraint is an instance of Concept, see Concept#constraint
49
- has_one :name # Constraint is called Name, see Name#all_constraint
50
- has_one :vocabulary # Constraint belongs to Vocabulary, see Vocabulary#all_constraint
51
- end
52
-
53
- class Frequency < UnsignedInteger
54
- value_type length: 32
55
- end
56
-
57
- class RoleSequence
58
- identified_by :guid
59
- one_to_one :guid, mandatory: true # Role Sequence has Guid, see Guid#role_sequence
60
- maybe :has_unused_dependency_to_force_table_in_norma # Has Unused Dependency To Force Table In Norma
61
- end
62
-
63
- class PresenceConstraint < Constraint
64
- maybe :is_mandatory # Is Mandatory
65
- maybe :is_preferred_identifier # Is Preferred Identifier
66
- has_one :role_sequence, mandatory: true # Presence Constraint covers Role Sequence, see RoleSequence#all_presence_constraint
67
- has_one :max_frequency, class: Frequency # Presence Constraint has max-Frequency, see Frequency#all_presence_constraint_as_max_frequency
68
- has_one :min_frequency, class: Frequency # Presence Constraint has min-Frequency, see Frequency#all_presence_constraint_as_min_frequency
69
- end
70
-
71
- class Index < AccessPath
72
- maybe :is_unique # Is Unique
73
- has_one :presence_constraint, mandatory: true # Index derives from Presence Constraint, see PresenceConstraint#all_index
34
+ class ImplicationRuleName < String
35
+ value_type
74
36
  end
75
37
 
76
- class Composite
77
- identified_by :mapping
78
- one_to_one :mapping, mandatory: true # Composite consists of Mapping, see Mapping#composite
79
- has_one :composition, mandatory: true # Composite belongs to Composition, see Composition#all_composite
80
- has_one :composite_group # Composite belongs to Composite Group, see CompositeGroup#all_composite
81
- one_to_one :natural_index, class: Index # Composite has natural-Index, see Index#composite_as_natural_index
82
- one_to_one :primary_index, class: Index # Composite has primary-Index, see Index#composite_as_primary_index
38
+ class ImplicationRule
39
+ identified_by :implication_rule_name
40
+ one_to_one :implication_rule_name, mandatory: true # Implication Rule has Implication Rule Name, see ImplicationRuleName#implication_rule
83
41
  end
84
42
 
85
- class ForeignKey < AccessPath
86
- has_one :source_composite, mandatory: true, class: Composite # Foreign Key traverses from source-Composite, see Composite#all_foreign_key_as_source_composite
43
+ class Name < String
44
+ value_type length: 64
87
45
  end
88
46
 
89
47
  class Pronoun < String
@@ -105,36 +63,15 @@ module ActiveFacts
105
63
  identified_by :vocabulary, :name
106
64
  has_one :vocabulary, mandatory: true # Object Type belongs to Vocabulary, see Vocabulary#all_object_type
107
65
  has_one :name, mandatory: true # Object Type is called Name, see Name#all_object_type
66
+ one_to_one :concept, mandatory: true # Object Type is an instance of Concept, see Concept#object_type
108
67
  has_one :pronoun # Object Type uses Pronoun, see Pronoun#all_object_type
109
68
  end
110
69
 
111
- class FullAbsorption
112
- identified_by :composition, :object_type
113
- has_one :composition, mandatory: true # Full Absorption involves Composition, see Composition#all_full_absorption
114
- has_one :object_type, mandatory: true # Full Absorption involves Object Type, see ObjectType#all_full_absorption
115
- end
116
-
117
- class NestingMode < String
118
- value_type
119
- end
120
-
121
- class Description < String
122
- value_type
123
- end
124
-
125
- class ImplicationRuleName < String
126
- value_type
127
- end
128
-
129
- class ImplicationRule
130
- identified_by :implication_rule_name
131
- one_to_one :implication_rule_name, mandatory: true # Implication Rule has Implication Rule Name, see ImplicationRuleName#implication_rule
132
- end
133
-
134
70
  class Population
135
71
  identified_by :vocabulary, :name
136
72
  has_one :vocabulary # Population belongs to Vocabulary, see Vocabulary#all_population
137
73
  has_one :name, mandatory: true # Population has Name, see Name#all_population
74
+ one_to_one :concept, mandatory: true # Population is an instance of Concept, see Concept#population
138
75
  end
139
76
 
140
77
  class Topic
@@ -165,12 +102,20 @@ module ActiveFacts
165
102
  end
166
103
 
167
104
  class LinkFactType < FactType
105
+ one_to_one :implying_role, mandatory: true, class: "Role" # Link Fact Type has implying-Role, see Role#link_fact_type_as_implying_role
168
106
  end
169
107
 
170
108
  class Ordinal < UnsignedInteger
171
109
  value_type length: 16
172
110
  end
173
111
 
112
+ class Constraint
113
+ identified_by :concept
114
+ one_to_one :concept, mandatory: true # Constraint is an instance of Concept, see Concept#constraint
115
+ has_one :name # Constraint is called Name, see Name#all_constraint
116
+ has_one :vocabulary # Constraint belongs to Vocabulary, see Vocabulary#all_constraint
117
+ end
118
+
174
119
  class RegularExpression < String
175
120
  value_type
176
121
  end
@@ -286,6 +231,7 @@ module ActiveFacts
286
231
  identified_by :fact_type, :ordinal
287
232
  has_one :fact_type, mandatory: true # Role belongs to Fact Type, see FactType#all_role
288
233
  has_one :ordinal, mandatory: true # Role fills Ordinal, see Ordinal#all_role
234
+ one_to_one :concept, mandatory: true # Role is an instance of Concept, see Concept#role
289
235
  has_one :object_type, mandatory: true # Role is played by Object Type, see ObjectType#all_role
290
236
  one_to_one :link_fact_type, counterpart: :implying_role # implying-Role implies Link Fact Type, see LinkFactType#implying_role
291
237
  has_one :role_name, class: Name # Role has role-Name, see Name#all_role_as_role_name
@@ -297,10 +243,35 @@ module ActiveFacts
297
243
  maybe :flattens # Flattens
298
244
  has_one :child_role, mandatory: true, class: Role # Absorption traverses to child-Role, see Role#all_absorption_as_child_role
299
245
  has_one :parent_role, mandatory: true, class: Role # Absorption traverses from parent-Role, see Role#all_absorption_as_parent_role
300
- one_to_one :foreign_key # Absorption gives rise to Foreign Key, see ForeignKey#absorption
301
- one_to_one :full_absorption # Absorption creates Full Absorption, see FullAbsorption#absorption
302
246
  has_one :nesting_mode # Absorption uses Nesting Mode, see NestingMode#all_absorption
303
- one_to_one :reverse_absorption, class: Absorption, counterpart: :forward_absorption # forward-Absorption is matched by reverse-Absorption, see Absorption#forward_absorption
247
+ end
248
+
249
+ class CompositeGroup
250
+ identified_by :name
251
+ one_to_one :name, mandatory: true # Composite Group has Name, see Name#composite_group
252
+ end
253
+
254
+ class Composition
255
+ identified_by :guid
256
+ one_to_one :guid, mandatory: true # Composition has Guid, see Guid#composition
257
+ has_one :compositor_name, mandatory: true, class: Name # Composition is by compositor-Name, see Name#all_composition_as_compositor_name
258
+ one_to_one :name, mandatory: true # Composition is called Name, see Name#composition
259
+ end
260
+
261
+ class Composite
262
+ identified_by :mapping
263
+ one_to_one :mapping, mandatory: true # Composite consists of Mapping, see Mapping#composite
264
+ has_one :composition, mandatory: true # Composite belongs to Composition, see Composition#all_composite
265
+ has_one :composite_group # Composite belongs to Composite Group, see CompositeGroup#all_composite
266
+ one_to_one :natural_index, class: "Index" # Composite has natural-Index, see Index#composite_as_natural_index
267
+ one_to_one :primary_index, class: "Index" # Composite has primary-Index, see Index#composite_as_primary_index
268
+ end
269
+
270
+ class AccessPath
271
+ identified_by :guid
272
+ one_to_one :guid, mandatory: true # Access Path has Guid, see Guid#access_path
273
+ has_one :composite, mandatory: true # Access Path is to Composite, see Composite#all_access_path
274
+ has_one :name # Access Path is called Name, see Name#all_access_path
304
275
  end
305
276
 
306
277
  class Adjective < String
@@ -380,6 +351,21 @@ module ActiveFacts
380
351
  value_type
381
352
  end
382
353
 
354
+ class Injection < Component
355
+ end
356
+
357
+ class ComputedValue < Injection
358
+ end
359
+
360
+ class HashValue < ComputedValue
361
+ end
362
+
363
+ class ComponentHash
364
+ identified_by :hash_value, :component
365
+ has_one :hash_value, mandatory: true # Component Hash involves Hash Value, see HashValue#all_component_hash
366
+ has_one :component, mandatory: true # Component Hash involves Component, see Component#all_component_hash
367
+ end
368
+
383
369
  class Shape
384
370
  identified_by :guid
385
371
  one_to_one :guid, mandatory: true # Shape has Guid, see Guid#shape
@@ -528,6 +514,13 @@ module ActiveFacts
528
514
  end
529
515
 
530
516
  class ObjectifiedFactTypeNameShape < Shape
517
+ one_to_one :fact_type_shape, mandatory: true # Objectified Fact Type Name Shape is for Fact Type Shape, see FactTypeShape#objectified_fact_type_name_shape
518
+ end
519
+
520
+ class RoleSequence
521
+ identified_by :guid
522
+ one_to_one :guid, mandatory: true # Role Sequence has Guid, see Guid#role_sequence
523
+ maybe :has_unused_dependency_to_force_table_in_norma # Has Unused Dependency To Force Table In Norma
531
524
  end
532
525
 
533
526
  class Text < String
@@ -544,6 +537,7 @@ module ActiveFacts
544
537
  end
545
538
 
546
539
  class ReadingShape < Shape
540
+ one_to_one :fact_type_shape, mandatory: true # Reading Shape is for Fact Type Shape, see FactTypeShape#reading_shape
547
541
  has_one :reading, mandatory: true # Reading Shape is for Reading, see Reading#all_reading_shape
548
542
  end
549
543
 
@@ -559,6 +553,11 @@ module ActiveFacts
559
553
  has_one :rotation_setting # Fact Type Shape has Rotation Setting, see RotationSetting#all_fact_type_shape
560
554
  end
561
555
 
556
+ class ForeignKey < AccessPath
557
+ has_one :source_composite, mandatory: true, class: Composite # Foreign Key traverses from source-Composite, see Composite#all_foreign_key_as_source_composite
558
+ one_to_one :mapping # Foreign Key derives from Mapping, see Mapping#foreign_key
559
+ end
560
+
562
561
  class ForeignKeyField
563
562
  identified_by :foreign_key, :ordinal
564
563
  has_one :foreign_key, mandatory: true # Foreign Key Field involves Foreign Key, see ForeignKey#all_foreign_key_field
@@ -567,6 +566,17 @@ module ActiveFacts
567
566
  has_one :value # Foreign Key Field is discriminated by Value, see Value#all_foreign_key_field
568
567
  end
569
568
 
569
+ class Frequency < UnsignedInteger
570
+ value_type length: 32
571
+ end
572
+
573
+ class FullAbsorption
574
+ identified_by :composition, :object_type
575
+ has_one :composition, mandatory: true # Full Absorption involves Composition, see Composition#all_full_absorption
576
+ has_one :object_type, mandatory: true # Full Absorption involves Object Type, see ObjectType#all_full_absorption
577
+ one_to_one :mapping, mandatory: true # Full Absorption applies to Mapping, see Mapping#full_absorption
578
+ end
579
+
570
580
  class VersionPattern < String
571
581
  value_type length: 64
572
582
  end
@@ -580,6 +590,19 @@ module ActiveFacts
580
590
  has_one :version_pattern # Import has Version Pattern, see VersionPattern#all_import
581
591
  end
582
592
 
593
+ class PresenceConstraint < Constraint
594
+ maybe :is_mandatory # Is Mandatory
595
+ maybe :is_preferred_identifier # Is Preferred Identifier
596
+ has_one :role_sequence, mandatory: true # Presence Constraint covers Role Sequence, see RoleSequence#all_presence_constraint
597
+ has_one :max_frequency, class: Frequency # Presence Constraint has max-Frequency, see Frequency#all_presence_constraint_as_max_frequency
598
+ has_one :min_frequency, class: Frequency # Presence Constraint has min-Frequency, see Frequency#all_presence_constraint_as_min_frequency
599
+ end
600
+
601
+ class Index < AccessPath
602
+ maybe :is_unique # Is Unique
603
+ has_one :presence_constraint # Index derives from Presence Constraint, see PresenceConstraint#all_index
604
+ end
605
+
583
606
  class IndexField
584
607
  identified_by :access_path, :ordinal
585
608
  has_one :access_path, mandatory: true # Index Field involves Access Path, see AccessPath#all_index_field
@@ -594,9 +617,6 @@ module ActiveFacts
594
617
  has_one :true_value, class: Value # Indicator uses true-Value, see Value#all_indicator_as_true_value
595
618
  end
596
619
 
597
- class Injection < Mapping
598
- end
599
-
600
620
  class LeafConstraint
601
621
  identified_by :component, :leaf_constraint
602
622
  has_one :component, mandatory: true # Leaf Constraint involves Component, see Component#all_leaf_constraint
@@ -665,6 +685,10 @@ module ActiveFacts
665
685
  one_to_one :role_ref # Play projects Role Ref, see RoleRef#play
666
686
  end
667
687
 
688
+ class RestrictionStyle < String
689
+ value_type
690
+ end
691
+
668
692
  class RingType < String
669
693
  value_type
670
694
  end
@@ -680,6 +704,7 @@ module ActiveFacts
680
704
  end
681
705
 
682
706
  class RoleNameShape < Shape
707
+ one_to_one :role_display, mandatory: true # Role Name Shape is for Role Display, see RoleDisplay#role_name_shape
683
708
  end
684
709
 
685
710
  class ValueConstraintShape < ConstraintShape
@@ -744,10 +769,6 @@ module ActiveFacts
744
769
  class SurrogateKey < Injection
745
770
  end
746
771
 
747
- class TemporalMapping < Mapping
748
- has_one :value_type, mandatory: true # Temporal Mapping records time using Value Type, see ValueType#all_temporal_mapping
749
- end
750
-
751
772
  class TransformTargetRef
752
773
  identified_by :transform_matching, :ordinal
753
774
  has_one :transform_matching, mandatory: true # Transform Target Ref involves Transform Matching, see TransformMatching#all_transform_target_ref
@@ -765,10 +786,10 @@ module ActiveFacts
765
786
  has_one :assimilation # Type Inheritance uses Assimilation, see Assimilation#all_type_inheritance
766
787
  end
767
788
 
768
- class ValidFrom < Injection
789
+ class ValidFrom < Mapping
769
790
  end
770
791
 
771
- class ValueField < Injection
792
+ class ValueField < Mapping
772
793
  end
773
794
 
774
795
  class ValueTypeParameter
@@ -776,13 +797,14 @@ module ActiveFacts
776
797
  has_one :value_type, mandatory: true # Value Type Parameter involves Value Type, see ValueType#all_value_type_parameter
777
798
  has_one :name, mandatory: true # Value Type Parameter involves Name, see Name#all_value_type_parameter
778
799
  has_one :parameter_value_type, mandatory: true, class: ValueType # Value Type Parameter requires value of parameter-Value Type, see ValueType#all_value_type_parameter_as_parameter_value_type
800
+ has_one :restriction_style # Value Type Parameter has Restriction Style, see RestrictionStyle#all_value_type_parameter
779
801
  end
780
802
 
781
803
  class ValueTypeParameterRestriction
782
- identified_by :value_type, :value_type_parameter
804
+ identified_by :value_type, :value_type_parameter, :value_range
783
805
  has_one :value_type, mandatory: true # Value Type Parameter Restriction involves Value Type, see ValueType#all_value_type_parameter_restriction
784
806
  has_one :value_type_parameter, mandatory: true # Value Type Parameter Restriction involves Value Type Parameter, see ValueTypeParameter#all_value_type_parameter_restriction
785
- has_one :value, mandatory: true # Value Type Parameter Restriction has Value, see Value#all_value_type_parameter_restriction
807
+ has_one :value_range, mandatory: true # Value Type Parameter Restriction involves Value Range, see ValueRange#all_value_type_parameter_restriction
786
808
  end
787
809
  end
788
810
  end
@@ -45,8 +45,11 @@ module ActiveFacts
45
45
  all_access_path.each do |access_path|
46
46
  report.call(access_path, "Must contain at least one IndexField") unless access_path.all_index_field.size > 0
47
47
  access_path.all_index_field.each do |index_field|
48
- report.call(access_path, "#{index_field.inspect} must be an Indicator or played by a ValueType") unless index_field.component.is_a?(Indicator) || index_field.component.object_type.is_a?(ValueType)
49
- report.call(access_path, "#{index_field.inspect} must be within its composite") unless index_field.component.root == self
48
+ report.call(access_path, "#{index_field.inspect} must be an Indicator or played by a ValueType") unless !index_field.component.is_a?(Mapping) || index_field.component.object_type.is_a?(ValueType)
49
+ report.call(access_path, "#{index_field.inspect} must have a component") unless index_field.component
50
+ if index_field.component
51
+ report.call(access_path, "#{index_field.inspect} must be within its composite") unless index_field.component.root == self
52
+ end
50
53
  end
51
54
  if ForeignKey === access_path
52
55
  if access_path.all_index_field.size == access_path.all_foreign_key_field.size
@@ -88,7 +91,6 @@ module ActiveFacts
88
91
  report.call(member, "Object type #{member.object_type.name} should play the child role #{c.name}") unless member.object_type == c.object_type
89
92
  report.call(member, "Parent mapping object type #{object_type.name} should play the parent role #{p.name}") unless object_type == p.object_type
90
93
 
91
- member.validate_reverse &report
92
94
  member.validate_nesting &report if member.all_nesting.size > 0
93
95
  member.validate_members &report
94
96
 
@@ -104,11 +106,8 @@ module ActiveFacts
104
106
  when ValidFrom
105
107
  # Nothing to check here
106
108
 
107
- when Injection
108
- report.call(member, "REVISIT: Unexpected and unchecked Injection")
109
-
110
109
  when Mapping
111
- report.call(member, "A child Component should not be a bare Mapping")
110
+ member.validate_reverse &report
112
111
 
113
112
  when Indicator
114
113
  report.call(member, "Indicator requires a Role") unless member.role
@@ -123,16 +122,16 @@ module ActiveFacts
123
122
  end
124
123
  end
125
124
  end
126
- end
127
125
 
128
- class Absorption
129
126
  def validate_reverse &report
130
- reverse = forward_absorption || reverse_absorption
127
+ reverse = forward_mapping || reverse_mapping
131
128
  return unless reverse
132
129
  report.call(self, "Opposite absorption's child role #{reverse.child_role.name} should match parent role #{parent_role.name}") unless reverse.child_role == parent_role
133
130
  report.call(self, "Opposite absorption's parent role #{reverse.parent_role.name} should match child role #{child_role.name}") unless reverse.parent_role == child_role
134
131
  end
132
+ end
135
133
 
134
+ class Absorption
136
135
  def validate_nesting &report
137
136
  report.call(self, "REVISIT: Unexpected and unchecked Nesting")
138
137
  report.call(self, "Nesting Mode must be specified") unless self.nesting_mode
@@ -1,5 +1,5 @@
1
1
  module ActiveFacts
2
2
  module Metamodel
3
- VERSION = "1.9.20"
3
+ VERSION = "1.9.22"
4
4
  end
5
5
  end
@@ -125,7 +125,7 @@ class String
125
125
  end
126
126
 
127
127
  def +(words)
128
- Words.new(self + Array(words))
128
+ Words.new(super)
129
129
  end
130
130
  end
131
131
 
@@ -146,5 +146,10 @@ class String
146
146
  map{|w| w =~ /^[^_[:alpha:]]/ ? '_'+w : w}
147
147
  )
148
148
  end
149
+
150
+ def unindent
151
+ indent = self.split("\n").select {|line| !line.strip.empty? }.map {|line| line.index(/[^\s]/) }.compact.min || 0
152
+ self.gsub(/^[[:blank:]]{#{indent}}/, '')
153
+ end
149
154
  end
150
155
 
@@ -1,5 +1,5 @@
1
- *** Metamodel.orm.cql.orig 2017-10-27 11:34:20.000000000 +1100
2
- --- Metamodel.orm.cql 2017-10-27 11:42:31.000000000 +1100
1
+ *** Metamodel.orm.cql.orig 2017-12-20 10:07:22.000000000 +1100
2
+ --- Metamodel.orm.cql 2017-12-20 10:08:11.000000000 +1100
3
3
  ***************
4
4
  *** 20,22 ****
5
5
  Frequency is written as Unsigned Integer(32);
@@ -10,50 +10,50 @@
10
10
  ! Guid is written as Guid auto-assigned at assert;
11
11
  Implication Rule Name is written as String;
12
12
  ***************
13
- *** 544,547 ****
13
+ *** 551,554 ****
14
14
 
15
15
  - Data Type is a kind of Object Type;
16
16
  -
17
17
  Domain Object Type is a kind of Object Type;
18
- --- 544,545 ----
18
+ --- 551,552 ----
19
19
  ***************
20
- *** 601,603 ****
21
- either Access Path is an Index or Access Path is a Foreign Key but not both;
22
- ! either Component(1) belongs to Component(2) or Component(1) is a Mapping that projects Composite but not both;
20
+ *** 608,610 ****
23
21
  for each Component exactly one of these holds:
24
- --- 599,601 ----
25
- either Access Path is an Index or Access Path is a Foreign Key but not both;
26
- ! either Component belongs to Component or Component(1) is a Mapping that projects Composite but not both;
22
+ ! Component is a Mapping that projects Composite,
23
+ Component is an Indicator,
24
+ --- 606,608 ----
27
25
  for each Component exactly one of these holds:
26
+ ! Component is a Mapping,
27
+ Component is an Indicator,
28
28
  ***************
29
- *** 651,655 ****
29
+ *** 653,657 ****
30
30
  either Value Constraint constrains Value Type or Value Constraint applies to Role but not both;
31
31
  - for each Mapping at most one of these holds:
32
32
  - Mapping(1) is an Absorption(2) and Absorption(1) flattens,
33
33
  - Mapping projects Composite;
34
34
  for each Instance at most one of these holds:
35
- --- 649,650 ----
35
+ --- 651,652 ----
36
36
  ***************
37
- *** 657,658 ****
38
- --- 652,656 ----
37
+ *** 659,660 ****
38
+ --- 654,658 ----
39
39
  Instance objectifies Fact;
40
40
  + for each Mapping at most one of these holds:
41
41
  + Mapping is an Absorption that flattens,
42
42
  + Mapping projects Composite;
43
43
  Absorption is nested under index Role in Ordinal position
44
44
  ***************
45
- *** 660,667 ****
45
+ *** 662,669 ****
46
46
  Absorption uses Nesting Mode;
47
- - Object Type is involved in Full Absorption that applies to Absorption that is a kind of Mapping(2)
47
+ - Object Type is involved in Full Absorption that applies to Mapping
48
48
  - if and only if
49
- - Mapping(1) represents Object Type;
49
+ - Mapping represents Object Type;
50
50
  - Query projects derived Fact Type that contains Role
51
51
  - if and only if
52
52
  - Query includes Variable that projects Role;
53
53
  Role Value is of Instance that is of Object Type
54
- --- 658,659 ----
54
+ --- 660,661 ----
55
55
  ***************
56
- *** 678,689 ****
56
+ *** 680,691 ****
57
57
  Variable is restricted by Role of Step;
58
58
  Composite has primary Index
59
59
  ! only if Composite is reached through Access Path;
@@ -66,7 +66,7 @@
66
66
  - Absorption is a kind of Mapping(2) and Absorption traverses to child Role that is played by Object Type
67
67
  - only if Mapping(1) represents Object Type;
68
68
  Presence Constraint is preferred identifier
69
- --- 670,679 ----
69
+ --- 672,681 ----
70
70
  Variable is restricted by Role of Step;
71
71
  + Absorption traverses from parent Parent Role(1) that is played by Object Type
72
72
  + only if Absorption is a kind of Component(2) and Component(3) belongs to Component(2) that is a Mapping that represents Object Type;
@@ -78,8 +78,8 @@
78
78
  only if Index is unique;
79
79
  Presence Constraint is preferred identifier
80
80
  ***************
81
- *** 697,699 ****
81
+ *** 699,701 ****
82
82
  either Agreement was reached by Agent or Agreement was on Date;
83
83
  - either Component projects Name or Absorption flattens;
84
84
  each Concept occurs at most one time in
85
- --- 687,688 ----
85
+ --- 689,690 ----