Integrated generic resource: Product structure configuration | ISO 10303-44:2021(E) © ISO |
The subject of the product_structure_schema is the relationship between the definitions of:
These relationships are defined as specializations of a general relationship among product_definitions as specified in the product_definition_schema in ISO 10303-41. In addition, any product that is used in a product structure may have alternative products specified for that use. Collectively these relationships are referred to as a product structure.
The product structure defines the different methods by which a product can be represented as being made up of constituents. Product structure relationships are established among the constituents that make up a product. Product structure is an aspect of product definition.
This clause defines the information requirements to which implementations shall conform using the EXPRESS language as defined in ISO 10303-11. The following EXPRESS declaration begins the product_structure_schema and identifies the necessary external references.Each implementation of an AP that uses this schema and that encodes entity names shall use the encoding specified in Annex A. Each reference to this schema in an open system shall use the identifier encoding specified in Annex B. This schema is illustrated in Annex D using the EXPRESS-G notation.
EXPRESS specification:
*)
SCHEMA product_structure_schema;
REFERENCE FROM
measure_schema
--
ISO 10303-41
(measure_with_unit);
REFERENCE FROM
product_definition_schema
--
ISO 10303-41
(acyclic_product_definition_relationship,
generic_product_definition_reference,
product,
product_definition,
product_definition_formation,
product_definition_or_reference,
product_definition_reference,
product_definition_relationship,
product_definition_relationship_relationship);
REFERENCE FROM
support_resource_schema
--
ISO 10303-41
(identifier,
label,
text);
(*
NOTE 1 The schemas referenced above are specified in the following parts:
measure_schema ISO 10303-41 product_definition_schema ISO 10303-41 support_resource_schema ISO 10303-41
NOTE 2 See Annex D for a graphical representation of this schema.
The relationships between product definitions are represented in this part of ISO 10303 using a subtype of the product_definition_relationship entity as defined in the product_definition_schema in ISO 10303-41. The subtypes of product_definition_relationship defined in this schema establish additional constraints and meanings to the supertype in ISO 10303-41.
NOTE 1 Figure 2 shows a partial view of the product_definition_schema in ISO 10303-41 and depicts the subtype structure of entities defined in this schema. Attributes of the entities defined in this schema and of the product_definition entity are not shown. See Figure D.1 for a complete diagram showing all attributes and entities of this schema.
The product structure concept applies to multiple definitions of the structure of a single product version. The different definitions correspond to requirements of different organizations for defining the structure of a product during the life cycle of the product's development.
EXAMPLE An organization may define a bill-of-material structure for both a design engineering release life cycle activity, as well as for a manufacturing engineering activity.
This schema supports the concept of making a product from another product. This concept deals with the relationship between a product and the results of a process applied to that product which produces a new product.
The following concepts and assumptions apply.
NOTE 2 For a detailed discussion of graph theory, see citation [3] in the bibliography.
NOTE 3 Examples and diagrams of the manner in which the entities of this part of ISO 10303 may be used to represent product structures are included in annex.
NOTE 4 The specified_higher_usage_occurrence is directed from component to the assembly and works recursively. The multi_level_reference_designator is directed from the assembly to the component and defines a list of intermediate assembly notes.
EXPRESS specification:
*)
TYPE
product_definition_occurrence_or_reference
=
SELECT
(product_definition_occurrence,
product_definition_occurrence_reference);
END_TYPE;
(*
EXPRESS specification:
*)
TYPE
product_definition_or_reference_or_occurrence
=
SELECT
BASED_ON
product_definition_or_reference
WITH
(product_definition_occurrence);
END_TYPE;
(*
If one product is an alternate for another product it is understood that there is no interest to keep track of which product, the base or any alternates specified, is used as a particular instance of the base product within a product structure.
NOTE An organization may track design changes for a base part, and establish effectivity conditions for the use of that base part in various assemblies to be manufactured. The use of an alternate product implies that an organization does not specify any particular version of the alternate product or establish effectivities relating to it.
An alternate_product_relationship for which the base product is an assembly specifies that the entire product structure of the alternate product may be used in place of the base product and its product structure.
EXAMPLE 1 Two bolts of the same size are products. One bolt has a square head and the other has a hexagonal head. These head shapes are properties of the respective products. The two bolts are considered equivalent with respect to form, fit, and function: they both have sufficiently close physical shape, they take up the same space when used, and they both serve to fasten two things together. Thus, one of these two bolts could be considered to be an alternate part for the other bolt.
The relationship established by the alternate_product_relationship need not be symmetric. If B is an alternate product for A, A is not implied to be an alternate product for B.
EXPRESS specification:
*)
ENTITY alternate_product_relationship;
name : label;
definition :
OPTIONAL
text;
alternate : product;
base : product;
basis : text;
UNIQUE
UR1: alternate, base;
WHERE
WR1: alternate :<>: base;
END_ENTITY;
(*
Attribute definitions:
name: the label by which the alternate_product_relationship is known.
definition: the text that characterizes the alternate_product_relationship. The value of this attribute need not be specified.
alternate: a product that may be used in place of the base product.
base: a product for which another product may be used as an alternate.
basis: a text description to specify the rationale and criteria used to consider the alternate product in place of the base product.
EXAMPLE 2 In the alternate_product_relationship for the two bolts defined in example 1, the value of the basis attribute, could be "head shape", while the value of the definition attribute could be "alternate for use as fastener in engine assembly".
Formal propositions:
UR1: The combination of the alternate product and the base product shall be unique.
WR1: The instance for the alternate product shall not be the same as the instance of the base product.
NOTE 1 In a BOM structure, product_definition entities represent nodes and next_assembly_usage_occurrence or quantified_assembly_component_usage entities represent links.
NOTE 2 In a parts list structure, a product_definition entity represents the root node. The next_assembly_usage_occurrence entities represent nodes at each intermediate level of the structure. The specified_higher_usage_occurrence entities represent links to higher-levels of the structure.
NOTE 3 In a promissory use structure, product_definition entities represent nodes, and promissory_usage_occurrence entities represent links between the nodes.
EXPRESS specification:
*)
ENTITY assembly_component_usage
SUPERTYPE OF (quantified_assembly_component_usage
ANDOR ONEOF (multi_level_reference_designator,
next_assembly_usage_occurrence,
promissory_usage_occurrence,
specified_higher_usage_occurrence))
SUBTYPE OF (product_definition_usage);
reference_designator :
OPTIONAL
identifier;
END_ENTITY;
(*
Attribute definitions:
reference_designator: a distinctive code that serves to identify the usage of the related_product_definition as a component in the relating_product_definition in a diagram, list, chart, or on a physical piece of equipment. The value of this attribute need not be specified.
NOTE 4 The reference_designator attribute can be made mandatory, or constrained to be unique, or both, in an annotated EXPRESS schema that uses or specializes this entity.
NOTE 1 The assembly context is specified by the fact that both assembly_component_usages referred to by the base and substitute attributes reference the same product_definition in their inherited relating_product_definition attribute.
The instance of the substitute constituent does not require the same spatial relationship or the same quantity. A substitute constituent does not require equivalent form, fit, and function of the constituent for which it is a substitute.
This entity defines one-way substitution only. Within a given context, if A is specified as a substitute for B, B is not implied to be a substitute for A.
NOTE 2 The assembly_component_usage_substitute entity may be used to eliminate the re-identification of all higher-level assemblies when a new version of a lower-level constituent is created.
EXPRESS specification:
*)
ENTITY assembly_component_usage_substitute;
name : label;
definition :
OPTIONAL
text;
base : assembly_component_usage;
substitute : assembly_component_usage;
UNIQUE
UR1: base, substitute;
WHERE
WR1: base.relating_product_definition :=: substitute.relating_product_definition;
WR2: base :<>: substitute;
END_ENTITY;
(*
Attribute definitions:
name: the label by which the assembly_component_usage_substitute is known.
definition: the text that characterizes the assembly_component_usage_substitute. The value of this attribute need not be specified.
base: an assembly_component_usage for which the substitute may be used.
substitute: an assembly_component_usage that may be used for the base.
Formal propositions:
UR1: The combination of the base and substitute attributes shall be unique.
WR1: The relating_product_definition attribute of both the base and the substitute attributes shall refer to the same assembly product_definition.
WR2: The base and substitute attributes shall not be the same instance.
EXPRESS specification:
*)
ENTITY assembly_component_usage_substitute_with_ranking
SUBTYPE OF (assembly_component_usage_substitute);
ranking : INTEGER;
ranking_rationale : text;
END_ENTITY;
(*
Attribute definitions:
ranking: an integer that ranks the preference for use of the substitute assembly_component_usage among all assembly_component_usage_substitute_with_ranking instances with the same value for the base attribute. This value is an integer that only has meaning when comparing it with corresponding values for assembly_component_usage_substitute_with_rankings sharing the same base assembly_component_usage. It is a relative ranking value, not an absolute ranking. A lower value indicates a higher preference for the substitute assembly_component_usage, and a higher value indicates a lower preference.
ranking_rationale: text that describes the rationale used for the ranking.
EXAMPLE Examples of ranking_rationale are cost and long lead time.
EXAMPLE 1 Machining, plating, and bending are processes used to make another product.
NOTE 1 In situations in which a product is made from another product using a sequence of processes, the intermediate products will be related using the make_from_usage_option entity.
NOTE 2 A product to be modified may be an assembly. Generally, the assembly_component_usage differs from the make_from_usage_option in that the constituents of an assembly are used in the assembly without any change.
NOTE 3 A product_definition may be the relating_product_definition of many make_from_usage_option relationships, and a product_definition may be the related_product_definition of many make_from_usage_option relationships. Further, there may be multiple make_from_usage_option instances referencing the same relating_product_definition and related_product_definition pair of product_definitions.
EXAMPLE 2 Consider the case of a shaft that can be machined from either a casting or a forging. All three, the shaft, the forging, and the casting, are represented by separate instances of product_definition. Two instances of the make_from_usage_option entity exist, one between the relating_product_definition shaft and the related_product_definition forging, the other between the relating_product_definition shaft and the related_product_definition casting.
EXPRESS specification:
*)
ENTITY make_from_usage_option
SUBTYPE OF (product_definition_usage);
ranking : INTEGER;
ranking_rationale : text;
quantity : measure_with_unit;
WHERE
WR1: (NOT ('NUMBER' IN TYPEOF(quantity.value_component))) OR (quantity.value_component > 0);
END_ENTITY;
(*
Attribute definitions:
ranking: an integer that ranks the preference for use of the related_product_definition among all make_from_usage_option instances that have the same value for the inherited relating_product_definition attribute. This value is an integer that only has meaning when comparing it with corresponding values for make_from_usage_options sharing the same relating_product_definition. It is a relative ranking value, not an absolute ranking. A lower value indicates a higher preference for the related_product_definition, and a higher value indicates a lower preference.
ranking_rationale: text that describes the rationale used for the ranking.
EXAMPLE 3 Examples of ranking_rationale are cost and long lead time.
quantity: the amount of the relating_product_definition that can be made from the related_product_definition.
Formal propositions:
WR1: If the quantity of the constituent is expressed numerically, its value shall be greater than zero.
NOTE 1 The make_from_usage_option_group is used to indicate that several different products may be made from a single product.
To represent the single product constraint within a single make_from_usage_option_group, the related_product_definition of all of the instances of the make_from_usage_options shall be the same.
EXAMPLE 1 Suppose a bar stock, represented by product_definition D, can be cut twice so as to create three - product_definitions, X, Y, and Z. The make_from_usage_option_group representing this situation would aggregate three make_from_usage_options as shown in Table 1:
Table 1 — Example 1 make_from_usage_option_group
id |
quantity |
||
---|---|---|---|
1 | X | D | 1 |
2 | Y | D | 1 |
3 | Z | D | 1 |
NOTE 2 It is possible to use a product to make more than one combination of other products.
EXAMPLE 2 The same bar stock product_definition D can be cut to produce two product_definitions X and one product_definition T. In this case the corresponding make_from_usage_option_group would aggregate two make_from_usage_options as shown in Table 2:
Table 2 — Example 2 make_from_usage_option_group
id |
quantity |
||
---|---|---|---|
2 | X | D | 2 |
1 | T | D | 1 |
NOTE 3 A single make_from_usage_option instance may be part of multiple make_from_usage_option_groups.
EXPRESS specification:
*)
ENTITY make_from_usage_option_group;
members : SET[2:?] OF make_from_usage_option;
WHERE
WR1: SIZEOF(QUERY(example <* members | example.related_product_definition :=: members[1].related_product_definition)) =
SIZEOF(members);
END_ENTITY;
(*
Attribute definitions:
members: a collection of at least two make_from_usage_option instances whose relating_product_definition instances may be made from the same related_product_definition.
Formal propositions:
WR1: All instances of members shall refer to the same instance of product_definition in their respective related_product_definition attribute.
NOTE The multi_level_reference_designator is used to identify a specific instance of a component within a multi-level assembly structure for which certain properties are to be associated.
EXPRESS specification:
*)
ENTITY multi_level_reference_designator
SUBTYPE OF (assembly_component_usage);
location : LIST[1:?] OF
UNIQUE
next_assembly_usage_occurrence;
DERIVE
SELF\product_definition_relationship.relating_product_definition RENAMED root : product_definition := location[1]\product_definition_relationship.relating_product_definition;
SELF\product_definition_relationship.related_product_definition RENAMED leaf : product_definition_or_reference := location[HIINDEX(location)]\product_definition_relationship.related_product_definition;
UNIQUE
UR1: location;
WHERE
WR1: unambiguously_specified_multi_level_reference_designator(location);
WR2: SIZEOF(QUERY(cp <* location | NOT (EXISTS(cp\assembly_component_usage.reference_designator)))) = 0;
END_ENTITY;
(*
Attribute definitions:
location: specifies the ordered list of connected next_assembly_usage_occurrences that defines an unambiguous path from the assembly to the constituent.
root: specifies the node in the assembly structure where the path starts.
leaf: specifies the node in the assembly structure where the path ends.
Formal propositions:
UR1: The location shall be unique across all instances of multi_level_reference_designator.
WR1: The list of next_assembly_usage_occurrences defined by location shall be connected.
WR2: For each element in the location list the attribute reference_designator shall be provided.
NOTE 1 An instance of next_assembly_usage_occurrence represents an individual occurrence of a constituent in an assembly. Each specific use of the same constituent may be represented by another distinct next_assembly_usage_occurrence instance for the purpose of assigning property information such as a position and orientation for the constituent. Property information is not provided by any of the entities of this part of ISO 10303 but by using the appropriate capabilities defined in ISO 10303-42 [1], ISO 10303-43 [2], and ISO 10303-41. The representation of a constituent occurrence in an assembly may be linked to mechanisms in ISO 10303-42 [1] and ISO 10303-43 [2] by means of a product_definition entity defined in the product_definition_schema in ISO 10303-41.
EXAMPLE The position and orientation of a constituent with respect to its assembly would be computed using a transformation defined in the representation_schema in ISO 10303-43 [2].
NOTE 2 An application algorithm can produce an indented parts list for a product by sequentially tracing through a structure of next_assembly_usage_occurrence instances. A similar algorithm can be used to calculate the position and orientation of each occurrence of every constituent relative to its higher-level assemblies within a BOM when used in conjunction with the property information constructs defined ISO 10303-41, ISO 10303-42 [1], and ISO 10303-43 [2].
NOTE 3 The number of constituents used in the assembly may be specified by composing a complex instance of next_assembly_usage_occurrence and quantified_assembly_component_usage.
EXPRESS specification:
*)
ENTITY next_assembly_usage_occurrence
SUBTYPE OF (assembly_component_usage);
DERIVE
product_definition_occurrence_id : identifier := SELF\product_definition_relationship.related_product_definition\product_definition_occurrence.id;
UNIQUE
UR1: reference_designator, relating_product_definition;
UR2: product_definition_occurrence_id, relating_product_definition;
END_ENTITY;
(*
Attribute definitions:
product_definition_occurrence_id: a derived attribute that represents the id of the product_definition_occurrence when it is referenced by the related_product_definition attribute.
Formal propositions:
UR1: The combination of reference_designator and relating_product_definition shall be unique within a population of next_assembly_usage_occurrences.
UR2: The combination of product_definition_occurrence_id and relating_product_definition shall be unique within a population of next_assembly_usage_occurrences.
EXAMPLE The product structures, in which a product_definition_occurrence is identified, can be breakdowns and assemblies.
EXPRESS specification:
*)
ENTITY product_definition_occurrence
SUPERTYPE OF (product_definition_specified_occurrence
ANDOR product_definition_occurrence_reference_with_local_representation);
id : identifier;
name :
OPTIONAL
label;
description :
OPTIONAL
text;
definition :
OPTIONAL
product_definition_or_reference_or_occurrence;
quantity :
OPTIONAL
measure_with_unit;
DERIVE
descendant_occurrences : SET[0:?] OF product_definition_specified_occurrence := get_descendant_occurrences(SELF);
INVERSE
assembly_usages : SET[0:?] OF assembly_component_usage FOR related_product_definition;
child_occurrences : SET[0:?] OF product_definition_specified_occurrence FOR occurrence_usage;
WHERE
WR1: NOT (('PRODUCT_STRUCTURE_SCHEMA.PRODUCT_DEFINITION_OCCURRENCE' IN TYPEOF(definition)) OR ('PRODUCT_STRUCTURE_SCHEMA.PRODUCT_DEFINITION_OCCURRENCE_REFERENCE'
IN TYPEOF(definition))) OR ('PRODUCT_STRUCTURE_SCHEMA.PRODUCT_DEFINITION_SPECIFIED_OCCURRENCE' IN TYPEOF(SELF));
WR2: EXISTS(definition) OR (SIZEOF(USEDIN(SELF, 'CONFIGURATION_MANAGEMENT_SCHEMA.CONFIGURATION_DESIGN.DESIGN')) > 0);
WR3: NOT ('NUMBER' IN TYPEOF(quantity\measure_with_unit.value_component)) OR (quantity\measure_with_unit.value_component
> 0);
END_ENTITY;
(*
Attribute definitions:
id: the identifier that distinguishes the product_definition_occurrence.
name: the label by which the product_definition_occurrence is known. The value of the attribute need not be specified.
description: the text that characterizes the product_definition_occurrence. The value of the attribute need not be specified.
definition: the definition of this product_definition_occurrence. The value of the attribute need not be specified.
quantity: the number of objects represented by the product_definition or generic_product_definition_reference or configuration_item for this product_definition_occurrence. The value of the attribute need not be specified. If the value of this attribute is not defined then there is a single occurrence.
descendant_occurrences: the set of all product_definition_specified_occurrences that are direct or indirect children of this product_definition_occurrence.
assembly_usages: the set of all assembly_component_usage that reference this product_definition_occurrence by the relating_product_definition attribute.
child_occurrences: the set of all product_definition_specified_occurrence that are direct children of this product_definition_occurrence.
Formal propositions:
WR1: If definition is either a product_definition_occurrence or a product_definition_occurrence_reference, then the product_definition_occurrence shall be a product_definition_specified_occurrence.
WR2: When no definition is provided, then the definition for this product_definition_occurrence shall be provided by a configuration_item that is linked to this product_definition_occurrence by a configuration_design.
WR3: If the quantity of the constituent is expressed numerically, its value shall be greater than zero.
EXPRESS specification:
*)
ENTITY product_definition_occurrence_reference
SUBTYPE OF (product_definition_reference);
product_occurrence_id : identifier;
END_ENTITY;
(*
Attribute definitions:
product_occurrence_id: specifies the identifier of the externally defined product_definition_occurrence.
EXPRESS specification:
*)
ENTITY product_definition_occurrence_reference_with_local_representation
SUBTYPE OF (product_definition_occurrence, generic_product_definition_reference);
END_ENTITY;
(*
NOTE The identification of the specific instance of the constituent in the assembly can be defined using the reference_designator attribute of the assembly_component_usage entity.
EXAMPLE A product structure for a car is defined in which entity instances of product_definition are defined for the chassis and the wheel. Four assembly_component_usage instances are then created to represent the four wheels of the chassis in which the reference_designator has values of ‘left front’, ‘right front’, ‘left rear’, ‘right rear’. To represent specific information about the right rear wheel, a product_definition of the wheel is created to which the information can be associated. To specify that this product_definition is representing the wheel that is implied by the instance of assembly_component_usage with the reference_designator attribute value of ‘right rear’, the product_definition_occurrence_relationship is created to associate the product_definition with the assembly_component_usage.
EXPRESS specification:
*)
ENTITY product_definition_occurrence_relationship;
name : label;
description :
OPTIONAL
text;
occurrence : product_definition;
occurrence_usage : assembly_component_usage;
WHERE
WR1: occurrence_usage.relating_product_definition :<>: occurrence;
WR2: occurrence_usage.related_product_definition :<>: occurrence;
WR3: occurrence.formation :=: occurrence_usage.related_product_definition.formation;
END_ENTITY;
(*
Attribute definitions:
name: the label by which the product_definition_occurrence_relationship is known.
description: the text that provides further information about the product_definition_occurrence_relationship. The value of this attribute need not be specified.
occurrence: the product_definition that represents a specific instance of the product.
occurrence_usage: the assembly_component_usage that represents a specific use of the constituent in an assembly.
Formal propositions:
WR1: The product_definition referenced by the occurrence attribute shall not be the assembly product_definition in the assembly_component_usage referenced by the occurrence_usage attribute.
WR2: The product_definition referenced by the occurrence attribute shall not be the constituent product_definition in the assembly_component_usage referenced by the occurrence_usage attribute.
WR3: The product_definition referenced by the occurrence attribute and the product_definition that represents the constituent of the assembly_component_usage shall be definitions of the same product_definition_formation.
NOTE 1 A product_definition_specified_occurrence can be used to relate product data such as properties to a specific lower-level product occurrence.
NOTE 2 Even without having a product_definition_specified_occurrence, a specific lower-level product occurrence will exist in a higher-level assembly.
A single product_definition_specified_occurrence makes a product occurrence visible within an assembly structure of two levels. For more than two assembly levels, a directed graph of several product_definition_specified_occurrences is used. A chain of product_definition_specified_occurrence where one is the definition of the other can be used to identify occurrences down in a multi-level assembly tree.EXPRESS specification:
*)
ENTITY product_definition_specified_occurrence
SUBTYPE OF (product_definition_occurrence);
SELF\product_definition_occurrence.definition : product_definition_occurrence_or_reference;
occurrence_usage : product_definition_occurrence_or_reference;
UNIQUE
UR1: occurrence_usage, id;
WHERE
WR1: SIZEOF(assembly_usages) = 0;
WR2: acyclic_product_definition_specified_occurrence(SELF, SELF\product_definition_occurrence.definition);
END_ENTITY;
(*
Attribute definitions:
definition: the definition of a product_definition_specified_occurrence shall either be of type product_definition_occurrence or of type product_definition_occurrence_reference.
occurrence_usage: a higher-level product_definition_occurrence or product_definition_occurrence_reference of which this product_definition_specified_occurrence is a child.
Formal propositions:
UR1: the id of a product_definition_specified_occurrence shall be unique among all other product_definition_specified_occurrence for the same occurrence_usage.
WR1: A product_definition_specified_occurrence shall not be used by the related_product_definition attribute of an assembly_component_usage.
WR2: The definition attribute shall not be cyclic.
EXAMPLE 1 The assembly trees established for production sometimes contain more intermediate levels than the trees established during the design phase. In such a case, the design phase relationship between a component and the assembly in which it is contained may be replaced by several intermediate relationships during production.
EXAMPLE 2 A given product may be used in a support role with respect to another product. A screwdriver may be identified as a resource to be used for the maintenance life cycle stage of a given product. In such a case, the support resource relationship between the screwdriver and the product for which it is identified to be used for maintenance activities may be specified.
EXAMPLE 3 If four identical bolts are used to attach two plates, there may be a need to identify one specific bolt for some purpose. It needs to be torqued to a greater degree than the rest. The inherited id attribute then is used to identify this specific bolt's requirement, even though the product_definition_usages of all four bolts will have the same attribute pair of product_definitions.
A product_definition_usage may be either a make_from_usage_option or an assembly_component_usage.
EXPRESS specification:
*)
ENTITY product_definition_usage
SUPERTYPE OF (ONEOF (make_from_usage_option,
assembly_component_usage))
SUBTYPE OF (product_definition_relationship);
UNIQUE
UR1: id, relating_product_definition, related_product_definition;
WHERE
WR1: acyclic_product_definition_relationship(SELF, [SELF\product_definition_relationship.related_product_definition], 'PRODUCT_STRUCTURE_SCHEMA.PRODUCT_DEFINITION_USAGE');
END_ENTITY;
(*
Formal propositions:
UR1: The combination of the inherited id, relating_product_definition, and related_product_definition attributes shall be unique within a scope of product_definition_usage.
WR1: Each product_definition_usage shall not relate the same relating_product_definition instance of product_definition to the related_product_definition or any of its descendants formed by their reference as the relating_product_definition in a graph of product_definition_usages.
NOTE This rule uses the function acyclic_product_definition_relationship defined in the product_definition_schema in ISO 10303-41.
EXPRESS specification:
*)
ENTITY product_definition_usage_relationship
SUBTYPE OF (product_definition_relationship_relationship);
SELF\product_definition_relationship_relationship.relating : product_definition_usage;
SELF\product_definition_relationship_relationship.related : product_definition_usage;
WHERE
WR1: relating.relating_product_definition :=: related.relating_product_definition;
END_ENTITY;
(*
Attribute definitions:
relating: the relating attribute shall be of type product_definition_usage.
related: the related attribute shall be of type product_definition_usage.
Formal propositions:
WR1: the related and relating product_definition_usage shall have the same relating_product_definition.
NOTE A promissory_usage_occurrence is used when the product structure is not completely defined. In such a situation, it is still possible to relate an assembly to a constituent to capture the intent that the constituent will be used in that assembly.
EXPRESS specification:
*)
ENTITY promissory_usage_occurrence
SUBTYPE OF (assembly_component_usage);
END_ENTITY;
(*
NOTE Generally, for production planning or material planning purposes, several occurrences of a constituent are lumped together, and a quantity is specified to account for the several occurrences. A typical example would be the specifying of an occurrence of a rivet used for joining aeroplane structures and denoting the number of such rivets used on the entire aeroplane. If each of the occurrences of the rivets used is to be specified, the next_assembly_usage_occurrence entity may be used. As many instances of the next_assembly_usage_occurrence as the number of occurrences of the rivets will exist in this case.
EXPRESS specification:
*)
ENTITY quantified_assembly_component_usage
SUBTYPE OF (assembly_component_usage);
quantity : measure_with_unit;
WHERE
WR1: (NOT ('NUMBER' IN TYPEOF(quantity.value_component))) OR (quantity.value_component > 0);
END_ENTITY;
(*
Attribute definitions:
quantity: a measure that defines how many or how much of the constituent is used in the assembly.
Formal propositions:
WR1: If the quantity of the constituent is expressed numerically, its value shall be greater than zero.
The relationship between the constituent and the assembly of the specified_higher_usage_occurrence to be specified is captured by the relationship of the inherited attributes relating_product_definition and related_product_definition.
The two attributes (upper_usage and next_usage) within the primary instance of the entity specified_higher_usage_occurrence shall respectively specify an assembly_component_usage and the next_assembly_usage_occurrence that together will provide the definition of the path from the constituent to the assembly for which the specified_higher_usage_occurrence is being specified. To ensure that the next_assembly_usage_occurrence and the assembly_component_usage together constitute the entire path desired for the specified_higher_usage_occurrence, it is required that the instance of the related_product_definition attribute of the assembly_component_usage entity be the same as the instance of the relating_product_definition attribute of the next_assembly_usage_occurrence entity. The related_product_definition attribute of the next_assembly_usage_occurrence shall reference the same instance as the related_product_definition attribute of the specified_higher_usage_occurrence being specified. The relating_product_definition attribute of the assembly_component_usage entity shall reference the same instance as the relating_product_definition attribute of the specified_higher_usage_occurrence being specified.
If the assembly_component_usage referenced by the attribute upper_usage is not a next_assembly_usage_occurrence it shall be a specified_higher_usage_occurrence. This specified_higher_usage_occurrence shall have its attributes upper_usage and next_usage defined as described in the previous paragraph to specify further the path of the primary specified_higher_usage_occurrence. This recursive specification shall continue until the attribute upper_usage references an assembly_component_usage entity that is a next_assembly_usage_occurrence. At this point, the primary specified_higher_usage_occurrence is fully specified both in terms of its constituents/assembly relationship and the entire path between them.
NOTE 1 The specified_higher_usage_occurrence is used to define portions of parts lists that contain a specific constituent within an assembly for which certain properties are to be associated or when the portion is used in more than one assembly structure.
NOTE 2 Annex E contains examples of this entity and figures that depict the relationships between it and the other entities of this schema.
EXPRESS specification:
*)
ENTITY specified_higher_usage_occurrence
SUBTYPE OF (assembly_component_usage);
upper_usage : assembly_component_usage;
next_usage : next_assembly_usage_occurrence;
UNIQUE
UR1: upper_usage, next_usage;
WHERE
WR1: SELF :<>: upper_usage;
WR2: SELF\product_definition_relationship.relating_product_definition :=: upper_usage.relating_product_definition;
WR3: SELF\product_definition_relationship.related_product_definition :=: next_usage.related_product_definition;
WR4: (upper_usage.related_product_definition :=: next_usage.relating_product_definition) OR (SIZEOF(QUERY(pdr
<* USEDIN(upper_usage.related_product_definition, 'PRODUCT_DEFINITION_SCHEMA.PRODUCT_DEFINITION_RELATIONSHIP.RELATED_PRODUCT_DEFINITION')
| pdr.relating_product_definition :=: next_usage.relating_product_definition)) = 1);
WR5: SIZEOF(['PRODUCT_STRUCTURE_SCHEMA.NEXT_ASSEMBLY_USAGE_OCCURRENCE', 'PRODUCT_STRUCTURE_SCHEMA.SPECIFIED_HIGHER_USAGE_OCCURRENCE']
* TYPEOF(upper_usage)) = 1;
END_ENTITY;
(*
Attribute definitions:
upper_usage: an assembly_component_usage that is the same instance of the attribute relating_product_definition as this specified_higher_usage_occurrence and the same instance of the attribute related_product_definition as the relating_product_definition of the next_assembly_usage_occurrence referenced by the attribute next_usage.
next_usage: a next_assembly_usage_occurrence that is the same instance of the attribute related_product_definition as this specified_higher_usage_occurrence and the same instance of the product definition referenced by the attribute relating_product_definition as the product definition referenced by the attribute related_product_definition of the attribute upper_usage.
NOTE 3 See Figure E.7 for diagrams illustrating instances of these two attributes.
Formal propositions:
UR1: The combination of the upper_usage and next_usage attributes shall be unique within a population of specified_higher_usage_occurrence.
WR1: The instance of specified_higher_usage_occurrence shall not be the same as the instance of upper_usage.
WR2: The relating_product_definition attribute (i.e., assembly) of the specified_higher_usage_occurrence shall reference the same instance of product_definition as the relating_product_definition (i.e., assembly) for the upper_usage.
WR3: The related_product_definition attribute (i.e., constituent) of the specified_higher_usage_occurrence shall reference the same instance of product_definition as the related_product_definition for the next_usage.
WR4: The related_product_definition (i.e., constituent) for the upper_usage shall reference, or be related to, the same instance of product_definition as the relating_product_definition (i.e., assembly) for the next_usage.
WR5: The type of the upper_usage attribute shall be either next_assembly_usage_occurrence or specified_higher_usage_occurrence.
EXPRESS specification:
*)
FUNCTION acyclic_product_definition_specified_occurrence (pdso : product_definition_specified_occurrence; definition : product_definition_occurrence) : BOOLEAN;
IF NOT (('PRODUCT_STRUCTURE_SCHEMA.PRODUCT_DEFINITION_SPECIFIED_OCCURRENCE') IN TYPEOF(definition)) THEN RETURN(TRUE); END_IF; IF (definition :=: pdso) THEN RETURN(FALSE); ELSE RETURN(acyclic_product_definition_specified_occurrence(pdso, definition\product_definition_occurrence.definition)); END_IF;
END_FUNCTION;
(*
Argument definitions:
pdso: (input) the candidate product_definition_specified_occurrence to be checked.
definition: (input) the product_definition_occurrence to which the candidate is checked against.
EXPRESS specification:
*)
FUNCTION get_descendant_occurrences (input : product_definition_occurrence) : SET[0:?] OF product_definition_specified_occurrence;
LOCAL result : SET OF product_definition_specified_occurrence := input.child_occurrences; END_LOCAL; REPEAT i := 1 TO HIINDEX(input.child_occurrences) BY 1; result := result + get_descendant_occurrences(input.child_occurrences[i]); END_REPEAT; RETURN(result);
END_FUNCTION;
(*
Argument definitions:
input: the product_definition_occurrence for which the descendants are calculated.
For each element in the links list, the related_product_definition shall reference, or be related to, the same instance of product_definition_or_reference as the relating_product_definition of the next element in the list.
EXPRESS specification:
*)
FUNCTION unambiguously_specified_multi_level_reference_designator (links : LIST[1:?] OF next_assembly_usage_occurrence) : BOOLEAN;
REPEAT i := 1 TO SIZEOF(links) - 1; CASE TRUE OF ('PRODUCT_DEFINITION_SCHEMA.PRODUCT_DEFINITION' IN TYPEOF(links[i]\product_definition_relationship.relating_product_definition)) AND ('PRODUCT_DEFINITION_SCHEMA.PRODUCT_DEFINITION' IN TYPEOF(links[i]\product_definition_relationship.related_product_definition)) AND ('PRODUCT_DEFINITION_SCHEMA.PRODUCT_DEFINITION' IN TYPEOF(links[i + 1]\product_definition_relationship.relating_product_definition)) : BEGIN IF NOT ((links[i]\product_definition_relationship.related_product_definition :=: links[i + 1]\product_definition_relationship.relating_product_definition) OR ((SIZEOF(QUERY(pdr <* USEDIN(links[i]\product_definition_relationship.related_product_definition, 'PRODUCT_DEFINITION_SCHEMA.PRODUCT_DEFINITION_RELATIONSHIP.RELATED_PRODUCT_DEFINITION') | pdr\product_definition_relationship.relating_product_definition :=: links[i + 1]\product_definition_relationship.relating_product_definition)) = 1) AND (links[i]\product_definition_relationship.related_product_definition\product_definition.formation\product_definition_formation.of_product :=: links[i + 1]\product_definition_relationship.relating_product_definition\product_definition.formation\product_definition_formation.of_product))) THEN RETURN(FALSE); END_IF; END; ('PRODUCT_DEFINITION_SCHEMA.PRODUCT_DEFINITION_REFERENCE' IN TYPEOF(links[i]\product_definition_relationship.related_product_definition)) AND ('PRODUCT_DEFINITION_SCHEMA.PRODUCT_DEFINITION_REFERENCE' IN TYPEOF(links[i + 1]\product_definition_relationship.relating_product_definition)) : BEGIN IF NOT ((links[i]\product_definition_relationship.related_product_definition :=: links[i + 1]\product_definition_relationship.relating_product_definition) OR ((SIZEOF(QUERY(pdr <* USEDIN(links[i]\product_definition_relationship.related_product_definition, 'PRODUCT_DEFINITION_SCHEMA.PRODUCT_DEFINITION_RELATIONSHIP.RELATED_PRODUCT_DEFINITION') | pdr\product_definition_relationship.relating_product_definition :=: links[i + 1]\product_definition_relationship.relating_product_definition)) = 1) AND (links[i]\product_definition_relationship.related_product_definition\product_definition_reference.product_id = links[i + 1]\product_definition_relationship.relating_product_definition\product_definition_reference.product_id) AND (links[i]\product_definition_relationship.related_product_definition\product_definition_reference.id_owning_organization_name = links[i + 1]\product_definition_relationship.relating_product_definition\product_definition_reference.id_owning_organization_name) AND (links[i]\product_definition_relationship.related_product_definition\product_definition_reference.product_definition_id <> links[i + 1]\product_definition_relationship.relating_product_definition\product_definition_reference.product_definition_id))) THEN RETURN(FALSE); END_IF; END; ('PRODUCT_DEFINITION_SCHEMA.PRODUCT_DEFINITION_REFERENCE' IN TYPEOF(links[i]\product_definition_relationship.relating_product_definition)) AND ('PRODUCT_DEFINITION_SCHEMA.PRODUCT_DEFINITION' IN TYPEOF(links[i]\product_definition_relationship.related_product_definition)) : RETURN(FALSE); OTHERWISE: RETURN(FALSE); END_CASE; END_REPEAT; RETURN(TRUE);
END_FUNCTION;
(*
Argument definitions:
links: the list of next_assembly_usage_occurrences that shall be connected.
*)
END_SCHEMA; -- product_structure_schema
(*
© ISO 2021 — All rights reserved