ГОСТ Р ИСО 10303-46-2002
5.6 Определения функций схемы описания представления
5.6.1 Ф у н к ц и я а с у с 1i с_с о m р о s i t еJ e x I
Функция acyclic_compositeJext проверяет экземпляр объекта eompositejext с точки зрения
его участия в самоопределении. Она возвращает значении TRUE, если экземпляр eompositejext
является ацикличным (не входит в собственное определение), и значение FALSE — в
противном случае.
Данная функция изначально проводит проверку набора объектов collectcd_text и возвращает
значение FALSE при его наличии. Затем функция создает локальный набор всех экземпляров
composite_text в собственном наборе объектов co!!ected_text. Далее вносит вданный набор все экзем
пляры composite_text. которые ссылаются на примитив text_string_represcntation, использованный
объектом representationmap из любого примитива annotationJext. входящего в набор объектов
collected_tcxt. Созданный локальный набор, внесенный в заданный набор экземпляров, всегда про
веряется функцией. Если общий проверенный набор экземпляров не увеличился, это означает за
вершение проверки функцией всех возможных вариантов, и она возвращает значение TRUE. В про
тивоположном случае данная функция вызывается повторно для дальнейшей рекурсивной провер
ки.
EXPRESS-спениФикаиня
*)
FUNCTION acyclic_composite_text (startj;omposite : eompositejext;
childjext: SET |1:?| OF
text or character) : LOGICAL;
LOCAL
i : INTEGER
local_compositejext
local jmnotationjext
; SET |0:?| OF eompositejext;
: SET |():?| OF annotationJext;
local children: SET |0:?j OF text or„character;
e n d
J
local
;
local_composite_text ;= QUERY (child <* childjext |
( PRESENTATION DEFINITION SCHEMA.COMPOSITE TEXT
IN TYPEOF (child)));
IF (SYZEOF (local_compositejext) > 0 THEN
REPEAT i := I TO HIINDEX (local jrompositejext);
IF (start composite ;=: local composite text|i|) THEN
RETURN (FALSE);
END IF;
END REPEAT;
ENDJF;
local_children := childjext;
IF (SIZEOF (localjompositejext) > 0 THEN
REPEAT i := 1 TO HIINDEX (localjompositejext);
Iocal_children := local_children +
local composite text|i].collectedjext;
END REPEAT;
END_IF~
local_annotationjext := QUERY (child <• childjext |
(’PRESENTATION DEFINITION SCHEMA.ANNOTATION TEXT
IN TYPEOF (child))):
IF (SYZEOF (localjmnotationjext) > 0 THEN
REPEAT i := 1 TO HIINDEX (localjmnotationjext);
local_children := local_chik)ren +
QUERY (item <* local_annotationjext|i|\mappedjtem.
mapping source.mapped_representation.items |
SIZEOF (^PRESENTATION DEFINITION SCHEMA.ANNOTATION TEXT
PRESENTATIONlDEFINmON_SCHEMA.COM POSlTE_TEXTj*
TYPEOF (item)) > 0);
50