Source : ISO 10303-41
SCHEMA product_property_definition_schema;
REFERENCE FROM
basic_attribute_schema -- ISO 10303-41
(get_id_value,
id_attribute,
id_attribute_select);
REFERENCE FROM
process_property_schema -- ISO 10303-49
(action_property,
resource_property);
REFERENCE FROM
product_definition_schema -- ISO 10303-41
(product_definition,
product_definition_relationship,
product_definition_relationship_relationship);
REFERENCE FROM
product_property_representation_schema -- ISO 10303-41
(item_identified_representation_usage);
REFERENCE FROM
product_structure_schema -- ISO 10303-44
(assembly_component_usage,
multi_level_reference_designator,
next_assembly_usage_occurrence,
product_definition_occurrence);
REFERENCE FROM
shape_dimension_schema -- ISO 10303-47
(dimensional_location,
dimensional_size);
REFERENCE FROM
shape_tolerance_schema -- ISO 10303-47
(geometric_tolerance);
REFERENCE FROM
support_resource_schema -- ISO 10303-41
(bag_to_set,
identifier,
label,
text);
TYPE characterized_definition =
SELECT
(characterized_item,
characterized_object,
characterized_product_definition,
shape_definition);
END_TYPE;
TYPE characterized_item =
SELECT
(item_identified_representation_usage,
dimensional_size,
geometric_tolerance);
END_TYPE;
TYPE characterized_product_definition =
SELECT
(product_definition,
product_definition_occurrence,
product_definition_relationship,
product_definition_relationship_relationship);
END_TYPE;
TYPE derived_property_select =
SELECT
(property_definition,
action_property,
resource_property,
dimensional_location,
dimensional_size,
geometric_tolerance);
END_TYPE;
TYPE internal_or_reflected_shape_aspect =
SELECT
(shape_aspect,
identifier);
END_TYPE;
TYPE multi_or_next_assembly_usage_occurrence =
SELECT
(multi_level_reference_designator,
next_assembly_usage_occurrence);
END_TYPE;
TYPE ppds_id_attribute_select =
SELECT
BASED_ON
id_attribute_select
WITH
(property_definition,
shape_aspect,
shape_aspect_relationship);
END_TYPE;
TYPE shape_aspect_or_characterized_object =
SELECT
(shape_aspect,
characterized_object);
END_TYPE;
TYPE shape_definition =
SELECT
(product_definition_shape,
shape_aspect,
shape_aspect_relationship);
END_TYPE;
ENTITY characterized_object;
name : label;
description :
OPTIONAL
text;
END_ENTITY;
ENTITY characterized_object_relationship;
name : label;
description :
OPTIONAL
text;
relating_object : characterized_object;
related_object : characterized_object;
END_ENTITY;
ENTITY component_path_shape_aspect
SUBTYPE OF (shape_aspect);
location : multi_or_next_assembly_usage_occurrence;
component_shape_aspect : internal_or_reflected_shape_aspect;
UNIQUE
UR1: location, component_shape_aspect;
END_ENTITY;
ENTITY constituent_shape_aspect
SUBTYPE OF (shape_aspect);
parent : shape_aspect;
DERIVE
SELF\shape_aspect.of_shape : product_definition_shape := get_product_definition_shape(SELF);
END_ENTITY;
ENTITY general_property;
id : identifier;
name : label;
description :
OPTIONAL
text;
END_ENTITY;
ENTITY general_property_association;
name : label;
description :
OPTIONAL
text;
base_definition : general_property;
derived_definition : derived_property_select;
WHERE
WR1: (SIZEOF(['SHAPE_DIMENSION_SCHEMA.DIMENSIONAL_LOCATION', 'SHAPE_DIMENSION_SCHEMA.DIMENSIONAL_SIZE',
'SHAPE_TOLERANCE_SCHEMA.GEOMETRIC_TOLERANCE'] * TYPEOF(derived_definition)) > 0) OR (SIZEOF(USEDIN(derived_definition,
'PRODUCT_PROPERTY_DEFINITION_SCHEMA.GENERAL_PROPERTY_ASSOCIATION.DERIVED_DEFINITION')) = 1);
WR2: (SIZEOF(['SHAPE_DIMENSION_SCHEMA.DIMENSIONAL_LOCATION', 'SHAPE_DIMENSION_SCHEMA.DIMENSIONAL_SIZE',
'SHAPE_TOLERANCE_SCHEMA.GEOMETRIC_TOLERANCE'] * TYPEOF(derived_definition)) > 0) OR (derived_definition.name
= base_definition.name);
END_ENTITY;
ENTITY general_property_relationship;
name : label;
description :
OPTIONAL
text;
relating_property : general_property;
related_property : general_property;
END_ENTITY;
ENTITY product_definition_shape
SUBTYPE OF (property_definition);
UNIQUE
UR1:
SELF\property_definition.definition;
WHERE
WR1: SIZEOF(['PRODUCT_PROPERTY_DEFINITION_SCHEMA.CHARACTERIZED_PRODUCT_DEFINITION', 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.CHARACTERIZED_OBJECT']
* TYPEOF(SELF\property_definition.definition)) > 0;
END_ENTITY;
ENTITY property_definition;
name : label;
description :
OPTIONAL
text;
definition : characterized_definition;
DERIVE
id : identifier := get_id_value(SELF);
WHERE
WR1: SIZEOF(USEDIN(SELF, 'BASIC_ATTRIBUTE_SCHEMA.ID_ATTRIBUTE.IDENTIFIED_ITEM')) <= 1;
END_ENTITY;
ENTITY shape_aspect
SUPERTYPE OF
(ONEOF (shape_aspect_occurrence,
component_path_shape_aspect)
ANDOR constituent_shape_aspect);
name : label;
description :
OPTIONAL
text;
of_shape : product_definition_shape;
product_definitional : LOGICAL;
DERIVE
id : identifier := get_id_value(SELF);
UNIQUE
UR1: id, of_shape;
WHERE
WR1: SIZEOF(USEDIN(SELF, 'BASIC_ATTRIBUTE_SCHEMA.ID_ATTRIBUTE.IDENTIFIED_ITEM')) <= 1;
END_ENTITY;
ENTITY shape_aspect_occurrence
SUBTYPE OF (shape_aspect);
definition : shape_aspect_or_characterized_object;
WHERE
WR1: acyclic_shape_aspect_occurrence(SELF, definition);
END_ENTITY;
ENTITY shape_aspect_relationship;
name : label;
description :
OPTIONAL
text;
relating_shape_aspect : shape_aspect;
related_shape_aspect : shape_aspect;
DERIVE
id : identifier := get_id_value(SELF);
WHERE
WR1: SIZEOF(USEDIN(SELF, 'BASIC_ATTRIBUTE_SCHEMA.ID_ATTRIBUTE.IDENTIFIED_ITEM')) <= 1;
END_ENTITY;
FUNCTION acyclic_characterized_object_relationship
(relation : characterized_object_relationship; relatives : SET[1:?] OF characterized_object; specific_relation : STRING) : BOOLEAN;
LOCAL x : SET OF characterized_object_relationship; END_LOCAL; IF relation.relating_object IN relatives THEN RETURN(FALSE); END_IF; x := QUERY(ca <* bag_to_set(USEDIN(relation.relating_object, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.CHARACTERIZED_OBJECT_RELATIONSHIP.RELATED_OBJECT')) | specific_relation IN TYPEOF(ca)); REPEAT i := 1 TO HIINDEX(x); IF NOT acyclic_characterized_object_relationship(x[i], relatives + relation.relating_object, specific_relation) THEN RETURN(FALSE); END_IF; END_REPEAT; RETURN(TRUE);
END_FUNCTION;
FUNCTION acyclic_general_property_relationship
(relation : general_property_relationship; relatives : SET[1:?] OF general_property; specific_relation : STRING) : BOOLEAN;
LOCAL x : SET OF general_property_relationship; END_LOCAL; IF relation.relating_property IN relatives THEN RETURN(FALSE); END_IF; x := QUERY(genp <* bag_to_set(USEDIN(relation.relating_property, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.GENERAL_PROPERTY_RELATIONSHIP.RELATED_PROPERTY')) | specific_relation IN TYPEOF(genp)); REPEAT i := 1 TO HIINDEX(x); IF NOT acyclic_general_property_relationship(x[i], relatives + relation.relating_property, specific_relation) THEN RETURN(FALSE); END_IF; END_REPEAT; RETURN(TRUE);
END_FUNCTION;
FUNCTION acyclic_shape_aspect_occurrence
(sao : shape_aspect_occurrence; definition : shape_aspect_or_characterized_object) : BOOLEAN;
IF NOT (('PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_OCCURRENCE') IN TYPEOF(definition)) THEN RETURN(TRUE); END_IF; IF (definition :=: sao) THEN RETURN(FALSE); ELSE RETURN(acyclic_shape_aspect_occurrence(sao, definition\shape_aspect_occurrence.definition)); END_IF;
END_FUNCTION;
FUNCTION acyclic_shape_aspect_relationship
(relation : shape_aspect_relationship; relatives : SET[1:?] OF shape_aspect; specific_relation : STRING) : BOOLEAN;
LOCAL x : SET OF shape_aspect_relationship; END_LOCAL; IF relation.relating_shape_aspect IN relatives THEN RETURN(FALSE); END_IF; x := QUERY(sa <* bag_to_set(USEDIN(relation.relating_shape_aspect, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT_RELATIONSHIP.RELATED_SHAPE_ASPECT')) | specific_relation IN TYPEOF(sa)); REPEAT i := 1 TO HIINDEX(x); IF NOT acyclic_shape_aspect_relationship(x[i], relatives + relation.relating_shape_aspect, specific_relation) THEN RETURN(FALSE); END_IF; END_REPEAT; RETURN(TRUE);
END_FUNCTION;
FUNCTION get_product_definition_shape
(current : constituent_shape_aspect) : product_definition_shape;
REPEAT WHILE ('PRODUCT_DEFINITION_SCHEMA.CONSTITUENT_SHAPE_ASPECT' IN TYPEOF(current.parent)); current := current.parent; END_REPEAT; RETURN(current.parent\shape_aspect.of_shape);
END_FUNCTION;
FUNCTION get_shape_aspects
(c_def_instance : characterized_definition) : SET OF shape_aspect;
LOCAL pd_set : SET OF product_definition_shape := []; pdr_set : SET OF shape_aspect := []; END_LOCAL; pd_set := bag_to_set(QUERY(pd <* USEDIN(c_def_instance, 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PROPERTY_DEFINITION.DEFINITION') | 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.PRODUCT_DEFINITION_SHAPE' IN TYPEOF(pd))); IF (SIZEOF(pd_set) < 1) THEN RETURN(pdr_set); END_IF; REPEAT i := 1 TO HIINDEX(pd_set); pdr_set := pdr_set + bag_to_set(USEDIN(pd_set[i], 'PRODUCT_PROPERTY_DEFINITION_SCHEMA.SHAPE_ASPECT.OF_SHAPE')); END_REPEAT; RETURN(pdr_set);
END_FUNCTION;
END_SCHEMA; -- product_property_definition_schema