Source : ISO 10303-45
SCHEMA material_property_definition_schema;
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
support_resource_schema -- ISO 10303-41
(label,
text,
bag_to_set);
REFERENCE FROM
measure_schema -- ISO 10303-41
(measure_with_unit);
REFERENCE FROM
material_property_representation_schema -- ISO 10303-45
(material_property_representation);
TYPE characterized_material_property =
SELECT
(material_property_representation,
product_material_composition_relationship);
END_TYPE;
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 property_definition_relationship;
name : label;
description : text;
relating_property_definition : property_definition;
related_property_definition : property_definition;
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 product_material_composition_relationship
SUBTYPE OF (product_definition_relationship);
class : label;
constituent_amount : SET[1:?] OF measure_with_unit;
composition_basis : label;
determination_method : text;
END_ENTITY;
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