Integrated generic resource: Product structure configuration ISO 10303-44:2021(E)
© ISO

Cover page
Table of contents
Copyright
Foreword
Introduction
1 Scope
2 Normative references
3 Terms, definitions and abbreviated terms
    3.1 Terms and definitions
    3.2 Abbreviated terms

4 Product structure
   4.1 General
   4.2 Fundamental concepts and assumptions
   4.3 Product structure type definitions
   4.4 Product structure entity definitions
   4.5 Product structure function definitions
5 Product concept
   5.1 General
   5.2 Fundamental concepts and assumptions
   5.3 Product concept entity definitions
6 Configuration management
   6.1 General
   6.2 Fundamental concepts and assumptions
   6.3 Configuration management type definitions
   6.4 Configuration management entity definitions

A Short names of entities
B Information object registration
C Computer interpretable listings
D EXPRESS-G diagrams
E Examples
F Change history
Bibliography
Index

4 Product structure schema

4.1 General

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.

4.2 Fundamental concepts and assumptions

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.



Figure 2 —  Relationship of product structure entities to ISO 10303-41

Figure 2 —  Relationship of product structure entities to 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.

4.3 product_structure_schema type definitions

4.3.1 product_definition_occurrence_or_reference   EXPRESS-G

The product_definition_occurrence_or_reference type is a list of alternate data types. It provides a mechanism to refer to an instance of one of these data types.

EXPRESS specification:

*)
TYPE product_definition_occurrence_or_reference = SELECT
   (product_definition_occurrence,
    product_definition_occurrence_reference);
END_TYPE;
(*

4.3.2 product_definition_or_reference_or_occurrence   EXPRESS-G

The product_definition_or_reference_or_occurrence type is an extension of the product_definition_or_reference type. It adds the data type product_definition_occurrence to the list of alternate data types.

EXPRESS specification:

*)
TYPE product_definition_or_reference_or_occurrence = SELECT BASED_ON product_definition_or_reference WITH
   (product_definition_occurrence);
END_TYPE;
(*

4.4 product_structure_schema entity definitions

4.4.1 alternate_product_relationship   EXPRESS-G

An alternate_product_relationship is an association between two products whereby one product, the alternate product, may be used in place of another product, the base product.

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.

4.4.2 assembly_component_usage   EXPRESS-G

An assembly_component_usage is a type of product_definition_usage that should be used to establish a relationship between product_definitions within one of the following three product structures: An assembly_component_usage relates a constituent to its assembly. An assembly_component_usage may be either a next_assembly_usage_occurrence, or a specified_higher_usage_occurrence, or a promissory_usage_occurrence and in addition may be a quantified_assembly_component_usage.

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.

4.4.3 assembly_component_usage_substitute   EXPRESS-G

An assembly_component_usage_substitute is a specification of that one constituent can be used as a substitute for another within the context of a given assembly.

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.

4.4.4 assembly_component_usage_substitute_with_ranking   EXPRESS-G

An assembly_component_usage_substitute_with_ranking is a type of assembly_component_usage_substitute that specifies a relative preference value for the usage of a particular constituent as a substitute for another among all substitutes within the context of a given assembly.

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.

4.4.5 make_from_usage_option   EXPRESS-G

A make_from_usage_option is a type of product_definition_usage in which one product is the result of applying a process to another product.

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.

4.4.6 make_from_usage_option_group   EXPRESS-G

A make_from_usage_option_group is a collection of make_from_usage_option instances that defines one possible combination of product_definitions that can be made from another single product_definition.

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

relating_product_definition

related_product_definition

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

relating_product_definition

related_product_definition

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.

4.4.7 multi_level_reference_designator   EXPRESS-G

A multi_level_reference_designator is a type of assembly_component_usage that specifies the relationship between an assembly and a constituent if the assembly is not the immediate parent for the constituent and there are several hierarchical levels between the assembly and the constituent. The hierarchical levels are defined by a list of next_assembly_usage_occurrences that identifies a connected path in the assembly structure.

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.

4.4.8 next_assembly_usage_occurrence   EXPRESS-G

A next_assembly_usage_occurrence is a type of assembly_component_usage that specifies the relationship between a child constituent and its immediate parent assembly in a product structure.

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.

4.4.9 product_definition_occurrence   EXPRESS-G

A product_definition_occurrence is an identified occurrence of a product_definition or a generic_product_definition_reference or another product_definition_occurrence in one or several product structures.

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.

4.4.10 product_definition_occurrence_reference   EXPRESS-G

A product_definition_occurrence_reference is a type of product_definition_reference that represents an externally defined product_definition_occurrence by a local product_definition_occurrence.

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.

4.4.11 product_definition_occurrence_reference_with_local_representation   EXPRESS-G

A product_definition_occurrence_reference_with_local_representation is a type of product_definition_occurrence and of type generic_product_definition_reference that represents an externally defined product_definition_occurrence by a local product_definition.

EXPRESS specification:

*)
ENTITY product_definition_occurrence_reference_with_local_representation
  SUBTYPE OF (product_definition_occurrence, generic_product_definition_reference);
