Schema: material_property_definition_schema

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