ГОСТ Р ИСО 10303-41—2022
IF relation.relating IN relatives
THEN
RETURN(FALSE);
END_IF;
x := QUERY(aor
<* bag_to_set(USEDIN(relation.relating, ’MANAGEMENT_RESOURCES_
SCHEMA.ASSIGNMENT_OBJECT_RELATIONSHIP.RELATED’))
|specific_relation IN TYPEOF(aor));
REPEAT i := 1 TO HIINDEX(x);
IF NOT acyclic_assignment_object_relationship(x[i], relatives + relation,
relating, specific_relation)
THEN
RETURN(FALSE);
END__IF;
END_REPEAT;
RETURN(TRUE);
END_FUNCTION;
(*
Определения параметров:
relation — (входной) проверяемый экземпляр представляющего отношение между присвоениями
объектов объекта assignment_object_relationship;
relatives — (входной) набор экземпляров объектов типов, входящих в список выбора типа данных
assignment_object_select. Функция проверяет, есть ли среди данного набора экземпляры, играющие
роль атрибута relating объекта assignment_object_relationship, играющего роль параметра relation;
specific_relation — (входной) полное квалифицированное наименование подтипа представляю
щего отношение между присвоениями объектов объекта assignment_object_relationship.
18.5.2 Функция acyclic_classification_assignment_relationship
Функция acyclic_classification_assignment_relationship определяет, содержит ли образованный
экземплярами представляющих присвоение классификации объектов classification_assignment граф,
содержащий в качестве одного из ребер объект classification_assignment_relationship, играющий
роль параметра relation, цепочку ссылок, образующую цикл. Настоящая функция может использовать ся
для обработки графа, ребра которого образованы объектами classification_assignment_relation-ship
или любыми подтипами этого объекта.
Функция возвращает значение TRUE (истина), если не было обнаружено циклов, в противном
случае функция возвращает значение FALSE (ложь).
Примечание — Алгоритм функции приведен в Е.2 (приложение Е).
EXPRESS-специФикаиия:
*)
FUNCTION acyclic_classification_assignment_relationship (relation :
classification_assignment_relationship; relatives :SET[1:?] OF classification_
assignment; specific_relation :STRING) :BOOLEAN;
LOCAL
x :SET OF classification_assignment_relationship;
END_LOCAL;
IF relation.relating IN relatives
THEN
RETURN(FALSE);
END_IF;
x := QUERY(car
<* bag_to_set(USEDIN(relation.relating, ’MANAGEMENT_RESOURCES_
SCHEMA.CLASSIFICATION_ASSIGNMENT__RELATIONSHIP.RELATED’))
Ispecific_relation IN TYPEOF(car));
REPEAT i ;= 1 TO HIINDEX(x);
IF NOT acyclic_classification_assignment_relationship(x[i], relatives +
relation.relating, specific_relation)
131