ГОСТ Р ИСО 10303-41—2022
relation.relating_product_definition, specific_relation)
THEN
RETURN(FALSE);
END_IF;
END_REPEAT;
RETURN(TRUE);
END_FUNCTION;
(*
Определения параметров:
relation — (входной) проверяемый экземпляр представляющего отношение между определения
ми изделий объекта product_definition_relationship;
relatives — (входной) набор представляющих определения изделий объектов product_definition.
Функция проверяет, есть ли среди данного набора экземпляры, играющие роль атрибута relating_
product_definition объекта product_definition_ relationship, играющего роль параметра relation;
specific_relation — (входной) полное квалифицированное наименование подтипа представляю
щего отношение между определениями изделий объекта product_definition_relationship.
21.5.5 Функция acyclic_product_relationship
Функция acyclic_product_relationship определяет, содержит ли образованный экземплярами
представляющих изделия объектов product граф, содержащий в качестве одного из ребер объект
product_relationship, играющий роль параметра relation, цепочку ссылок, образующую цикл. Настоя
щая функция может использоваться для обработки графа, ребра которого образованы объектами prod-
uct_relationship или любыми подтипами этого объекта. Функция возвращает значение TRUE (истина),
если не было обнаружено циклов, в противном случае функция возвращает значение FALSE (ложь).
Примечания
1 Алгоритм функции приведен в Е.2 (приложение Е).
2 Данная функция не используется в настоящей схеме. Определение функции приведено потому, что в дру
гих объединенных ресурсах стандартов серии ИСО 10303 и в прикладных протоколах, в которых используется
представляющий отношение между изделиями объект product_relationship, используется правило, обращающе
еся к настоящей функции.
EXPRESS-специФикация:
*)
FUNCTION acyclic_product_relationship (relation :
product_relationship; relatives :SET[1:?] OF product;
specific_relation :STRING) :BOOLEAN;
LOCAL
x :SET OF product_relationship;
END_LOCAL;
IF relation.relating_product IN relatives
THEN
RETURN(FALSE);
END_IF;
x := QUERY(prod
<* bag_to_set(USEDIN(relation.relating_product,
’PRODUCT_DEFINITION_SCHEMA.PRODUCT_RELATIONSHIP.RELATED_PRODUCT’))
|specific_relation IN TYPEOF(prod));
REPEAT i := 1 TO HIINDEX(x);
IF NOT acyclic_product_relationship(x[i], relatives +
relation.relating_product
,
specific_relation)
THEN
RETURN(FALSE);
END_IF;
END_REPEAT;
RETURN(TRUE);
END_FUNCTION;
(*
227