Integrated generic resource: Fundamentals of product description and support ISO 10303-41: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 Action
   4.1 General
   4.2 Fundamental concepts and assumptions
   4.3 Action type definitions
   4.4 Action entity definitions
   4.5 Action function definitions
5 Application context
   5.1 General
   5.2 Fundamental concepts and assumptions
   5.3 Application context type definitions
   5.4 Application context entity definitions
6 Approval
   6.1 General
   6.2 Fundamental concepts and assumptions
   6.3 Approval type definitions
   6.4 Approval entity definitions
   6.5 Approval function definitions
7 Basic attribute
   7.1 General
   7.2 Fundamental concepts and assumptions
   7.3 Basic attribute type definitions
   7.4 Basic attribute entity definitions
   7.5 Basic attribute function definitions
8 Certification
   8.1 General
   8.2 Fundamental concepts and assumptions
   8.3 Certification entity definitions
9 Contract
   9.1 General
   9.2 Fundamental concepts and assumptions
   9.3 Contract entity definitions
   9.4 Contract function definitions
10 Date time
   10.1 General
   10.2 Fundamental concepts and assumptions
   10.3 Date time type definitions
   10.4 Date time entity definitions
   10.5 Date time function definitions

11 Document
   11.1 General
   11.2 Fundamental concepts and assumptions
   11.3 Document type definition
   11.4 Document entity definitions
   11.5 Document function definitions
12 Effectivity
   12.1 General
   12.2 Fundamental concepts and assumptions
   12.3 Effectivity type definitions
   12.4 Effectivity entity definitions
   12.5 Effectivity function definitions
13 Experience
   13.1 General
   13.2 Fundamental concepts and assumptions
   13.3 Experience entity definitions
   13.4 Experience function definitions
14 External reference
   14.1 General
   14.2 Fundamental concepts and assumptions
   14.3 External reference type definitions
   14.4 External reference entity definitions
   14.5 External reference function definitions
15 Group
   15.1 General
   15.2 Fundamental concepts and assumptions
   15.3 Group type definition
   15.4 Group entity definitions
   15.5 Group function definitions
16 Language
   16.1 General
   16.2 Fundamental concepts and assumptions
   16.3 Language entity definition
17 Location
   17.1 General
   17.2 Fundamental concepts and assumptions
   17.3 Location entity definitions
   17.4 Location function definitions
18 Management resources
   18.1 General
   18.2 Fundamental concepts and assumptions
   18.3 Management resources type definitions
   18.4 Management resources entity definitions
   18.5 Management resources function definitions

19 Measure
   19.1 General
   19.2 Fundamental concepts and assumptions
   19.3 Measure type definitions
   19.4 Measure entity definitions
   19.5 Measure function definitions
20 Person organization
   20.1 General
   20.2 Fundamental concepts and assumptions
   20.3 Person organization type definitions
   20.4 Person organization entity definitions
   20.5 Person organization function definitions
21 Product definition
   21.1 General
   21.2 Fundamental concepts and assumptions
   21.3 Product definition type definitions
   21.4 Product definition entity definitions
   21.5 Product definition function definitions
22 Product property definition
   22.1 General
   22.2 Fundamental concepts and assumptions
   22.3 Product property definition type definitions
   22.4 Product property definition entity definitions
   22.5 Product property definition function definitions
23 Product property representation
   23.1 General
   23.2 Fundamental concepts and assumptions
   23.3 Product property representation type definitions
   23.4 Product property representation entity definitions
   23.5 Product property representation function definitions
24 Qualifications
   24.1 General
   24.2 Fundamental concepts and assumptions
   24.3 Qualifications entity definitions
   24.4 Qualifications function definitions
25 Security classification
   25.1 General
   25.2 Fundamental concepts and assumptions
   25.3 Security classification entity definitions
26 Support resource
   26.1 General
   26.2 Fundamental concepts and assumptions
   26.3 Support resource type definitions
   26.4 Support resource function definitions
A Short names of entities
B Information object registration
C Computer interpretable listings
D EXPRESS-G diagrams
E Technical discussion
F Examples
G Change history
Bibliography
Index

(*
ISO/TC 184/SC 4/WG 12 N10887 - ISO 10303-41 Fundamentals of product description and support - EXPRESS
Supersedes ISO/TC 184/SC 4/WG 12 N10467
*)



