Source : ISO 10303-41
SCHEMA measure_schema;
REFERENCE FROM
basic_attribute_schema -- ISO 10303-41
(get_name_value,
name_attribute);
REFERENCE FROM
representation_schema -- ISO 10303-43
(representation_context);
REFERENCE FROM
support_resource_schema;
-- ISO 10303-41
TYPE amount_of_substance_measure =
REAL;
END_TYPE;
TYPE area_measure =
REAL;
END_TYPE;
TYPE celsius_temperature_measure =
REAL;
END_TYPE;
TYPE context_dependent_measure =
REAL;
END_TYPE;
TYPE count_measure =
NUMBER;
END_TYPE;
TYPE descriptive_measure =
STRING;
END_TYPE;
TYPE electric_current_measure =
REAL;
END_TYPE;
TYPE length_measure =
REAL;
END_TYPE;
TYPE luminous_intensity_measure =
REAL;
END_TYPE;
TYPE mass_measure =
REAL;
END_TYPE;
TYPE measure_value =
SELECT
(amount_of_substance_measure,
area_measure,
celsius_temperature_measure,
context_dependent_measure,
count_measure,
descriptive_measure,
electric_current_measure,
length_measure,
luminous_intensity_measure,
mass_measure,
numeric_measure,
parameter_value,
plane_angle_measure,
positive_length_measure,
positive_plane_angle_measure,
positive_ratio_measure,
ratio_measure,
solid_angle_measure,
thermodynamic_temperature_measure,
time_measure,
volume_measure);
END_TYPE;
TYPE numeric_measure =
NUMBER;
END_TYPE;
TYPE parameter_value =
REAL;
END_TYPE;
TYPE plane_angle_measure =
REAL;
END_TYPE;
TYPE positive_length_measure =
length_measure;
WHERE
WR1: SELF > 0.0;
END_TYPE;
TYPE positive_plane_angle_measure =
plane_angle_measure;
WHERE
WR1: SELF > 0.0;
END_TYPE;
TYPE positive_ratio_measure =
ratio_measure;
WHERE
WR1: SELF > 0.0;
END_TYPE;
TYPE ratio_measure =
REAL;
END_TYPE;
TYPE si_prefix =
ENUMERATION
OF
(exa,
peta,
tera,
giga,
mega,
kilo,
hecto,
deca,
deci,
centi,
milli,
micro,
nano,
pico,
femto,
atto);
END_TYPE;
TYPE si_unit_name =
ENUMERATION
OF
(metre,
gram,
second,
ampere,
kelvin,
mole,
candela,
radian,
steradian,
hertz,
newton,
pascal,
joule,
watt,
coulomb,
volt,
farad,
ohm,
siemens,
weber,
tesla,
henry,
degree_Celsius,
lumen,
lux,
becquerel,
gray,
sievert);
END_TYPE;
TYPE solid_angle_measure =
REAL;
END_TYPE;
TYPE thermodynamic_temperature_measure =
REAL;
END_TYPE;
TYPE time_measure =
REAL;
END_TYPE;
TYPE unit =
SELECT
(derived_unit,
named_unit);
END_TYPE;
TYPE volume_measure =
REAL;
END_TYPE;
ENTITY amount_of_substance_measure_with_unit
SUBTYPE OF (measure_with_unit);
WHERE
WR1: 'MEASURE_SCHEMA.AMOUNT_OF_SUBSTANCE_UNIT' IN TYPEOF (SELF\measure_with_unit.unit_component);
END_ENTITY;
ENTITY amount_of_substance_unit
SUBTYPE OF (named_unit);
WHERE
WR1: (SELF\named_unit.dimensions.length_exponent = 0.0) AND (SELF\named_unit.dimensions.mass_exponent = 0.0) AND (SELF\named_unit.dimensions.time_exponent
= 0.0) AND (SELF\named_unit.dimensions.electric_current_exponent = 0.0) AND (SELF\named_unit.dimensions.thermodynamic_temperature_exponent
= 0.0) AND (SELF\named_unit.dimensions.amount_of_substance_exponent = 1.0) AND (SELF\named_unit.dimensions.luminous_intensity_exponent
= 0.0);
END_ENTITY;
ENTITY area_measure_with_unit
SUBTYPE OF (measure_with_unit);
WHERE
WR1: 'MEASURE_SCHEMA.AREA_UNIT' IN TYPEOF (SELF\measure_with_unit.unit_component);
END_ENTITY;
ENTITY area_unit
SUBTYPE OF (named_unit);
WHERE
WR1: (SELF\named_unit.dimensions.length_exponent = 2.0) AND (SELF\named_unit.dimensions.mass_exponent = 0.0) AND (SELF\named_unit.dimensions.time_exponent
= 0.0) AND (SELF\named_unit.dimensions.electric_current_exponent = 0.0) AND (SELF\named_unit.dimensions.thermodynamic_temperature_exponent
= 0.0) AND (SELF\named_unit.dimensions.amount_of_substance_exponent = 0.0) AND (SELF\named_unit.dimensions.luminous_intensity_exponent
= 0.0);
END_ENTITY;
ENTITY celsius_temperature_measure_with_unit
SUBTYPE OF (measure_with_unit);
WHERE
WR1: 'MEASURE_SCHEMA.THERMODYNAMIC_TEMPERATURE_UNIT' IN TYPEOF (SELF\measure_with_unit.unit_component);
END_ENTITY;
ENTITY context_dependent_unit
SUBTYPE OF (named_unit);
name : label;
END_ENTITY;
ENTITY conversion_based_unit
SUBTYPE OF (named_unit);
name : label;
conversion_factor : measure_with_unit;
END_ENTITY;
ENTITY derived_unit;
elements : SET[1:?] OF derived_unit_element;
DERIVE
name : label := get_name_value (SELF);
WHERE
WR1: (SIZEOF (elements) > 1) OR ((SIZEOF (elements) = 1) AND (elements[1].exponent <> 1.0));
WR2: SIZEOF (USEDIN (SELF, 'BASIC_ATTRIBUTE_SCHEMA.' + 'NAME_ATTRIBUTE.NAMED_ITEM')) <= 1;
END_ENTITY;
ENTITY derived_unit_element;
unit : named_unit;
exponent : REAL;
END_ENTITY;
ENTITY dimensional_exponents;
length_exponent : REAL;
mass_exponent : REAL;
time_exponent : REAL;
electric_current_exponent : REAL;
thermodynamic_temperature_exponent : REAL;
amount_of_substance_exponent : REAL;
luminous_intensity_exponent : REAL;
END_ENTITY;
ENTITY electric_current_measure_with_unit
SUBTYPE OF (measure_with_unit);
WHERE
WR1: 'MEASURE_SCHEMA.ELECTRIC_CURRENT_UNIT' IN TYPEOF (SELF\measure_with_unit.unit_component);
END_ENTITY;
ENTITY electric_current_unit
SUBTYPE OF (named_unit);
WHERE
WR1: (SELF\named_unit.dimensions.length_exponent = 0.0) AND (SELF\named_unit.dimensions.mass_exponent = 0.0) AND (SELF\named_unit.dimensions.time_exponent
= 0.0) AND (SELF\named_unit.dimensions.electric_current_exponent = 1.0) AND (SELF\named_unit.dimensions.thermodynamic_temperature_exponent
= 0.0) AND (SELF\named_unit.dimensions.amount_of_substance_exponent = 0.0) AND (SELF\named_unit.dimensions.luminous_intensity_exponent
= 0.0);
END_ENTITY;
ENTITY global_unit_assigned_context
SUBTYPE OF (representation_context);
units : SET[1:?] OF unit;
END_ENTITY;
ENTITY length_measure_with_unit
SUBTYPE OF (measure_with_unit);
WHERE
WR1: 'MEASURE_SCHEMA.LENGTH_UNIT' IN TYPEOF (SELF\measure_with_unit.unit_component);
END_ENTITY;
ENTITY length_unit
SUBTYPE OF (named_unit);
WHERE
WR1: (SELF\named_unit.dimensions.length_exponent = 1.0) AND (SELF\named_unit.dimensions.mass_exponent = 0.0) AND (SELF\named_unit.dimensions.time_exponent
= 0.0) AND (SELF\named_unit.dimensions.electric_current_exponent = 0.0) AND (SELF\named_unit.dimensions.thermodynamic_temperature_exponent
= 0.0) AND (SELF\named_unit.dimensions.amount_of_substance_exponent = 0.0) AND (SELF\named_unit.dimensions.luminous_intensity_exponent
= 0.0);
END_ENTITY;
ENTITY luminous_intensity_measure_with_unit
SUBTYPE OF (measure_with_unit);
WHERE
WR1: 'MEASURE_SCHEMA.LUMINOUS_INTENSITY_UNIT' IN TYPEOF(SELF\measure_with_unit.unit_component);
END_ENTITY;
ENTITY luminous_intensity_unit
SUBTYPE OF (named_unit);
WHERE
WR1: (SELF\named_unit.dimensions.length_exponent = 0.0) AND (SELF\named_unit.dimensions.mass_exponent = 0.0) AND (SELF\named_unit.dimensions.time_exponent
= 0.0) AND (SELF\named_unit.dimensions.electric_current_exponent = 0.0) AND (SELF\named_unit.dimensions.thermodynamic_temperature_exponent
= 0.0) AND (SELF\named_unit.dimensions.amount_of_substance_exponent = 0.0) AND (SELF\named_unit.dimensions.luminous_intensity_exponent
= 1.0);
END_ENTITY;
ENTITY mass_measure_with_unit
SUBTYPE OF (measure_with_unit);
WHERE
WR1: 'MEASURE_SCHEMA.MASS_UNIT' IN TYPEOF (SELF\measure_with_unit.unit_component);
END_ENTITY;
ENTITY mass_unit
SUBTYPE OF (named_unit);
WHERE
WR1: (SELF\named_unit.dimensions.length_exponent = 0.0) AND (SELF\named_unit.dimensions.mass_exponent = 1.0) AND (SELF\named_unit.dimensions.time_exponent
= 0.0) AND (SELF\named_unit.dimensions.electric_current_exponent = 0.0) AND (SELF\named_unit.dimensions.thermodynamic_temperature_exponent
= 0.0) AND (SELF\named_unit.dimensions.amount_of_substance_exponent = 0.0) AND (SELF\named_unit.dimensions.luminous_intensity_exponent
= 0.0);
END_ENTITY;
ENTITY measure_with_unit
SUPERTYPE OF
(ONEOF (length_measure_with_unit,
mass_measure_with_unit,
time_measure_with_unit,
electric_current_measure_with_unit,
thermodynamic_temperature_measure_with_unit,
celsius_temperature_measure_with_unit,
amount_of_substance_measure_with_unit,
luminous_intensity_measure_with_unit,
plane_angle_measure_with_unit,
solid_angle_measure_with_unit,
area_measure_with_unit,
volume_measure_with_unit,
ratio_measure_with_unit));
value_component : measure_value;
unit_component : unit;
WHERE
WR1: valid_units (SELF);
END_ENTITY;
ENTITY named_unit
SUPERTYPE OF
(ONEOF (si_unit,
conversion_based_unit,
context_dependent_unit)
ANDOR ONEOF (length_unit,
mass_unit,
time_unit,
electric_current_unit,
thermodynamic_temperature_unit,
amount_of_substance_unit,
luminous_intensity_unit,
plane_angle_unit,
solid_angle_unit,
area_unit,
volume_unit,
ratio_unit));
dimensions : dimensional_exponents;
END_ENTITY;
ENTITY plane_angle_measure_with_unit
SUBTYPE OF (measure_with_unit);
WHERE
WR1: 'MEASURE_SCHEMA.PLANE_ANGLE_UNIT' IN TYPEOF (SELF\measure_with_unit.unit_component);
END_ENTITY;
ENTITY plane_angle_unit
SUBTYPE OF (named_unit);
WHERE
WR1: (SELF\named_unit.dimensions.length_exponent = 0.0) AND (SELF\named_unit.dimensions.mass_exponent = 0.0) AND (SELF\named_unit.dimensions.time_exponent
= 0.0) AND (SELF\named_unit.dimensions.electric_current_exponent = 0.0) AND (SELF\named_unit.dimensions.thermodynamic_temperature_exponent
= 0.0) AND (SELF\named_unit.dimensions.amount_of_substance_exponent = 0.0) AND (SELF\named_unit.dimensions.luminous_intensity_exponent
= 0.0);
END_ENTITY;
ENTITY ratio_measure_with_unit
SUBTYPE OF (measure_with_unit);
WHERE
WR1: 'MEASURE_SCHEMA.RATIO_UNIT' IN TYPEOF (SELF\measure_with_unit.unit_component);
END_ENTITY;
ENTITY ratio_unit
SUBTYPE OF (named_unit);
WHERE
WR1: (SELF\named_unit.dimensions.length_exponent = 0.0) AND (SELF\named_unit.dimensions.mass_exponent = 0.0) AND (SELF\named_unit.dimensions.time_exponent
= 0.0) AND (SELF\named_unit.dimensions.electric_current_exponent = 0.0) AND (SELF\named_unit.dimensions.thermodynamic_temperature_exponent
= 0.0) AND (SELF\named_unit.dimensions.amount_of_substance_exponent = 0.0) AND (SELF\named_unit.dimensions.luminous_intensity_exponent
= 0.0);
END_ENTITY;
ENTITY si_unit
SUBTYPE OF (named_unit);
prefix :
OPTIONAL
si_prefix;
name : si_unit_name;
DERIVE
SELF\named_unit.dimensions : dimensional_exponents := dimensions_for_si_unit (name);
END_ENTITY;
ENTITY solid_angle_measure_with_unit
SUBTYPE OF (measure_with_unit);
WHERE
WR1: 'MEASURE_SCHEMA.SOLID_ANGLE_UNIT' IN TYPEOF (SELF\measure_with_unit.unit_component);
END_ENTITY;
ENTITY solid_angle_unit
SUBTYPE OF (named_unit);
WHERE
WR1: (SELF\named_unit.dimensions.length_exponent = 0.0) AND (SELF\named_unit.dimensions.mass_exponent = 0.0) AND (SELF\named_unit.dimensions.time_exponent
= 0.0) AND (SELF\named_unit.dimensions.electric_current_exponent = 0.0) AND (SELF\named_unit.dimensions.thermodynamic_temperature_exponent
= 0.0) AND (SELF\named_unit.dimensions.amount_of_substance_exponent = 0.0) AND (SELF\named_unit.dimensions.luminous_intensity_exponent
= 0.0);
END_ENTITY;
ENTITY thermodynamic_temperature_measure_with_unit
SUBTYPE OF (measure_with_unit);
WHERE
WR1: 'MEASURE_SCHEMA.THERMODYNAMIC_TEMPERATURE_UNIT' IN TYPEOF (SELF\measure_with_unit.unit_component);
END_ENTITY;
ENTITY thermodynamic_temperature_unit
SUBTYPE OF (named_unit);
WHERE
WR1: (SELF\named_unit.dimensions.length_exponent = 0.0) AND (SELF\named_unit.dimensions.mass_exponent = 0.0) AND (SELF\named_unit.dimensions.time_exponent
= 0.0) AND (SELF\named_unit.dimensions.electric_current_exponent = 0.0) AND (SELF\named_unit.dimensions.thermodynamic_temperature_exponent
= 1.0) AND (SELF\named_unit.dimensions.amount_of_substance_exponent = 0.0) AND (SELF\named_unit.dimensions.luminous_intensity_exponent
= 0.0);
END_ENTITY;
ENTITY time_measure_with_unit
SUBTYPE OF (measure_with_unit);
WHERE
WR1: 'MEASURE_SCHEMA.TIME_UNIT' IN TYPEOF (SELF\measure_with_unit.unit_component);
END_ENTITY;
ENTITY time_unit
SUBTYPE OF (named_unit);
WHERE
WR1: (SELF\named_unit.dimensions.length_exponent = 0.0) AND (SELF\named_unit.dimensions.mass_exponent = 0.0) AND (SELF\named_unit.dimensions.time_exponent
= 1.0) AND (SELF\named_unit.dimensions.electric_current_exponent = 0.0) AND (SELF\named_unit.dimensions.thermodynamic_temperature_exponent
= 0.0) AND (SELF\named_unit.dimensions.amount_of_substance_exponent = 0.0) AND (SELF\named_unit.dimensions.luminous_intensity_exponent
= 0.0);
END_ENTITY;
ENTITY volume_measure_with_unit
SUBTYPE OF (measure_with_unit);
WHERE
WR1: 'MEASURE_SCHEMA.VOLUME_UNIT' IN TYPEOF (SELF\measure_with_unit.unit_component);
END_ENTITY;
ENTITY volume_unit
SUBTYPE OF (named_unit);
WHERE
WR1: (SELF\named_unit.dimensions.length_exponent = 3.000000) AND (SELF\named_unit.dimensions.mass_exponent = 0.000000) AND
(SELF\named_unit.dimensions.time_exponent = 0.000000) AND (SELF\named_unit.dimensions.electric_current_exponent = 0.000000)
AND (SELF\named_unit.dimensions.thermodynamic_temperature_exponent = 0.000000) AND (SELF\named_unit.dimensions.amount_of_substance_exponent
= 0.000000) AND (SELF\named_unit.dimensions.luminous_intensity_exponent = 0.000000);
END_ENTITY;
FUNCTION derive_dimensional_exponents
(x : unit) : dimensional_exponents;
LOCAL result : dimensional_exponents := dimensional_exponents(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0); END_LOCAL; IF 'MEASURE_SCHEMA.DERIVED_UNIT' IN TYPEOF(x) THEN REPEAT i := LOINDEX(x.elements) TO HIINDEX(x.elements); result.length_exponent := result.length_exponent + (x.elements[i].exponent * x.elements[i].unit.dimensions.length_exponent); result.mass_exponent := result.mass_exponent + (x.elements[i].exponent * x.elements[i].unit.dimensions.mass_exponent); result.time_exponent := result.time_exponent + (x.elements[i].exponent * x.elements[i].unit.dimensions.time_exponent); result.electric_current_exponent := result.electric_current_exponent + (x.elements[i].exponent * x.elements[i].unit.dimensions.electric_current_exponent); result.thermodynamic_temperature_exponent := result.thermodynamic_temperature_exponent + (x.elements[i].exponent * x.elements[i].unit.dimensions.thermodynamic_temperature_exponent); result.amount_of_substance_exponent := result.amount_of_substance_exponent + (x.elements[i].exponent * x.elements[i].unit.dimensions.amount_of_substance_exponent); result.luminous_intensity_exponent := result.luminous_intensity_exponent + (x.elements[i].exponent * x.elements[i].unit.dimensions.luminous_intensity_exponent); END_REPEAT; ELSE result := x.dimensions; END_IF; RETURN (result);
END_FUNCTION;
FUNCTION dimensions_for_si_unit
(n : si_unit_name) : dimensional_exponents;
CASE n OF metre : RETURN (dimensional_exponents (1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)); gram : RETURN (dimensional_exponents (0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0)); second : RETURN (dimensional_exponents (0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0)); ampere : RETURN (dimensional_exponents (0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0)); kelvin : RETURN (dimensional_exponents (0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0)); mole : RETURN (dimensional_exponents (0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0)); candela : RETURN (dimensional_exponents (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0)); radian : RETURN (dimensional_exponents (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)); steradian : RETURN (dimensional_exponents (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)); hertz : RETURN (dimensional_exponents (0.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0)); newton : RETURN (dimensional_exponents (1.0, 1.0, -2.0, 0.0, 0.0, 0.0, 0.0)); pascal : RETURN (dimensional_exponents (-1.0, 1.0, -2.0, 0.0, 0.0, 0.0, 0.0)); joule : RETURN (dimensional_exponents (2.0, 1.0, -2.0, 0.0, 0.0, 0.0, 0.0)); watt : RETURN (dimensional_exponents (2.0, 1.0, -3.0, 0.0, 0.0, 0.0, 0.0)); coulomb : RETURN (dimensional_exponents (0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0)); volt : RETURN (dimensional_exponents (2.0, 1.0, -3.0, -1.0, 0.0, 0.0, 0.0)); farad : RETURN (dimensional_exponents (-2.0, -1.0, 4.0, 1.0, 0.0, 0.0, 0.0)); ohm : RETURN (dimensional_exponents (2.0, 1.0, -3.0, -2.0, 0.0, 0.0, 0.0)); siemens : RETURN (dimensional_exponents (-2.0, -1.0, 3.0, 2.0, 0.0, 0.0, 0.0)); weber : RETURN (dimensional_exponents (2.0, 1.0, -2.0, -1.0, 0.0, 0.0, 0.0)); tesla : RETURN (dimensional_exponents (0.0, 1.0, -2.0, -1.0, 0.0, 0.0, 0.0)); henry : RETURN (dimensional_exponents (2.0, 1.0, -2.0, -2.0, 0.0, 0.0, 0.0)); degree_Celsius : RETURN (dimensional_exponents (0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0)); lumen : RETURN (dimensional_exponents (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0)); lux : RETURN (dimensional_exponents (-2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0)); becquerel : RETURN (dimensional_exponents (0.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0)); gray : RETURN (dimensional_exponents (2.0, 0.0, -2.0, 0.0, 0.0, 0.0, 0.0)); sievert : RETURN (dimensional_exponents (2.0, 0.0, -2.0, 0.0, 0.0, 0.0, 0.0)); OTHERWISE : RETURN (?); END_CASE;
END_FUNCTION;
FUNCTION valid_units
(m : measure_with_unit) : BOOLEAN;
IF 'MEASURE_SCHEMA.LENGTH_MEASURE' IN TYPEOF ( m.value_component ) THEN IF derive_dimensional_exponents ( m.unit_component ) <> dimensional_exponents ( 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ) THEN RETURN (FALSE); END_IF; END_IF; IF 'MEASURE_SCHEMA.MASS_MEASURE' IN TYPEOF ( m.value_component ) THEN IF derive_dimensional_exponents ( m.unit_component ) <> dimensional_exponents ( 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0 ) THEN RETURN (FALSE); END_IF; END_IF; IF 'MEASURE_SCHEMA.TIME_MEASURE' IN TYPEOF ( m.value_component ) THEN IF derive_dimensional_exponents ( m.unit_component ) <> dimensional_exponents ( 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0 ) THEN RETURN (FALSE); END_IF; END_IF; IF 'MEASURE_SCHEMA.ELECTRIC_CURRENT_MEASURE' IN TYPEOF ( m.value_component ) THEN IF derive_dimensional_exponents ( m.unit_component ) <> dimensional_exponents ( 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0 ) THEN RETURN (FALSE); END_IF; END_IF; IF 'MEASURE_SCHEMA.THERMODYNAMIC_TEMPERATURE_MEASURE' IN TYPEOF ( m.value_component ) THEN IF derive_dimensional_exponents ( m.unit_component ) <> dimensional_exponents ( 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0 ) THEN RETURN (FALSE); END_IF; END_IF; IF 'MEASURE_SCHEMA.CELSIUS_TEMPERATURE_MEASURE' IN TYPEOF ( m.value_component ) THEN IF derive_dimensional_exponents ( m.unit_component ) <> dimensional_exponents ( 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0 ) THEN RETURN (FALSE); END_IF; END_IF; IF 'MEASURE_SCHEMA.AMOUNT_OF_SUBSTANCE_MEASURE' IN TYPEOF ( m.value_component ) THEN IF derive_dimensional_exponents ( m.unit_component ) <> dimensional_exponents ( 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0 ) THEN RETURN (FALSE); END_IF; END_IF; IF 'MEASURE_SCHEMA.LUMINOUS_INTENSITY_MEASURE' IN TYPEOF ( m.value_component ) THEN IF derive_dimensional_exponents ( m.unit_component ) <> dimensional_exponents ( 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0 ) THEN RETURN (FALSE); END_IF; END_IF; IF 'MEASURE_SCHEMA.PLANE_ANGLE_MEASURE' IN TYPEOF ( m.value_component ) THEN IF derive_dimensional_exponents ( m.unit_component ) <> dimensional_exponents ( 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ) THEN RETURN (FALSE); END_IF; END_IF; IF 'MEASURE_SCHEMA.SOLID_ANGLE_MEASURE' IN TYPEOF ( m.value_component ) THEN IF derive_dimensional_exponents ( m.unit_component ) <> dimensional_exponents ( 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ) THEN RETURN (FALSE); END_IF; END_IF; IF 'MEASURE_SCHEMA.AREA_MEASURE' IN TYPEOF ( m.value_component ) THEN IF derive_dimensional_exponents ( m.unit_component ) <> dimensional_exponents ( 2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ) THEN RETURN (FALSE); END_IF; END_IF; IF 'MEASURE_SCHEMA.VOLUME_MEASURE' IN TYPEOF ( m.value_component ) THEN IF derive_dimensional_exponents ( m.unit_component ) <> dimensional_exponents ( 3.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ) THEN RETURN (FALSE); END_IF; END_IF; IF 'MEASURE_SCHEMA.RATIO_MEASURE' IN TYPEOF ( m.value_component ) THEN IF derive_dimensional_exponents ( m.unit_component ) <> dimensional_exponents ( 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ) THEN RETURN (FALSE); END_IF; END_IF; IF 'MEASURE_SCHEMA.POSITIVE_LENGTH_MEASURE' IN TYPEOF ( m.value_component ) THEN IF derive_dimensional_exponents ( m.unit_component ) <> dimensional_exponents ( 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ) THEN RETURN (FALSE); END_IF; END_IF; IF 'MEASURE_SCHEMA.POSITIVE_PLANE_ANGLE_MEASURE' IN TYPEOF ( m.value_component ) THEN IF derive_dimensional_exponents ( m.unit_component ) <> dimensional_exponents ( 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ) THEN RETURN (FALSE); END_IF; END_IF; RETURN (TRUE);
END_FUNCTION;
END_SCHEMA; -- measure_schema