Application module: Functional usage view | ISO/TS 10303-1705:2018-11(E) © ISO |
(*
ISO/TC 184/SC 4/WG 12 N9505 - ISO/TS 10303-1705 Functional usage view - EXPRESS ARM
Supersedes
ISO/TC 184/SC 4/WG 12 N6971
*)
SCHEMA Functional_usage_view_arm;
USE FROM
Analytical_model_arm;
-- ISO/TS 10303-1603
USE FROM
Shape_property_assignment_arm;
-- ISO/TS 10303-1032
REFERENCE FROM
Support_resource_arm -- ISO/TS 10303-1800
(bag_to_set);
TYPE fuuv_am_port_assignment_select =
EXTENSIBLE
GENERIC_ENTITY
SELECT
BASED_ON
analytical_model_port_assignment_select
WITH
(Functional_unit_usage_view_terminal_definition);
END_TYPE;
TYPE fuuv_classification_item =
EXTENSIBLE
GENERIC_ENTITY
SELECT
BASED_ON
classification_item
WITH
(Functional_unit_usage_view_terminal_definition);
END_TYPE;
ENTITY Equivalent_functional_terminals_assignment;
name : STRING;
equivalent_terminals : SET[2:?] OF Functional_unit_usage_view_terminal_definition;
END_ENTITY;
ENTITY Equivalent_functional_unit_definition_assignment;
name : STRING;
equivalent_functional_unit_definitions : SET[2:?] OF Functional_unit_definition;
END_ENTITY;
ENTITY Functional_product
SUBTYPE OF (Information_product);
UNIQUE
UR1: SELF\Product.id;
END_ENTITY;
ENTITY Functional_terminal_group;
name : STRING;
group_description : STRING;
group_type : STRING;
UNIQUE
UR1: name;
END_ENTITY;
ENTITY Functional_terminal_group_assignment;
composed_group : Functional_terminal_group;
functional_usage_view_terminal : Scalar_terminal_definition;
END_ENTITY;
ENTITY Functional_unit_definition
ABSTRACT SUPERTYPE
SUBTYPE OF (Information_definition);
SELF\Product_view_definition.defined_version : Functional_version;
END_ENTITY;
ENTITY Functional_unit_make_from_relationship
SUBTYPE OF (View_definition_relationship);
SELF\View_definition_relationship.relating_view : Functional_unit_usage_view;
SELF\View_definition_relationship.related_view : Functional_unit_usage_view;
WHERE
WR1: acyclic_functional_unit_make_from_relationship (SELF, [related_view],
'FUNCTIONAL_USAGE_VIEW_ARM.FUNCTIONAL_UNIT_MAKE_FROM_RELATIONSHIP');
END_ENTITY;
ENTITY Functional_unit_usage_view
SUBTYPE OF (Functional_unit_definition);
DERIVE
analytical_model_application_reference : SET[0:?] OF Analytical_model_application := get_ama(access_mechanism[1]);
INVERSE
access_mechanism : SET[0:?] OF Functional_unit_usage_view_terminal_definition FOR associated_functional_unit_definition;
WHERE
WR1: SIZEOF(analytical_model_application_reference) <= 1;
WR2: NOT(SIZEOF(analytical_model_application_reference) = 1) OR
(SIZEOF(QUERY( am <* access_mechanism |
NOT((SIZEOF(USEDIN(am,'ANALYTICAL_MODEL_ARM.ANALYTICAL_MODEL_PORT_ASSIGNMENT.ASSIGNED_ITEM')) = 0) OR
(SIZEOF(QUERY( ampa <* USEDIN(am, 'ANALYTICAL_MODEL_ARM.ANALYTICAL_MODEL_PORT_ASSIGNMENT.ASSIGNED_ITEM') |
NOT(analytical_model_application_reference[1] :=: ampa.associated_analytical_model_application)
)) = 0))
)) = 0);
END_ENTITY;
ENTITY Functional_unit_usage_view_terminal_definition
SUPERTYPE OF
(Scalar_terminal_definition);
associated_functional_unit_definition : Functional_unit_usage_view;
signal_name : STRING;
UNIQUE
UR1: signal_name, associated_functional_unit_definition;
END_ENTITY;
ENTITY Functional_unit_usage_view_terminal_definition_make_from_relationship;
associated_make_from : Functional_unit_make_from_relationship;
reusable_feature : Functional_unit_usage_view_terminal_definition;
resultant_feature : Functional_unit_usage_view_terminal_definition;
UNIQUE
UR1: reusable_feature, resultant_feature;
WHERE
WR1: reusable_feature :<>: resultant_feature;
WR2: reusable_feature.associated_functional_unit_definition :<>: resultant_feature.associated_functional_unit_definition;
WR3: reusable_feature.associated_functional_unit_definition :=:
associated_make_from\Functional_unit_make_from_relationship.relating_view;
WR4: resultant_feature.associated_functional_unit_definition :=:
associated_make_from\Functional_unit_make_from_relationship.related_view;
WR5: acyclic_functional_unit_usage_view_terminal_definition_make_from_relationship
(SELF, [resultant_feature],
'FUNCTIONAL_USAGE_VIEW_ARM.FUNCTIONAL_UNIT_USAGE_VIEW_TERMINAL_DEFINITION_MAKE_FROM_RELATIONSHIP');
END_ENTITY;
ENTITY Functional_version
SUBTYPE OF (Information_version);
SELF\Product_version.of_product : Functional_product;
END_ENTITY;
ENTITY Scalar_terminal_definition
SUBTYPE OF (Functional_unit_usage_view_terminal_definition);
END_ENTITY;
ENTITY Scalar_terminal_definition_link;
precedent_terminal_definition : Scalar_terminal_definition;
subsequent_terminal_definition : Scalar_terminal_definition;
UNIQUE
UR1: precedent_terminal_definition, subsequent_terminal_definition;
WHERE
WR1: precedent_terminal_definition :<>: subsequent_terminal_definition;
WR2: acyclic_scalar_terminal_definition_link (SELF,
[subsequent_terminal_definition],
'FUNCTIONAL_USAGE_VIEW_ARM.SCALAR_TERMINAL_DEFINITION_LINK');
END_ENTITY;
FUNCTION acyclic_functional_unit_make_from_relationship
(relation : Functional_unit_make_from_relationship; relatives : SET[1:?] OF Functional_unit_usage_view; specific_relation : STRING) : BOOLEAN;
LOCAL x : SET OF Functional_unit_make_from_relationship; END_LOCAL; IF relation.relating_view IN relatives THEN RETURN (FALSE); END_IF; x := QUERY(pd <* bag_to_set(USEDIN(relation.relating_view, 'FUNCTIONAL_USAGE_VIEW_ARM.' + 'FUNCTIONAL_UNIT_MAKE_FROM_RELATIONSHIP.' + 'RELATED_VIEW')) | specific_relation IN TYPEOF(pd)); REPEAT i := 1 TO HIINDEX(x); IF NOT acyclic_functional_unit_make_from_relationship(x[i], relatives + relation.relating_view, specific_relation) THEN RETURN (FALSE); END_IF; END_REPEAT; RETURN (TRUE);
END_FUNCTION;
FUNCTION acyclic_functional_unit_usage_view_terminal_definition_make_from_relationship
(relation : Functional_unit_usage_view_terminal_definition_make_from_relationship; relatives : SET[1:?] OF Functional_unit_usage_view_terminal_definition; specific_relation : STRING) : BOOLEAN;
LOCAL x : SET OF Functional_unit_usage_view_terminal_definition_make_from_relationship; END_LOCAL; IF relation.reusable_feature IN relatives THEN RETURN (FALSE); END_IF; x := QUERY(pd <* bag_to_set(USEDIN(relation.reusable_feature, 'FUNCTIONAL_USAGE_VIEW_ARM.' + 'FUNCTIONAL_UNIT_USAGE_VIEW_TERMINAL_DEFINITION_MAKE_FROM_RELATIONSHIP.' + 'RESULTANT_FEATURE')) | specific_relation IN TYPEOF(pd)); REPEAT i := 1 TO HIINDEX(x); IF NOT acyclic_functional_unit_usage_view_terminal_definition_make_from_relationship(x[i], relatives + relation.reusable_feature, specific_relation) THEN RETURN (FALSE); END_IF; END_REPEAT; RETURN (TRUE);
END_FUNCTION;
FUNCTION acyclic_scalar_terminal_definition_link
(relation : Scalar_terminal_definition_link; relatives : SET[1:?] OF Scalar_terminal_definition; specific_relation : STRING) : BOOLEAN;
LOCAL x : SET OF Scalar_terminal_definition_link; END_LOCAL; IF relation.precedent_terminal_definition IN relatives THEN RETURN (FALSE); END_IF; x := QUERY(pd <* bag_to_set(USEDIN(relation.precedent_terminal_definition, 'FUNCTIONAL_USAGE_VIEW_ARM.' + 'SCALAR_TERMINAL_DEFINITION_LINK.' + 'SUBSEQUENT_TERMINAL_DEFINITION')) | specific_relation IN TYPEOF(pd)); REPEAT i := 1 TO HIINDEX(x); IF NOT acyclic_scalar_terminal_definition_link(x[i], relatives + relation.precedent_terminal_definition, specific_relation) THEN RETURN (FALSE); END_IF; END_REPEAT; RETURN (TRUE);
END_FUNCTION;
FUNCTION get_ama
(input : analytical_model_port_assignment_select) : SET[0:?] OF Analytical_model_application;
LOCAL ama : SET[0:?] OF Analytical_model_application := []; --this gives us access to the information base ampa : SET[0:?] OF Analytical_model_port_assignment :=[]; END_LOCAL; ampa := bag_to_set(USEDIN (input, 'ANALYTICAL_MODEL_ARM.'+'ANALYTICAL_MODEL_PORT_ASSIGNMENT.ASSIGNED_ITEM')); -- iterate over ampa REPEAT i := 1 to SIZEOF(ampa) by 1; ama := ama + ampa[i].associated_analytical_model_application; END_REPEAT; RETURN(ama);
END_FUNCTION;
END_SCHEMA; -- Functional_usage_view_arm
© ISO 2018 — All rights reserved