SCHEMA product_definition_schema;

REFERENCE FROM application_context_schema   -- ISO 10303-41
  (product_context,
   product_definition_context);

REFERENCE FROM basic_attribute_schema   -- ISO 10303-41
  (get_id_value,
   get_name_value,
   id_attribute,
   id_attribute_select,
   name_attribute,
   name_attribute_select);

REFERENCE FROM document_schema   -- ISO 10303-41
  (document);

REFERENCE FROM effectivity_schema   -- ISO 10303-41
  (effectivity);

REFERENCE FROM external_reference_schema   -- ISO 10303-41
  (external_source);

REFERENCE FROM product_property_definition_schema   -- ISO 10303-41
  (characterized_object);

REFERENCE FROM support_resource_schema   -- ISO 10303-41
  (bag_to_set,
   identifier,
   label,
   text);


TYPE product_definition_or_reference = EXTENSIBLE GENERIC_ENTITY SELECT
   (product_definition,
    generic_product_definition_reference);
END_TYPE;

TYPE pds_id_attribute_select = SELECT BASED_ON id_attribute_select WITH
   (product_category);
END_TYPE;

TYPE pds_name_attribute_select = SELECT BASED_ON name_attribute_select WITH
   (product_definition,
    product_definition_substitute);
END_TYPE;

TYPE source = ENUMERATION OF
   (made,
    bought,
    not_known);
END_TYPE;

ENTITY alternative_solution_relationship
  SUBTYPE OF (product_definition_formation_relationship);
  relation_type : STRING;
WHERE
  WR1: acyclic_alternative_solution_relationship(SELF, [SELF\product_definition_formation_relationship.related_product_definition_formation], 'PRODUCT_DEFINITION_SCHEMA.ALTERNATIVE_SOLUTION_RELATIONSHIP');
END_ENTITY;

ENTITY characterized_product
  SUBTYPE OF (characterized_object, product);
END_ENTITY;

ENTITY generic_product_definition_reference
  ABSTRACT SUPERTYPE OF (ONEOF (product_definition_reference,
                                product_definition_reference_with_local_representation));
  source : external_source;
END_ENTITY;

ENTITY product;
  id : identifier;
  name : label;
  description : OPTIONAL text;
  frame_of_reference : SET[1:?] OF product_context;
END_ENTITY;

ENTITY product_category;
  name : label;
  description : OPTIONAL text;
DERIVE
  id : identifier := get_id_value(SELF);
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'BASIC_ATTRIBUTE_SCHEMA.ID_ATTRIBUTE.IDENTIFIED_ITEM')) <= 1;
END_ENTITY;

ENTITY product_category_relationship;
  name : label;
  description : OPTIONAL text;
  category : product_category;
  sub_category : product_category;
WHERE
  WR1: acyclic_product_category_relationship(SELF, [SELF.sub_category]);
END_ENTITY;

ENTITY product_definition;
  id : identifier;
  description : OPTIONAL text;
  formation : product_definition_formation;
  frame_of_reference : product_definition_context;
DERIVE
  name : label := get_name_value(SELF);
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'BASIC_ATTRIBUTE_SCHEMA.NAME_ATTRIBUTE.NAMED_ITEM')) <= 1;
END_ENTITY;

ENTITY product_definition_context_association;
  definition : product_definition;
  frame_of_reference : product_definition_context;
  role : product_definition_context_role;
END_ENTITY;

ENTITY product_definition_context_role;
  name : label;
  description : OPTIONAL text;
END_ENTITY;

ENTITY product_definition_effectivity
  SUBTYPE OF (effectivity);
  usage : product_definition_relationship;
WHERE
  WR1: SIZEOF(USEDIN(SELF, 'MANAGEMENT_RESOURCES_SCHEMA.EFFECTIVITY_ASSIGNMENT.ASSIGNED_EFFECTIVITY')) = 0;
END_ENTITY;

ENTITY product_definition_formation;
  id : identifier;
  description : OPTIONAL text;
  of_product : product;
UNIQUE
  UR1: id, of_product;
END_ENTITY;

ENTITY final_solution
  SUBTYPE OF (product_definition_formation);
  status : STRING;
INVERSE
  specification : SET[1:?] OF product_definition FOR formation;
END_ENTITY;

