4.2.1 Введение
Настоящая спецификация определяет язык и модель исполнения. Модель исполнения состоит из двух фаз - процесса связывания и процесса реализации. При оценке образов и отображений используется общий процесс связывания, но их процессы реализации различаются.
4.2.2 Процесс связывания
Связующей средой является среда, в которой переменным присваиваются значения. Связующий экземпляр представляет собой структуру, которая связывает переменные, объявленные в элементе языка FROM из объявления образа или отображения. Элемент языка FROM ссылается на исходные пространства объектов и пространства образов. Границы значений берутся из этих исходных пространств. Каждый связующий экземпляр входит в набор, определяемый как декартово произведение ссылочных исходных пространств. Рассчитанный таким образом набор связующих экземпляров является связующим пространством для данного образа или отображения при заданных исходных пространствах. Связки переменных в связующем экземпляре образуют среду для оценки тела образа или отображения в процессе реализации, когда ссылочные данные в связующем экземпляре соотносятся со структурами, создаваемыми в целевой совокупности. Таким образом, каждый связующий экземпляр соответствует экземпляру типа данных образа (образов) либо экземплярам целевого объектного типа данных (отображениям) в целевой совокупности.
Исходные пространства отображений и образов должны быть пространствами объектных типов данных или пространствами образов.
Зацикливание между ссылками и исходными пространствами запрещено.
Примеры
1 В процессе связывания, относящемся к образу, данным и схеме и определенном в примере из 4.1, вычисляется связующее пространство объекта person_org {<#1, #31>,<#1, #32>,<#2, #31>,<#2, #32>}. Данное пространство представлено ниже в табличной форме:
Связующий экземпляр | person | organization | |||
# | first_name | last_name | # | department_name | |
<#1,#31> | #1 | 'James' | 'Smith' | #31 | 'Engineering' |
<#1,#32> | #1 | 'James' | 'Smith' | #32 | 'Sales' |
<#2,#31> | #2 | 'Fredrick' | 'Jones' | #31 | 'Engineering' |
<#2,#32> | #2 | 'Fredrick' | 'Jones' | #32 | 'Sales' |
2 Приведенный ниже образ схемы invalid является примером неправильного образа схемы, так как он содержит цикл ссылок (образ а ссылается на образ b, который ссылается на образ а):
SCHEMA_VIEW invalid; |
VIEW а; |
FROM some_b : b; |
attr1 : INTEGER := some_b.attr2 + 2; |
END_VIEW; |
VIEW b; |
FROM some_a : a; |
attr2 : INTEGER := some_a.attr1 * 3; |
END_VIEW; |
END_SCHEMA_VIEW; |
4.2.3 Процесс реализации
Связующей средой является среда, в которой переменным присваиваются значения, используемые во время процесса реализации. Каждый связующий экземпляр содержит набор значений, которые должны быть использованы в качестве границ переменных. Процесс реализации образа является процессом оценки тела образа (см. 9.3.2) для каждого связующего экземпляра в связующем пространстве. Порядок оценки связующих экземпляров не определен.
Примеры | |
1 Процесс связывания, относящийся к объявлению схемы, данных и образа из примера в 4.1, дает в результате связующее пространство объекта person_org: {<#1, #31>, <#1, #32>, <#2, #31>,<#2, #32>}. Объявление образа и данные, использованные в примере из 4.1, здесь приведены еще раз: | |
VIEW person_org; | |
FROM р: person; о : organization; -- определяет порядок | |
SELECT | |
name : STRING := p.last_name; | |
org : STRING := о.department_name; | |
END_VIEW; | |
#1=PERSON('James', 'Smith'); | |
#2=PERSON('Fredrick', 'Jones'); | |
#31=ORGANIZATION ('Engineering'); | |
#32=ORGANIZATION ('Sales') | |
Связующий экземпляр <#1,#31> соответствует заданию экземпляра объектного типа данных #1 переменной р и объектного типа данных #31 переменной о. Оценка тела образа в данном связующем пространстве дает в результате экземпляр типа данных образа со значением 'Smith' для атрибута name и значением 'Engineering' для атрибута org. Экземпляры типа данных образа могут быть закодированы так же, как если бы они были экземплярами объектного типа данных, с помощью кодирования, определенного в ИСО 10303-21 [2]. Пространство образа для данного примера выглядит следующим образом: | |
#100=PERSON_ORG ('Smith', 'Engineering'); | /* <#1,#31> */ |
#101=PERSON_ORG ('Smith', 'Sales'); | /* <#1,#32> */ |
#102=PERSON_ORG ('Jones', 'Engineering'); | /* <#2,#31> */ |
#103=PERSON_ORG ('Jones', 'Sales'); | /* <#2,#32> */ |
2 Целевая EXPRESS-схема и отображение схемы со структурой, подобной структуре образа схемы, использованного в предыдущем примере, могут быть определены следующим образом: | |
SCHEMA similar_target; | |
ENTITY person_org; | |
name : STRING; | |
org : STRING; | |
END_ENTITY; | |
END_SCHEMA; | |
SCHEMA_MAP similar; | |
REFERENCE FROM person_and_org_schema AS SOURCE; | |
REFERENCE FROM similar_target AS TARGET; | |
MAP person_org_map AS | |
po : person_org; | |
FROM | |
p : person; | |
о : organization; | |
SELECT | |
po.name := p.last_name; | |
po.org := о.department_name; | |
END_MAP; | |
END_SCHEMA_MAP; | |
Оценка данных из предыдущего примера дает в результате следующие экземпляры объектного типа данных, управляемого схемой similar_target: | |
#100=PERSON_ORG ('Smith', 'Engineering'); | /* <#1,#31> */ |
#101=PERSON_ORG ('Smith', 'Sales'); | /* <#1,#32> */ |
#102=PERSON_ORG ('Jones', 'Engineering'); | /* <#2,#31> */ |
#103=PERSON_ORG ('Jones', 'Sales'); | /* <#2,#32> */ |
Если выражение в правой части задания тела объявления отображения (образа) состоит только из ссылок на атрибуты (.) от исходного объекта и ссылочный атрибут задан в явном виде, то отображение данного атрибута целевого объекта (атрибута образа) будет двунаправленным. | |
3 В приведенном ниже фрагменте, является ли атрибут po.dept_number двунаправленным или нет, зависит от сущности функции dept_func: | |
MAP person_org_map AS | |
po : person_org; | |
FROM | |
p: person; | |
о : organization; | |
SELECT | |
po.name := p.last name; -- двунаправленный | |
po.org : = о.department name; -- двунаправленный | |
po.industry_code := о.owning_enterprise.industry.code_num; -- двунаправленный | |
po.dept number := dept_func (o.department_name); -- возможно, не двунаправленный | |
END_MAP; |
В данном подразделе определены только основные аспекты модели исполнения. Детали процесса связывания описаны в 9.2. Детали процесса реализации для образов описаны в 9.3, а для отображений - в 9.4.