| Application module: Foundation representation | ISO/TS 10303-1006:2021(E) © ISO |
(*
ISO/TC 184/SC 4/WG 12 N10672 - ISO/TS 10303-1006 Foundation representation - EXPRESS ARM
Supersedes
ISO/TC 184/SC 4/WG 12 N10389
*)
SCHEMA Foundation_representation_arm;
USE FROM
Support_resource_arm;
-- ISO/TS 10303-1800
USE FROM
Value_with_unit_arm;
-- ISO/TS 10303-1054
REFERENCE FROM
Support_resource_arm -- ISO/TS 10303-1800
(bag_to_set);
TYPE representation_or_representation_reference =
SELECT
(Representation,
Representation_reference);
END_TYPE;
ENTITY Numerical_representation_context
SUBTYPE OF (Representation_context);
units :
OPTIONAL
SET[1:?] OF Unit;
accuracies :
OPTIONAL
SET[1:?] OF Uncertainty_with_unit;
END_ENTITY;
ENTITY Representation;
id :
OPTIONAL
identifier;
name :
OPTIONAL
label;
description :
OPTIONAL
text;
context_of_items : Representation_context;
items : SET[1:?] OF Representation_item;
WHERE
WR1: EXISTS(name) OR (TYPEOF(SELF\Representation) <> TYPEOF(SELF));
END_ENTITY;
ENTITY Representation_context;
id : identifier;
kind : text;
INVERSE
representations_in_context : SET[1:?] OF Representation FOR context_of_items;
END_ENTITY;
ENTITY Representation_context_reference;
context_identifier : identifier;
INVERSE
representations_in_context : SET[1:?] OF Representation_reference FOR context_of_items;
END_ENTITY;
ENTITY Representation_item
ABSTRACT SUPERTYPE
;
name :
OPTIONAL
label;
END_ENTITY;
ENTITY Representation_item_relationship;
name : label;
description :
OPTIONAL
text;
relating_representation_item : Representation_item;
related_representation_item : Representation_item;
END_ENTITY;
ENTITY Representation_reference;
id : identifier;
context_of_items : Representation_context_reference;
END_ENTITY;
ENTITY Representation_relationship;
relation_type :
OPTIONAL
label;
description :
OPTIONAL
text;
rep_1 : Representation;
rep_2 : Representation;
WHERE
WR1: EXISTS(relation_type) OR (TYPEOF(SELF\Representation_relationship) <> TYPEOF(SELF));
WR2: EXISTS(description) OR (TYPEOF(SELF\Representation_relationship) <> TYPEOF(SELF));
END_ENTITY;
ENTITY String_representation_item
SUBTYPE OF (Representation_item);
string_value : STRING;
END_ENTITY;
FUNCTION item_in_context
(item : Representation_item; cntxt : Representation_context) : BOOLEAN;
LOCAL
y : BAG OF Representation_item;
END_LOCAL;
-- If there is one or more representation using both the item
-- and cntxt return true.
IF SIZEOF(USEDIN(item,'FOUNDATION_REPRESENTATION_ARM.REPRESENTATION.ITEMS')
* cntxt.representations_in_context) > 0 THEN
RETURN (TRUE);
-- Determine the bag of representation_items that reference
-- item
ELSE y := QUERY(z <* USEDIN (item , '') |
'FOUNDATION_REPRESENTATION_ARM.REPRESENTATION_ITEM' IN TYPEOF(z));
-- Ensure that the bag is not empty
IF SIZEOF(y) > 0 THEN
-- For each element in the bag
REPEAT i := 1 TO HIINDEX(y);
-- Check to see it is an item in the input cntxt.
IF item_in_context(y[i], cntxt) THEN
RETURN (TRUE);
END_IF;
END_REPEAT;
END_IF;
END_IF;
-- Return false when all possible branches have been checked
-- with no success.
RETURN (FALSE);
END_FUNCTION;
FUNCTION using_items
(item : Representation_item; checked_items : SET[0:?] OF Representation_item) : SET[0:?] OF Representation_item;
LOCAL
new_check_items : SET OF Representation_item;
result_items : SET OF Representation_item;
next_items : SET OF Representation_item;
END_LOCAL;
result_items := [];
new_check_items := checked_items + item;
-- Find the set of representation_items or founded_items
-- in which item is used directly.
next_items := QUERY(z <* bag_to_set( USEDIN(item , '')) |
('FOUNDATION_REPRESENTATION_ARM.REPRESENTATION_ITEM' IN TYPEOF(z)));
-- If the set of next_items is not empty;
IF SIZEOF(next_items) > 0 THEN
-- For each element in the set, find the using_items recursively
REPEAT i := 1 TO HIINDEX(next_items);
-- Check for loop in data model, i.e. one of the next_items
-- occurred earlier in the set of check_items;
IF NOT(next_items[i] IN new_check_items) THEN
result_items := result_items + next_items[i] +
using_items(next_items[i],new_check_items);
END_IF;
END_REPEAT;
END_IF;
-- return the set of representation_items or founded_items
-- in which the input item is used directly and indirectly.
RETURN (result_items);
END_FUNCTION;
FUNCTION using_representations
(item : Representation_item) : SET[0:?] OF Representation;
LOCAL
results : SET OF Representation;
result_bag : BAG OF Representation;
intermediate_items : SET OF Representation_item;
END_LOCAL;
-- Find the representations in which the item is used and add to the
-- results set.
results := [];
result_bag := USEDIN(item,'FOUNDATION_REPRESENTATION_ARM.REPRESENTATION.ITEMS');
IF SIZEOF(result_bag) > 0 THEN
REPEAT i := 1 TO HIINDEX(result_bag);
results := results + result_bag[i];
END_REPEAT;
END_IF;
-- Find all representation_items or founded_items
-- by which item is referenced directly or indirectly.
intermediate_items := using_items(item,[]);
-- If the set of intermediate items is not empty;
IF SIZEOF(intermediate_items) > 0 THEN
-- For each element in the set, add the
-- representations of that element.
REPEAT i := 1 TO HIINDEX(intermediate_items);
result_bag := USEDIN(intermediate_items[i],
'FOUNDATION_REPRESENTATION_ARM.REPRESENTATION.ITEMS');
IF SIZEOF(result_bag) > 0 THEN
REPEAT j := 1 TO HIINDEX(result_bag);
results := results + result_bag[j];
END_REPEAT;
END_IF;
END_REPEAT;
END_IF;
-- Return the set of representation in which the input item is
-- used directly and indirectly (through intervening
-- representation_items or founded items).
RETURN (results);
END_FUNCTION;
END_SCHEMA; -- Foundation_representation_arm
© ISO 2021 — All rights reserved