Статус документа
Статус документа

ГОСТ Р ИСО 10303-14-2015 Системы автоматизации производства и их интеграция. Представление данных об изделии и обмен этими данными. Часть 14. Методы описания. Справочное руководство по языку EXPRESS-X (Переиздание)

     4.2 Основные принципы модели исполнения

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.