ГОСТ Р ИСО 10303-14—2015
структура должна содержать экземпляры только тех объектов, тип данных которых соответствует эле
менту
extent reference
или одному из его подтипов.
Синтаксис:
88 forward path qualifier = ’::’ attribute ref [ path_ condition ] .
154 path condition = ’i’extent reference ( ’Г logical expression J ,)’ .
Правила и ограничения
a) Оператор прямого пути не должен использоваться в образах схем, относящихся к классу соот
ветствия 1.
b
) Переменная, имя которой совпадает с именем элемента
extent reference,
является не
явно объявленной в области действия оператора прямого пути.
Примечания
1 Данная переменная недолжнабытьобъявлена где-либоеще, и она не будет существовать за пределами
данногооператора.
2 Использование оператора прямого пути иллюстрирует пример в 10.9.
Если логическое выражение
logical expression
из синтаксического правила 154 задано, то
элементы выбираются по очереди из пространства, на которое дана ссылка, и связываются с неявно
объявленной переменной. Затем вычисляется значение логического выражения
ioqical expres
sion
с учетом данного связывания. Для каждого такого связывания переменной проверяется, явля ется
ли значением логического выражения
logical expression TRUE,
и если это так, то данный элемент
добавляется к результату, в противном случае данный элемент к результату не добавляется.
Примечание — Функция
unnest,
использованная а приведенном ниже примере, принимает один
аргумент произвольного типа данных (включая вложенные агрегированные структуры) и возвращает агреги
рованную структуру, элементы которой не относятся к агрегированному типу данных. Например обращение
unnest([
[а]
, [Ь ,с] , [
[d]
] ]) возвращает результат
(а
,b ,с ,
d]
. Определение функции
unnest
приведено в
приложении Е.
Пример — Для некоторого множества элементов
а,
ссылки на объект
product
и атрибута эк
земпляров
ofjproduct
выражение
result:=а::of_product(product)
эквивалентно следующей
EXPRESS-спецификации:
LOCAL
result :AGGREGATE OF GENERIC :■ [];
tmp :AGGREGATE OF GENERIC :■ [];
END_LOCAL;
tmp :* unnest(a);
REPEAT i :■ 1 TO HIINDEX(tmp);
resultresult + QUERY(e <* unnest(tmp[ij.of_product)|
•SCHEMA_NAM£.PRODUCT’ IN TYPEOF(e));
END_REPEAT;
result :» unnest (result);
Выражение re s u l
t:=a;:x
эквивалентно следующей EXPRESS-спецификации:
result :«* IJ;
tmp :« unnest(a);
REPEAT i :■ 1 TO HIINDEX(tmp);
result :« result ♦ unnest(tmp[i].x);
END_R£PEAT;
result := unnest(result)
10.9 Оператор обратного пути
Оператор обратного пути (<-) создает агрегированную структуру экземпляров объектов, используя
выражение, расположенное справа от данного оператора. Вычисление выражения
а <-х
(
b
|
с
) в
результате дает агрегированную структуру экземпляров объектов, в которой для каждого ее элемента
е
справедливы следующие утверждения:
- атрибут
х
элемента
е
ссылается на элемент невложенного
а:
41