END_ENTITY;
(*

4.4.12 product_definition_occurrence_relationship   EXPRESS-G

A product_definition_occurrence_relationship is an association between a product_definition and an assembly_component_usage in which the product_definition referenced by the occurrence attribute is a specific instance of the constituent product_definition referenced by the related_product_definition attribute of the occurrence_usage in the assembly product_definition referenced by the relating_product_definition attribute.

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.

4.4.13 product_definition_specified_occurrence   EXPRESS-G

A product_definition_specified_occurrence is a type of product_definition_occurrence that is defined by another product_definition_occurrence or product_definition_occurrence_reference in the context of a higher-level product_definition_occurrence. The only purpose of a product_definition_specified_occurrence is to provide visibility and to identify a specific lower-level product occurrence within a multi-level assembly.

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.

4.4.14 product_definition_usage   EXPRESS-G

A product_definition_usage is a type of product_definition_relationship that specifies a directed association between two product_definitions in which the related_product_definition is used in the context of the relating_product_definition. The product_definition_usage establishes a relationship stating that the related product is used in the context of the relating product. This usage is established for the life cycle stages and application contexts in which the two products are described.

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.

4.4.15 product_definition_usage_relationship   EXPRESS-G

A product_definition_usage_relationship is a type of product_definition_relationship_relationship that is a relationship between two product_definition_usage with the same relating_product_definition.

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.

4.4.16 promissory_usage_occurrence   EXPRESS-G

A promissory_usage_occurrence is a type of assembly_component_usage in which the related_product_definition is in the assembly tree of the relating_product_definition regardless of the number of intermediate levels between them.

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;
(*

4.4.17 quantified_assembly_component_usage   EXPRESS-G

A quantified_assembly_component_usage is a type of assembly_component_usage that establishes the relationship between an assembly and one of its constituents if there is a need to specify the quantity of the child constituent used in the assembly.

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.

4.4.18 specified_higher_usage_occurrence   EXPRESS-G

A specified_higher_usage_occurrence is a type of assembly_component_usage that specifies the relationship between a constituent and an assembly if the assembly is not the immediate parent for the constituent.

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.

4.5 product_structure_schema function definitions

4.5.1 acyclic_product_definition_specified_occurrence

The acyclic_product_definition_specified_occurrence function determines whether the graph of instances of the entity data type product_definition_specified_occurrence connected by their attribute definition contains a cycle. The function returns TRUE if no cycle has been detected. Otherwise it returns FALSE.

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.

4.5.2 get_descendant_occurrences

The getdescendant_occurrences function determines the set of instances of the entity data type product_definition_specified_occurrence that are descendants of a product_definition_occurrence.

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.

4.5.3 unambiguously_specified_multi_level_reference_designator

The unambiguously_specified_multi_level_reference_designator function determines whether a list of next_assembly_usage_occurrence is connected.

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