ГОСТ Р ИСО 10303-41—2022
EXPRESS-спеииФикация:
*)
ENTITY approval_status;
name :label;
END_ENTITY;
(*
Определение атрибута:
name — представленное строковым типом данных label, наименование представленного объек
том approval_status состояния утверждения.
Примечание — Определение смысла настоящего атрибута может содержаться или в EXPRESS-схемах
с примечаниями, в которых используется настоящий объект или его подтипы, или на основе соглашения об общем
понимании между партнерами, совместно использующими эту информацию.
6.5Определения функций схемы approval_schema
6.5.1 Функция acyclic_approval_relationship
Функция acyclic_approval_relationship определяет, содержит ли образованный экземплярами
представляющих утверждение объектов approval граф, содержащий в качестве одного из ребер объ ект
approval_relationship, играющий роль аргумента relation, цепочку ссылок, образующую цикл. На
стоящая функция может использоваться для обработки графа, ребра которого образованы объектами
approval_relationship или любыми подтипами этого объекта.
Функция возвращает значение TRUE (истина), если не было обнаружено циклов, в противном
случае функция возвращает значение FALSE (ложь).
Примечания
1 Алгоритм функции приведен в Е.2 (приложение Е).
2 Данная функция не используется в настоящей схеме. Определение функции приведено потому, что в дру
гих объединенных ресурсах стандартов серии ИСО 10303 и в прикладных протоколах, в которых используется
представляющий отношение между утверждениями объект approval_relationship, используется правило, обраща
ющееся к настоящей функции.
EXPRESS-специФикация:
*)
FUNCTION acyclic_approval_relationship (relation :
approval_relationship; relatives :SET[1:?] OF approval;
specific_relation :STRING) :BOOLEAN;
LOCAL
x :SET OF approval_relationship;
ENDJLOCAL;
IF relation.relating_approval
IN relatives THEN
RETURN (FALSE);
END_IF;
x := QUERY(app <*
bag_to_set(USEDIN(relation.relating__approval, ’APPROVAL_SCHEMA.’+
’APPROVAL_RELATIONSHIP.’ + ’RELATED__APPROVAL’)) |
specific_relation IN TYPEOF(app));
REPEAT i := 1 TO HIINDEX(x);
IF NOT acyclic_approval_relationship(x[i], relatives +
relation.relating_approval, specific_relation) THEN
RETURN (FALSE);
END_IF;
END_REPEAT;
RETURN (TRUE);
END_FUNCTION;
(*
33