Source : ISO 10303-41
SCHEMA action_schema;
REFERENCE FROM
basic_attribute_schema -- ISO 10303-41
(description_attribute,
description_attribute_select,
get_description_value,
get_id_value,
get_name_value,
get_role,
id_attribute,
id_attribute_select,
name_attribute,
name_attribute_select,
object_role,
role_select,
role_association);
REFERENCE FROM
support_resource_schema -- ISO 10303-41
(bag_to_set,
identifier,
label,
text);
TYPE as_description_attribute_select =
SELECT
BASED_ON
description_attribute_select
WITH
(action_request_solution);
END_TYPE;
TYPE as_id_attribute_select =
SELECT
BASED_ON
id_attribute_select
WITH
(action);
END_TYPE;
TYPE as_name_attribute_select =
SELECT
BASED_ON
name_attribute_select
WITH
(action_request_solution);
END_TYPE;
TYPE as_role_select =
SELECT
BASED_ON
role_select
WITH
(directed_action_assignment);
END_TYPE;
TYPE supported_item =
SELECT
(action_directive,
action,
action_method);
END_TYPE;
ENTITY action;
name : label;
description :
OPTIONAL
text;
chosen_method : action_method;
DERIVE
id : identifier := get_id_value(SELF);
WHERE
WR1: SIZEOF(USEDIN(SELF, 'BASIC_ATTRIBUTE_SCHEMA.' + 'ID_ATTRIBUTE.IDENTIFIED_ITEM')) <= 1;
END_ENTITY;
ENTITY action_directive;
name : label;
description :
OPTIONAL
text;
analysis : text;
comment : text;
requests : SET[1:?] OF versioned_action_request;
END_ENTITY;
ENTITY action_directive_relationship;
name : label;
description :
OPTIONAL
STRING;
relating : action_directive;
related : action_directive;
relation_type : STRING;
WHERE
WR1: acyclic_action_directive_relationship(SELF, [related], 'ACTION_SCHEMA.ACTION_DIRECTIVE_RELATIONSHIP');
END_ENTITY;
ENTITY action_method;
name : label;
description :
OPTIONAL
text;
consequence : text;
purpose : text;
END_ENTITY;
ENTITY action_method_relationship;
name : label;
description :
OPTIONAL
text;
relating_method : action_method;
related_method : action_method;
END_ENTITY;
ENTITY action_relationship;
name : label;
description :
OPTIONAL
text;
relating_action : action;
related_action : action;
END_ENTITY;
ENTITY action_request_solution;
method : action_method;
request : versioned_action_request;
DERIVE
description : text := get_description_value(SELF);
name : label := get_name_value(SELF);
WHERE
WR1: SIZEOF(USEDIN(SELF, 'BASIC_ATTRIBUTE_SCHEMA.' + 'DESCRIPTION_ATTRIBUTE.DESCRIBED_ITEM')) <= 1;
WR2: SIZEOF(USEDIN(SELF, 'BASIC_ATTRIBUTE_SCHEMA.' + 'NAME_ATTRIBUTE.NAMED_ITEM')) <= 1;
END_ENTITY;
ENTITY action_request_status;
status : label;
assigned_request : versioned_action_request;
END_ENTITY;
ENTITY action_resource;
name : label;
description :
OPTIONAL
text;
usage : SET[1:?] OF supported_item;
kind : action_resource_type;
END_ENTITY;
ENTITY action_resource_relationship;
name : label;
description :
OPTIONAL
text;
relating_resource : action_resource;
related_resource : action_resource;
END_ENTITY;
ENTITY action_resource_type;
name : label;
END_ENTITY;
ENTITY action_status;
status : label;
assigned_action : executed_action;
END_ENTITY;
ENTITY directed_action
SUBTYPE OF (executed_action);
directive : action_directive;
END_ENTITY;
ENTITY directed_action_assignment
ABSTRACT SUPERTYPE
;
assigned_directed_action : directed_action;
DERIVE
role : object_role := get_role(SELF);
WHERE
WR1: SIZEOF(USEDIN(SELF, 'BASIC_ATTRIBUTE_SCHEMA.' + 'ROLE_ASSOCIATION.ITEM_WITH_ROLE')) <= 1;
END_ENTITY;
ENTITY executed_action
SUBTYPE OF (action);
END_ENTITY;
ENTITY versioned_action_request;
id : identifier;
version :
OPTIONAL
label;
purpose : text;
description :
OPTIONAL
text;
END_ENTITY;
ENTITY versioned_action_request_relationship;
id : identifier;
name : label;
description :
OPTIONAL
text;
relating_versioned_action_request : versioned_action_request;
related_versioned_action_request : versioned_action_request;
END_ENTITY;
FUNCTION acyclic_action_directive_relationship
(relation : action_directive_relationship; relatives : SET[1:?] OF action_directive; specific_relation : STRING) : BOOLEAN;
LOCAL x : SET of action_directive_relationship; END_LOCAL; IF relation.relating IN relatives THEN RETURN (FALSE); END_IF; x := QUERY(adr <* bag_to_set(USEDIN(relation.relating, 'ACTION_SCHEMA.' + 'ACTION_DIRECTIVE_RELATIONSHIP.' + 'RELATED')) | specific_relation IN TYPEOF(adr)); REPEAT i := 1 TO HIINDEX(x); IF NOT acyclic_action_directive_relationship(x[i], relatives + relation.relating, specific_relation) THEN RETURN (FALSE); END_IF; END_REPEAT; RETURN (TRUE);
END_FUNCTION;
FUNCTION acyclic_action_method_relationship
(relation : action_method_relationship; relatives : SET[1:?] OF action_method; specific_relation : STRING) : BOOLEAN;
LOCAL x : SET OF action_method_relationship; END_LOCAL; IF relation.relating_method IN relatives THEN RETURN (FALSE); END_IF; x := QUERY(am <* bag_to_set(USEDIN(relation.relating_method, 'ACTION_SCHEMA.' + 'ACTION_METHOD_RELATIONSHIP.' + 'RELATED_METHOD')) | specific_relation IN TYPEOF(am)); REPEAT i := 1 TO HIINDEX(x); IF NOT acyclic_action_method_relationship(x[i], relatives + relation.relating_method, specific_relation) THEN RETURN (FALSE); END_IF; END_REPEAT; RETURN (TRUE);
END_FUNCTION;
FUNCTION acyclic_action_relationship
(relation : action_relationship; relatives : SET[1:?] OF action; specific_relation : STRING) : BOOLEAN;
LOCAL x : SET OF action_relationship; END_LOCAL; IF relation.relating_action IN relatives THEN RETURN (FALSE); END_IF; x := QUERY(actn <* bag_to_set(USEDIN(relation.relating_action, 'ACTION_SCHEMA.' + 'ACTION_RELATIONSHIP.' + 'RELATED_ACTION')) | specific_relation IN TYPEOF(actn)); REPEAT i := 1 TO HIINDEX(x); IF NOT acyclic_action_relationship(x[i], relatives + relation.relating_action, specific_relation) THEN RETURN (FALSE); END_IF; END_REPEAT; RETURN (TRUE);
END_FUNCTION;
FUNCTION acyclic_action_resource_relationship
(relation : action_resource_relationship; relatives : SET[1:?] OF action_resource; specific_relation : STRING) : BOOLEAN;
LOCAL x : SET OF action_resource_relationship; END_LOCAL; IF relation.relating_resource IN relatives THEN RETURN (FALSE); END_IF; x := QUERY(ar <* bag_to_set(USEDIN(relation.relating_resource, 'ACTION_SCHEMA.' + 'ACTION_RESOURCE_RELATIONSHIP.' + 'RELATED_RESOURCE')) | specific_relation IN TYPEOF(ar)); REPEAT i := 1 TO HIINDEX(x); IF NOT acyclic_action_resource_relationship(x[i], relatives + relation.relating_resource, specific_relation) THEN RETURN (FALSE); END_IF; END_REPEAT; RETURN (TRUE);
END_FUNCTION;
FUNCTION acyclic_versioned_action_request_relationship
(relation : versioned_action_request_relationship; relatives : SET[0:?] OF versioned_action_request; specific_relation : STRING) : BOOLEAN;
LOCAL x : SET OF versioned_action_request_relationship; END_LOCAL; IF relation.relating_versioned_action_request IN relatives THEN RETURN (FALSE); END_IF; x := QUERY(varr <* bag_to_set(USEDIN(relation.relating_versioned_action_request, 'ACTION_SCHEMA.' + 'VERSIONED_ACTION_REQUEST_RELATIONSHIP.' + 'RELATED_VERSIONED_ACTION_REQUEST')) | specific_relation IN TYPEOF(varr)); REPEAT i := 1 TO HIINDEX(x); IF NOT acyclic_versioned_action_request_relationship(x[i], relatives + relation.relating_versioned_action_request, specific_relation) THEN RETURN (FALSE); END_IF; END_REPEAT; RETURN (TRUE);
END_FUNCTION;
END_SCHEMA; -- action_schema