activefacts 0.8.16 → 0.8.18
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/Manifest.txt +10 -4
- data/bin/afgen +26 -20
- data/bin/cql +1 -1
- data/css/orm2.css +89 -9
- data/examples/CQL/CompanyDirectorEmployee.cql +4 -4
- data/examples/CQL/Genealogy.cql +5 -5
- data/examples/CQL/Metamodel.cql +121 -91
- data/examples/CQL/MonthInSeason.cql +2 -6
- data/examples/CQL/SeparateSubtype.cql +11 -9
- data/examples/CQL/ServiceDirector.cql +21 -33
- data/examples/CQL/Supervision.cql +0 -3
- data/examples/CQL/WindowInRoomInBldg.cql +10 -4
- data/examples/CQL/unit.cql +1 -1
- data/lib/activefacts.rb +1 -0
- data/lib/activefacts/cql/CQLParser.treetop +5 -1
- data/lib/activefacts/cql/Context.treetop +2 -7
- data/lib/activefacts/cql/Expressions.treetop +2 -2
- data/lib/activefacts/cql/FactTypes.treetop +37 -31
- data/lib/activefacts/cql/Language/English.treetop +21 -4
- data/lib/activefacts/cql/LexicalRules.treetop +59 -1
- data/lib/activefacts/cql/ObjectTypes.treetop +22 -12
- data/lib/activefacts/cql/Terms.treetop +13 -9
- data/lib/activefacts/cql/ValueTypes.treetop +30 -11
- data/lib/activefacts/cql/compiler.rb +34 -5
- data/lib/activefacts/cql/compiler/clause.rb +207 -116
- data/lib/activefacts/cql/compiler/constraint.rb +129 -105
- data/lib/activefacts/cql/compiler/entity_type.rb +49 -27
- data/lib/activefacts/cql/compiler/expression.rb +71 -42
- data/lib/activefacts/cql/compiler/fact.rb +70 -64
- data/lib/activefacts/cql/compiler/fact_type.rb +108 -57
- data/lib/activefacts/cql/compiler/query.rb +178 -0
- data/lib/activefacts/cql/compiler/shared.rb +13 -12
- data/lib/activefacts/cql/compiler/value_type.rb +10 -4
- data/lib/activefacts/cql/nodes.rb +1 -1
- data/lib/activefacts/cql/parser.rb +6 -2
- data/lib/activefacts/generate/absorption.rb +6 -3
- data/lib/activefacts/generate/cql.rb +140 -84
- data/lib/activefacts/generate/dm.rb +12 -6
- data/lib/activefacts/generate/help.rb +25 -6
- data/lib/activefacts/generate/helpers/oo.rb +195 -0
- data/lib/activefacts/generate/helpers/ordered.rb +589 -0
- data/lib/activefacts/generate/helpers/rails.rb +57 -0
- data/lib/activefacts/generate/html/glossary.rb +274 -54
- data/lib/activefacts/generate/json.rb +25 -22
- data/lib/activefacts/generate/null.rb +1 -0
- data/lib/activefacts/generate/rails/models.rb +244 -0
- data/lib/activefacts/generate/rails/schema.rb +185 -0
- data/lib/activefacts/generate/records.rb +1 -0
- data/lib/activefacts/generate/ruby.rb +51 -30
- data/lib/activefacts/generate/sql/mysql.rb +5 -3
- data/lib/activefacts/generate/sql/server.rb +8 -4
- data/lib/activefacts/generate/text.rb +1 -0
- data/lib/activefacts/generate/transform/surrogate.rb +209 -0
- data/lib/activefacts/generate/version.rb +1 -0
- data/lib/activefacts/input/orm.rb +234 -181
- data/lib/activefacts/mapping/rails.rb +122 -0
- data/lib/activefacts/persistence/columns.rb +34 -18
- data/lib/activefacts/persistence/foreignkey.rb +129 -71
- data/lib/activefacts/persistence/index.rb +42 -12
- data/lib/activefacts/persistence/reference.rb +37 -23
- data/lib/activefacts/persistence/tables.rb +53 -19
- data/lib/activefacts/registry.rb +11 -0
- data/lib/activefacts/support.rb +28 -10
- data/lib/activefacts/version.rb +1 -1
- data/lib/activefacts/vocabulary/extensions.rb +246 -117
- data/lib/activefacts/vocabulary/metamodel.rb +105 -65
- data/lib/activefacts/vocabulary/verbaliser.rb +226 -194
- data/spec/absorption_spec.rb +1 -0
- data/spec/cql/comparison_spec.rb +8 -8
- data/spec/cql/contractions_spec.rb +16 -43
- data/spec/cql/entity_type_spec.rb +2 -1
- data/spec/cql/expressions_spec.rb +2 -2
- data/spec/cql/fact_type_matching_spec.rb +4 -1
- data/spec/cql/parser/bad_literals_spec.rb +30 -30
- data/spec/cql/parser/entity_types_spec.rb +6 -6
- data/spec/cql/parser/expressions_spec.rb +25 -19
- data/spec/cql/samples_spec.rb +5 -4
- data/spec/cql_cql_spec.rb +2 -1
- data/spec/cql_dm_spec.rb +4 -0
- data/spec/cql_mysql_spec.rb +4 -0
- data/spec/cql_parse_spec.rb +2 -0
- data/spec/cql_ruby_spec.rb +4 -0
- data/spec/cql_sql_spec.rb +4 -0
- data/spec/cqldump_spec.rb +7 -4
- data/spec/helpers/parse_to_ast_matcher.rb +7 -3
- data/spec/helpers/test_parser.rb +2 -0
- data/spec/norma_cql_spec.rb +5 -2
- data/spec/norma_ruby_spec.rb +4 -1
- data/spec/norma_ruby_sql_spec.rb +4 -1
- data/spec/norma_sql_spec.rb +4 -1
- data/spec/norma_tables_spec.rb +2 -2
- data/spec/ruby_api_spec.rb +1 -1
- data/spec/spec_helper.rb +2 -0
- data/spec/transform_surrogate_spec.rb +59 -0
- metadata +70 -60
- data/TODO +0 -308
- data/lib/activefacts/cql/compiler/join.rb +0 -162
- data/lib/activefacts/generate/oo.rb +0 -176
- data/lib/activefacts/generate/ordered.rb +0 -602
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
MmQ1ZmI4YjNlNGZhMjJhZDQwODcwNDNkMWM1ZTQ5YWE2NjNkZTRiNA==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
YzkzY2M3MDkzMDc5MGNmMTkyNGNmY2U2ZWUyNjQ2MjljODI5YmFkYw==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
ZDgxMzZkODViOWE2MDU1MTdiODMwZDhjMzVjN2E2NmUwNjRlOTczZTJlMTU4
|
10
|
+
M2YxM2M5ZWUzZWQ1NWEwYjc5ZTIxNjg2MjQ0MjJmMzYwZjE1MmMwZGIyODFh
|
11
|
+
MTVlODhiNWY0ZTNiNWQ3ZmUzZDFhMTUzYzhmMGE0YTM1Y2YyNTg=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
YWU2OTdlNTcxYTRjYjNjMzAxNjYzNTk0NDM1YmY3YzQ1NWI4YTczZDc2Nzlk
|
14
|
+
NTgxMmEwZWUyNzc2ZmU4MTAwYjNmMzBkNGM3M2I2OTM0M2MyZDM1NTcxZjNi
|
15
|
+
OGQzODQwMWQxNTFhNTRkYWU5M2QzODMyNDUwZTE1MjhjNTdiNWQ=
|
data/Manifest.txt
CHANGED
@@ -21,7 +21,6 @@ examples/CQL/Insurance.cql
|
|
21
21
|
examples/CQL/JoinEquality.cql
|
22
22
|
examples/CQL/Marriage.cql
|
23
23
|
examples/CQL/Metamodel.cql
|
24
|
-
examples/CQL/MetamodelNext.cql
|
25
24
|
examples/CQL/Monogamy.cql
|
26
25
|
examples/CQL/MonthInSeason.cql
|
27
26
|
examples/CQL/Moon.cql
|
@@ -67,7 +66,7 @@ lib/activefacts/cql/compiler/entity_type.rb
|
|
67
66
|
lib/activefacts/cql/compiler/expression.rb
|
68
67
|
lib/activefacts/cql/compiler/fact.rb
|
69
68
|
lib/activefacts/cql/compiler/fact_type.rb
|
70
|
-
lib/activefacts/cql/compiler/
|
69
|
+
lib/activefacts/cql/compiler/query.rb
|
71
70
|
lib/activefacts/cql/compiler/shared.rb
|
72
71
|
lib/activefacts/cql/compiler/value_type.rb
|
73
72
|
lib/activefacts/cql/nodes.rb
|
@@ -76,19 +75,24 @@ lib/activefacts/generate/absorption.rb
|
|
76
75
|
lib/activefacts/generate/cql.rb
|
77
76
|
lib/activefacts/generate/dm.rb
|
78
77
|
lib/activefacts/generate/help.rb
|
78
|
+
lib/activefacts/generate/helpers/oo.rb
|
79
|
+
lib/activefacts/generate/helpers/ordered.rb
|
80
|
+
lib/activefacts/generate/helpers/rails.rb
|
79
81
|
lib/activefacts/generate/html/glossary.rb
|
80
82
|
lib/activefacts/generate/json.rb
|
81
83
|
lib/activefacts/generate/null.rb
|
82
|
-
lib/activefacts/generate/oo.rb
|
83
|
-
lib/activefacts/generate/ordered.rb
|
84
84
|
lib/activefacts/generate/records.rb
|
85
85
|
lib/activefacts/generate/ruby.rb
|
86
86
|
lib/activefacts/generate/sql/mysql.rb
|
87
87
|
lib/activefacts/generate/sql/server.rb
|
88
|
+
lib/activefacts/generate/rails/schema.rb
|
89
|
+
lib/activefacts/generate/rails/models.rb
|
88
90
|
lib/activefacts/generate/text.rb
|
91
|
+
lib/activefacts/generate/transform/surrogate.rb
|
89
92
|
lib/activefacts/generate/version.rb
|
90
93
|
lib/activefacts/input/cql.rb
|
91
94
|
lib/activefacts/input/orm.rb
|
95
|
+
lib/activefacts/mapping/rails.rb
|
92
96
|
lib/activefacts/persistence.rb
|
93
97
|
lib/activefacts/persistence/columns.rb
|
94
98
|
lib/activefacts/persistence/foreignkey.rb
|
@@ -96,6 +100,7 @@ lib/activefacts/persistence/index.rb
|
|
96
100
|
lib/activefacts/persistence/object_type.rb
|
97
101
|
lib/activefacts/persistence/reference.rb
|
98
102
|
lib/activefacts/persistence/tables.rb
|
103
|
+
lib/activefacts/registry.rb
|
99
104
|
lib/activefacts/support.rb
|
100
105
|
lib/activefacts/version.rb
|
101
106
|
lib/activefacts/vocabulary.rb
|
@@ -144,5 +149,6 @@ spec/helpers/parse_to_ast_matcher.rb
|
|
144
149
|
spec/helpers/string_matcher.rb
|
145
150
|
spec/helpers/test_parser.rb
|
146
151
|
spec/spec_helper.rb
|
152
|
+
spec/transform_surrogate_spec.rb
|
147
153
|
status.html
|
148
154
|
why.html
|
data/bin/afgen
CHANGED
@@ -6,32 +6,32 @@
|
|
6
6
|
#
|
7
7
|
$:.unshift File.dirname(File.expand_path(__FILE__))+"/../lib"
|
8
8
|
|
9
|
-
require 'rubygems'
|
10
|
-
|
11
9
|
require 'activefacts'
|
12
10
|
require 'activefacts/vocabulary'
|
13
11
|
|
12
|
+
# Load the generators:
|
13
|
+
generators = []
|
14
14
|
arg = ARGV.shift || "--help"
|
15
|
+
while arg =~ /^--([^=]*)(?:=(.*))?/
|
16
|
+
module_name, options = $1, ($2||"").split(/,/)
|
17
|
+
begin
|
18
|
+
base_generators = ActiveFacts::Registry.generators.keys
|
15
19
|
|
16
|
-
|
17
|
-
generator = "text"
|
18
|
-
generator_options = []
|
19
|
-
if arg =~ /^--([^=]*)(?:=(.*))?/
|
20
|
-
generator = $1
|
21
|
-
generator_options = ($2||"").split(/,/)
|
22
|
-
arg = ARGV.shift
|
23
|
-
end
|
20
|
+
require "activefacts/generate/#{module_name}"
|
24
21
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
22
|
+
# One require may load more than one generator. Extract new ones.
|
23
|
+
new_generators = ActiveFacts::Registry.generators
|
24
|
+
generators += (new_generators.keys-base_generators).map do |gn|
|
25
|
+
[new_generators[gn], options]
|
26
|
+
end
|
27
|
+
|
28
|
+
rescue LoadError => e
|
29
|
+
$stderr.puts "Could not find output module #{module_name}. Try --help"
|
30
|
+
exit 1
|
31
|
+
end
|
32
|
+
|
33
|
+
arg = ARGV.shift
|
31
34
|
end
|
32
|
-
output_class = generator.upcase.gsub(%r{[/\\]+},'::')
|
33
|
-
output_klass = eval("ActiveFacts::Generate::#{output_class}")
|
34
|
-
raise "Expected #{output_handler} to define #{output_class}" unless output_klass
|
35
35
|
|
36
36
|
# Load the file type input method
|
37
37
|
if arg
|
@@ -53,8 +53,14 @@ begin
|
|
53
53
|
vocabulary = true
|
54
54
|
end
|
55
55
|
|
56
|
+
exit 0 unless vocabulary
|
57
|
+
|
58
|
+
vocabulary.finalise unless vocabulary == true
|
59
|
+
|
56
60
|
# Generate the output:
|
57
|
-
|
61
|
+
generators.each do |generator, options|
|
62
|
+
generator.new(vocabulary, *options).generate
|
63
|
+
end
|
58
64
|
rescue => e
|
59
65
|
$stderr.puts "#{e.message}"
|
60
66
|
# puts "\t#{e.backtrace*"\n\t"}"
|
data/bin/cql
CHANGED
@@ -141,7 +141,7 @@ class InteractiveCQL < ActiveFacts::CQL::Compiler
|
|
141
141
|
begin
|
142
142
|
@results = []
|
143
143
|
compile(statement)
|
144
|
-
if @results.size == 1 && @results[0].is_a?(ActiveFacts::Metamodel::
|
144
|
+
if @results.size == 1 && @results[0].is_a?(ActiveFacts::Metamodel::Query)
|
145
145
|
process_query(@results[0])
|
146
146
|
else
|
147
147
|
puts(@results.map{|r| "\t"+r.inspect}*"\n")
|
data/css/orm2.css
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
a:link, a:visited {
|
2
|
+
color: #8A0092; text-decoration: underline;
|
3
|
+
}
|
4
|
+
|
1
5
|
ul {
|
2
6
|
margin: 0px 0px 0px 2em;
|
3
7
|
-webkit-margin-before: 0px;
|
@@ -6,7 +10,7 @@ ul {
|
|
6
10
|
padding: 0px;
|
7
11
|
}
|
8
12
|
|
9
|
-
pre {
|
13
|
+
pre.slide {
|
10
14
|
background-color: #000;
|
11
15
|
padding: 5px;
|
12
16
|
display: table-cell;
|
@@ -20,20 +24,18 @@ span {
|
|
20
24
|
}
|
21
25
|
|
22
26
|
.keyword {
|
23
|
-
|
24
|
-
color: #66F;
|
27
|
+
color: #0000CC;
|
25
28
|
}
|
26
29
|
.term, .concept {
|
27
|
-
Xcolor: #
|
28
|
-
color: #
|
30
|
+
/* Xcolor: #6A0072; The color used by NORMA */
|
31
|
+
color: #8A0092;
|
29
32
|
}
|
30
33
|
.vocabulary, .object_type {
|
31
|
-
Xcolor: #
|
32
|
-
color: #
|
34
|
+
/* Xcolor: #6A0072; The color used by NORMA */
|
35
|
+
color: #8A0092;
|
33
36
|
}
|
34
37
|
.linking, .copula {
|
35
|
-
|
36
|
-
color: #0C0;
|
38
|
+
color: #0E5400;
|
37
39
|
}
|
38
40
|
.literal, .value {
|
39
41
|
color: #FF990E;
|
@@ -41,4 +43,82 @@ span {
|
|
41
43
|
|
42
44
|
dd {
|
43
45
|
margin-bottom: 0.5em;
|
46
|
+
margin-left: 60px;
|
47
|
+
text-indent: -20px;
|
48
|
+
}
|
49
|
+
|
50
|
+
dd ul {
|
51
|
+
margin-left: -80px;
|
52
|
+
text-indent: 80px;
|
53
|
+
}
|
54
|
+
|
55
|
+
|
56
|
+
.glossary-sidebar {
|
57
|
+
position: absolute;
|
58
|
+
top: 0px;
|
59
|
+
bottom: 0px;
|
60
|
+
right: 0px;
|
61
|
+
width: 240px;
|
62
|
+
display: block;
|
63
|
+
margin: 0;
|
64
|
+
padding: 0 16px;
|
65
|
+
border-right: solid #DDD 3px;
|
66
|
+
background: #EEE;
|
67
|
+
}
|
68
|
+
|
69
|
+
.glossary-toc {
|
70
|
+
position: absolute;
|
71
|
+
top: 0px;
|
72
|
+
bottom: 24px;
|
73
|
+
overflow: auto;
|
74
|
+
margin: 0;
|
75
|
+
padding: 0 0;
|
76
|
+
list-style: none;
|
77
|
+
font-family: Menlo, Consolas, Monaco, "Lucida Console", monospace;
|
78
|
+
}
|
79
|
+
|
80
|
+
.glossary-controls {
|
81
|
+
position: absolute; bottom: 0px;
|
82
|
+
}
|
83
|
+
|
84
|
+
.glossary-doc {
|
85
|
+
position: absolute;
|
86
|
+
display: block;
|
87
|
+
background: #FFF;
|
88
|
+
border-right: solid #EEE 3px;
|
89
|
+
font: 300 16px/1.4 "Myriad Pro", "Helvetica Neue", Helvetica, "Arial Unicode MS", Arial, sans-serif;
|
90
|
+
overflow: auto;
|
91
|
+
padding: 0 0 0 30px;
|
92
|
+
top: 0px;
|
93
|
+
bottom: 0px;
|
94
|
+
left: 0px;
|
95
|
+
right: 270px;
|
96
|
+
}
|
97
|
+
|
98
|
+
.glossary-toc li {
|
99
|
+
margin-left: 20px;
|
100
|
+
text-indent: -20px;
|
101
|
+
}
|
102
|
+
|
103
|
+
.glossary-doc dl {
|
104
|
+
margin-bottom: 1600px;
|
105
|
+
}
|
106
|
+
|
107
|
+
.glossary-doc dd {
|
108
|
+
margin-bottom: 30px;
|
109
|
+
}
|
110
|
+
|
111
|
+
.glossary-constraint {
|
112
|
+
background: #EDC;
|
113
|
+
}
|
114
|
+
|
115
|
+
.value {
|
116
|
+
display: inline;
|
117
|
+
}
|
118
|
+
|
119
|
+
.keyword,
|
120
|
+
.glossary-facttype,
|
121
|
+
.glossary-reading {
|
122
|
+
display: inline;
|
123
|
+
XXbackground: #E8E8E8;
|
44
124
|
}
|
@@ -15,11 +15,11 @@ Company is identified by its Name where
|
|
15
15
|
Company is called Company Name;
|
16
16
|
Company is listed;
|
17
17
|
|
18
|
-
Meeting is independent identified by Date and Meeting is board meeting
|
19
|
-
Meeting is held
|
20
|
-
Meeting is board meeting,
|
18
|
+
Meeting is independent identified by Company and Date and Meeting is board meeting where
|
19
|
+
Meeting is held by one Company,
|
21
20
|
Company held Meeting,
|
22
|
-
Meeting is held
|
21
|
+
Meeting is held on one Date,
|
22
|
+
Meeting is board meeting;
|
23
23
|
|
24
24
|
Person is identified by given-Name and family-Name where
|
25
25
|
Person has one given-Name,
|
data/examples/CQL/Genealogy.cql
CHANGED
@@ -18,7 +18,7 @@ Name is written as String(128);
|
|
18
18
|
Occupation is written as String(128);
|
19
19
|
Official is written as String(64);
|
20
20
|
Person ID is written as Auto Counter;
|
21
|
-
Picture is written as Image
|
21
|
+
Picture is written as Image;
|
22
22
|
Role ID is written as Auto Counter;
|
23
23
|
Source ID is written as Auto Counter;
|
24
24
|
Source Name is written as String(128);
|
@@ -63,7 +63,7 @@ preferred-Picture is of Person,
|
|
63
63
|
|
64
64
|
Role is identified by its ID;
|
65
65
|
Role is called one Event Role Name,
|
66
|
-
Event Role Name is name of one Role;
|
66
|
+
Event Role Name is name of at most one Role;
|
67
67
|
|
68
68
|
Source is identified by its ID;
|
69
69
|
Source has one Source Name,
|
@@ -75,9 +75,9 @@ Email is of User,
|
|
75
75
|
User provided Source,
|
76
76
|
Source was provided by one User;
|
77
77
|
|
78
|
-
|
79
|
-
User is
|
80
|
-
|
78
|
+
Friendship is where
|
79
|
+
User is friendly with other-User [symmetric];
|
80
|
+
Friendship is confirmed;
|
81
81
|
|
82
82
|
Participation is where
|
83
83
|
Person played Role in Event according to Source,
|
data/examples/CQL/Metamodel.cql
CHANGED
@@ -5,7 +5,8 @@ vocabulary Metamodel;
|
|
5
5
|
*/
|
6
6
|
Adjective is written as String(64);
|
7
7
|
Agent Name is written as String;
|
8
|
-
|
8
|
+
Aggregate Code is written as String(32);
|
9
|
+
Assimilation is written as String restricted to {'absorbed', 'partitioned', 'separate'};
|
9
10
|
Context Note Kind is written as String restricted to {'as_opposed_to', 'because', 'so_that', 'to_avoid'};
|
10
11
|
Date is written as Date;
|
11
12
|
Denominator is written as Unsigned Integer(32);
|
@@ -16,6 +17,7 @@ Ephemera URL is written as String;
|
|
16
17
|
Exponent is written as Signed Integer(16);
|
17
18
|
Frequency is written as Unsigned Integer(32);
|
18
19
|
Guid is written as Guid;
|
20
|
+
Implication Rule Name is written as String;
|
19
21
|
Length is written as Unsigned Integer(32);
|
20
22
|
Literal is written as String;
|
21
23
|
Name is written as String(64);
|
@@ -23,6 +25,7 @@ Numerator is written as Decimal;
|
|
23
25
|
Offset is written as Decimal;
|
24
26
|
Ordinal is written as Unsigned Integer(16);
|
25
27
|
Pronoun is written as String(20) restricted to {'feminine', 'masculine', 'neuter', 'personal'};
|
28
|
+
Regular Expression is written as String;
|
26
29
|
Ring Type is written as String;
|
27
30
|
Rotation Setting is written as String restricted to {'left', 'right'};
|
28
31
|
Scale is written as Unsigned Integer(32);
|
@@ -37,9 +40,12 @@ Y is written as Signed Integer(32);
|
|
37
40
|
*/
|
38
41
|
Agent is identified by its Name;
|
39
42
|
|
43
|
+
Aggregate is identified by its Code;
|
44
|
+
|
40
45
|
Alternative Set is identified by Guid where
|
41
46
|
Alternative Set has one Guid,
|
42
47
|
Guid is of at most one Alternative Set;
|
48
|
+
Alternative Set members are exclusive;
|
43
49
|
|
44
50
|
Coefficient is identified by Numerator and Denominator and Coefficient is precise where
|
45
51
|
Coefficient has one Numerator,
|
@@ -55,12 +61,12 @@ Name is of Constraint,
|
|
55
61
|
Constraint is called at most one Name;
|
56
62
|
|
57
63
|
Context Note is a kind of Concept [partitioned];
|
58
|
-
Concept has Context Note,
|
59
|
-
Context Note applies to at most one Concept;
|
60
64
|
Context Note has one Context Note Kind,
|
61
65
|
Context Note Kind is of Context Note;
|
62
66
|
Context Note has one Discussion,
|
63
67
|
Discussion is for Context Note;
|
68
|
+
Context Note applies to at most one relevant-Concept [acyclic, stronglyintransitive],
|
69
|
+
Concept has Context Note;
|
64
70
|
|
65
71
|
Enforcement is identified by Constraint where
|
66
72
|
Constraint requires at most one Enforcement,
|
@@ -74,26 +80,18 @@ Fact is a kind of Concept [partitioned];
|
|
74
80
|
Fact Type is a kind of Concept [partitioned];
|
75
81
|
Fact is of one Fact Type;
|
76
82
|
|
77
|
-
|
83
|
+
Implication Rule is identified by its Name;
|
84
|
+
Concept is implied by at most one Implication Rule;
|
78
85
|
|
79
86
|
Instance is a kind of Concept [partitioned];
|
80
87
|
Instance objectifies at most one Fact,
|
81
88
|
Fact is objectified as at most one Instance;
|
82
89
|
|
83
|
-
|
84
|
-
|
85
|
-
Join Node is identified by Join and Ordinal where
|
86
|
-
Join includes Join Node,
|
87
|
-
Join Node is in one Join,
|
88
|
-
Join Node has one Ordinal position;
|
89
|
-
Join Node has at most one Subscript,
|
90
|
-
Subscript is of Join Node;
|
91
|
-
Join Node has at most one role-Name,
|
92
|
-
Name is of Join Node;
|
90
|
+
Link Fact Type is a kind of Fact Type;
|
93
91
|
|
94
|
-
|
95
|
-
|
96
|
-
|
92
|
+
Location is identified by X and Y where
|
93
|
+
Location is at one X,
|
94
|
+
Location is at one Y;
|
97
95
|
|
98
96
|
Presence Constraint is a kind of Constraint;
|
99
97
|
Presence Constraint has at most one max-Frequency restricted to {1..};
|
@@ -101,12 +99,15 @@ Presence Constraint has at most one min-Frequency restricted to {2..};
|
|
101
99
|
Presence Constraint is mandatory;
|
102
100
|
Presence Constraint is preferred identifier;
|
103
101
|
|
102
|
+
Query is a kind of Concept [partitioned];
|
103
|
+
|
104
104
|
Reading is identified by Fact Type and Ordinal where
|
105
105
|
Fact Type has Reading,
|
106
106
|
Reading is for one Fact Type,
|
107
107
|
Reading is in one Ordinal position,
|
108
108
|
Ordinal reading for fact type is Reading;
|
109
109
|
Reading has one Text;
|
110
|
+
Reading is negative;
|
110
111
|
|
111
112
|
Ring Constraint is a kind of Constraint;
|
112
113
|
Ring Constraint is of one Ring Type;
|
@@ -116,8 +117,6 @@ Role is a kind of Concept identified by Fact Type and Ordinal [partitioned] wher
|
|
116
117
|
Fact Type contains Role,
|
117
118
|
Role fills one Ordinal,
|
118
119
|
Ordinal applies to Role;
|
119
|
-
Implicit Fact Type is implied by one Role (as Implying Role),
|
120
|
-
Implying Role implies at most one Implicit Fact Type;
|
121
120
|
Ring Constraint has at most one other-Role,
|
122
121
|
other-Role is of Ring Constraint;
|
123
122
|
Role is of Ring Constraint; // Avoid ambiguity; this is a new fact type
|
@@ -126,6 +125,12 @@ Role is of Ring Constraint,
|
|
126
125
|
Role has at most one role-Name,
|
127
126
|
role-Name is name of at least one Role;
|
128
127
|
|
128
|
+
Role Proxy is a kind of Role;
|
129
|
+
Link Fact Type has one Role Proxy,
|
130
|
+
Role Proxy is of at most one Link Fact Type;
|
131
|
+
Role Proxy is for at most one Role,
|
132
|
+
Role has at most one Role Proxy;
|
133
|
+
|
129
134
|
Role Sequence is identified by Guid where
|
130
135
|
Role Sequence has one Guid,
|
131
136
|
Guid is of at most one Role Sequence;
|
@@ -134,19 +139,19 @@ Reading is in one Role Sequence,
|
|
134
139
|
Role Sequence is for Reading;
|
135
140
|
Role Sequence has unused dependency to force table in norma;
|
136
141
|
|
137
|
-
Role Value is identified by
|
138
|
-
Instance plays Role Value,
|
139
|
-
Role Value is of one Instance,
|
142
|
+
Role Value is identified by Fact and Role where
|
140
143
|
Role Value fulfils one Fact,
|
141
|
-
Fact includes at least one Role Value
|
142
|
-
Role Value is of one Role;
|
144
|
+
Fact includes at least one Role Value,
|
145
|
+
Role Value is of one Role;
|
146
|
+
Instance plays Role Value,
|
147
|
+
Role Value is of one Instance;
|
143
148
|
|
144
149
|
Set Constraint is a kind of Constraint;
|
145
150
|
|
146
151
|
Shape is identified by Guid where
|
147
152
|
Shape has one Guid,
|
148
153
|
Guid is of at most one Shape;
|
149
|
-
Shape is at at most one
|
154
|
+
Shape is at at most one Location;
|
150
155
|
Shape is expanded;
|
151
156
|
|
152
157
|
Subset Constraint is a kind of Set Constraint;
|
@@ -160,22 +165,35 @@ Name is of at most one Unit,
|
|
160
165
|
Unit is called one Name;
|
161
166
|
Unit has at most one Coefficient;
|
162
167
|
Unit has at most one Offset;
|
168
|
+
Unit has plural-Name; // Avoid ambiguity; this is a new fact type
|
163
169
|
Unit has at most one plural-Name,
|
164
|
-
plural-Name
|
170
|
+
plural-Name is of at most one Unit;
|
165
171
|
Unit is fundamental;
|
166
172
|
|
167
|
-
Value is identified by Literal and Value is
|
173
|
+
Value is identified by Literal and Value is literal string and Unit where
|
168
174
|
Value is represented by one Literal,
|
169
175
|
Literal represents Value,
|
170
|
-
Value is
|
176
|
+
Value is literal string,
|
171
177
|
Value is in at most one Unit,
|
172
178
|
Unit is of Value;
|
173
179
|
Instance has at most one Value;
|
174
|
-
Join Node has at most one Value;
|
175
180
|
|
176
181
|
Value Constraint is a kind of Constraint;
|
177
182
|
Role has at most one role-Value Constraint,
|
178
183
|
Value Constraint applies to at most one Role;
|
184
|
+
Value Constraint requires matching at most one Regular Expression;
|
185
|
+
|
186
|
+
Variable is identified by Query and Ordinal where
|
187
|
+
Query includes at least one Variable,
|
188
|
+
Variable is in one Query,
|
189
|
+
Variable has one Ordinal position;
|
190
|
+
Variable projects at most one Role (as Projection),
|
191
|
+
Projection is projected from at most one Variable;
|
192
|
+
Variable has at most one Subscript,
|
193
|
+
Subscript is of Variable;
|
194
|
+
Variable is bound to at most one Value;
|
195
|
+
Variable has at most one role-Name,
|
196
|
+
Name is of Variable;
|
179
197
|
|
180
198
|
Vocabulary is identified by Name where
|
181
199
|
Vocabulary is called one Name;
|
@@ -184,6 +202,10 @@ Vocabulary contains Constraint,
|
|
184
202
|
Vocabulary includes Unit,
|
185
203
|
Unit is in one Vocabulary;
|
186
204
|
|
205
|
+
Aggregation is where
|
206
|
+
Variable is bound to Aggregate over aggregated-Variable,
|
207
|
+
Aggregate of aggregated-Variable is bound as one Variable;
|
208
|
+
|
187
209
|
Agreement is identified by Context Note where
|
188
210
|
Context Note was added by at most one Agreement,
|
189
211
|
Agreement covers one Context Note;
|
@@ -216,8 +238,6 @@ Diagram is identified by Vocabulary and Name where
|
|
216
238
|
Vocabulary contains Diagram,
|
217
239
|
Diagram is called one Name,
|
218
240
|
Name is of Diagram;
|
219
|
-
Shape is in one Diagram,
|
220
|
-
Diagram includes Shape;
|
221
241
|
|
222
242
|
Fact Type Shape is a kind of Shape;
|
223
243
|
Fact Type Shape has at most one Display Role Names Setting;
|
@@ -225,45 +245,37 @@ Fact Type Shape is for one Fact Type,
|
|
225
245
|
Fact Type has Fact Type Shape;
|
226
246
|
Fact Type Shape has at most one Rotation Setting;
|
227
247
|
|
228
|
-
Join Role is independent where
|
229
|
-
Join Node includes at least one Role,
|
230
|
-
Role connects to Join Node;
|
231
|
-
|
232
|
-
Join Step is identified by input-Join Role and output-Join Role where
|
233
|
-
Join Step has one input-Join Role,
|
234
|
-
Join Step has one output-Join Role;
|
235
|
-
Join Step falls under at most one Alternative Set,
|
236
|
-
Alternative Set covers at least one Join Step;
|
237
|
-
Join Step traverses one Fact Type,
|
238
|
-
Fact Type directs Join Step;
|
239
|
-
Join Step involves incidental-Join Role,
|
240
|
-
Join Role is incidentally involved in at most one Join Step;
|
241
|
-
is anti Join Step;
|
242
|
-
Join Step is outer;
|
243
|
-
|
244
248
|
Model Note Shape is a kind of Shape;
|
245
249
|
Model Note Shape is for one Context Note;
|
246
250
|
|
251
|
+
ORM Diagram is a kind of Diagram;
|
252
|
+
Shape is in one ORM Diagram,
|
253
|
+
ORM Diagram includes Shape;
|
254
|
+
|
247
255
|
Object Type is a kind of Concept identified by Vocabulary and Name [partitioned] where
|
248
256
|
Object Type belongs to one Vocabulary,
|
249
257
|
Object Type is called one Name;
|
250
258
|
Instance is of one Object Type;
|
251
|
-
Join Node is for one Object Type,
|
252
|
-
Object Type is referenced in Join Node;
|
253
259
|
Object Type uses at most one Pronoun;
|
254
260
|
Object Type plays Role,
|
255
261
|
Role is played by one Object Type;
|
256
262
|
Object Type is independent;
|
263
|
+
Variable is for one Object Type,
|
264
|
+
Object Type is referenced in Variable;
|
257
265
|
|
258
266
|
Object Type Shape is a kind of Shape;
|
259
267
|
Object Type Shape is for one Object Type,
|
260
268
|
Object Type has Object Type Shape;
|
261
269
|
Object Type Shape has expanded reference mode;
|
262
270
|
|
263
|
-
Objectified Fact Type Name Shape is a kind of Shape
|
264
|
-
|
271
|
+
Objectified Fact Type Name Shape is a kind of Shape;
|
272
|
+
Objectified Fact Type Name Shape is for one Fact Type Shape,
|
265
273
|
Fact Type Shape has at most one Objectified Fact Type Name Shape;
|
266
274
|
|
275
|
+
Play is where
|
276
|
+
Variable is restricted by Role,
|
277
|
+
Role controls Variable;
|
278
|
+
|
267
279
|
Population is a kind of Concept identified by Vocabulary and Name [partitioned] where
|
268
280
|
Vocabulary includes Population,
|
269
281
|
Population belongs to at most one Vocabulary,
|
@@ -276,8 +288,8 @@ Population includes Instance,
|
|
276
288
|
Population includes Role Value,
|
277
289
|
Role Value belongs to one Population;
|
278
290
|
|
279
|
-
Reading Shape is a kind of Shape
|
280
|
-
|
291
|
+
Reading Shape is a kind of Shape;
|
292
|
+
Fact Type Shape has at most one Reading Shape,
|
281
293
|
Reading Shape is for one Fact Type Shape;
|
282
294
|
Reading Shape is for one Reading,
|
283
295
|
Reading has Reading Shape;
|
@@ -298,7 +310,7 @@ Role Ref is where
|
|
298
310
|
Role is in Role Sequence in one Ordinal place,
|
299
311
|
Role Sequence includes Role in Ordinal place,
|
300
312
|
Role has Ordinal place in Role Sequence;
|
301
|
-
|
313
|
+
Play projects at most one Role Ref;
|
302
314
|
Role Ref has at most one leading-Adjective;
|
303
315
|
Role Ref has at most one trailing-Adjective;
|
304
316
|
|
@@ -315,6 +327,18 @@ Set Equality Constraint is a kind of Set Comparison Constraint;
|
|
315
327
|
Set Exclusion Constraint is a kind of Set Comparison Constraint;
|
316
328
|
Set Exclusion Constraint is mandatory;
|
317
329
|
|
330
|
+
Step is identified by input-Play and output-Play where
|
331
|
+
Step has one input-Play,
|
332
|
+
Step has at most one output-Play;
|
333
|
+
Step falls under at most one Alternative Set,
|
334
|
+
Alternative Set covers at least one Step;
|
335
|
+
Step specifies one Fact Type,
|
336
|
+
Fact Type directs Step;
|
337
|
+
Step involves incidental-Play,
|
338
|
+
Play is incidentally involved in at most one Step;
|
339
|
+
Step is disallowed;
|
340
|
+
Step is optional;
|
341
|
+
|
318
342
|
Value Constraint Shape is a kind of Constraint Shape;
|
319
343
|
Role Display has at most one Value Constraint Shape,
|
320
344
|
Value Constraint Shape is for at most one Role Display;
|
@@ -325,43 +349,48 @@ Value Range is identified by minimum-Bound and maximum-Bound where
|
|
325
349
|
Value Range has at most one minimum-Bound,
|
326
350
|
Value Range has at most one maximum-Bound;
|
327
351
|
|
328
|
-
|
352
|
+
Allowed Range is where
|
353
|
+
Value Constraint allows Value Range;
|
354
|
+
|
355
|
+
Domain Object Type is a kind of Object Type;
|
356
|
+
|
357
|
+
Entity Type is a kind of Domain Object Type;
|
358
|
+
Entity Type nests at most one Fact Type,
|
359
|
+
Fact Type is nested as at most one Entity Type;
|
360
|
+
|
361
|
+
Type Inheritance is a kind of Fact Type identified by Subtype and Supertype where
|
362
|
+
Entity Type (as Subtype) is subtype of super-Entity Type (as Supertype) [acyclic, intransitive],
|
363
|
+
Supertype is supertype of Subtype;
|
364
|
+
Assimilation applies to Type Inheritance,
|
365
|
+
Type Inheritance uses at most one Assimilation;
|
366
|
+
Type Inheritance provides identification;
|
367
|
+
|
368
|
+
Value Type is a kind of Domain Object Type;
|
369
|
+
Value is of one Value Type,
|
370
|
+
Value Type has Value;
|
329
371
|
Value Type has at most one Length,
|
330
372
|
Length is of Value Type;
|
331
373
|
Value Type has at most one Scale,
|
332
374
|
Scale is of Value Type;
|
375
|
+
Value Type is auto-assigned at at most one Transaction Timing;
|
333
376
|
Value Type is of at most one Unit;
|
334
377
|
Value Type has at most one Value Constraint,
|
335
378
|
Value Constraint constrains at most one Value Type;
|
336
|
-
Value Type has at most one auto-- assigned Transaction Timing;
|
337
379
|
Value Type is subtype of at most one super-Value Type (as Supertype) [acyclic, transitive],
|
338
380
|
Supertype is supertype of Value Type;
|
339
381
|
|
340
|
-
Allowed Range is where
|
341
|
-
Value Constraint allows at least one Value Range;
|
342
|
-
|
343
|
-
Entity Type is a kind of Object Type;
|
344
|
-
Entity Type nests at most one Fact Type,
|
345
|
-
Fact Type is nested as at most one Entity Type;
|
346
|
-
Entity Type is implied by objectification;
|
347
|
-
|
348
382
|
Facet is where
|
349
383
|
Value Type has facet called Name,
|
350
384
|
Name is a facet of Value Type;
|
385
|
+
Facet requires value of one facet-Value Type;
|
351
386
|
|
352
|
-
Facet
|
353
|
-
Value Type
|
354
|
-
|
387
|
+
Facet Restriction is where
|
388
|
+
Value Type applies Facet,
|
389
|
+
Facet applies to Value Type;
|
390
|
+
Facet Restriction has one Value;
|
355
391
|
|
356
392
|
Implicit Boolean Value Type is a kind of Value Type;
|
357
393
|
|
358
|
-
Type Inheritance is a kind of Fact Type identified by Subtype and Supertype where
|
359
|
-
Entity Type (as Subtype) is subtype of super-Entity Type (as Supertype) [acyclic, intransitive],
|
360
|
-
Supertype is supertype of Subtype;
|
361
|
-
Assimilation applies to Type Inheritance,
|
362
|
-
Type Inheritance uses at most one Assimilation;
|
363
|
-
Type Inheritance provides identification;
|
364
|
-
|
365
394
|
/*
|
366
395
|
* Constraints:
|
367
396
|
*/
|
@@ -374,13 +403,13 @@ for each Concept exactly one of these holds:
|
|
374
403
|
Concept is a Constraint,
|
375
404
|
Concept is a Population,
|
376
405
|
Concept is an Unit,
|
377
|
-
Concept is a
|
406
|
+
Concept is a Query,
|
378
407
|
Concept is a Context Note;
|
379
408
|
for each Constraint exactly one of these holds:
|
380
409
|
Constraint is a Presence Constraint,
|
381
410
|
Constraint is a Set Constraint,
|
382
411
|
Constraint is a Ring Constraint;
|
383
|
-
either Object Type is
|
412
|
+
either Domain Object Type is a Value Type or Domain Object Type is an Entity Type but not both;
|
384
413
|
for each Role Sequence exactly one of these holds:
|
385
414
|
Role Sequence is for Reading,
|
386
415
|
Presence Constraint covers Role Sequence,
|
@@ -392,44 +421,45 @@ either Set Constraint is a Set Comparison Constraint or Set Constraint is a Subs
|
|
392
421
|
either Unit uses coefficient from Ephemera URL or Unit has Coefficient but not both;
|
393
422
|
either Unit is fundamental or Unit is derived from base-Unit but not both;
|
394
423
|
either Value Constraint Shape is for Object Type Shape or Value Constraint Shape is for Role Display but not both;
|
424
|
+
either Value Constraint allows Value Range or Value Constraint requires matching Regular Expression but not both;
|
395
425
|
either Value Constraint constrains Value Type or Value Constraint applies to Role but not both;
|
396
426
|
for each Instance at most one of these holds:
|
397
427
|
Instance has Value,
|
398
428
|
Instance objectifies Fact;
|
399
|
-
for each
|
400
|
-
|
401
|
-
|
402
|
-
for each
|
403
|
-
|
404
|
-
|
405
|
-
Join Node is for Object Type that plays Role
|
406
|
-
if and only if
|
407
|
-
Join Node includes Role;
|
429
|
+
for each Play at most one of these holds:
|
430
|
+
Step (1) has input-Play,
|
431
|
+
Play is incidentally involved in Step;
|
432
|
+
for each Play at most one of these holds:
|
433
|
+
Step (1) has output-Play,
|
434
|
+
Play is incidentally involved in Step;
|
408
435
|
Role Value is of Instance that is of Object Type
|
409
436
|
if and only if
|
410
437
|
Role Value is of Role that is played by Object Type;
|
411
438
|
Role Value fulfils Fact that is of Fact Type
|
412
439
|
if and only if
|
413
440
|
Role Value is of Role that belongs to Fact Type;
|
414
|
-
|
415
|
-
|
441
|
+
Variable is for Object Type that plays Role
|
442
|
+
if and only if
|
443
|
+
Variable is restricted by Role;
|
416
444
|
Presence Constraint is preferred identifier
|
417
445
|
only if Presence Constraint has max Frequency;
|
446
|
+
Step involves incidental Play
|
447
|
+
only if Step has output Play;
|
418
448
|
Value Type has Scale
|
419
449
|
only if Value Type has Length;
|
420
450
|
either Agreement was reached by Agent or Agreement was on Date;
|
421
|
-
each combination Diagram, Position occurs at most one time in
|
422
|
-
Shape is in Diagram,
|
423
|
-
Shape is at Position;
|
424
451
|
each combination Entity Type(1), Type Inheritance occurs at most one time in
|
425
452
|
Entity Type(1) is subtype of super Entity Type(2),
|
426
453
|
Type Inheritance provides identification;
|
454
|
+
each combination ORM Diagram, Location occurs at most one time in
|
455
|
+
Shape is in ORM Diagram,
|
456
|
+
Shape is at Location;
|
427
457
|
each Presence Constraint occurs at least one time in
|
428
458
|
Presence Constraint has min Frequency(2),
|
429
459
|
Presence Constraint has max Frequency(1),
|
430
460
|
Presence Constraint is mandatory;
|
431
461
|
each Role Ref occurs at most one time in
|
432
|
-
|
462
|
+
Play projects Role Ref;
|
433
463
|
each Role Sequence occurs at least one time in
|
434
464
|
Role Sequence in Ordinal position includes Role;
|
435
465
|
each Set Comparison Constraint occurs at least 2 times in
|