ГОСТ Р ИСО 10303-41—2022
х := bag_to_set(USEDIN(relation.category,
’PRODUCT_DEFINITION_SCHEMA.PRODUCT_CATEGORY_RELATIONSHIP.SUB_CATEGORY’));
local_children := children + relation.category;
IF SIZEOF(x) > 0
THEN
REPEAT i := 1 TO HIINDEX(x);
IF NOT acyclic_product_category_relationship(x[i],
local_children)
THEN
RETURN(FALSE);
END_IF;
END_REPEAT;
END_IF;
RETURN(TRUE);
END_FUNCTION;
(*
Определения параметров:
relation — (входной) проверяемый экземпляр представляющего отношение между категориями
изделий объекта action_directive_relationship;
children — (входной) набор представляющих категории изделий объектов product_category, сре
ди которых функция ищет экземпляры, играющие роль атрибута category (категория) объекта product_
category_relationship, играющего роль параметра relation.
21.5.3 Функция acyclic_product_definition_formation_relationship
Функция acyclic_product_definition_formation_relationship определяет, содержит ли образован
ный экземплярами представляющих версии изделий объектов product_definition_formation граф, со
держащий в качестве одного из ребер объект product_definition_formation_relationship,
играющий роль параметра relation, цепочку ссылок, образующую цикл. Настоящая функция может
использовать ся для обработки графа, ребра которого образованы объектами
product_definition_formation_rela-tionship или любыми подтипами этого объекта. Функция
возвращает значение TRUE (истина), если не было обнаружено циклов, в противном случае функция
возвращает значение FALSE (ложь).
Примечания
1 Алгоритм функции приведен в Е.2 (приложение Е).
2 Данная функция не используется в настоящей схеме. Определение функции приведено потому, что в дру
гих объединенных ресурсах стандартов серии ИСО 10303 и в прикладных протоколах, в которых используется
представляющий отношение между версиями изделия объект product_definition_formation_relationship, исполь
зуется правило, обращающееся к настоящей функции.
EXPRESS-специФикаиия:
*)
FUNCTION acyclic_product_definition_formation_relationship
(relation :product_definition_formation_relationship; relatives :
SET[1:?] OF product_definition_formation; specific_relation :
STRING) :BOOLEAN;
LOCAL
x :SET OF product_definition_formation_relationship;
END_LOCAL;
IF relation.relating_product_definition_formation IN relatives
THEN
RETURN(FALSE);
END_IF;
x := QUERY(pdf
<*
bag_to_set(USEDIN(relation.relating_product_definition_formation,
’PRODUCT_DEFINITION_SCHEMA.PRODUCT_DEFINITION_FORMATION_RELATIONSHIP.RELATED_
PRODUCT_DEFINITION_FORMATION1))
|specific_relation IN TYPEOF(pdf));
225