ENTITY product_definition_formation_relationship;
  id : identifier;
  name : label;
  description : OPTIONAL text;
  relating_product_definition_formation : product_definition_formation;
  related_product_definition_formation : product_definition_formation;
END_ENTITY;

ENTITY product_definition_formation_with_specified_source
  SUBTYPE OF (product_definition_formation);
  make_or_buy : source;
END_ENTITY;

ENTITY product_definition_relationship;
  id : identifier;
  name : label;
  description : OPTIONAL text;
  relating_product_definition : product_definition_or_reference;
  related_product_definition : product_definition_or_reference;
END_ENTITY;

ENTITY product_definition_relationship_relationship;
  id : identifier;
  name : label;
  description : OPTIONAL text;
  relating : product_definition_relationship;
  related : product_definition_relationship;
END_ENTITY;

ENTITY product_definition_reference
  SUBTYPE OF (generic_product_definition_reference);
  product_id : identifier;
  product_definition_formation_id : identifier;
  product_definition_id : identifier;
  id_owning_organization_name : OPTIONAL label;
END_ENTITY;

ENTITY product_definition_reference_with_local_representation
  SUBTYPE OF (generic_product_definition_reference, product_definition);
END_ENTITY;

ENTITY product_definition_substitute;
  description : OPTIONAL text;
  context_relationship : product_definition_relationship;
  substitute_definition : product_definition;
DERIVE
  name : label := get_name_value(SELF);
WHERE
  WR1: context_relationship.related_product_definition :<>: substitute_definition;
  WR2: SIZEOF(USEDIN(SELF, 'BASIC_ATTRIBUTE_SCHEMA.NAME_ATTRIBUTE.NAMED_ITEM')) <= 1;
END_ENTITY;

ENTITY product_definition_with_associated_documents
  SUBTYPE OF (product_definition);
  documentation_ids : SET[1:?] OF document;
END_ENTITY;

ENTITY product_related_product_category
  SUBTYPE OF (product_category);
  products : SET[1:?] OF product;
END_ENTITY;

ENTITY product_relationship;
  id : identifier;
  name : label;
  description : OPTIONAL text;
  relating_product : product;
  related_product : product;
END_ENTITY;

