ГОСТ Р ИСО 10303-14—2015
В отображении подтипа может присутствовать ссылка на задание целевого атрибута, на задание
которого имеется ссылка в одном из его супертипов (возможно, через несколько уровней наследования).
При этом целевому атрибуту задается значение, соответствующее значению самого конкретизирован
ного отображения, которому соответствуют критерии выбора, а также критерии выбора его супортипов.
Отображение подтипа должно иметь только одно отображение непосредственного супертипа.
Пример
—
Данный пример иллюстрирует задание атрибутов, объявленных
в
супертипах и под
типах с помощью отображений супертипов и подтипов. Исходные объекты относятся к одному типу
данных
s_project.
Целевые объекты относятся к типу данных
t_project
и, возможно, к одному
из его подтипов
in_house_project
или
external_project.
Синтаксический элемент
target_
parameter_id,
представленный элементом
tp.
использованным в отображении супертипа
(project_map),
используется снова
в
отображениях его подтипов
(in_house_map,ext_map),
указы
вая на то. что соответствующий целевой объект конкретизирован в отображениях подтипов.
SCHEMA source_8chema;
ENTITY s_project;
name : STRING;
project_type : STRING;
cost : INTEGER;
price ; INTEGER;
vendor : STRING;
END_ENTITY;
END_SCHEMA;
SCHEMA target_schema;
ENTITY t_project
SUPERTYPE OF (ONEOF (in_housejproject, external_project));
name : STRING;
cost : INTEGER;
management : STRING;
END_ENTITY;
ENTITY in_house_project
SUBTYPE OF (t_project);
END_ENTITY;
ENTITY external_project
SUBTYPE OF (t_project);
price : INTEGER;
END_ENTITY;
END SCHEMA;
SCHEMA_MAP example;
REFERENCE FROM source_schema AS SOURCE;
REFERENCE FROM target_schema AS TARGET;
MAP project_map AS tp : target_schema.t_project;
FROM p : source_8chema.s_project;
SELECT
tp.name :* p.name;
tp.costp.cost;
END MAP;
MAP in_house_raap AS tp : target_schema.in_house_project;
SUBTYPE OF (project_map);
WHERE (p.project_type в ’in house’);
SELECT
tp.management IF (p.cost < 50000) THEN ’small accts’
ELSE ’large accts’ END_IF;
END MAP;
MAP ext_map AS tp : target_schema.externaljproject;
SUBTYPE OF (project_map);
WHERE (p.project_type « ’external’);
24