activefacts 0.8.10 → 0.8.12
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.
- data/Rakefile +3 -2
- data/bin/afgen +25 -23
- data/bin/cql +9 -8
- data/css/orm2.css +23 -3
- data/examples/CQL/CompanyDirectorEmployee.cql +1 -1
- data/examples/CQL/Diplomacy.cql +3 -3
- data/examples/CQL/Insurance.cql +27 -21
- data/examples/CQL/Metamodel.cql +12 -8
- data/examples/CQL/MetamodelNext.cql +172 -149
- data/examples/CQL/ServiceDirector.cql +17 -17
- data/examples/CQL/Supervision.cql +3 -5
- data/examples/CQL/WaiterTips.cql +1 -1
- data/examples/CQL/unit.cql +1 -1
- data/index.html +0 -0
- data/lib/activefacts/cql/FactTypes.treetop +41 -8
- data/lib/activefacts/cql/Language/English.treetop +10 -0
- data/lib/activefacts/cql/ObjectTypes.treetop +3 -1
- data/lib/activefacts/cql/Terms.treetop +34 -53
- data/lib/activefacts/cql/compiler.rb +1 -1
- data/lib/activefacts/cql/compiler/clause.rb +21 -8
- data/lib/activefacts/cql/compiler/constraint.rb +3 -1
- data/lib/activefacts/cql/compiler/entity_type.rb +1 -1
- data/lib/activefacts/cql/compiler/fact_type.rb +9 -3
- data/lib/activefacts/cql/compiler/join.rb +3 -0
- data/lib/activefacts/cql/compiler/value_type.rb +9 -4
- data/lib/activefacts/cql/parser.rb +11 -3
- data/lib/activefacts/generate/oo.rb +3 -3
- data/lib/activefacts/generate/ordered.rb +0 -4
- data/lib/activefacts/input/orm.rb +305 -250
- data/lib/activefacts/persistence/tables.rb +6 -0
- data/lib/activefacts/support.rb +18 -0
- data/lib/activefacts/version.rb +1 -1
- data/lib/activefacts/vocabulary/extensions.rb +59 -20
- data/lib/activefacts/vocabulary/metamodel.rb +23 -13
- data/lib/activefacts/vocabulary/verbaliser.rb +5 -3
- data/spec/absorption_spec.rb +3 -2
- data/spec/cql/comparison_spec.rb +1 -3
- data/spec/cql/context_spec.rb +1 -1
- data/spec/cql/entity_type_spec.rb +2 -2
- data/spec/cql/expressions_spec.rb +2 -4
- data/spec/cql/fact_type_matching_spec.rb +55 -3
- data/spec/cql/parser/fact_types_spec.rb +3 -0
- data/spec/cql/role_matching_spec.rb +8 -7
- data/spec/cql/samples_spec.rb +10 -2
- data/spec/cql_dm_spec.rb +2 -1
- data/spec/helpers/array_matcher.rb +18 -35
- data/spec/helpers/diff_matcher.rb +34 -13
- data/spec/helpers/file_matcher.rb +27 -43
- data/spec/helpers/string_matcher.rb +23 -33
- data/spec/norma_cql_spec.rb +1 -0
- data/spec/norma_tables_spec.rb +1 -2
- metadata +95 -102
data/Rakefile
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
%w[rubygems hoe rake rake/clean fileutils newgem thread rubigen].each { |f|
|
2
2
|
require f
|
3
3
|
}
|
4
|
+
Hoe.plugin :gemspec
|
4
5
|
|
5
6
|
require 'rspec'
|
6
7
|
require 'rspec/core/rake_task'
|
@@ -21,13 +22,13 @@ formal logic, producing a formal language that reads like plain
|
|
21
22
|
English. ActiveFacts converts semantic models from CQL to relational
|
22
23
|
and object models in SQL, Ruby and other languages.
|
23
24
|
}
|
24
|
-
p.url = "http://dataconstellation.com/ActiveFacts/"
|
25
|
+
# p.url = "http://dataconstellation.com/ActiveFacts/"
|
25
26
|
p.developer('Clifford Heath', 'cjh@dataconstellation.org')
|
26
27
|
p.changes = p.paragraphs_of("History.txt", 0..1).join("\n\n")
|
27
28
|
p.post_install_message = 'For more information on ActiveFacts, see http://dataconstellation.com/ActiveFacts'
|
28
29
|
p.rubyforge_name = "cjheath@rubyforge.org"
|
29
30
|
p.extra_deps = [
|
30
|
-
['activefacts-api','>= 0.8.
|
31
|
+
['activefacts-api','>= 0.8.12'],
|
31
32
|
['treetop','>= 1.4.1'],
|
32
33
|
['rake','>= 0.8.7'],
|
33
34
|
]
|
data/bin/afgen
CHANGED
@@ -8,20 +8,10 @@ $:.unshift File.dirname(File.expand_path(__FILE__))+"/../lib"
|
|
8
8
|
|
9
9
|
require 'rubygems'
|
10
10
|
|
11
|
-
# Load the ruby debugger before everything else, if requested
|
12
|
-
if d = ENV['DEBUG'] and d.split(/,/).include?('debug')
|
13
|
-
begin
|
14
|
-
require 'ruby-debug'
|
15
|
-
Debugger.start(:post_mortem => true) # Stop when an exception is thrown, but before it's rescued
|
16
|
-
rescue LoadError
|
17
|
-
# Ok, no debugger, tough luck.
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
11
|
require 'activefacts'
|
22
12
|
require 'activefacts/vocabulary'
|
23
13
|
|
24
|
-
arg = ARGV.shift
|
14
|
+
arg = ARGV.shift || "--help"
|
25
15
|
|
26
16
|
# Load the required generator, or the default "text" generator:
|
27
17
|
generator = "text"
|
@@ -33,29 +23,41 @@ if arg =~ /^--([^=]*)(?:=(.*))?/
|
|
33
23
|
end
|
34
24
|
|
35
25
|
output_handler = "activefacts/generate/#{generator.downcase}"
|
36
|
-
|
26
|
+
begin
|
27
|
+
require output_handler
|
28
|
+
rescue LoadError
|
29
|
+
$stderr.puts "Could not find output generator #{generator}. Try --help"
|
30
|
+
exit 1
|
31
|
+
end
|
37
32
|
output_class = generator.upcase.gsub(%r{[/\\]+},'::')
|
38
33
|
output_klass = eval("ActiveFacts::Generate::#{output_class}")
|
39
34
|
raise "Expected #{output_handler} to define #{output_class}" unless output_klass
|
40
35
|
|
41
36
|
# Load the file type input method
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
37
|
+
if arg
|
38
|
+
arg, *options = *arg.split(/=/)
|
39
|
+
extension = arg.sub(/\A.*\./,'').downcase
|
40
|
+
input_handler = "activefacts/input/#{extension}"
|
41
|
+
require input_handler
|
42
|
+
|
43
|
+
input_class = extension.upcase
|
44
|
+
input_klass = ActiveFacts::Input.const_get(input_class.to_sym)
|
45
|
+
raise "Expected #{input_handler} to define #{input_class}" unless input_klass
|
46
|
+
end
|
50
47
|
|
51
48
|
# Read the input file:
|
52
49
|
begin
|
53
|
-
|
50
|
+
if input_klass
|
51
|
+
vocabulary = input_klass.readfile(arg, *options)
|
52
|
+
else
|
53
|
+
vocabulary = true
|
54
|
+
end
|
54
55
|
|
55
56
|
# Generate the output:
|
56
57
|
output_klass.new(vocabulary, *generator_options).generate if vocabulary
|
57
58
|
rescue => e
|
58
|
-
puts "#{e.message}"
|
59
|
+
$stderr.puts "#{e.message}"
|
59
60
|
# puts "\t#{e.backtrace*"\n\t"}"
|
60
|
-
puts "\t#{e.backtrace*"\n\t"}" if debug :exception
|
61
|
+
$stderr.puts "\t#{e.backtrace*"\n\t"}" if debug :exception
|
62
|
+
exit 1
|
61
63
|
end
|
data/bin/cql
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
#! /usr/bin/env ruby
|
2
|
+
# encoding: UTF-8
|
2
3
|
#
|
3
4
|
# ActiveFacts: Interactive CQL command-line. Incomplete; only parses CQL and shows the parse trees
|
4
5
|
#
|
@@ -7,14 +8,14 @@
|
|
7
8
|
require 'readline'
|
8
9
|
|
9
10
|
# Load the ruby debugger before everything else, if requested
|
10
|
-
if d = ENV['DEBUG'] and d.split(/,/).include?('debug')
|
11
|
-
begin
|
12
|
-
require 'ruby-debug'
|
13
|
-
Debugger.start(:post_mortem => true) # Stop when an exception is thrown, but before it's rescued
|
14
|
-
rescue LoadError
|
15
|
-
# Ok, no debugger, tough luck.
|
16
|
-
end
|
17
|
-
end
|
11
|
+
#if d = ENV['DEBUG'] and d.split(/,/).include?('debug')
|
12
|
+
# begin
|
13
|
+
# require 'ruby-debug'
|
14
|
+
# Debugger.start(:post_mortem => true) # Stop when an exception is thrown, but before it's rescued
|
15
|
+
# rescue LoadError
|
16
|
+
# # Ok, no debugger, tough luck.
|
17
|
+
# end
|
18
|
+
#end
|
18
19
|
|
19
20
|
require 'activefacts'
|
20
21
|
require 'activefacts/cql/compiler'
|
data/css/orm2.css
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
ul {
|
2
|
+
margin: 0px 0px 0px 2em;
|
3
|
+
-webkit-margin-before: 0px;
|
4
|
+
-webkit-margin-after: 0px;
|
5
|
+
-webkit-padding-start: 0px;
|
6
|
+
padding: 0px;
|
7
|
+
}
|
8
|
+
|
1
9
|
pre {
|
2
10
|
background-color: #000;
|
3
11
|
padding: 5px;
|
@@ -7,18 +15,30 @@ pre {
|
|
7
15
|
border-color: #BBB;
|
8
16
|
}
|
9
17
|
|
18
|
+
span {
|
19
|
+
font-family: "Frutiger", sans-serif;
|
20
|
+
}
|
21
|
+
|
10
22
|
.keyword {
|
11
23
|
Xcolor: #00F;
|
12
24
|
color: #66F;
|
13
25
|
}
|
14
|
-
.concept {
|
26
|
+
.term, .concept {
|
15
27
|
Xcolor: #808;
|
16
28
|
color: #E0E;
|
17
29
|
}
|
18
|
-
.
|
30
|
+
.vocabulary, .object_type {
|
31
|
+
Xcolor: #808;
|
32
|
+
color: #E0E;
|
33
|
+
}
|
34
|
+
.linking, .copula {
|
19
35
|
Xcolor: #060;
|
20
36
|
color: #0C0;
|
21
37
|
}
|
22
|
-
.value {
|
38
|
+
.literal, .value {
|
23
39
|
color: #FF990E;
|
24
40
|
}
|
41
|
+
|
42
|
+
dd {
|
43
|
+
margin-bottom: 0.5em;
|
44
|
+
}
|
data/examples/CQL/Diplomacy.cql
CHANGED
@@ -38,10 +38,10 @@ Representation is where
|
|
38
38
|
for each Diplomat, Country at most one of these holds:
|
39
39
|
Diplomat serves in Country,
|
40
40
|
Diplomat represents Country;
|
41
|
-
Diplomat is an Ambassador that is from Country(2) to Country(1)
|
42
|
-
only if Diplomat represents Country(2);
|
43
41
|
Diplomat is an Ambassador that is from Country(1) to Country(2)
|
44
|
-
only if Diplomat
|
42
|
+
only if Diplomat represents Country(1);
|
43
|
+
Diplomat is an Ambassador that is from Country(2) to Country(1)
|
44
|
+
only if Diplomat serves in Country(1);
|
45
45
|
Diplomat serves in Country
|
46
46
|
only if Diplomat speaks Language that is spoken in Country;
|
47
47
|
each Ambassador occurs at least one time in
|
data/examples/CQL/Insurance.cql
CHANGED
@@ -18,10 +18,10 @@ Cover Type Code is written as Char;
|
|
18
18
|
Cover Type Name is written as String;
|
19
19
|
Date is written as Date;
|
20
20
|
Date Time is written as Date Time;
|
21
|
-
Demerit Kind Name is written as String;
|
22
21
|
Description is written as String(1024);
|
23
22
|
Email is written as String;
|
24
23
|
Engine Number is written as String;
|
24
|
+
Hospital Name is written as String;
|
25
25
|
ITC Claimed is written as Decimal(18,2) restricted to {0.0..100.0};
|
26
26
|
Intoxication is written as String;
|
27
27
|
Liability Code is written as Char(1) restricted to {'D', 'L', 'R', 'U'};
|
@@ -41,7 +41,6 @@ Policy Serial is written as Unsigned Integer(32) restricted to {1..99999};
|
|
41
41
|
Policy Wording Text is written as String;
|
42
42
|
Postcode is written as String;
|
43
43
|
Price is written as Decimal(18,2);
|
44
|
-
Prod Description is written as String(80);
|
45
44
|
Product Code is written as Unsigned Integer(8) restricted to {1..99};
|
46
45
|
Reason is written as String;
|
47
46
|
Registration Nr is written as Char(8);
|
@@ -50,8 +49,10 @@ State Code is written as Unsigned Integer(8) restricted to {0..9};
|
|
50
49
|
State Name is written as String(256);
|
51
50
|
Street is written as String(256);
|
52
51
|
Test Result is written as String;
|
52
|
+
Text is written as String;
|
53
53
|
Time is written as Time;
|
54
54
|
Title is written as String;
|
55
|
+
Underwriting Question ID is written as Auto Counter;
|
55
56
|
VIN is written as Unsigned Integer(32);
|
56
57
|
Year Nr is written as Signed Integer(32);
|
57
58
|
|
@@ -70,7 +71,7 @@ Cover Type is identified by its Code;
|
|
70
71
|
Cover Type has one Cover Type Name,
|
71
72
|
Cover Type Name is of at most one Cover Type;
|
72
73
|
|
73
|
-
|
74
|
+
Hospital is identified by its Name;
|
74
75
|
|
75
76
|
Incident is identified by Claim where
|
76
77
|
Claim concerns at most one Incident,
|
@@ -123,8 +124,8 @@ Policy Wording is identified by its Text;
|
|
123
124
|
Product is identified by its Code;
|
124
125
|
Alias is of at most one Product,
|
125
126
|
Product has at most one Alias;
|
126
|
-
|
127
|
-
Product has at most one
|
127
|
+
Description is of at most one Product,
|
128
|
+
Product has at most one Description;
|
128
129
|
|
129
130
|
Registration is identified by its Nr;
|
130
131
|
|
@@ -132,6 +133,10 @@ State is independent identified by its Code;
|
|
132
133
|
State Name is of at most one State,
|
133
134
|
State has at most one State Name;
|
134
135
|
|
136
|
+
Underwriting Question is identified by its ID;
|
137
|
+
Text is of at most one Underwriting Question,
|
138
|
+
Underwriting Question has one Text;
|
139
|
+
|
135
140
|
Vehicle is a kind of Asset identified by VIN where
|
136
141
|
Vehicle has one VIN,
|
137
142
|
VIN is of at most one Vehicle;
|
@@ -177,8 +182,6 @@ Witness lives at at most one Address;
|
|
177
182
|
|
178
183
|
Authorised Rep is a kind of Party;
|
179
184
|
|
180
|
-
Client is a kind of Party;
|
181
|
-
|
182
185
|
Company is a kind of Party;
|
183
186
|
Company has one contact-Person,
|
184
187
|
Person is contact for Company;
|
@@ -205,17 +208,14 @@ Cover Wording is where
|
|
205
208
|
Dealer is a kind of Party;
|
206
209
|
Vehicle was sold by at most one Dealer;
|
207
210
|
|
208
|
-
Driver is a kind of Person;
|
209
|
-
|
210
211
|
Driving is where
|
211
|
-
Vehicle Incident
|
212
|
-
Driver drove covered vehicle in at least one Vehicle Incident;
|
212
|
+
Vehicle Incident occurred while being driven;
|
213
213
|
Driving followed at most one Intoxication;
|
214
|
-
Driving resulted in at most one blood-Test Result;
|
215
214
|
Driving resulted in at most one breath-Test Result;
|
216
|
-
Driving (as driver_hospitalised) resulted in driver taken to at most one hospital-Name;
|
217
215
|
Driving was without owners consent for at most one nonconsent-Reason;
|
218
216
|
Driving was unlicenced for at most one unlicensed-Reason;
|
217
|
+
Person was Driving,
|
218
|
+
Driving was by one Person;
|
219
219
|
|
220
220
|
Driving Charge is where
|
221
221
|
Driving resulted in one Charge;
|
@@ -224,13 +224,19 @@ Driving Charge is a warning;
|
|
224
224
|
Finance Institution is a kind of Company;
|
225
225
|
Vehicle is subject to finance with at most one Finance Institution;
|
226
226
|
|
227
|
+
Hospitalization is where
|
228
|
+
Driving resulted in driver taken to one Hospital;
|
229
|
+
Hospitalization resulted in at most one blood-Test Result;
|
230
|
+
|
231
|
+
Insured is a kind of Party;
|
232
|
+
|
227
233
|
Insurer is a kind of Company;
|
228
234
|
|
229
235
|
Investigator is a kind of Contractor;
|
230
236
|
|
231
|
-
License is identified by
|
232
|
-
|
233
|
-
License is held by one
|
237
|
+
License is identified by Person where
|
238
|
+
Person holds at most one License,
|
239
|
+
License is held by one Person;
|
234
240
|
License has one License Number,
|
235
241
|
License Number is of at most one License;
|
236
242
|
License is of one License Type,
|
@@ -255,8 +261,8 @@ ITC Claimed is for Policy,
|
|
255
261
|
Policy has at most one ITC Claimed;
|
256
262
|
Policy was sold by at most one Authorised Rep,
|
257
263
|
Authorised Rep sold Policy;
|
258
|
-
Policy belongs to one
|
259
|
-
|
264
|
+
Policy belongs to one Insured,
|
265
|
+
Insured has Policy;
|
260
266
|
|
261
267
|
Property Damage is identified by Incident and Address where
|
262
268
|
Incident caused Property Damage,
|
@@ -277,11 +283,11 @@ Third Party vehicle is of at most one Vehicle Type;
|
|
277
283
|
Third Party vehicle is of at most one model-Year;
|
278
284
|
Third Party drove at most one vehicle-Registration;
|
279
285
|
|
280
|
-
Underwriting Demerit is identified by Vehicle Incident and
|
286
|
+
Underwriting Demerit is identified by Vehicle Incident and Underwriting Question where
|
281
287
|
Vehicle Incident occurred despite Underwriting Demerit,
|
282
288
|
Underwriting Demerit preceded one Vehicle Incident,
|
283
|
-
Underwriting Demerit has one
|
284
|
-
|
289
|
+
Underwriting Demerit has one Underwriting Question,
|
290
|
+
Underwriting Question is of Underwriting Demerit;
|
285
291
|
Underwriting Demerit occurred at most one occurrence-Count times;
|
286
292
|
|
287
293
|
Assessor is a kind of Contractor;
|
data/examples/CQL/Metamodel.cql
CHANGED
@@ -154,11 +154,12 @@ Subset Constraint covers one superset-Role Sequence;
|
|
154
154
|
Unit is identified by its Id;
|
155
155
|
Ephemera URL provides Unit coefficient,
|
156
156
|
Unit uses coefficient from at most one Ephemera URL;
|
157
|
-
Name is of Unit,
|
157
|
+
Name is of at most one Unit,
|
158
158
|
Unit is called one Name;
|
159
159
|
Unit has at most one Coefficient;
|
160
160
|
Unit has at most one Offset;
|
161
|
-
Unit has at most one plural-Name
|
161
|
+
Unit has at most one plural-Name,
|
162
|
+
plural-Name id of at most one Unit;
|
162
163
|
Unit is fundamental;
|
163
164
|
|
164
165
|
Value is identified by Literal and Value is a string and Unit where
|
@@ -333,7 +334,7 @@ Value Type has at most one Scale,
|
|
333
334
|
Value Type is of at most one Unit;
|
334
335
|
Value Type has at most one Value Constraint,
|
335
336
|
Value Constraint constrains at most one Value Type;
|
336
|
-
Value Type has at most one auto
|
337
|
+
Value Type has at most one auto-- assigned Transaction Timing;
|
337
338
|
Value Type is subtype of at most one super-Value Type (as Supertype) [acyclic],
|
338
339
|
Supertype is supertype of Value Type;
|
339
340
|
|
@@ -343,6 +344,7 @@ Allowed Range is where
|
|
343
344
|
Entity Type is a kind of Object Type;
|
344
345
|
Entity Type nests at most one Fact Type,
|
345
346
|
Fact Type is nested as at most one Entity Type;
|
347
|
+
Entity Type is implied by objectification;
|
346
348
|
|
347
349
|
Facet is where
|
348
350
|
Value Type has facet called Name,
|
@@ -376,8 +378,8 @@ either Object Type is an Entity Type or Object Type is a Value Type but not both
|
|
376
378
|
for each Role Sequence exactly one of these holds:
|
377
379
|
Role Sequence is for Reading,
|
378
380
|
Presence Constraint covers Role Sequence,
|
379
|
-
Subset Constraint(1) covers subset-Role Sequence,
|
380
|
-
Subset Constraint(2) covers superset-Role Sequence,
|
381
|
+
Subset Constraint (1) covers subset-Role Sequence,
|
382
|
+
Subset Constraint (2) covers superset-Role Sequence,
|
381
383
|
Role Sequence is Ordinal in Set Comparison Constraint;
|
382
384
|
either Set Comparison Constraint is a Set Exclusion Constraint or Set Comparison Constraint is a Set Equality Constraint but not both;
|
383
385
|
either Set Constraint is a Set Comparison Constraint or Set Constraint is a Subset Constraint but not both;
|
@@ -389,10 +391,10 @@ for each Instance at most one of these holds:
|
|
389
391
|
Instance has Value,
|
390
392
|
Instance objectifies Fact;
|
391
393
|
for each Join Role at most one of these holds:
|
392
|
-
Join Step(1) has input-Join Role,
|
394
|
+
Join Step (1) has input-Join Role,
|
393
395
|
Join Role is incidentally involved in Join Step;
|
394
396
|
for each Join Role at most one of these holds:
|
395
|
-
Join Step(1) has output-Join Role,
|
397
|
+
Join Step (1) has output-Join Role,
|
396
398
|
Join Role is incidentally involved in Join Step;
|
397
399
|
Join Node is for Object Type that plays Role
|
398
400
|
if and only if
|
@@ -402,7 +404,9 @@ Role Value is of Instance that is of Object Type
|
|
402
404
|
Role Value is of Role that is played by Object Type;
|
403
405
|
Role Value fulfils Fact that is of Fact Type
|
404
406
|
if and only if
|
405
|
-
Role Value is of Role (
|
407
|
+
Role Value is of Role (in which Fact Type has Ordinal role);
|
408
|
+
Entity Type is implied by objectification
|
409
|
+
only if Entity Type nests Fact Type;
|
406
410
|
Presence Constraint is preferred identifier
|
407
411
|
only if Presence Constraint has max Frequency;
|
408
412
|
Value Type has Scale
|
@@ -5,7 +5,7 @@ vocabulary Metamodel;
|
|
5
5
|
*/
|
6
6
|
Adjective is written as String(64);
|
7
7
|
Agent Name is written as String;
|
8
|
-
Assimilation is written as String restricted to {'partitioned', 'separate'};
|
8
|
+
Assimilation is written as String restricted to {'absorbed', 'partitioned', 'separate'};
|
9
9
|
Context Note Kind is written as String restricted to {'as_opposed_to', 'because', 'so_that', 'to_avoid'};
|
10
10
|
Date is written as Date;
|
11
11
|
Denominator is written as Unsigned Integer(32);
|
@@ -22,10 +22,11 @@ Literal is written as String;
|
|
22
22
|
Name is written as String(64);
|
23
23
|
Numerator is written as Decimal;
|
24
24
|
Offset is written as Decimal;
|
25
|
-
|
25
|
+
Position is written as Unsigned Integer(16);
|
26
26
|
Pronoun is written as String(20) restricted to {'feminine', 'masculine', 'neuter', 'personal'};
|
27
27
|
Ring Type is written as String;
|
28
28
|
Rotation Setting is written as String restricted to {'left', 'right'};
|
29
|
+
SID is written as GUID;
|
29
30
|
Scale is written as Unsigned Integer(32);
|
30
31
|
Subscript is written as Unsigned Integer(16);
|
31
32
|
Text is written as String(256);
|
@@ -39,22 +40,28 @@ Y is written as Signed Integer(32);
|
|
39
40
|
*/
|
40
41
|
Agent is identified by its Name;
|
41
42
|
|
43
|
+
Alternatives is identified by GUID where
|
44
|
+
Alternatives has one GUID,
|
45
|
+
GUID is of at most one Alternatives;
|
46
|
+
Alternatives are exclusive;
|
47
|
+
|
42
48
|
Coefficient is identified by Numerator and Denominator and Coefficient is precise where
|
43
49
|
Coefficient has one Numerator,
|
44
50
|
Coefficient has one Denominator,
|
45
51
|
Coefficient is precise;
|
46
52
|
|
47
|
-
Concept is identified by
|
48
|
-
Concept has one
|
49
|
-
|
53
|
+
Concept is identified by SID where
|
54
|
+
Concept has one SID,
|
55
|
+
SID is of at most one Concept;
|
56
|
+
Concept has at most one model-Name;
|
50
57
|
|
51
|
-
Constraint is a kind of Concept;
|
58
|
+
Constraint is a kind of Concept [separate];
|
52
59
|
Name is of Constraint,
|
53
60
|
Constraint is called at most one Name;
|
54
61
|
|
55
|
-
Context Note is identified by
|
56
|
-
Context Note has one
|
57
|
-
|
62
|
+
Context Note is identified by SID where
|
63
|
+
Context Note has one SID,
|
64
|
+
SID is of at most one Context Note;
|
58
65
|
Concept has Context Note,
|
59
66
|
Context Note applies to at most one Concept;
|
60
67
|
Context Note has one Context Note Kind,
|
@@ -69,69 +76,54 @@ Enforcement notifies at most one Agent;
|
|
69
76
|
Enforcement has one Enforcement Code,
|
70
77
|
Enforcement Code is of Enforcement;
|
71
78
|
|
72
|
-
Fact is
|
73
|
-
Fact has one GUID,
|
74
|
-
GUID is of at most one Fact;
|
79
|
+
Fact is a kind of Concept [separate];
|
75
80
|
|
76
|
-
Fact Type is a kind of Concept;
|
81
|
+
Fact Type is a kind of Concept [separate];
|
77
82
|
Fact is of one Fact Type;
|
78
83
|
|
79
84
|
Implicit Fact Type is a kind of Fact Type;
|
80
85
|
|
81
|
-
Instance is
|
82
|
-
Instance has one GUID,
|
83
|
-
GUID is of at most one Instance;
|
86
|
+
Instance is a kind of Concept;
|
84
87
|
Instance objectifies at most one Fact,
|
85
88
|
Fact is objectified as at most one Instance;
|
86
89
|
|
87
|
-
Join is identified by GUID where
|
88
|
-
Join has one GUID,
|
89
|
-
GUID is of at most one Join;
|
90
|
-
|
91
|
-
Join Node is identified by Join and Ordinal where
|
92
|
-
Join includes Join Node,
|
93
|
-
Join Node is in one Join,
|
94
|
-
Join Node has one Ordinal position;
|
95
|
-
Join Node has at most one Subscript,
|
96
|
-
Subscript is of Join Node;
|
97
|
-
Join Node has at most one role-Name,
|
98
|
-
Name is of Join Node;
|
99
|
-
|
100
90
|
Language is identified by its Code;
|
101
91
|
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
Object Type is referenced in Join Node;
|
106
|
-
Object Type uses at most one Pronoun;
|
107
|
-
Object Type is independent;
|
92
|
+
Location is identified by X and Y where
|
93
|
+
Location is at one X,
|
94
|
+
Location is at one Y;
|
108
95
|
|
109
|
-
|
110
|
-
|
111
|
-
|
96
|
+
ObjectType is a kind of Concept;
|
97
|
+
Instance is of one ObjectType;
|
98
|
+
ObjectType is independent;
|
112
99
|
|
113
|
-
Presence Constraint is a kind of Constraint;
|
100
|
+
Presence Constraint is a kind of Constraint [partitioned];
|
114
101
|
Presence Constraint has at most one max-Frequency restricted to {1..};
|
115
102
|
Presence Constraint has at most one min-Frequency restricted to {2..};
|
116
103
|
Presence Constraint is mandatory;
|
117
104
|
Presence Constraint is preferred identifier;
|
118
105
|
|
119
|
-
|
106
|
+
Query is independent identified by GUID where
|
107
|
+
Query has one GUID,
|
108
|
+
GUID is of at most one Query;
|
109
|
+
|
110
|
+
Reading is identified by Fact Type and Position where
|
120
111
|
Fact Type has Reading,
|
121
112
|
Reading is for one Fact Type,
|
122
|
-
Reading is in one
|
123
|
-
|
124
|
-
Reading has one Text;
|
113
|
+
Reading is in one Position,
|
114
|
+
Position is of Reading;
|
115
|
+
Reading has one leading-Text;
|
125
116
|
|
126
|
-
Ring Constraint is a kind of Constraint;
|
117
|
+
Ring Constraint is a kind of Constraint [partitioned];
|
127
118
|
Ring Constraint is of one Ring Type;
|
128
119
|
|
129
|
-
Role is a kind of Concept where
|
130
|
-
Fact Type
|
120
|
+
Role is a kind of Concept identified by Fact Type and Position [separate] where
|
121
|
+
Fact Type includes role of at least one ObjectType,
|
122
|
+
ObjectType plays role in Fact Type,
|
123
|
+
Role is in at most one Position,
|
124
|
+
Position is occupied by at least one Role;
|
131
125
|
Implicit Fact Type is implied by one Role (as Implying Role),
|
132
126
|
Implying Role implies at most one Implicit Fact Type;
|
133
|
-
Object Type plays Role,
|
134
|
-
Role is played by one Object Type;
|
135
127
|
Ring Constraint has at most one other-Role,
|
136
128
|
other-Role is of Ring Constraint;
|
137
129
|
Role is of Ring Constraint; // Avoid ambiguity; this is a new fact type
|
@@ -142,23 +134,21 @@ Role Sequence is identified by GUID where
|
|
142
134
|
Role Sequence has one GUID,
|
143
135
|
GUID is of at most one Role Sequence;
|
144
136
|
Presence Constraint covers one Role Sequence;
|
145
|
-
Reading is in one Role Sequence,
|
146
|
-
Role Sequence is for Reading;
|
147
137
|
Role Sequence has unused dependency to force table in norma;
|
148
138
|
|
149
139
|
Role Value is identified by Instance and Fact where
|
150
140
|
Instance plays Role Value,
|
151
141
|
Role Value is of one Instance,
|
152
142
|
Role Value fulfils one Fact,
|
153
|
-
Fact includes
|
143
|
+
Fact includes Role Value;
|
154
144
|
Role Value is of one Role;
|
155
145
|
|
156
|
-
Set Constraint is a kind of Constraint;
|
146
|
+
Set Constraint is a kind of Constraint [partitioned];
|
157
147
|
|
158
|
-
Shape is identified by
|
159
|
-
Shape has one
|
160
|
-
|
161
|
-
Shape is at at most one
|
148
|
+
Shape is identified by SID where
|
149
|
+
Shape has one SID,
|
150
|
+
SID is of at most one Shape;
|
151
|
+
Shape is at at most one Location;
|
162
152
|
Shape is expanded;
|
163
153
|
|
164
154
|
Subset Constraint is a kind of Set Constraint;
|
@@ -187,27 +177,30 @@ Value is identified by Literal and Value is a string and Unit where
|
|
187
177
|
Unit is of Value;
|
188
178
|
Instance has at most one Value,
|
189
179
|
Value is of Instance;
|
190
|
-
Join Node has at most one Value;
|
191
180
|
|
192
|
-
Value Constraint is a kind of Constraint;
|
181
|
+
Value Constraint is a kind of Constraint [partitioned];
|
193
182
|
Role has at most one role-Value Constraint,
|
194
183
|
Value Constraint applies to at most one Role;
|
195
184
|
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
185
|
+
Variable is identified by Query and Position where
|
186
|
+
Query includes Variable,
|
187
|
+
Variable is in one Query,
|
188
|
+
Variable occupies one Position,
|
189
|
+
Position is occupied by Variable;
|
190
|
+
Variable references one ObjectType,
|
191
|
+
ObjectType is referenced in Variable;
|
192
|
+
Variable projects at most one Role;
|
193
|
+
Variable has at most one Subscript,
|
194
|
+
Subscript is of Variable;
|
195
|
+
Variable is bound to at most one Value;
|
196
|
+
Variable has at most one role-Name,
|
197
|
+
Name is of Variable;
|
198
|
+
|
199
|
+
Vocabulary is identified by Topic and Language where
|
200
|
+
Topic is described in Vocabulary,
|
201
|
+
Vocabulary describes one Topic,
|
202
|
+
Language provides Vocabulary,
|
203
|
+
Vocabulary uses at most one Language;
|
211
204
|
Reading is for at most one Vocabulary,
|
212
205
|
Vocabulary contains Reading;
|
213
206
|
Vocabulary contains Constraint,
|
@@ -238,6 +231,8 @@ Context Agreed By is where
|
|
238
231
|
Agreement was reached by Agent,
|
239
232
|
Agent agreed on Agreement;
|
240
233
|
|
234
|
+
Data Type is a kind of ObjectType;
|
235
|
+
|
241
236
|
Derivation is where
|
242
237
|
Unit (as Derived Unit) is derived from base-Unit (as Base Unit) [acyclic, intransitive];
|
243
238
|
Derivation has at most one Exponent;
|
@@ -250,18 +245,13 @@ Diagram is identified by Vocabulary and Name where
|
|
250
245
|
Shape is in one Diagram,
|
251
246
|
Diagram includes Shape;
|
252
247
|
|
253
|
-
|
248
|
+
Domain Object Type is a kind of ObjectType;
|
249
|
+
Domain Object Type uses at most one Pronoun;
|
250
|
+
|
251
|
+
Entity Type is a kind of Domain Object Type;
|
254
252
|
Entity Type objectifies at most one Fact Type,
|
255
253
|
Fact Type is objectified as at most one Entity Type;
|
256
|
-
|
257
|
-
Facet is where
|
258
|
-
Value Type has facet called Name,
|
259
|
-
Name is a facet of Value Type;
|
260
|
-
Facet has values of at most one Value Type;
|
261
|
-
|
262
|
-
Facet Value is where
|
263
|
-
Value Type defines Facet as having one Value,
|
264
|
-
Value for Facet applies to Value Type;
|
254
|
+
Entity Type results from implicit objectification;
|
265
255
|
|
266
256
|
Fact Type Shape is a kind of Shape;
|
267
257
|
Fact Type Shape has at most one Display Role Names Setting;
|
@@ -269,28 +259,12 @@ Fact Type Shape is for one Fact Type,
|
|
269
259
|
Fact Type has Fact Type Shape;
|
270
260
|
Fact Type Shape has at most one Rotation Setting;
|
271
261
|
|
272
|
-
Implicit Boolean Value Type is a kind of Value Type;
|
273
|
-
|
274
|
-
Join Role is independent where
|
275
|
-
Join Node includes at least one Role,
|
276
|
-
Role connects to Join Node;
|
277
|
-
|
278
|
-
Join Step is identified by input-Join Role and output-Join Role where
|
279
|
-
Join Step has one input-Join Role,
|
280
|
-
Join Step has one output-Join Role;
|
281
|
-
Join Step traverses one Fact Type,
|
282
|
-
Fact Type directs Join Step;
|
283
|
-
Join Step involves incidental-Join Role,
|
284
|
-
Join Role is incidentally involved in at most one Join Step;
|
285
|
-
is anti Join Step;
|
286
|
-
Join Step is outer;
|
287
|
-
|
288
262
|
Model Note Shape is a kind of Shape;
|
289
263
|
Model Note Shape is for one Context Note;
|
290
264
|
|
291
265
|
Object Type Shape is a kind of Shape;
|
292
|
-
Object Type Shape is for one Object Type,
|
293
|
-
Object Type has Object Type Shape;
|
266
|
+
Object Type Shape is for one Domain Object Type,
|
267
|
+
Domain Object Type has Object Type Shape;
|
294
268
|
Object Type Shape has expanded reference mode;
|
295
269
|
|
296
270
|
Objectified Fact Type Name Shape is a kind of Shape identified by Fact Type Shape where
|
@@ -309,6 +283,12 @@ Population includes Instance,
|
|
309
283
|
Population includes Role Value,
|
310
284
|
Role Value belongs to one Population;
|
311
285
|
|
286
|
+
ReadingRole is where
|
287
|
+
Role has Position in Reading;
|
288
|
+
ReadingRole has at most one following-Text;
|
289
|
+
ReadingRole has at most one leading-Adjective;
|
290
|
+
ReadingRole has at most one trailing-Adjective;
|
291
|
+
|
312
292
|
Reading Shape is a kind of Shape identified by Fact Type Shape where
|
313
293
|
Fact Type Shape has at most one Reading Shape,
|
314
294
|
Reading Shape is for one Fact Type Shape;
|
@@ -319,39 +299,52 @@ Ring Constraint Shape is a kind of Constraint Shape;
|
|
319
299
|
Ring Constraint Shape is attached to one Fact Type;
|
320
300
|
|
321
301
|
Role Display is where
|
322
|
-
Fact Type Shape displays Role in
|
323
|
-
Fact Type Shape
|
302
|
+
Fact Type Shape displays Role in Position,
|
303
|
+
Fact Type Shape fills Position with one Role;
|
324
304
|
|
325
305
|
Role Name Shape is a kind of Shape;
|
326
306
|
Role Name Shape is for one Role Display,
|
327
307
|
Role Display has at most one Role Name Shape;
|
328
308
|
|
329
309
|
Role Ref is where
|
330
|
-
Role Sequence
|
331
|
-
Role
|
332
|
-
Role
|
333
|
-
Role has Ordinal place in Role Sequence;
|
334
|
-
Join Role projects at most one Role Ref;
|
335
|
-
Role Ref has at most one leading-Adjective;
|
336
|
-
Role Ref has at most one trailing-Adjective;
|
310
|
+
Role Sequence fills Position with one Role,
|
311
|
+
Role Sequence places Role in one Position,
|
312
|
+
Role occupies Position in Role Sequence;
|
337
313
|
|
338
314
|
Set Comparison Constraint is a kind of Set Constraint;
|
339
315
|
|
340
316
|
Set Comparison Roles is where
|
341
|
-
Set Comparison Constraint
|
342
|
-
Role Sequence
|
343
|
-
in
|
344
|
-
Set Comparison Constraint
|
317
|
+
Set Comparison Constraint fills Position with one Role Sequence,
|
318
|
+
Role Sequence occupies Position in Set Comparison Constraint,
|
319
|
+
Position in Set Comparison Constraint is occupied by Role Sequence,
|
320
|
+
Set Comparison Constraint places Role Sequence in one Position;
|
345
321
|
|
346
322
|
Set Equality Constraint is a kind of Set Comparison Constraint;
|
347
323
|
|
348
324
|
Set Exclusion Constraint is a kind of Set Comparison Constraint;
|
349
325
|
Set Exclusion Constraint is mandatory;
|
350
326
|
|
327
|
+
Span is independent where
|
328
|
+
Variable allows players of at least one Role,
|
329
|
+
Role populates Variable;
|
330
|
+
|
331
|
+
Step is identified by input-Span and output-Span where
|
332
|
+
Step has one input-Span,
|
333
|
+
Step has one output-Span;
|
334
|
+
Alternatives include at least one Step,
|
335
|
+
Step has at most one Alternatives;
|
336
|
+
Step traverses one Fact Type,
|
337
|
+
Fact Type directs Step;
|
338
|
+
Step involves incidental-Span,
|
339
|
+
Span is incidentally involved in at most one Step;
|
340
|
+
Step is disallowed;
|
341
|
+
Step is optional;
|
342
|
+
|
351
343
|
Term is where
|
352
|
-
Vocabulary uses Name
|
353
|
-
|
354
|
-
|
344
|
+
Vocabulary uses Name,
|
345
|
+
Name applies in Vocabulary;
|
346
|
+
Term applies to at most one Domain Object Type;
|
347
|
+
Term applies to at most one Instance;
|
355
348
|
Term (as Role Name) is name of Role,
|
356
349
|
Role has at most one Role Name;
|
357
350
|
Term is preferred;
|
@@ -375,28 +368,54 @@ Value Range is identified by minimum-Bound and maximum-Bound where
|
|
375
368
|
Value Range has at most one minimum-Bound,
|
376
369
|
Value Range has at most one maximum-Bound;
|
377
370
|
|
371
|
+
Value Type is a kind of Domain Object Type;
|
372
|
+
Value Type maps to at most one Data Type;
|
373
|
+
Value Type has at most one Length,
|
374
|
+
Length is of Value Type;
|
375
|
+
Value Type has at most one Scale,
|
376
|
+
Scale is of Value Type;
|
377
|
+
Value Type is of at most one Unit;
|
378
|
+
Value Type has at most one Value Constraint,
|
379
|
+
Value Constraint constrains at most one Value Type;
|
380
|
+
Value Type is at most one auto-- assigned at Transaction Timing;
|
381
|
+
Value Type is subtype of at most one super-Value Type (as Supertype) [acyclic, intransitive],
|
382
|
+
Supertype is supertype of Value Type;
|
383
|
+
|
378
384
|
Allowed Range is where
|
379
385
|
Value Constraint allows at least one Value Range;
|
380
386
|
|
387
|
+
Facet is where
|
388
|
+
Value Type has facet called Name,
|
389
|
+
Name is a facet of Value Type;
|
390
|
+
Facet has values of at most one facet-Value Type;
|
391
|
+
|
392
|
+
Facet Value is where
|
393
|
+
Value Type defines Facet as having one Value,
|
394
|
+
Value for Facet applies to Value Type;
|
395
|
+
|
396
|
+
Implicit Boolean Value Type is a kind of Value Type;
|
397
|
+
|
381
398
|
/*
|
382
399
|
* Constraints:
|
383
400
|
*/
|
384
401
|
for each Concept exactly one of these holds:
|
385
|
-
Concept is an Object Type,
|
386
402
|
Concept is a Fact Type,
|
387
403
|
Concept is a Constraint,
|
388
|
-
Concept is a Role
|
404
|
+
Concept is a Role,
|
405
|
+
Concept is a Fact,
|
406
|
+
Concept is an Instance,
|
407
|
+
Concept is an ObjectType;
|
389
408
|
for each Constraint exactly one of these holds:
|
390
409
|
Constraint is a Presence Constraint,
|
391
410
|
Constraint is a Set Constraint,
|
392
|
-
Constraint is a Ring Constraint
|
393
|
-
|
411
|
+
Constraint is a Ring Constraint,
|
412
|
+
Constraint is a Value Constraint;
|
413
|
+
either Domain Object Type is an Entity Type or Domain Object Type is a Value Type but not both;
|
394
414
|
for each Role Sequence exactly one of these holds:
|
395
|
-
Role Sequence is for Reading,
|
396
415
|
Presence Constraint covers Role Sequence,
|
397
|
-
Subset Constraint(1) covers subset-Role Sequence,
|
398
|
-
Subset Constraint(2) covers superset-Role Sequence,
|
399
|
-
Role Sequence
|
416
|
+
Subset Constraint (1) covers subset-Role Sequence,
|
417
|
+
Subset Constraint (2) covers superset-Role Sequence,
|
418
|
+
Role Sequence occupies Position in Set Comparison Constraint;
|
400
419
|
either Set Comparison Constraint is a Set Exclusion Constraint or Set Comparison Constraint is a Set Equality Constraint but not both;
|
401
420
|
either Set Constraint is a Set Comparison Constraint or Set Constraint is a Subset Constraint but not both;
|
402
421
|
either Unit uses coefficient from Ephemera URL or Unit has Coefficient but not both;
|
@@ -406,29 +425,25 @@ either Value Constraint constrains Value Type or Value Constraint applies to Rol
|
|
406
425
|
for each Instance at most one of these holds:
|
407
426
|
Instance has Value,
|
408
427
|
Instance objectifies Fact;
|
409
|
-
for each
|
410
|
-
|
411
|
-
|
412
|
-
for each
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
if
|
420
|
-
Role Value is of Role that is played by Object Type;
|
421
|
-
Role Value fulfils Fact that is of Fact Type
|
422
|
-
if and only if
|
423
|
-
Role Value is of Role (where Fact Type has Ordinal role);
|
428
|
+
for each Span at most one of these holds:
|
429
|
+
Step (1) has input-Span,
|
430
|
+
Span is incidentally involved in Step;
|
431
|
+
for each Span at most one of these holds:
|
432
|
+
Step (1) has output-Span,
|
433
|
+
Span is incidentally involved in Step;
|
434
|
+
for each Term at most one of these holds:
|
435
|
+
Term applies to Domain Object Type,
|
436
|
+
Term is name of Role;
|
437
|
+
Entity Type results from implicit objectification
|
438
|
+
only if Entity Type objectifies Fact Type;
|
424
439
|
Presence Constraint is preferred identifier
|
425
440
|
only if Presence Constraint has max Frequency;
|
426
441
|
Value Type has Scale
|
427
442
|
only if Value Type has Length;
|
428
443
|
either Agreement was reached by Agent or Agreement was on Date;
|
429
|
-
each combination Diagram,
|
444
|
+
each combination Diagram, Location occurs at most one time in
|
430
445
|
Shape is in Diagram,
|
431
|
-
Shape is at
|
446
|
+
Shape is at Location;
|
432
447
|
each combination Entity Type(1), Type Inheritance occurs at most one time in
|
433
448
|
Entity Type(1) is subtype of super Entity Type(2),
|
434
449
|
Type Inheritance provides identification;
|
@@ -436,19 +451,27 @@ each Presence Constraint occurs at least one time in
|
|
436
451
|
Presence Constraint has min Frequency(2),
|
437
452
|
Presence Constraint has max Frequency(1),
|
438
453
|
Presence Constraint is mandatory;
|
439
|
-
each
|
440
|
-
|
454
|
+
each combination Reading, Position occurs one time in
|
455
|
+
Role has Position in Reading;
|
456
|
+
each combination Reading, Role occurs one time in
|
457
|
+
Role has Position in Reading;
|
441
458
|
each Role Sequence occurs at least one time in
|
442
|
-
Role Sequence
|
459
|
+
Role Sequence fills Position with Role;
|
460
|
+
each Role occurs at most one time in
|
461
|
+
Variable projects Role;
|
443
462
|
each Set Comparison Constraint occurs at least 2 times in
|
444
|
-
Set Comparison Constraint
|
463
|
+
Set Comparison Constraint fills Position with Role Sequence;
|
445
464
|
either Value Range has minimum Bound(2) or Value Range has maximum Bound(1);
|
465
|
+
either Value Type(1) maps to Data Type or Value Type(1) is subtype of super Value Type(2);
|
446
466
|
each combination Vocabulary, Name occurs at most one time in
|
447
467
|
Constraint belongs to Vocabulary,
|
448
468
|
Constraint is called Name;
|
449
469
|
each combination Vocabulary, Name occurs at most one time in
|
450
470
|
Unit is in Vocabulary,
|
451
471
|
Unit is called Name;
|
452
|
-
|
453
|
-
|
454
|
-
|
472
|
+
/*
|
473
|
+
each combination Vocabulary, Term, Domain Object Type occurs at most one time in
|
474
|
+
Vocabulary uses Name,
|
475
|
+
Term is preferred,
|
476
|
+
Term applies to Domain Object Type;
|
477
|
+
*/
|