Source : ISO 10303-45
SCHEMA material_property_definition_schema;
REFERENCE FROM
material_property_representation_schema -- ISO 10303-45
(material_property_representation);
REFERENCE FROM
measure_schema -- ISO 10303-41
(measure_with_unit);
REFERENCE FROM
process_property_schema -- ISO 10303-49
(action_property,
resource_property);
REFERENCE FROM
product_definition_schema -- ISO 10303-41
(product_definition_relationship);
REFERENCE FROM
product_property_definition_schema -- ISO 10303-41
(characterized_definition,
property_definition);
REFERENCE FROM
qualified_measure_schema -- ISO 10303-45
(maths_value_with_unit);
REFERENCE FROM
shape_dimension_schema -- ISO 10303-47
(dimensional_location,
dimensional_size);
REFERENCE FROM
support_resource_schema -- ISO 10303-41
(label,
text,
bag_to_set);
TYPE characterized_material_property =
SELECT
(material_property_representation,
product_material_composition_relationship);
END_TYPE;
TYPE characterized_product_composition_value =
SELECT
(maths_value_with_unit,
measure_with_unit);
END_TYPE;
TYPE generic_property_definition_select =
SELECT
(property_definition,
action_property,
resource_property,
dimensional_location,
dimensional_size);
END_TYPE;
ENTITY generic_property_relationship;
name : label;
description : text;
relating : generic_property_definition_select;
related : generic_property_definition_select;
relation_type : STRING;
WHERE
WR1: acyclic_generic_property_relationship (SELF, [related], 'MATERIAL_PROPERTY_DEFINITION_SCHEMA.GENERIC_PROPERTY_RELATIONSHIP');
END_ENTITY;
ENTITY material_designation;
name : label;
definitions : SET[1:?] OF characterized_definition;
END_ENTITY;
ENTITY material_designation_characterization;
name : label;
description : text;
designation : material_designation;
property : characterized_material_property;
END_ENTITY;
ENTITY material_property
SUBTYPE OF (property_definition);
UNIQUE
UR1: SELF\property_definition.name, SELF\property_definition.definition;
WHERE
WR1: ('PRODUCT_PROPERTY_DEFINITION_SCHEMA.CHARACTERIZED_OBJECT' IN
TYPEOF(SELF\property_definition.definition)) OR
(SIZEOF(bag_to_set(USEDIN(SELF ,
'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.' +
'PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')) -
QUERY(temp <* bag_to_set(USEDIN(SELF ,
'PRODUCT_PROPERTY_REPRESENTATION_SCHEMA.' +
'PROPERTY_DEFINITION_REPRESENTATION.DEFINITION')) |
('MATERIAL_PROPERTY_REPRESENTATION_SCHEMA.' +
'MATERIAL_PROPERTY_REPRESENTATION' IN
TYPEOF(temp)))) = 0);
END_ENTITY;
ENTITY product_material_composition_relationship
SUBTYPE OF (product_definition_relationship);
class : label;
constituent_amount : SET[1:?] OF characterized_product_composition_value;
composition_basis : label;
determination_method : text;
END_ENTITY;
ENTITY property_definition_relationship;
name : label;
description : text;
relating_property_definition : property_definition;
related_property_definition : property_definition;
END_ENTITY;
FUNCTION acyclic_generic_property_relationship
(relation : generic_property_relationship; relatives : SET[1:?] OF generic_property_definition_select; specific_relation : STRING) : LOGICAL;
LOCAL x : SET OF generic_property_relationship; END_LOCAL; IF relation.relating IN relatives THEN RETURN (FALSE); END_IF; -- IN is based in instance equality x := QUERY (gpr <* bag_to_set (USEDIN (relation.relating, 'MATERIAL_PROPERTY_DEFINITION_SCHEMA.' + 'GENERIC_PROPERTY_RELATIONSHIP.' + 'RELATED')) | specific_relation IN TYPEOF (gpr)); REPEAT I := 1 TO HIINDEX(x); -- pre-checked loop IF NOT acyclic_generic_property_relationship (x[i], relatives + relation.relating, specific_relation) THEN RETURN(FALSE); END_IF; END_REPEAT; RETURN(TRUE);
END_FUNCTION;
FUNCTION acyclic_property_definition_relationship
(relation : property_definition_relationship; relatives : SET[1:?] OF property_definition; specific_relation : STRING) : LOGICAL;
LOCAL x : SET OF property_definition_relationship; END_LOCAL; IF relation.relating_property_definition IN relatives THEN RETURN (FALSE); END_IF; -- IN is based in instance equality x := QUERY (pd <* bag_to_set (USEDIN (relation.relating_property_definition, 'MATERIAL_PROPERTY_DEFINITION_SCHEMA.' + 'PROPERTY_DEFINITION_RELATIONSHIP.' + 'RELATED_PROPERTY_DEFINITION')) | specific_relation IN TYPEOF (pd)); REPEAT I := 1 TO HIINDEX(x); -- pre-checked loop IF NOT acyclic_property_definition_relationship (x[i], relatives + relation.relating_property_definition, specific_relation) THEN RETURN(FALSE); END_IF; END_REPEAT; RETURN(TRUE);
END_FUNCTION;
END_SCHEMA; -- material_property_definition_schema