According to the SQL3 Standard, a data type "is a set of representable values". SQL supports three sorts of data types: predefined data types, constructed types, and user-defined types. The predefined data types are named by the following key words: CHARACTER, CHARACTER VARYING, CHARACTER LARGE OBJECT, BINARY LARGE OBJECT, BIT, BIT VARYING, NUMERIC, DECIMAL, INTEGER, SMALLINT, FLOAT, REAL, DOUBLE PRECISION, BOOLEAN, DATA, TIME, TIMESTAMP, and INTERVAL. These data types are numerous, very complex, in general not bounded, and some are implementation dependent. In addition, a number of conversion rules between such types, and functions/operations on such types are defined.
It was, therefore, decided to establish, for use in AICM, specific predefined data types. (The intention to use the terms "format" or "data format" instead of "data type" was subsequently abandoned). However, it is recognised that, for each particular implementation of the AICM, these predefined data types will have to be mapped into the specific data types supported by the actual DBMS of the application.
A |B |C |D |E |F |G |H |I |J |K |L |M |N |O |P |Q |R |S |T |U |V |W |X |Y |Z
a |b |c |d |e |f |g |h |i |j |k |l |m |n |o |p |q |r |s |t |u |v |w |x |y |z
space| exclamation mark| double quote| number sign| dollar sign| percent| ampersand| quote| left paren| right paren| asterisk| plus sign| comma| minus sign| period| solidus| colon| semicolon| less than operator| equals operator| greater than operator| question mark| commercial at| left bracket| reverse solidus| right bracket| circumflex| underscore| vertical bar| left brace| right brace
Each domain defined in the entity-relationship model refers explicitly to a (predefined) data type which it may also further restrict. This sub-section describes the Predefined Data Types needed by AICM. The descriptions are given in English prose and pertinent examples are provided. The definitions of the predefined data types are made up of a name (in underlined upper case letters), a general description, where necessary a rationale, an enumeration of (general) rules; in addition, one or more examples are given to outline the precise use of the data types. Indices after the name of a Predefined Data Type are always positive whole numbers.
Description:
A string of n to m (0 < n <= m) "Simple Latin upper case letters".
Rule:
If n = m then the string is of fixed length, otherwise of variable length.
Examples:
ALPHA(3, 3): ‘ABC’
ALPHA(1, 3): ‘A’, ‘AB’, ‘ABC’.
Description:
A string of n to m (0 < n <= m)
"Simple Latin upper case letters" and/or
"digits" and/or
"AICM Special Characters".
Rules:
If n = m then the string is of fixed length, otherwise of variable length.
An "AICM Special Character" must not be followed by an "AICM Special Character".
Examples:
CHARACTER1(3, 3): ‘A+B’.
CHARACTER1(1, 3): ‘A’, ‘AB’, ‘ABC’, ‘X/Z’, 'R 9'.
Description:
A string of n to m (0 < n <= m) Unicode characters. Any Unicode character is allowed, excluding the surrogate blocks, FFFE, and FFFF: #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
Particular implementations of AICM might restrict the character set that is allowed by the "Character2" data type. For example, in the current EAD SDO implementation, the character set is restricted to ISO 8859-1.
Description:
A string of n to m (0 < n <= m)
"Simple Latin upper case letters" and/or
"digits" and/or
"Special Characters".
Rules:
If n = m then the string is of fixed length, otherwise of variable length.
Examples:
CHARACTER3(3, 3): ‘A+B’.
CHARACTER3(1, 50): "ORGANISATION DE L'AVIATION CIVILE"
Description:
A BLOB ("Binary Large Object") is a variable length sequence of octets. No maximum length can be defined within the framework of the AICM. Although all blocks of the ISO/IEC 10646-1 International Standard could be used as "character repertoire" for this data type, practical reason might warrant the use of only a subset thereof.
Description:
A string of "digits" (plus, optionally, a period) representing either an unsigned integer number (p = 0) or an unsigned decimal number with a minimum of n and a maximum of m (0 < n <= m) significant (integer) figures and a decimal part with minimum 0 and maximum p (p >= 1) significant figures.
Rules:
The (optional) period is not counted by the indices n, m, p.
If n = m then the integer part is of fixed length, otherwise of variable length.
If p = 0 then there is only an integer part (and no period).
Examples:
NUMBER(3, 3, 0): ‘123’, ’100’, ‘056’, ‘007’, ‘000’.
NUMBER(1, 3, 0): ‘123’, ’100’, ‘056’, ‘007’, ‘000’, ‘03’, ‘9’, ‘0’, ‘00’.
NUMBER(3, 3, 2): ‘123’, ’100.04’, ‘056.56’, ‘007.2’.
NUMBER(1, 3, 2): ‘123.44’, ’100’, ‘056.03’, ‘007.99’, ‘000.12’, ‘03.17’, ‘9.2’, ‘0.86’, ‘00.00’.
Description:
A string of an optional plus sign or a minus sign and "digits" (plus, optionally, a period) representing either a signed integer number (p = 0) or a signed decimal number with a minimum of n and a maximum of m (0 < n <= m) significant (integer) figures and a decimal part with minimum 0 and maximum p (p >= 1) significant figures.
Rules:
Neither the (optional) sign nor the (optional) period is counted by the indices n, m, p.
If n = m then the integer part is of fixed length, otherwise of variable length.
If p = 0 then there is only an optional sign and an integer part (and no period).
If all digits (in both the integer and the decimal part) are ‘0’, the sign must be either ‘+’ or missing.
Examples:
ZNUMBER(3, 3, 0): ‘+123’, ’-100’, ‘056’, ‘-007’, ‘+000’.
ZNUMBER(1, 3, 0): ‘-123’, ’+100’, ‘-056’, ‘7’, ‘0’, ‘-3’, ‘9’, ‘0’, ‘0’.
ZNUMBER(3, 3, 2): ‘123’, ’-100.04’, ‘56.56’, ‘007.2’.
ZNUMBER(1, 3, 2): ‘-123.44’, ’100’, ‘+056.03’, ‘007.99’, ‘-000.12’, ‘03.17’, ‘-9.2’, ‘-0.86’, ‘00.00’.
Description:
An angular measure in full degrees (and, optionally decimals of degrees) expressed as NUMBER(n,mn, p) with 0 <= p <= 4.
Rule:
The angle value must be in the range '0’ ... ‘360’.
Examples:
DEGREES1(1,3,4): ‘123’, ’100’, ‘56’, ‘007’, ‘0’, ‘123.0’, ’100.2345’, ‘56.9’, ‘007.5’, ‘000.0’, ‘123.03’, ’100.20’, ‘056.66’, ‘007.07’, ‘000.01’.
Description:
An angular measure in degrees (and, optionally decimals of degrees) expressed as ZNUMBER( n, m, p) with 0 <= p <= 4.
Rules:
The integer part must be in the range ‘0’ ... ‘180’.
The plus sign or no sign stands for east (E), the minus sign for west (W).
If the integer part of a given DEGREES2 is ‘180’ then there must either be no decimal part or such a part must be made up of zeroes only and the sign must be ‘+’ or missing.
Examples:
DEGREES2(1,3,4): ‘-123’, ’+100’, ‘56’, ‘-007’, ‘+00’, ‘123.0’, ’-100.2345’ ‘-56.9’, ‘+7.5’, ‘000.0’, ‘-123.03’, ’100.20’, ‘056.66’, ‘007.07’, ‘-0.01’.
Description:
A date according to the Gregorian Calendar. The following forms are currently used in AICM:
[DATE(1,0,0)] 'YYYY'
[DATE(1,1,0)] 'YYYY-MM'
[DATE(0,1,1)] either 'DD-MM' or one of the following special values 'SDLST' / 'EDLST'
Rules:
The different components are separated by a minus sign (in its meaning of a hyphen);
YYYY takes its values from the set {0001, ..., 9998}, these values stand for the legal years 1 to 9998 AD (the need for years BC was not recognized);
MM takes its values from the set {01, ....., 12}, these values stand for the legal months within a year;
DD takes its values from the set {01, ....., 31}, these values stand for the legal days within a month (thereby obeying the known rules of the maximum number of days in a given month);
Examples:
DATE(1, 0, 0): ‘1975’, ’1999’.
DATE(1, 1, 0): ‘1984-12’, ’2001-11’.
DATE(0, 1, 1): '28-02', '31-08', 'SDLST' (meaning 'start of daylight saving time/start of summer time'), 'EDLST' (meaning 'end of daylight saving time/end of summer time').
Description:
An absolute time of the day in the forms HH:MM:SS [TIME(1,1,1)] or HH:MM [TIME(1,1,0)], whereby HH represents the "hour", MM the "minute", and SS the "second" component. The indices take the values 1 or 0, thereby indicating the presence (1) or absence of the aforementioned components (0).
Rules:
The different components are separated by a colon.
HH takes its values from the set {00, ..., 24}.
MM takes its values from the set {00, ....., 59}.
SS takes its values from the set {00, ....., 59}.
If HH = 24 then both MM and SS (if present) must be 00.
Examples:
TIME(1, 1, 1): ‘00:00:00’, ’03:59:59’, ‘22:23:00’, ‘24:00:00‘.
TIME(1, 1, 0): ‘00:00’, ‘00:45’, ‘15:25’ ‘19:00’, ‘24:00’.
Description:
A combination of DATE and TIME in the forms YYYY-MM-DD HH:MM:SS or YYYY-MM-DD HH:MM. The index "s" takes the values 1 or 0, thereby indicating the presence (1) or absence (0) of the seconds (SS) component.
Rules:
The different components of the date part are separated by a minus sign (in its meaning of a hyphen), the components of the time part by a colon and the two parts by a space.
YYYY-MM-DD and HH:MM:SS take their values as defined under DATE and TIME, respectively.
If the date part is made up as ‘0000-00-00’ then the time part must be ‘00:00:00’ or ‘00:00’, respectively. This stands for an unknown date/time in the past or indicates "with immediate effect".
If the date part is made up as ‘9999-99-99’ then the time part must be ‘24:00:00’ or ‘24:00’, respectively. This stands for an unknown date/time in the future or indicates "until further notice".
Examples:
DATETIME(1): ‘0000-00-00 00:00:00’, ’1998-08-03 15:24:59’, ‘9999-99-99 24:00:00‘.
DATETIME(0): ‘0000-00-00 00:00’, ’1998-08-03 15:24’, ‘9999-99-99 24:00‘.
Description:
A string of "digits" (plus, optionally, a period) followed by one of the "Simple Latin upper case letters" N or S, in the forms DDMMSS.ss...X, DDMMSSX, DDMM.mm...X, DDMMX, and DD.dd...X. The X stands for either N (= North) or S (= South), DD represents whole degrees, MM whole minutes, and SS whole seconds. The period indicates that there are decimal fractions present; whether these are fractions of seconds, minutes, or degrees can easily be deduced from the position of the period. The number of digits representing the fractions of seconds is 1<= s... <= 4; the relevant number for fractions of minutes and degrees is 1 <= d.../m... <= 8.
Rules:
Leading zeroes shall be inserted for degrees (DD) less than 10, and zeroes shall be embedded in proper positions when minutes or seconds are less than 10.
The DD part must be in the range ‘00’ ... ‘90’.
The MM and SS parts must be in the range ‘00’ ... ‘59’.
If the DD part of a given latitude is ‘90’ then all following parts must be made up of zeroes.
For the equator, X may take either ‘N’ or ‘S’.
Examples:
DDMMSS.ssX: ‘000000.00N’, ‘131415.5S’, ’455959.9988S’, ‘900000.00N’.
DDMMSSX: ‘000000S’, ’261356N’, ‘900000S’.
DDMM.mm...X : ‘0000.0000S’, ’1313.12345678S’, ‘1234.9S’, ‘9000.000S’.
DDMMX: ‘0000N’, ’1313S’, ‘1234N’, ‘9000S’.
DD.dd...X : ‘00.00000000N’, ’13.12345678S’, ‘34.9N’, ‘90.000S’.
Description:
A string of "digits" (plus, optionally, a period) followed by one of the "Simple Latin upper case letters" E or W, in the forms DDDMMSS.ssY, DDDMMSSY, DDDMM.mm...Y, DDDMMY, and DDD.dd...Y . The Y stands for either E (= East) or W (= West), DDD represents whole degrees, MM whole minutes, and SS whole seconds. The period indicates that there are decimal fractions present; whether these are fractions of seconds, minutes, or degrees can easily be deduced from the position of the period. The number of digits representing the fractions of seconds is 1 = s... <= 4; the relevant number for fractions of minutes and degrees is 1 <= d.../m... <= 8.
Rules:
Leading zeroes shall be inserted for degrees (DDD) less than 100, and zeroes shall be embedded in proper positions when minutes or seconds are less than 10
The DD part must be in the range ‘000’ ... ‘180’.
The MM and SS parts must be in the range ‘00’ ... ‘59’.
If the DDD part of a given longitude is ‘180’ then all following parts must be made up of zeroes; Y can be either E or W.
If all parts are made up of zeroes, Y can be either E or W.
Examples:
DDDMMSS.ssY: ‘0000000.00E’, ‘0010101.1E’, ’1455959.9967W’, ‘1800000.00W’.
DDDMMSSY: ‘0000000W’, ’1261356E’, ‘1800000E’.
DDDMM.mm...Y : ‘00000.0000W’, ’01313.12345678E’, ‘11234.9E’, ‘18000.000W’.
DDDMMY: ‘00000E’, ’01313W’, ‘11234E’, ‘18000W’.
DDD.dd...Y : ‘000.00000000W’, ’113.12345678E’, ‘134.9W’, ‘180.000W’.
Description:
A string of n (n in [2, 6, 8])
A |B |C| D| E| F of "Simple Latin upper case letters" and/or "digits"
to contain a CRCV in hexadecimal format.
Rules:
If n = 2 then the CRCV level of integrity is "low" (8 bit).
If n = 6 then the CRCV level of integrity is "medium" (24 bit).
If n = 8 then the CRCV level of integrity is "high" (32 bit).
Examples:
CRCV(2): ‘6C’.
CRCV(6): ‘D28EB4’.
CRCV(8): ‘7AF3CB18’.