Schema: material_property_definition_schema

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