9.4.1 Введение
Объявление отображения поддерживает задание соответствия между определениями объектных типов данных из двух или более EXPRESS-схем. Данное объявление поддерживает также отображение из множества определений исходных объектных типов данных на множество определений целевых объектных типов данных.
Синтаксис: | |
136 | map_decl = MAP map_id AS target_parameter ';' { target parameter ';' } |
47 | binding_header = [ PARTITION partition_id ';' ] [ from_clause ] [ local_decl ] [ where_clause ] [ identified_by_clause ] [ ordered_by_clause ] . |
203 | subtype_binding_header = [ PARTITION partition_id ';' ] where clause . |
90 | from clause = FROM source_parameter ';' { source parameter ';' } . |
198 | source_parameter = source_parameter_id ':' extent reference . |
83 | extent_reference = source_entity_reference | view_reference. |
137 | map_decl_body = ( entity_instantiation_loop { entity_instantiation_loop } ) | map_project_clause | ( RETURN expression ';' ). |
214 | target_parameter = target_parameter_id { ',' target_parameter_id } ':' |
213 | target_entity_reference = entity_reference { '&' entity_reference } . |
Правила и ограничения
Элемент map_id из синтаксического правила 136 присваивает имя объявлению отображения.
Пример - В данном примере объект pump из исходного набора данных отображается на объекты product и product_related_product_category: |
SCHEMA source_schema; |
ENTITY pump; |
id, name : STRING; |
END_ENTITY; |
END_SCHEMA; |
SCHEMA target_schema; |
ENTITY product; |
id, name : STRING; |
END_ENTITY; |
ENTITY product_related_product_category; |
name : STRING; |
products : SET OF product; |
END_ENTITY; |
END SCHEMA; |
SCHEMA_MAP pump_mapping; |
REFERENCE FROM source_schema AS SOURCE; |
REFERENCE FROM target_schema AS TARGET; |
MAP network_for_pump AS |
pr : product; |
prpc : product_related_product_category; |
FROM p : pump; |
SELECT |
pr.id := p.id; |
pr.name := p.name; |
prpc.name := 'pump'; |
prpc.products := [ pr ]; |
END_MAP; |
END_SCHEMA_MAP; |
Необходимо отметить, что в данном примере для каждого созданного экземпляра объекта product существует точно один созданный экземпляр объекта product_related_product_category. |
Исходные значения атрибутов вновь созданного экземпляра (экземпляров) являются неопределенными. Если такой атрибут не задан в теле отображения, то его значение остается неопределенным.
9.4.2 Вычисление значения тела отображения
Синтаксис: | |
136 | map decl = MAP map_id AS target_parameter ';' { target parameter ';' } ( map_subtype_of_clause subtype_binding_header map decl body ) | ( binding_header map_decl_body { binding_header map_decl_body } ) END_MAP ';' . |
137 | map_decl_body = ( entity_instantiation_loop { entity_instantiation_loop } ) | map_project_clause | ( RETURN expression ';' ) . |
139 | map_project_clause = SELECT { map_attribute_declaration } . |
134 | map_attribute_declaration = [ target_parameter_ref [ index qualifier ] |
Синтаксические элементы map_attribute_declaration и определяющий его map_decl_body должны присваивать значения атрибутам экземпляров целевых объектов. Элемент expression должен вырабатывать значение, совместимое по присваиванию с атрибутом целевого объекта (см. подраздел 13.3 ИСО 10303-11).
Объект map_decl_body, определяющий элемент RETURN, должен вычислять значение выражения, указанного после ключевого слова RETURN. Результатом данного вычисления должна стать реализация экземпляров целевых объектов, совместимых по типу с объектными типами данных, определяемыми целевыми параметрами. Должны быть реализованы экземпляры объектов для всех целевых параметров.
9.4.3 Итерационный процесс для одного связующего экземпляра
9.4.3.1 Введение
При вычислении отображения могут быть созданы агрегированные структуры экземпляров целевых объектных типов данных. Начальное значение этих агрегированных структур является неопределенным.
Элементы языка instantiation_loop_control и repeat_control обеспечивают следующие виды итераций:
- итерация над совокупностью экземпляров агрегированной структуры языка EXPRESS;
- итерация, наращивающая значение числовой переменной.
Синтаксис: | |
77 | entity_instantiation_loop = FOR instantiation_loop_control ';' |
139 | map_project_clause = SELECT { map_attribute_declaration } . |
119 | instantiation_loop_control = instantiation_foreach_control | repeat_controI . |
118 | instantiation_foreach_control = EACH variable_id IN expression { AND |
171 | repeat_control = [ increment_control ] [ while_control ] [ until_control ] . |
Правила и ограничения
a) Элемент языка map_project_clause (см. синтаксическое правило 139) устанавливает локальную область действия, в которой все переменные цикла variable_id (см. синтаксическое правило 118) определены неявным образом.