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

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

     J.1 Пример модели единой схемы


Модель в данном примере в основном утверждает, что личность может быть мужчиной или женщиной. Каждая личность имеет некоторые определяющие характеристики, такие как имя и фамилия, дата рождения, тип волос, а также может иметь или не иметь детей (которые, конечно, также являются людьми). Мужчина может быть женат на женщине. В этом случае женщина имеет инверсную взаимосвязь с данным мужчиной.

Возраст (объект age) личности является вычисляемым атрибутом, который рассчитывается с помощью функции years, определяющей число лет между датой, вводимой в качестве параметра, и текущей датой.

Личность (объект person) имеет инверсный атрибут, связывающий детей со своими родителями. Нижней границей данного инверсного атрибута является 0, чтобы обеспечить ненужность предоставления всей родословной.

Примечание - Если бы объект parents (родители) был необходимым явным атрибутом, а объект children (дети) - его инверсным атрибутом, то родословную надо было бы раскручивать назад во времени.


Пример - Модель единой схемы на языке EXPRESS.

SCHEMA example;
TYPE date = ARRAY [1 : 3] OF INTEGER;
END_TYPE;
TYPE hair_type = ENUMERATION OF

(blonde,
brown,
black,
red,
white,
bald);

END_TYPE;
ENTITY person;

first_name : STRING;
last_name : STRING;
nickname: OPTIONAL STRING;
birth_date : date;
children : SET [0 : ?] OF person;
hair: hair_type;

DERIVE

age : INTEGER : = years (birth_date);

INVERSE

parents : SET [0 : 2] OF person FOR children;

END_ENTITY;
SUBTYPE_CONSTRAINT sc_person FOR person;

ONEOF (female, male);

END_SUBTYPE_CONSTRAINT;
ENTITY female

SUBTYPE OF (person);

INVERSE

husband : SET [0 :1] OF male FOR wife; -- муж является необязательным!

END_ENTITY;
ENTITY male

SUBTYPE OF (person);
wife : OPTIONAL female;

END_ENTITY;
FUNCTION years (past : date): INTEGER;

(* "years" Данная функция рассчитывает число лет
     между датой в прошлом и текущей датой*)

END_FUNCTION;
END_SCHEMA;