ГОСТ Р ИСО 10303-41—2022
REPEAT i := 1 ТО HIINDEX(x);
IF NOT acyclic_product_definition_formation_relationship(x[i], relatives +
relation.relating_product_definition_formation, specific_relation)
THEN
RETURN(FALSE);
END_IF;
END_REPEAT;
RETURN(TRUE);
END_FUNCTION;
(*
"
Определения параметров:
relation — (входной) проверяемый экземпляр представляющего отношение между версиями из
делий объекта product_definition_formation_relationship;
relatives — (входной) набор представляющих версии изделия объектов product_definition_
formation. Функция проверяет, есть ли среди данного набора экземпляры, играющие роль атрибута
relating_product_definition_formation объекта product_definition_formation_relationship, играющего
роль параметра relation;
specific_relation — (входной) полное квалифицированное наименование подтипа представляю
щего отношение между распоряжениями по выполнению действиями объекта product_definition_for-
mation_relationship.
21.5.4 Функция acyclic_product_definition_relationship
Функция acyclic_product_definition_relationship определяет, содержит ли образованный экзем
плярами представляющих определения изделий объектов product_definition граф, содержащий в ка
честве одного из ребер объект product_definition_relationship, играющий роль параметра relation,
цепочку ссылок, образующую цикл. Настоящая функция может использоваться для обработки графа,
ребра которого образованы объектами product_definition_ relationship или любыми подтипами этого
объекта. Функция возвращает значение TRUE (истина), если не было обнаружено циклов, в противном
случае функция возвращает значение FALSE (ложь).
Примечания
1 Алгоритм функции приведен в Е.2 (приложение Е).
2 Данная функция не используется в настоящей схеме. Определение функции приведено потому, что вдру
гих объединенных ресурсах стандартов серии ИСО 10303 и в прикладных протоколах, в которых используется
представляющий отношение между определениями изделий объект product_definition_relationship, используется
правило, обращающееся к настоящей функции.
EXPRESS-спеииФикаиия:
*)
FUNCTION acyclic_product_definition_relationship (relation :
product_definition_relationship; relatives :SET[1:?] OF
product_definition_or_reference; specific_relation :STRING) :
BOOLEAN;
LOCAL
x :SET OF product_definition_relationship;
END_LOCAL;
IF relation.relating_product_definition IN relatives
THEN
RETURN(FALSE);
END_IF;
x := QUERY(pd
<*
bag_to_set(USEDIN(relation.relating_product_definition,
’PRODUCT_DEFINITION_SCHEMA.PRODUCT_DEFINITION_RELATIONSHIP.RELATED_
PRODUCT_DEFINITION’))
|specific_relation IN TYPEOF(pd));
REPEAT i := 1 TO HIINDEX(x);
IF NOT acyclic_product_definition_relationship(x[i], relatives +
226