FUNCTION acyclic_alternative_solution_relationship
 (relation : alternative_solution_relationship; relatives : SET[1:?] OF product_definition_formation; specific_relation : STRING) : BOOLEAN;
  LOCAL
  x : SET OF alternative_solution_relationship;
    END_LOCAL;
      IF relation.relating_product_definition_formation IN relatives
  THEN
    RETURN(FALSE);
  END_IF;
      x := QUERY(asr
                 <* bag_to_set(USEDIN(relation.relating_product_definition_formation, 'PRODUCT_DEFINITION_SCHEMA.PRODUCT_DEFINITION_FORMATION_RELATIONSHIP.RELATED_PRODUCT_DEFINITION_FORMATION'))
                 | specific_relation IN TYPEOF(asr));
      REPEAT i := 1 TO HIINDEX(x);
    IF NOT acyclic_alternative_solution_relationship(x[i], relatives +
                                                           relation.relating_product_definition_formation, specific_relation)
    THEN
      RETURN(FALSE);
    END_IF;
  END_REPEAT;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION acyclic_product_category_relationship
 (relation : product_category_relationship; children : SET OF product_category) : BOOLEAN;
  LOCAL
  x : SET OF product_category_relationship;
  local_children : SET OF product_category;
    END_LOCAL;
      REPEAT i := 1 TO HIINDEX(children);
    IF relation.category :=: children[i]
    THEN
      RETURN(FALSE);
    END_IF;
  END_REPEAT;
      x := bag_to_set(USEDIN(relation.category, 'PRODUCT_DEFINITION_SCHEMA.PRODUCT_CATEGORY_RELATIONSHIP.SUB_CATEGORY'));
      local_children := children + relation.category;
      IF SIZEOF(x) > 0
  THEN
    REPEAT i := 1 TO HIINDEX(x);
      IF NOT acyclic_product_category_relationship(x[i], local_children)
      THEN
        RETURN(FALSE);
      END_IF;
    END_REPEAT;
  END_IF;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION acyclic_product_definition_formation_relationship
 (relation : product_definition_formation_relationship; relatives : SET[1:?] OF product_definition_formation; specific_relation : STRING) : BOOLEAN;
  LOCAL
  x : SET OF product_definition_formation_relationship;
    END_LOCAL;
      IF relation.relating_product_definition_formation IN relatives
  THEN
    RETURN(FALSE);
  END_IF;
      x := QUERY(pdf
                 <* bag_to_set(USEDIN(relation.relating_product_definition_formation, 'PRODUCT_DEFINITION_SCHEMA.PRODUCT_DEFINITION_FORMATION_RELATIONSHIP.RELATED_PRODUCT_DEFINITION_FORMATION'))
                 | specific_relation IN TYPEOF(pdf));
      REPEAT i := 1 TO HIINDEX(x);
    IF NOT acyclic_product_definition_formation_relationship(x[i], relatives +
                                                                   relation.relating_product_definition_formation, specific_relation)
    THEN
      RETURN(FALSE);
    END_IF;
  END_REPEAT;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION acyclic_product_definition_relationship
 (relation : product_definition_relationship; relatives : SET[1:?] OF product_definition_or_reference; specific_relation : STRING) : BOOLEAN;
  LOCAL
  x : SET OF product_definition_relationship;
    END_LOCAL;
      IF relation.relating_product_definition IN relatives
  THEN
    RETURN(FALSE);
  END_IF;
      x := QUERY(pd
                 <* bag_to_set(USEDIN(relation.relating_product_definition, 'PRODUCT_DEFINITION_SCHEMA.PRODUCT_DEFINITION_RELATIONSHIP.RELATED_PRODUCT_DEFINITION'))
                 | specific_relation IN TYPEOF(pd));
      REPEAT i := 1 TO HIINDEX(x);
    IF NOT acyclic_product_definition_relationship(x[i], relatives +
                                                         relation.relating_product_definition, specific_relation)
    THEN
      RETURN(FALSE);
    END_IF;
  END_REPEAT;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION acyclic_product_relationship
 (relation : product_relationship; relatives : SET[1:?] OF product; specific_relation : STRING) : BOOLEAN;
  LOCAL
  x : SET OF product_relationship;
    END_LOCAL;
      IF relation.relating_product IN relatives
  THEN
    RETURN(FALSE);
  END_IF;
      x := QUERY(prod
                 <* bag_to_set(USEDIN(relation.relating_product, 'PRODUCT_DEFINITION_SCHEMA.PRODUCT_RELATIONSHIP.RELATED_PRODUCT'))
                 | specific_relation IN TYPEOF(prod));
      REPEAT i := 1 TO HIINDEX(x);
    IF NOT acyclic_product_relationship(x[i], relatives + relation.relating_product, specific_relation)
    THEN
      RETURN(FALSE);
    END_IF;
  END_REPEAT;
      RETURN(TRUE);
END_FUNCTION;

FUNCTION categories_of_product
 (obj : product) : SET OF STRING;
  LOCAL
  category_assignments : BAG OF product_category;
  categories : SET OF STRING := [];
    END_LOCAL;
      category_assignments := USEDIN(obj, 'PRODUCT_DEFINITION_SCHEMA.PRODUCT_RELATED_PRODUCT_CATEGORY.PRODUCTS');
      REPEAT i := LOINDEX(category_assignments) TO HIINDEX(category_assignments) BY 1;
    categories := categories + category_assignments[i].name;
  END_REPEAT;
      RETURN(categories);
END_FUNCTION;

FUNCTION get_product_definitions
 (c_def_instance : product) : SET OF product_definition;
  LOCAL
  pd_set : SET OF product_definition_formation := [];
  pdr_set : SET OF product_definition := [];
    END_LOCAL;
      pd_set := bag_to_set(USEDIN(c_def_instance, 'PRODUCT_DEFINITION_SCHEMA.PRODUCT_DEFINITION_FORMATION.OF_PRODUCT'));
      IF (SIZEOF(pd_set) < 1)
  THEN
    RETURN(pdr_set);
  END_IF;
      REPEAT i := 1 TO HIINDEX(pd_set);
    pdr_set := pdr_set + bag_to_set(USEDIN(pd_set[i], 'PRODUCT_DEFINITION_SCHEMA.PRODUCT_DEFINITION.FORMATION'));
  END_REPEAT;
      RETURN(pdr_set);
END_FUNCTION;

END_SCHEMA;  -- product_definition_schema


© ISO 2021 — All rights reserved