---
title: "\"ГОСТ Р ИСО 13584-20-2006. Национальный стандарт Российской Федерации. Системы автоматизации производства и их интеграция. Библиотека деталей. Часть 20. Логический ресурс. Логическая модель выражений\""
number: "ГОСТ Р ИСО 13584-20-2006"
issuer: "Федеральное агентство по техническому регулированию и метрологии"
status: действует
canonical: "https://bukva.ai/docs/gost-r-iso-13584-20-2006"
---

## "ГОСТ Р ИСО 13584-20-2006. Национальный стандарт Российской Федерации. Системы автоматизации производства и их интеграция. Библиотека деталей. Часть 20. Логический ресурс. Логическая модель выражений"

# "ГОСТ Р ИСО 13584-20-2006. Национальный стандарт Российской Федерации. Системы автоматизации производства и их интеграция. Библиотека деталей. Часть 20. Логический ресурс. Логическая модель выражений"

(утв. и введен в действие Приказом Ростехрегулирования от 27.12.2006 N 484-ст)

> [!IMPORTANT]
> Документ [введен](#p100013) в действие с 1 июля 2007 года.


<div align="right">

<a id="p100001"></a>Утвержден и введен в действие<br>
Приказом Федерального агентства<br>
по техническому регулированию<br>
и метрологии<br>
от 27 декабря 2006 г. N 484-ст

</div>


<a id="p100002"></a>**НАЦИОНАЛЬНЫЙ СТАНДАРТ РОССИЙСКОЙ ФЕДЕРАЦИИ**

<a id="p100003"></a>**СИСТЕМЫ АВТОМАТИЗАЦИИ ПРОИЗВОДСТВА И ИХ ИНТЕГРАЦИЯ**

<a id="p100004"></a>**БИБЛИОТЕКА ДЕТАЛЕЙ**

<a id="p100005"></a>**ЧАСТЬ 20**

<a id="p100006"></a>**ЛОГИЧЕСКИЙ РЕСУРС. ЛОГИЧЕСКАЯ МОДЕЛЬ ВЫРАЖЕНИЙ**

<a id="p100007"></a>Industrial automation systems and integration.
Parts library. Part 20. Logical resource. Logical model
of expressions

<a id="p100008"></a>**ISO 13584-20:1998**
Industrial automation systems and integration - Parts
library - Part 20: Logical resource: Logical model
of expressions
**(IDT)**

<a id="p100009"></a>**ГОСТ Р ИСО 13584-20-2006**

<div align="right">

<a id="p100010"></a>Группа П87

<a id="p100011"></a>ОКС 25.040.40

<a id="p100012"></a>ОКСТУ 4002

<a id="p100013"></a>Дата введения<br>
1 июля 2007 года

</div>


<div align="center">

<a id="p100014"></a>Предисловие

</div>


<a id="p100015"></a>Цели и принципы стандартизации в Российской Федерации установлены Федеральным законом от 27 декабря 2002 г. N 184-ФЗ "О техническом регулировании", а правила применения национальных стандартов Российской Федерации - ГОСТ Р 1.0-2004 "Стандартизация в Российской Федерации. Основные положения"

<a id="p100016"></a>Сведения о стандарте

<a id="p100017"></a>1 ПОДГОТОВЛЕН Государственным научным учреждением "Центральный научно-исследовательский и опытно-конструкторский институт робототехники и технической кибернетики" на основе собственного аутентичного перевода стандарта, указанного в пункте 4
<a id="p100018"></a>2 ВНЕСЕН Техническим комитетом по стандартизации ТК 459 "Информационная поддержка жизненного цикла изделий"
<a id="p100019"></a>3 УТВЕРЖДЕН И ВВЕДЕН В ДЕЙСТВИЕ Приказом Федерального агентства по техническому регулированию и метрологии от 27 декабря 2006 г. N 484-ст
<a id="p100020"></a>4 Настоящий стандарт идентичен международному стандарту ИСО 13584-20:1998 "Системы автоматизации производства и их интеграция. Библиотека деталей. Часть 20. Логический ресурс. Логическая модель выражений" (ISO 13584-20:1998 "Industrial automation systems and integration - Parts library - Part 20: Logical resource: Logical model of expressions"). При применении настоящего стандарта рекомендуется использовать вместо ссылочных международных стандартов соответствующие им национальные стандарты Российской Федерации, сведения о которых приведены в дополнительном [приложении G](#p102105)
<a id="p100021"></a>**5 ВВЕДЕН ВПЕРВЫЕ**

<a id="p100022"></a>Информация об изменениях к настоящему стандарту публикуется в ежегодно издаваемом информационном указателе "Национальные стандарты", а текст изменений и поправок - в ежемесячно издаваемых информационных указателях "Национальные стандарты". В случае пересмотра (замены) или отмены настоящего стандарта соответствующее уведомление будет опубликовано в ежемесячно издаваемом информационном указателе "Национальные стандарты". Соответствующая информация, уведомление и тексты размещаются также в информационной системе общего пользования - на официальном сайте Федерального агентства по техническому регулированию и метрологии в сети Интернет

<div align="center">

<a id="p100023"></a>Введение

</div>


<a id="p100024"></a>Настоящий стандарт входит в комплекс стандартов ИСО 13584, устанавливающих требования к компьютерному представлению и обмену данными из библиотеки деталей. Цель комплекса - обеспечить нейтральный механизм передачи данных из библиотеки деталей независимо от того, какое приложение использует эти данные. Поэтому этот комплекс пригоден не только для обмена файлами, содержащими сведения о деталях, но также является основой для реализации и совместного использования баз данных, содержащих библиотеки деталей.
<a id="p100025"></a>Каждая часть комплекса устанавливает требования, относящиеся к одной из тематических групп: концептуальные описания, логические ресурсы, ресурсы реализации, методология описания, аттестационное тестирование, протокол обмена представлениями и стандартизованное содержимое. Описания тематических групп приведены в ИСО 13584-1. Настоящий стандарт устанавливает требования, относящиеся к тематической группе логических ресурсов.
<a id="p100026"></a>В настоящем стандарте установлены универсальные конструкции ресурсов на языке EXPRESS, необходимые для моделирования выражений, детализация которых приведена в других частях комплекса стандартов ИСО 13584. Эти конструкции могут также использоваться вне рамок этого комплекса там, где информационные модели выражений на языке EXPRESS могут быть полезными.

1. <a id="p100027"></a>Область применения

<a id="p100028"></a>Настоящий стандарт устанавливает:
- <a id="p100029"></a>EXPRESS-схему для обобщенных выражений;
- <a id="p100030"></a>EXPRESS-схему для выражений, которая моделирует подмножество допустимых выражений на языке EXPRESS, требования к которому установлены в ИСО 10303-11, соответствующее целому, вещественному, булевому и строковому типам данных. В этой схеме используются ресурсы, определенные в схеме обобщенных выражений.
<a id="p100031"></a>Область применения настоящего стандарта распространяются на:
- <a id="p100032"></a>обмен выражениями, которые содержат как константы, так и переменные;
- <a id="p100033"></a>функцию, которая проверяет, должно ли числовое выражение быть приведено к целому значению;
- <a id="p100034"></a>константы, которые обеспечивают семантическую корректность выражения;
- <a id="p100035"></a>вычисление переменных или функций, используемых в выражении;
- <a id="p100036"></a>функцию, которая проверяет, может ли выражение быть отображено на языке запросов SQL.
<a id="p100037"></a>Область применения настоящего стандарта не распространяется на:
- <a id="p100038"></a>присвоение значений переменных в пределах некоторого контекста;
- <a id="p100039"></a>переключающий механизм, который вычисляет значение выражения в заданном контексте.

2. <a id="p100040"></a>Нормативные ссылки

<a id="p100041"></a>В настоящем стандарте использованы ссылки на следующие международные стандарты:
<a id="p100042"></a>ИСО/МЭК 9075:1992 Информационные технологии. Языки баз данных. SQL
<a id="p100043"></a>ИСО 10303-11:1994 Системы автоматизации производства и их интеграция. Представление данных об изделии и обмен этими данными. Часть 11. Методы описания. Справочное руководство по языку EXPRESS
<a id="p100044"></a>ИСО 10303-44:1994 Системы автоматизации производства и их интеграция. Представление данных об изделии и обмен этими данными. Часть 44. Интегрированные обобщенные ресурсы. Конфигурация структуры изделия

3. <a id="p100045"></a>Термины, определения и сокращения


#### <a id="p100046"></a>3.1 Термины, определенные в ИСО 10303-11

<a id="p100047"></a>В настоящем стандарте использованы следующие термины с соответствующими определениями.
<a id="p100048"></a>3.1.1 тип данных (data type): Область значений.
<a id="p100049"></a>3.1.2 объект (entity): Класс информации, определенный общими свойствами.
<a id="p100050"></a>3.1.3 тип данных объекта (entity data type): Представление объекта. Тип данных объекта устанавливает область значений, определяемую общими атрибутами и ограничениями.
<a id="p100051"></a>3.1.4 экземпляр объекта (типа данных) (entity (data type) instance): Обозначенный блок данных, который представляет блок информации внутри класса, определенного объектом, и принадлежит к области значений, установленной типом данных объекта.

#### <a id="p100052"></a>3.2 Термины, определенные в ИСО 10303-44

<a id="p100053"></a>В настоящем стандарте использованы следующие термины с соответствующими определениями.
<a id="p100054"></a>3.2.1 узел-предок (ancestor node): Любой узел, к которому можно прийти из данного узла путем последовательного обхода его связей в обратном направлении. Для заданного узла его узлами-предками являются все узлы-родители, все узлы-родители этих узлов-родителей и т.д.
<a id="p100055"></a>3.2.2 подчиненный узел (child node): Узел, на который непосредственно указывает связь.
<a id="p100056"></a>3.2.3 узел-потомок (descendent node): Любой узел, к которому можно прийти из данного узла путем последовательного обхода его связей. Для заданного узла узлами-потомками являются все подчиненные узлы, все подчиненные узлы этих подчиненных узлов и т.д.
<a id="p100057"></a>3.2.4 ориентированный ациклический граф (directed acyclic graph): Набор узлов и связей, в котором ни один узел не является узлом-предком (или узлом-потомком) по отношению к самому себе.
<a id="p100058"></a>3.2.5 связь (link): Однонаправленное отношение одного узла с другим внутри ориентированного ациклического графа.
<a id="p100059"></a>3.2.6 узел (node): Элемент ориентированного ациклического графа, соединенный с другим подобным элементом посредством связей.
<a id="p100060"></a>3.2.7 узел-родитель (parent node): Узел, из которого исходит связь.

#### <a id="p100061"></a>3.3 Другие термины и определения

<a id="p100062"></a>В настоящем стандарте использованы следующие термины с соответствующими определениями.
<a id="p100063"></a>3.3.1 арность оператора (arity of an operator): Максимальное число операндов, которые должны быть связаны с оператором.
<a id="p100064"></a>3.3.2 бинарный оператор (binary operator): Оператор, арность которого равна двум.
<a id="p100065"></a>3.3.3 среда (environment): Связь между синтаксисом и семантикой.
<a id="p100066"></a>*Примечание* - В контексте настоящего стандарта объект environment привязывает к объекту generic_variable (синтаксису) соответствующее ему значение (семантику), представленное объектом variable_semantics.

<a id="p100067"></a>3.3.4 оценка (evaluation): Вычисление значения, представленного в виде выражения.
<a id="p100068"></a>3.3.5 выражение (expression): Набор переменных и/или констант, которые объединяются операторами.
<a id="p100069"></a>Примечания
<a id="p100070"></a>1 Выражение определяет функцию, чьими аргументами являются переменные, встречающиеся в выражении.
<a id="p100071"></a>2 Структурой, представляющей выражение, является ориентированный ациклический граф, узлами которого являются операторы, константы и переменные. Связи в этом графе представляют собой однонаправленное отношение каждого оператора со своими аргументами, которые также могут быть выражениями.

<a id="p100072"></a>3.3.6 тип данных выражения (expression data type): Область, в которой должны находиться значения результата выражения.
<a id="p100073"></a>*Примечание* - В настоящем стандарте контроль типа и синтез типа проводят только для схемы ISO13584_expressions_schema. Контроль типа обеспечивается структурой и правилами этой EXPRESS-схемы. Синтез типа выполняется EXPRESS-функцией TYPEOF, которая определяет, принадлежит ли объект expression к numeric_expression, Boolean_expression или string_expression, а также функцией is_int, которая определяет, относится ли значение numeric_expression к типу INTEGER.

<a id="p100074"></a>3.3.7 интерпретация (interpretation): Функция, которая возвращает семантику, связанную с каждой переменной.
<a id="p100075"></a>*Примечание* - Данная функция использует среду, которая связывает переменную с соответствующей ей семантикой (и, может быть, с ее возможным значением).

<a id="p100076"></a>3.3.8 оператор большой арности (multiple arity operator): Оператор, арность которого больше двух.
<a id="p100077"></a>3.3.9 оператор (operator): Функция, которая соединяет одно или несколько значений, называемых операндами, чтобы выработать значение, называемое результатом.
<a id="p100078"></a>*Примечание* - Определение оператора включает в себя определение типов данных его операндов и результата.

<a id="p100079"></a>3.3.10 семантика (semantics): Смысл заданного понятия.
<a id="p100080"></a>*Пример* - Семантикой переменной является смысл, выраженный посредством этой переменной.

<a id="p100081"></a>*Примечание* - В контексте настоящего стандарта семантика представлена объектом variable_semantics. Типом этого объекта является ABSTRACT SUPERTYPE, который может быть использован для передачи конкретных смыслов и значений.

<a id="p100082"></a>3.3.11 синтаксическое представление (syntactic representation): Последовательность символов, которая представляет заданное понятие.
<a id="p100083"></a>Примечания
<a id="p100084"></a>1 В общепринятых языках программирования последовательность символов, используемая для представления различных понятий, должна подчиняться набору правил, называемому синтаксисом языка.
<a id="p100085"></a>2 В контексте настоящего стандарта синтаксическое представление представляет собой имя экземпляра объекта (типа данных).

<a id="p100086"></a>3.3.12 контроль типа (type control): Операция, которая позволяет определить, правильно или нет данное выражение отнесено к определенному типу.
<a id="p100087"></a>Примечания
<a id="p100088"></a>1 Выражение отнесено к определенному типу правильно, если тип данных каждого операнда каждого оператора этого выражения соответствует требуемому типу данных.
<a id="p100089"></a>2 В настоящем стандарте контроль типа обеспечивается ограничениями EXPRESS-схемы.

<a id="p100090"></a>3.3.13 синтез типа (type synthesis): Определение типа данных выражения.
<a id="p100091"></a>*Примечание* - В схеме ISO13584_expressions_schema тип данных каждой константы, переменной или результата оператора передается объектом, который ее представляет, поэтому тип данных выражения expression может быть выведен из результата EXPRESS-функции TYPEOF, примененной к узлу, который представляет это выражение.

<a id="p100092"></a>3.3.14 унарный оператор (unary operator): Оператор, арность которого равна единице.
<a id="p100093"></a>3.3.15 переменная (variable): Представление значения, которое должно принадлежать к определенному типу данных.

#### <a id="p100094"></a>3.4 Сокращения

<a id="p100095"></a>В настоящем стандарте используется следующее сокращение, установленное в ИСО/МЭК 9075:1992:
<a id="p100096"></a>SQL - Structured Query Language (структурированный язык запросов).

4. <a id="p100097"></a>Основные понятия и допущения


#### <a id="p100098"></a>4.1 Статические и динамические данные

<a id="p100099"></a>При обмене информацией из библиотеки деталей возникает необходимость обмениваться не только статическими свойствами, которые могут быть смоделированы в виде данных, но также и динамическими характеристиками, которые выражают, например, как значение свойства может быть выведено из значений других свойств. Выражения являются одной из структур, которые способны моделировать динамические характеристики.
<a id="p100100"></a>Настоящий стандарт устанавливает форму однозначного представления и обмена машинно-интерпретируемыми выражениями.

#### <a id="p100101"></a>4.2 Синтаксис выражений

<a id="p100102"></a>Синтаксис выражений состоит из ряда символов, которые являются константами, переменными и операторами этого выражения. В текстовых языках эти символы подчиняются набору правил, обычно определяемому в грамматике.
<a id="p100103"></a>В настоящем стандарте константы, переменные и операторы представлены как типы данных объектов. Правила, которым должны подчиняться эти объекты, моделируются в EXPRESS-схеме, которая определяет типы данных объектов.

#### <a id="p100104"></a>4.3 Семантика выражений


##### <a id="p100105"></a>4.3.1 Семантика выражений

<a id="p100106"></a>Выражения состоят из операторов и операндов. Семантика выражения определяется:
- <a id="p100107"></a>диапазоном функции, выполняемой каждым оператором;
- <a id="p100108"></a>функцией интерпретации, которая связывает соответствующее значение с каждым операндом;
- <a id="p100109"></a>функцией оценки, которая вычисляет результат каждого оператора в случае ее применения к его операндам.
<a id="p100110"></a>В настоящем стандарте функция интерпретации моделируется определением подтипа объекта variable_semantics. Функция оценки в настоящем стандарте не рассматривается.

##### <a id="p100111"></a>4.3.2 Период обмена и период оценки

<a id="p100112"></a>Обработка выражений включает в себя следующие два типа процедур, соответствующих периоду обмена и периоду оценки:
1) <a id="p100113"></a>В период обмена выражение представлено своей структурой. Соответствующий ориентированный ациклический граф моделируется и обменивается. При этом не требуется, чтобы переменные были ограничены какими-либо значениями, но их семантика известна. На этом уровне могут быть выполнены различные виды статического анализа (ацикличность графа, проверка типов, отображаемость на языке SQL).
2) <a id="p100114"></a>В период оценки выражению может быть присвоено значение. На этом этапе все переменные, встречающиеся в выражении, должны получить какое-либо значение. Динамическая оценка выражения, тестирование и отладка могут быть выполнены на этом уровне.
<a id="p100115"></a>В настоящем стандарте рассматривается только статический анализ, который соответствует периоду обмена. Обзор различных анализов выражений приведен в [приложении F](#p102079).

#### <a id="p100116"></a>4.4 Уровни абстракции при моделировании выражений

<a id="p100117"></a>Операторы, использованные в ISO_generic_expressions_schema, позволяют определять абстрактные обобщенные выражения, которые могут быть конкретизированы для различных целей и типов данных.

##### <a id="p100118"></a>4.4.1 Конкретизация ISO13584_generic_expressions_schema

<a id="p100119"></a>ISO13584_expressions_schema является конкретизацией схемы ISO13584_generic_expressions_schema. Операторы, используемые в ISO13584_expressions_schema, принадлежат к подмножеству операторов, определенных в ИСО 10303-11. Их диапазон и функция оценки должны соответствовать спецификации, установленной в ИСО 10303-11.
<a id="p100120"></a>Операнды являются либо константами, представленными в виде литеральных значений, либо переменными, либо другими выражениями. Переменные имеют строго определенный тип и предполагается, что, когда выражение оценивается в некотором контексте, функция интерпретации обеспечивает каждую переменную значением, соответствующим ее типу данных. Если это условие не соблюдается, то результат оценки выражения будет ошибочным.
<a id="p100121"></a>В [приложении E](#p101948) рассмотрены детали процесса конкретизации и приведен метод создания других возможных конкретизаций ISO13584_generic_expressions_schema.

##### <a id="p100122"></a>4.4.2 Конкретизация ISO13584_expressions_schema

<a id="p100123"></a>ISO13584_expressions_schema может быть конкретизирована, чтобы соответствовать требованиям, которые не ограничиваются операторами с числовыми, строковыми и булевыми значениями, определенными в руководстве по языку EXPRESS в ИСО 10303-11.
<a id="p100124"></a>Конкретизация ISO13584_expressions_schema заключается либо в расширении схемы за счет добавления определений новых объектов, которые выражают семантику функций, возвращая целое, вещественное, булево или строковое значение, либо в определении новых подтипов variable_semantics.
<a id="p100125"></a>Объекты, которые выражают семантику функций, должны быть определены как подтипы соответствующего объекта defined_function. Действительно, функция, возвращающая целое, вещественное, булево или строковое значение, соответственно должна быть определена как подтип integer_defined_function, real_defined_function, boolean_defined_function и string_defined_function.
<a id="p100126"></a>Такая конкретизация совместима со строгой проверкой типа данных, что следует из правил схемы ISO13584_expressions_schema.
<a id="p100127"></a>В [приложении E](#p101948) установлены детали процесса конкретизации и приведена методика конкретизации ISO13584_expressions_schema.

#### <a id="p100128"></a>4.5 Моделирование переменной

<a id="p100129"></a>Переменная имеет три свойства:
- <a id="p100130"></a>представляет собой символ (синтаксический), который может быть использован для построения выражения;
- <a id="p100131"></a>ассоциируется с типом данных, который определяет область ее значений;
- <a id="p100132"></a>ассоциируется с семантикой, которая определяет ее смысл и, следовательно, ее значение в период оценки.

##### <a id="p100133"></a>4.5.1 Синтаксическое представление

<a id="p100134"></a>В настоящем стандарте переменная является экземпляром объекта generic_variable. Экземпляр такого типа данных связывается с идентификатором, определяющим индивидуальность экземпляра, который вводит в действие символ соответствующей переменной, когда она используется в выражении.

##### <a id="p100135"></a>4.5.2 Область значений переменной

<a id="p100136"></a>Область значений переменной моделируется определением подтипа объекта generic_variable. Этот подход, известный как строгое определение типа, обеспечивает, что тип данных любого выражения может быть вычислен (синтезирован) в период обмена.

##### <a id="p100137"></a>4.5.3 Семантика переменной

<a id="p100138"></a>В ISO13584_generic_expressions_schema должны входить переменные, связанные с variable_semantics. Этот объект определен как ABSTRACT SUPERTYPE и должен быть переопределен через подтип при использовании конкретной семантики. Описание подтипа объекта variable_semantics должно содержать описание контекста, в котором эта переменная должна использоваться. Это описание должно сопровождаться описанием функции интерпретации, которая связывает значение с этой переменной.
<a id="p100139"></a>*Пример* - Запись на языке EXPRESS SELF.a является примером variable_semantics. Такая переменная может быть использована только в контексте некоторого экземпляра некоторого класса, в котором появляется ее синтаксическое представление. В рамках этого контекста функция интерпретации является функцией, которая связывает с этой переменной значение атрибута "a" этого экземпляра.

<a id="p100140"></a>В [приложении D](#p101889) приведены различные методы, которые могут быть использованы для определения подтипов объекта variable_semantics, соответствующих некоторым конкретным требованиям. Это обеспечивает конкретизацию определения функции интерпретации через объект variable_semantics.

#### <a id="p100141"></a>4.6 Отображаемость на языке SQL

<a id="p100142"></a>В языках программирования выражения обычно используются для доступа к базам данных. Язык SQL включает только небольшое число операторов и ограничивает использование выражений до заданной категории выражений. Для того чтобы сделать понятным различие между выражениями, которые являются SQL-отображаемыми, и остальными выражениями, специально введенный булев атрибут указывает, является или нет выражение отображаемым на языке SQL.

5. <a id="p100143"></a>ISO13584_generic_expressions_schema

<a id="p100144"></a>В данном разделе определены требования к схеме ISO13584_generic_expressions_schema. Приведенное ниже описание на языке EXPRESS представляет собой блок ISO13584_generic_expressions_schema.
<a id="p100145"></a>EXPRESS-спецификация
<a id="p100146"></a>*)
<a id="p100147"></a>SCHEMA ISO13584_generic_expressions_schema;
<a id="p100148"></a>(*

#### <a id="p100149"></a>5.1 Введение

<a id="p100150"></a>ISO13584_generic_expressions_schema представляет собой абстрактный ресурс, который обеспечивает общие рамки для набора всех возможных выражений.
<a id="p100151"></a>*Пример* - В параметрической модели фигуры вещественное значение может быть представлено как выражение, операндами которого являются элементы геометрического представления, например distance (point_1, point_2). Геометрический элемент может быть определен геометрическим оператором, например centre_of (circle_1).

<a id="p100152"></a>Основной структурой является ациклический граф, чьими узлами являются операторы, литеральные значения и переменные. Дуги графа изображают связь операторов со своими аргументами, которые сами являются выражениями.
<a id="p100153"></a>Схема ISO13584_generic_expressions_schema предоставляет следующие возможности:
- <a id="p100154"></a>обобщенные константы, соответствующие значениям обрабатываемого типа данных;
- <a id="p100155"></a>обобщенные переменные, обозначающие значения, интерпретируемые из контекста;
- <a id="p100156"></a>унарные выражения для унарных операторов;
- <a id="p100157"></a>бинарные выражения для бинарных операторов;
- <a id="p100158"></a>выражения большой арности для операторов большой арности.
<a id="p100159"></a>Каждый конкретный вид выражений получается путем конкретизации (фактически, путем задания подтипа) констант, переменных и операторов, т.е. определения для них обоснованного типа (или типов) данных.

#### <a id="p100160"></a>5.2 Определения объектов ISO13584_generic_expressions_schema


##### <a id="p100161"></a>5.2.1 Объект generic_expression

<a id="p100162"></a>Объект generic_expression является информационной моделью обобщенного выражения. Он представляет собой ABSTRACT SUPERTYPE (абстрактный супертип) всех возможных выражений. Для того чтобы обеспечить ацикличность выражений, его разбивают на подтипы в соответствии с его арностью. Если подтип generic_expression не является подтипом simple_generic_expression либо unary_generic_expression, либо binary_generic_expression, либо multiple_arity_generic_expression, то он не должен содержать ни одной переменной.
<a id="p100163"></a>EXPRESS-спецификация
<a id="p100164"></a>    *)
<a id="p100165"></a>    ENTITY generic_expression
<a id="p100166"></a>    ABSTRACT SUPERTYPE OF (ONEOF (simple_generic_expression,
<a id="p100167"></a>                                  unary_generic_expression,
<a id="p100168"></a>                                  binary_generic_expression,
<a id="p100169"></a>                                  multiple_arity_generic_expression));
<a id="p100170"></a>    WHERE
<a id="p100171"></a>        WR1: is_acyclic (SELF);
<a id="p100172"></a>    END_ENTITY;
<a id="p100173"></a>    (*
<a id="p100174"></a>Формальное утверждение
<a id="p100175"></a>WR1 - граф, связанный с описанным выражением, должен быть ациклическим.
<a id="p100176"></a>Неформальное утверждение
<a id="p100177"></a>IP1 - либо объект generic_expression не должен содержать ни одной переменной generic_variable, либо он должен быть подтипом simple_generic_expression, unary_generic_expression, либо binary_generic_expression, либо multiple_arity_generic_expression.
<a id="p100178"></a>Примечание - Это неформальное утверждение обеспечивает то, что набор переменных, вычисленных функцией used_variable (см. [5.3.2](#p100325)), включает в себя все переменные, имеющиеся в generic_expression.


##### <a id="p100179"></a>5.2.2 Объект simple_generic_expression

<a id="p100180"></a>Объект simple_generic_expression является обобщенным выражением, которое олицетворяет либо обобщенную переменную, либо обобщенный литерал.
<a id="p100181"></a>EXPRESS-спецификация
<a id="p100182"></a>*)
<a id="p100183"></a>ENTITY simple_generic_expression
<a id="p100184"></a>ABSTRACT SUPERTYPE OF (ONEOF (generic_literal, generic_variable))
<a id="p100185"></a>SUBTYPE OF (generic_expression);
<a id="p100186"></a>**END_ENTITY;**
<a id="p100187"></a>(*

##### <a id="p100188"></a>5.2.3 Объект generic_literal

<a id="p100189"></a>Объект generic_literal является абстрактной константой, которая может быть включена в обобщенное выражение.
<a id="p100190"></a>EXPRESS-спецификация
<a id="p100191"></a>*)
<a id="p100192"></a>ENTITY generic_literal
<a id="p100193"></a>**ABSTRACT SUPERTYPE**
<a id="p100194"></a>SUBTYPE OF (simple_generic_expression);
<a id="p100195"></a>**END_ENTITY;**
<a id="p100196"></a>(*

##### <a id="p100197"></a>5.2.4 Объект generic_variable

<a id="p100198"></a>Объект generic_variable является абстрактной переменной, которая может быть включена в обобщенное выражение. Для объекта generic_variable должен быть определен подтип, чтобы установить тип данных допустимых значений этой переменной. Переменная должна быть связана со средой, которая представляет собой функцию интерпретации, связывающую значение с этой переменной.
<a id="p100199"></a>Примечание - real_numeric_variable, integer_numeric_variable, boolean_numeric_variable и string_numeric_variable являются примерами подтипов объекта generic_variable. Эти подтипы определены в [разделе 6](#p100367).

<a id="p100200"></a>EXPRESS-спецификация
<a id="p100201"></a>    *)
<a id="p100202"></a>    ENTITY generic_variable
<a id="p100203"></a>    ABSTRACT SUPERTYPE
<a id="p100204"></a>    SUBTYPE OF (simple_generic_expression);
<a id="p100205"></a>    INVERSE
<a id="p100206"></a>        interpretation:
<a id="p100207"></a>            environment FOR syntactic_representation;
<a id="p100208"></a>    END_ENTITY;
<a id="p100209"></a>    (*
<a id="p100210"></a>Определение атрибута
<a id="p100211"></a>interpretation - объект environment (среда), который позволяет связывать значение с переменной.

##### <a id="p100212"></a>5.2.5 Объект variable_semantics

<a id="p100213"></a>Объект variable_semantics используется для представления смысла generic_variable. Он относится к абстрактному супертипу ABSTRACT SUPERTYPE, для которого должны быть определены подтипы при использовании variable_semantics. Объект variable_semantics должен определять контекст, в рамках которого переменная должна использоваться вместе с функцией интерпретации, связывающей значение с этой переменной.
<a id="p100214"></a>*Пример* - При моделировании класса компонентов, которые имеют свойства "a" и "b" с целыми значениями, ограничение, устанавливающее, что для каждого экземпляра этого класса значение "a" должно быть больше значения "b", может быть смоделировано посредством:
- <a id="p100215"></a>двух экземпляров real_variable;
- <a id="p100216"></a>двух экземпляров self_property_semantics, являющегося подтипом variable_semantics, которые относятся к свойству "a" и свойству "b", соответственно;
- <a id="p100217"></a>выражения boolean_expression между двумя объектами real_variable, которое указывает, что первый объект больше, чем второй.

<a id="p100218"></a>EXPRESS-спецификация
<a id="p100219"></a>*)
<a id="p100220"></a>ENTITY variable_semantics
<a id="p100221"></a>**ABSTRACT SUPERTYPE;**
<a id="p100222"></a>**END_ENTITY;**
<a id="p100223"></a>(*

##### <a id="p100224"></a>5.2.6 Объект environment

<a id="p100225"></a>Объект environment обеспечивает связь между синтаксисом и семантикой переменной. Он представляет собой функцию интерпретации, которая связывает значение с generic_variable.
<a id="p100226"></a>EXPRESS-спецификация
<a id="p100227"></a>    *)
<a id="p100228"></a>    ENTITY environment;
<a id="p100229"></a>        syntactic_representation: generic_variable;
<a id="p100230"></a>        semantics: variable_semantics;
<a id="p100231"></a>    END_ENTITY;
<a id="p100232"></a>    (*
<a id="p100233"></a>Определения атрибутов
<a id="p100234"></a>syntactic_representation - объект generic_variable, который обозначает значение переменной;
<a id="p100235"></a>semantics - смысл переменной, который включает в себя механизм для доступа к ее значению.

##### <a id="p100236"></a>5.2.7 Объект unary_generic_expression

<a id="p100237"></a>Объект unary_generic_expression является абстрактным супертипом ABSTRACT SUPERTYPE для всех унарных операторов.
<a id="p100238"></a>EXPRESS-спецификация
<a id="p100239"></a>    *)
<a id="p100240"></a>    ENTITY unary_generic_expression
<a id="p100241"></a>    ABSTRACT SUPERTYPE
<a id="p100242"></a>    SUBTYPE OF (generic_expression);
<a id="p100243"></a>        operand: generic_expression;
<a id="p100244"></a>    END_ENTITY;
<a id="p100245"></a>    (*
<a id="p100246"></a>Определение атрибута
<a id="p100247"></a>operand - обобщенное выражение, которое представляет собой операнд унарного оператора.

##### <a id="p100248"></a>5.2.8 Объект binary_generic_expression

<a id="p100249"></a>Объект binary_generic_expression является абстрактным супертипом ABSTRACT SUPERTYPE для всех бинарных операторов.
<a id="p100250"></a>EXPRESS-спецификация
<a id="p100251"></a>    *)
<a id="p100252"></a>    ENTITY binary_generic_expression
<a id="p100253"></a>    ABSTRACT SUPERTYPE
<a id="p100254"></a>    SUBTYPE OF (generic_expression);
<a id="p100255"></a>        operands: LIST [2:2] OF generic_expression;
<a id="p100256"></a>    END_ENTITY;
<a id="p100257"></a>    (*
<a id="p100258"></a>Определение атрибута
<a id="p100259"></a>operands - список из двух обобщенных выражений, которые представляют собой два операнда бинарного оператора.

##### <a id="p100260"></a>5.2.9 Объект multiple_arity_generic_expression

<a id="p100261"></a>Объект multiple_arity_generic_expression является абстрактным супертипом ABSTRACT SUPERTYPE для всех операторов большой арности.
<a id="p100262"></a>EXPRESS-спецификация
<a id="p100263"></a>    *)
<a id="p100264"></a>    ENTITY multiple_arity_generic_expression
<a id="p100265"></a>    ABSTRACT SUPERTYPE
<a id="p100266"></a>    SUBTYPE OF (generic_expression);
<a id="p100267"></a>        operands: LIST [2:?] OF generic_expression;
<a id="p100268"></a>    END_ENTITY;
<a id="p100269"></a>    (*
<a id="p100270"></a>Определение атрибута
<a id="p100271"></a>operands - список обобщенных выражений, которые представляют собой операнды оператора большой арности.

#### <a id="p100272"></a>5.3 Определения функций ISO13584_generic_expressions_schema

<a id="p100273"></a>В данном подразделе определены функции схемы ISO13584_generic_expressions_schema.

##### <a id="p100274"></a>5.3.1 Функция is_acyclic

<a id="p100275"></a>Функция is_acyclic проверяет наличие цикла в рассматриваемом графе выражения. В ней определены две функции. Первая (is_acyclic) имеет в качестве аргумента объект generic_expression, который должен быть проверен. Затем эта функция вызывает вторую (acyclic) с двумя аргументами: generic_expression и пустой набор. Этот набор должен быть модифицирован в результате выполнения функции таким образом, чтобы он содержал набор всех узлов, уже прослеженных по цепочке рекурсивных вызовов вниз до данного узла.
<a id="p100276"></a>Функция is_acyclic возвращает значение TRUE (истина), если представленная аргументом arg структура является ориентированным ациклическим графом, в противном случае она возвращает значение FALSE (ложь).
<a id="p100277"></a>Примечание - В [приложении F](#p102079) определена роль такой структуры в статическом анализе (например, контроль типа, сбор переменных и т.д.) и в динамическом анализе (например, оценка) выражения

<a id="p100278"></a>EXPRESS-спецификация
<a id="p100279"></a>    *)
<a id="p100280"></a>    FUNCTION is_acyclic (arg: generic_expression): BOOLEAN;
<a id="p100281"></a>    RETURN (acyclic (arg, []));
<a id="p100282"></a>    END_FUNCTION; -- is_acyclic

<a id="p100283"></a>    FUNCTION acyclic (arg1: generic_expression;
<a id="p100284"></a>               arg2: SET OF generic_expression): BOOLEAN;

<a id="p100285"></a>    LOCAL
<a id="p100286"></a>        result: BOOLEAN;
<a id="p100287"></a>    END_LOCAL;

<a id="p100288"></a>    IF ('ISO13584_GENERIC_EXPRESSIONS_SCHEMA.SIMPLE_GENERIC_EXPRESSION'
<a id="p100289"></a>        IN TYPEOF (arg1))
<a id="p100290"></a>    THEN
<a id="p100291"></a>        RETURN (TRUE);
<a id="p100292"></a>    END_IF;

<a id="p100293"></a>    IF arg1 IN arg2
<a id="p100294"></a>    THEN
<a id="p100295"></a>        RETURN (FALSE);
<a id="p100296"></a>    END_IF;

<a id="p100297"></a>    IF 'ISO13584_GENERIC_EXPRESSIONS_SCHEMA.UNARY_GENERIC_EXPRESSION'
<a id="p100298"></a>        IN TYPEOF (arg1)
<a id="p100299"></a>    THEN
<a id="p100300"></a>        RETURN
<a id="p100301"></a>        (acyclic (arg1\unary_generic_expression.operand, arg2 + [arg1]));
<a id="p100302"></a>    END_IF;

<a id="p100303"></a>        IF 'ISO13584_GENERIC_EXPRESSIONS_SCHEMA.BINARY_GENERIC_EXPRESSION'
<a id="p100304"></a>        IN TYPEOF (arg1)
<a id="p100305"></a>    THEN
<a id="p100306"></a>        RETURN
<a id="p100307"></a>        (acyclic (arg1\binary_generic_expression.operands[1], arg2 + [arg1])
<a id="p100308"></a>        AND
<a id="p100309"></a>        acyclic (arg1\binary_generic_expression.operands[2], arg2 + [arg1]));
<a id="p100310"></a>    END_IF;

<a id="p100311"></a>    IF
<a id="p100312"></a>    'ISO13584_GENERIC_EXPRESSIONS_SCHEMA.MULTIPLE_ARITY_GENERIC_EXPRESSION'
<a id="p100313"></a>        IN TYPEOF (arg1)
<a id="p100314"></a>    THEN
<a id="p100315"></a>        result := TRUE;
<a id="p100316"></a>        REPEAT i :=1 TO
<a id="p100317"></a>               SIZEOF (arg1\multiple_arity_generic_expression.operands);
<a id="p100318"></a>          result := result AND
<a id="p100319"></a>          acyclic (arg1\multiple_arity_generic_expression.operands[i], arg2 + [arg1]);
<a id="p100320"></a>        END_REPEAT;

<a id="p100321"></a>        RETURN (result);
<a id="p100322"></a>    END_IF;

<a id="p100323"></a>    END_FUNCTION; -- acyclic
<a id="p100324"></a>    (*

##### <a id="p100325"></a>5.3.2 Функция used_variables

<a id="p100326"></a>Функция used_variables просматривает весь граф обобщенного выражения, собирая все использованные переменные, и после этого возвращает их. Данная функция проходит весь ориентированный ациклический граф, представляющий generic_expression.
<a id="p100327"></a>*Примечание* - Эта функция не используется в схеме ISO13584_generic_expressions_schema. Она является ресурсом, предназначенным для использования в схемах, которые используют ISO13584_generic_expressions_schema или ее возможные конкретизации. Например, эта функция используется в некоторых стандартах комплекса ИСО 13584 для записи ограничений на переменные, встречающиеся в выражениях.

<a id="p100328"></a>EXPRESS-спецификация
<a id="p100329"></a>    *)
<a id="p100330"></a>    FUNCTION used_variables (arg: generic_expression):
<a id="p100331"></a>               SET OF generic_variable;
<a id="p100332"></a>    LOCAL
<a id="p100333"></a>        result: SET OF generic_variable := [];
<a id="p100334"></a>    END_LOCAL;

<a id="p100335"></a>    IF 'ISO13584_GENERIC_EXPRESSIONS_SCHEMA.GENERIC_VARIABLE'
<a id="p100336"></a>        IN TYPEOF (arg)
<a id="p100337"></a>    THEN
<a id="p100338"></a>        RETURN ([arg]);
<a id="p100339"></a>    END_IF;

<a id="p100340"></a>    IF 'ISO13584_GENERIC_EXPRESSIONS_SCHEMA.UNARY_GENERIC_EXPRESSION'
<a id="p100341"></a>        IN TYPEOF (arg)
<a id="p100342"></a>    THEN
<a id="p100343"></a>        RETURN (used_variables (arg\unary_generic_expression.operand));
<a id="p100344"></a>    END_IF;

<a id="p100345"></a>    IF 'ISO13584_GENERIC_EXPRESSIONS_SCHEMA.BINARY_GENERIC_EXPRESSION'
<a id="p100346"></a>        IN TYPEOF (arg))
<a id="p100347"></a>    THEN
<a id="p100348"></a>        RETURN (used_variables (arg\binary_generic_expression.operands[1])
<a id="p100349"></a>          + used_variables (arg\binary_generic_expression.operands[2]));
<a id="p100350"></a>    END_IF;

<a id="p100351"></a>    IF
<a id="p100352"></a>    'ISO13584_GENERIC_EXPRESSIONS_SCHEMA.MULTIPLE_ARITY_GENERIC_EXPRESSION'
<a id="p100353"></a>        IN TYPEOF (arg)
<a id="p100354"></a>    THEN
<a id="p100355"></a>        REPEAT i := 1 TO
<a id="p100356"></a>          SIZEOF (arg\multiple_arity_generic_expression.operands);
<a id="p100357"></a>          result := result + used_variables
<a id="p100358"></a>          (arg\multiple_arity_generic_expression.operands[i]);
<a id="p100359"></a>        END_REPEAT;

<a id="p100360"></a>        RETURN (result);
<a id="p100361"></a>    END_IF;
<a id="p100362"></a>    RETURN ([]); -- в этом случае подтип не должен содержать
<a id="p100363"></a>                 -- никаких переменных (см. IP1 в generic_expression)
<a id="p100364"></a>    END_FUNCTION; -- used_variables
<a id="p100365"></a>    END_SCHEMA; -- ISO13584_generic_expressions_schema
<a id="p100366"></a>    (*

6. <a id="p100367"></a>ISO13584_expressions_schema

<a id="p100368"></a>В данном разделе установлены требования к ISO13584_expressions_schema. Следующее описание на языке EXPRESS представляет блок ISO13584_expressions_schema и устанавливает необходимые внешние ссылки.
<a id="p100369"></a>EXPRESS-спецификация
<a id="p100370"></a>    *)
<a id="p100371"></a>    SCHEMA ISO13584_expressions_schema;
<a id="p100372"></a>    REFERENCE FROM ISO13584_generic_expressions_schema(
<a id="p100373"></a>               generic_expression,
<a id="p100374"></a>               simple_generic_expression,
<a id="p100375"></a>               generic_variable,
<a id="p100376"></a>               generic_literal,
<a id="p100377"></a>               unary_generic_expression,
<a id="p100378"></a>               binary_generic_expression,
<a id="p100379"></a>               multiple_arity_generic_expression);
<a id="p100380"></a>    (*

#### <a id="p100381"></a>6.1 Введение

<a id="p100382"></a>ISO13584_expressions_schema обеспечивает моделирование числовых, булевых и строковых выражений, построенных из операторов и функций языка EXPRESS. Имена операторов и функций - по ИСО 10303-11. Они имеют ту же семантику, что и соответствующие элементы в ИСО 10303-11.
<a id="p100383"></a>Основная структура - по ISO13584_generic_expressions_schema. Она представляет собой ориентированный ациклический граф, узлами которого являются операторы, литеральные значения и переменные, а связи представляют собой взаимосвязь операторов со своими аргументами, которые сами являются выражениями.
<a id="p100384"></a>ISO13584_expressions_schema обеспечивает строгое определение типа выражения. Любое выражение обозначает либо числовое, либо строковое, либо булево значение. Этот тип данных может быть вычислен по структуре выражения. Чтобы дать возможность включить в выражение либо generic_expression, либо функцию, определенную в приложении, тип данных результата которой является либо числом, либо строкой, либо булевым значением, ISO13584_expressions_schema содержит следующие абстрактные объекты: numeric_defined_function, integer_defined_function, real_defined_function, string_defined_function и boolean_defined_function. Значение, передаваемое любым из этих объектов, должно соответствовать типу данных значения, связанного с этим объектом. Предполагается, что generic_expression, которое не является подтипом одного из этих объектов, имеет значение, тип данных которого не является одним из типов, которые моделируются ISO13584_expressions_schema.
<a id="p100385"></a>ISO13584_expressions_schema содержит информацию о том, может или нет выражение быть отображено на языке SQL, определение которого приведено в ИСО/МЭК 9075. Чтобы дать возможность включить в выражение либо generic_expression, либо функцию, определенную в приложении, которая может быть отображена на языке SQL, ISO13584_expressions_schema содержит абстрактный объект SQL_mappable_defined_function. Объект generic_expression, который является подтипом этого объекта, должен быть отображаемым на языке SQL. Предполагается, что объект generic_expression, который не является подтипом этого объекта, имеет структуру, которая не может быть отображена на языке SQL.
<a id="p100386"></a>Выражения определяются введением подтипа объекта generic_expression из ISO13584_generic_expressions_schema. Все константы, переменные и операторы, определенные в ISO13584_expressions_schema, являются подтипами соответствующих объектов ISO13584_generic_expressions_schema. Это соответствие определяется арностью каждого оператора.

#### <a id="p100387"></a>6.2 Определения общих объектов ISO13584_expressions_schema


##### <a id="p100388"></a>6.2.1 Объект expression

<a id="p100389"></a>Объект expression является частным случаем объекта generic_expression, ограниченным числовой, булевой или строковой областью значений.
<a id="p100390"></a>EXPRESS-спецификация
<a id="p100391"></a>    *)
<a id="p100392"></a>    ENTITY expression
<a id="p100393"></a>    ABSTRACT SUPERTYPE OF (ONEOF (numeric_expression,
<a id="p100394"></a>                                     boolean_expression,
<a id="p100395"></a>                                     string_expression))
<a id="p100396"></a>    SUBTYPE OF (generic_expression);
<a id="p100397"></a>    END_ENTITY;
<a id="p100398"></a>    (*
<a id="p100399"></a>6.2.1.1 Объект variable обозначает значение, интерпретированное из некоторого контекста.
<a id="p100400"></a>EXPRESS-спецификация
<a id="p100401"></a>    *)
<a id="p100402"></a>    ENTITY variable
<a id="p100403"></a>    ABSTRACT SUPERTYPE OF (ONEOF (numeric_variable,
<a id="p100404"></a>            boolean_variable,
<a id="p100405"></a>            string_variable))
<a id="p100406"></a>    SUBTYPE OF (generic_variable);
<a id="p100407"></a>    END_ENTITY;
<a id="p100408"></a>    (*
<a id="p100409"></a>6.2.1.2 Объект defined_function является функцией (строго определенного типа), которая предназначена для создания на ее основе подтипов в информационных моделях, в которых используется ISO13584_expressions_schema.
<a id="p100410"></a>EXPRESS-спецификация
<a id="p100411"></a>    *)
<a id="p100412"></a>    ENTITY defined_function
<a id="p100413"></a>    ABSTRACT SUPERTYPE OF ((ONEOF (numeric_defined_function,
<a id="p100414"></a>                                      string_defined_function,
<a id="p100415"></a>                                      boolean_defined_function)
<a id="p100416"></a>                                      )
<a id="p100417"></a>                            ANDOR SQL_mappable_defined_function);
<a id="p100418"></a>    END_ENTITY;
<a id="p100419"></a>    (*
<a id="p100420"></a>6.2.1.3 Объект SQL_mappable_defined_function является функцией, которая предназначена для создания на ее основе подтипов в информационных моделях, в которых используется ISO13584_expressions_schema, для указания того, что некоторое выражение generic_expression является отображаемым на языке SQL.
<a id="p100421"></a>EXPRESS-спецификация
<a id="p100422"></a>*)
<a id="p100423"></a>ENTITY SQL_mappable_defined_function
<a id="p100424"></a>**ABSTRACT SUPERTYPE**
<a id="p100425"></a>SUBTYPE OF (defined_function);
<a id="p100426"></a>**END_ENTITY;**
<a id="p100427"></a>(*

#### <a id="p100428"></a>6.3 ISO13584_expressions_schema: определения объектов для числовых выражений


##### <a id="p100429"></a>6.3.1 Объект numeric_expression

<a id="p100430"></a>Объект numeric_expression представляет собой выражение, диапазоном которого является тип данных NUMBER, определенный в 8.1.1 ИСО 10303-11.
<a id="p100431"></a>EXPRESS-спецификация
<a id="p100432"></a>    *)
<a id="p100433"></a>    ENTITY numeric_expression
<a id="p100434"></a>    ABSTRACT SUPERTYPE OF (ONEOF (simple_numeric_expression,
<a id="p100435"></a>           unary_numeric_expression,
<a id="p100436"></a>           binary_numeric_expression,
<a id="p100437"></a>           multiple_arity_numeric_expression,
<a id="p100438"></a>           length_function,
<a id="p100439"></a>           value_function,
<a id="p100440"></a>           numeric_defined_function))
<a id="p100441"></a>    SUBTYPE OF (expression);
<a id="p100442"></a>    DERIVE
<a id="p100443"></a>        is_int: BOOLEAN := is_int_expr(SELF);
<a id="p100444"></a>        sql_mappable: BOOLEAN := is_SQL_mappable (SELF);
<a id="p100445"></a>    END_ENTITY;
<a id="p100446"></a>    (*
<a id="p100447"></a>Определения атрибутов
<a id="p100448"></a>is_int - булев атрибут, который показывает, имеет ли оценка выражения целое значение или нет;
<a id="p100449"></a>sql_mappable - булев атрибут, который показывает, является ли выражение отображаемым на языке SQL.

##### <a id="p100450"></a>6.3.2 Объект simple_numeric_expression

<a id="p100451"></a>Объект simple_numeric_expression представляет собой либо числовой литерал, либо числовую переменную.
<a id="p100452"></a>EXPRESS-спецификация
<a id="p100453"></a>*)
<a id="p100454"></a>ENTITY simple_numeric_expression
<a id="p100455"></a>ABSTRACT SUPERTYPE OF (ONEOF (literal_number, numeric_variable))
<a id="p100456"></a>SUBTYPE OF (numeric_expression, simple_generic_expression);
<a id="p100457"></a>**END_ENTITY;**
<a id="p100458"></a>(*

##### <a id="p100459"></a>6.3.3 Объект literal_number

<a id="p100460"></a>Объект literal_number представляет собой литерал языка EXPRESS числового типа (NUMBER). Объект literal_number может быть либо целым литералом, либо вещественным литералом.
<a id="p100461"></a>*Примечание* - Областью значений типа данных NUMBER языка EXPRESS являются числовые значения.

<a id="p100462"></a>EXPRESS-спецификация
<a id="p100463"></a>    *)
<a id="p100464"></a>    ENTITY literal_number
<a id="p100465"></a>    ABSTRACT SUPERTYPE OF (ONEOF (int_literal, real_literal))
<a id="p100466"></a>    SUBTYPE OF (simple_numeric_expression, generic_literal);
<a id="p100467"></a>        the_value: NUMBER;
<a id="p100468"></a>    END_ENTITY;
<a id="p100469"></a>    (*
<a id="p100470"></a>Определение атрибута
<a id="p100471"></a>the_value - значение литерала NUMBER.

##### <a id="p100472"></a>6.3.4 Объект int_literal

<a id="p100473"></a>Объект int_literal представляет собой литерал языка EXPRESS типа INTEGER.
<a id="p100474"></a>*Примечание* - Литерал языка EXPRESS типа INTEGER представляет собой целое число VALUE, которое состоит из одной или более цифр.

<a id="p100475"></a>EXPRESS-спецификация
<a id="p100476"></a>    *)
<a id="p100477"></a>    ENTITY int_literal
<a id="p100478"></a>    SUBTYPE OF (literal_number);
<a id="p100479"></a>        SELF\literal_number.the_value: INTEGER;
<a id="p100480"></a>    END_ENTITY;
<a id="p100481"></a>    (*
<a id="p100482"></a>Определение атрибута
<a id="p100483"></a>the_value - значение литерала INTEGER.
<a id="p100484"></a>Объект real_literal
<a id="p100485"></a>Объект real_literal представляет собой литерал языка EXPRESS типа REAL.
<a id="p100486"></a>*Примечание* - Литерал языка EXPRESS типа REAL представляет собой целое число VALUE, которое состоит из мантиссы и необязательной экспоненты; мантисса должна содержать десятичную точку.

<a id="p100487"></a>EXPRESS-спецификация
<a id="p100488"></a>    *)
<a id="p100489"></a>    ENTITY real_literal
<a id="p100490"></a>    SUBTYPE OF (literal_number);
<a id="p100491"></a>        SELF\literal_number.the_value: REAL;
<a id="p100492"></a>    END_ENTITY;
<a id="p100493"></a>    (*
<a id="p100494"></a>Определение атрибута
<a id="p100495"></a>the_value - значение литерала REAL.

##### <a id="p100496"></a>6.3.6 Объект numeric_variable

<a id="p100497"></a>Объект numeric_variable является переменной, которая представляет собой значение числа.
<a id="p100498"></a>EXPRESS-спецификация
<a id="p100499"></a>    *)
<a id="p100500"></a>    ENTITY numeric_variable
<a id="p100501"></a>    SUPERTYPE OF (ONEOF (int_numeric_variable,
<a id="p100502"></a>                         real_numeric_variable))
<a id="p100503"></a>    SUBTYPE OF (simple_numeric_expression, variable);
<a id="p100504"></a>    WHERE
<a id="p100505"></a>        WR1: ('ISO13584_EXPRESSIONS_SCHEMA.INT_NUMERIC_VARIABLE'
<a id="p100506"></a>              IN TYPEOF (SELF)) OR
<a id="p100507"></a>             ('ISO13584_EXPRESSIONS_SCHEMA, REAL_NUMERIC_VARIABLE'
<a id="p100508"></a>              IN TYPEOF (SELF));
<a id="p100509"></a>    END_ENTITY;
<a id="p100510"></a>    (*
<a id="p100511"></a>Формальное утверждение
<a id="p100512"></a>WR1 объект numeric_variable может быть только целой или вещественной переменной.

##### <a id="p100513"></a>6.3.7 Объект int_numeric_variable

<a id="p100514"></a>Объект int_numeric_variable является переменной, которая представляет собой значение целого числа.
<a id="p100515"></a>EXPRESS-спецификация
<a id="p100516"></a>*)
<a id="p100517"></a>ENTITY int_numeric_variable
<a id="p100518"></a>SUBTYPE OF (numeric_variable);
<a id="p100519"></a>**END_ENTITY;**
<a id="p100520"></a>(*

##### <a id="p100521"></a>6.3.8 Объект real_numeric_variable

<a id="p100522"></a>Объект real_numeric_variable является переменной, которая представляет собой значение вещественного числа.
<a id="p100523"></a>EXPRESS-спецификация
<a id="p100524"></a>*)
<a id="p100525"></a>ENTITY real_numeric_variable
<a id="p100526"></a>SUBTYPE OF (numeric_variable);
<a id="p100527"></a>**END_ENTITY;**
<a id="p100528"></a>(*

##### <a id="p100529"></a>6.3.9 Объект unary_numeric_expression

<a id="p100530"></a>Объект unary_numeric_expression является унарным оператором, диапазоном которого является тип данных NUMBER по ИСО 10303-11.
<a id="p100531"></a>EXPRESS-спецификация
<a id="p100532"></a>    *)
<a id="p100533"></a>    ENTITY unary_numeric_expression
<a id="p100534"></a>    ABSTRACT SUPERTYPE OF (ONEOF (unary_function_call))
<a id="p100535"></a>    SUBTYPE OF (numeric_expression, unary_generic_expression);
<a id="p100536"></a>        SELF\unary_generic_expression.operand: numeric_expression;
<a id="p100537"></a>    END_ENTITY;
<a id="p100538"></a>    (*
<a id="p100539"></a>Определение атрибута
<a id="p100540"></a>operand - числовое выражение, которое представляет собой параметр унарного оператора.

##### <a id="p100541"></a>6.3.10 Объект binary_numeric_expression

<a id="p100542"></a>Объект binary_numeric_expression является бинарным оператором, диапазоном которого является тип данных NUMBER по ИСО 10303-11.
<a id="p100543"></a>EXPRESS-спецификация
<a id="p100544"></a>    *)
<a id="p100545"></a>    ENTITY binary_numeric_expression
<a id="p100546"></a>    ABSTRACT SUPERTYPE OF (ONEOF (minus_expression,
<a id="p100547"></a>                                      div_expression,
<a id="p100548"></a>                                      mod_expression,
<a id="p100549"></a>                                      slash_expression,
<a id="p100550"></a>                                      power_expression,
<a id="p100551"></a>                                      binary_function_call))
<a id="p100552"></a>    SUBTYPE OF (numeric_expression, binary_generic_expression);
<a id="p100553"></a>        SELF\binary_generic_expression.operands: LIST [2:2] OF
<a id="p100554"></a>                                              numeric_expression;
<a id="p100555"></a>    END_ENTITY;
<a id="p100556"></a>    (*
<a id="p100557"></a>Определение атрибута
<a id="p100558"></a>operands - список, содержащий два параметра бинарного оператора.

##### <a id="p100559"></a>6.3.11 Объект multiple_arity_numeric_expression

<a id="p100560"></a>Объект multiple_arity_numeric_expression является оператором большой арности, диапазоном которого является тип данных NUMBER по ИСО 10303-11.
<a id="p100561"></a>EXPRESS-спецификация
<a id="p100562"></a>    *)
<a id="p100563"></a>    ENTITY multiple_arity_numeric_expression
<a id="p100564"></a>    ABSTRACT SUPERTYPE OF (ONEOF (plus_expression,
<a id="p100565"></a>                                     mult_expression,
<a id="p100566"></a>                                     multiple_arity_function_call))
<a id="p100567"></a>    SUBTYPE OF (numeric_expression, multiple_arity_generic_expression);
<a id="p100568"></a>        SELF\multiple_arity_generic_expression.operands: LIST [2:?] OF
<a id="p100569"></a>                                         numeric_expression
<a id="p100570"></a>    END_ENTITY;
<a id="p100571"></a>    (*
<a id="p100572"></a>Определение атрибута
<a id="p100573"></a>operands - список, содержащий параметры оператора большой арности. Длина этого списка равна арности оператора.

##### <a id="p100574"></a>6.3.12 Объект length_function

<a id="p100575"></a>Объект length_function включает в себя семантику функции LENGTH по ИСО 10303-11.
<a id="p100576"></a>*Примечание* - Функция LENGTH возвращает число символов в строке. Ее параметром является объект string_expression, содержащий значение строкового типа данных. Результатом выполнения функции является возвращенное значение, которое представляет собой число символов в строке; оно должно быть больше или равно нулю.

<a id="p100577"></a>EXPRESS-спецификация
<a id="p100578"></a>    *)
<a id="p100579"></a>    ENTITY length_function
<a id="p100580"></a>    SUBTYPE OF (numeric_expression, unary_generic_expression);
<a id="p100581"></a>        SELF\unary_generic_expression.operand: string_expression;
<a id="p100582"></a>    END_ENTITY;
<a id="p100583"></a>    (*
<a id="p100584"></a>Определение атрибута
<a id="p100585"></a>SELF\unary_generic_expression.operand - строка, длина которой вычисляется с помощью функции length_function.

##### <a id="p100586"></a>6.3.13 Объект value_function

<a id="p100587"></a>Объект value_function включает в себя семантику функции VALUE по ИСО 10303-11. Если значение, представленное объектом string_expression, который соответствует унаследованному атрибуту operand, является целым числом, должен быть использован подтип int_value_function.
<a id="p100588"></a>*Примечание* - Функция VALUE возвращает числовое представление строки. Ее параметром является объект string_expression, содержащий значение строкового типа данных. Результатом выполнения функции является число, соответствующее представлению строки.

<a id="p100589"></a>EXPRESS-спецификация
<a id="p100590"></a>    *)
<a id="p100591"></a>    ENTITY value_function
<a id="p100592"></a>    SUPERTYPE OF (int_value_function)
<a id="p100593"></a>    SUBTYPE OF (numeric_expression, unary_generic_expression);
<a id="p100594"></a>        SELF\unary_generic_expression.operand: string_expression;
<a id="p100595"></a>    END_ENTITY;
<a id="p100596"></a>    (*
<a id="p100597"></a>Определение атрибута
<a id="p100598"></a>SELF\unary_generic_expression.operand - строковое выражение, значение которого вычисляется функцией value_function.

##### <a id="p100599"></a>6.3.14 Объект int_value_function

<a id="p100600"></a>Объект int_value_function включает в себя семантику функции VALUE по ИСО 10303-11 и констатирует, что объект string_expression, который соответствует унаследованному атрибуту operand, представляет собой целое число.
<a id="p100601"></a>*Примечание* - Функция INTEGER VALUE возвращает целочисленное представление строки. Ее параметром является объект string_expression, содержащий значение строкового типа данных. Результатом выполнения функции является целое число, соответствующее представлению строки.

<a id="p100602"></a>EXPRESS-спецификация
<a id="p100603"></a>*)
<a id="p100604"></a>ENTITY int_value_function
<a id="p100605"></a>SUPERTYPE OF (value_function);
<a id="p100606"></a>**END_ENTITY;**
<a id="p100607"></a>(*
<a id="p100608"></a>Неформальное утверждение
<a id="p100609"></a>IP1 - объект string_expression, который соответствует атрибуту operand, должен быть выражен строкой, представляющей собой целое число.

##### <a id="p100610"></a>6.3.15 Объект numeric_defined_function

<a id="p100611"></a>Объект numeric_defined_function является функцией, областью значений которой является тип данных NUMBER по ИСО 10303-11.
<a id="p100612"></a>EXPRESS-спецификация
<a id="p100613"></a>    *)
<a id="p100614"></a>    ENTITY numeric_defined_function
<a id="p100615"></a>    ABSTRACT SUPERTYPE OF (ONEOF (integer_defined_function,
<a id="p100616"></a>                                      real_defined_function))
<a id="p100617"></a>    SUBTYPE OF (numeric_expression, defined_function);
<a id="p100618"></a>    END_ENTITY;
<a id="p100619"></a>    (*

##### <a id="p100620"></a>6.3.16 Объект plus_expression

<a id="p100621"></a>Объект plus_expression включает в себя семантику оператора '+' по ИСО 10303-11, относящуюся к типу данных NUMBER.
<a id="p100622"></a>*Примечание* - Объект plus_expression является выражением, которое вычисляет сумму всех своих операндов. В ISO13584_expressions_schema все такие операнды должны быть выражены числами, относящимися к области числового типа данных.

<a id="p100623"></a>EXPRESS-спецификация
<a id="p100624"></a>*)
<a id="p100625"></a>ENTITY plus_expression
<a id="p100626"></a>SUBTYPE OF (multiple_arity_numeric_expression);
<a id="p100627"></a>**END_ENTITY;**
<a id="p100628"></a>(*

##### <a id="p100629"></a>6.3.17 Объект minus_expression

<a id="p100630"></a>Объект minus_expression включает в себя семантику оператора '-' по ИСО 10303-11, относящуюся к типу данных NUMBER.
<a id="p100631"></a>*Примечание* - Minus_expression является выражением, которое вычисляет разность своих операндов. В ISO13584_expressions_schema все такие операнды должны быть выражены числами, относящимися к области числового типа данных.

<a id="p100632"></a>EXPRESS-спецификация
<a id="p100633"></a>*)
<a id="p100634"></a>ENTITY minus_expression
<a id="p100635"></a>SUBTYPE OF (binary_numeric_expression);
<a id="p100636"></a>**END_ENTITY;**
<a id="p100637"></a>(*

##### <a id="p100638"></a>6.3.18 Объект mult_expression

<a id="p100639"></a>Объект mult_expression включает в себя семантику оператора ![рис. 1](https://i.bukva.ai/jAWmK4tc/img_0.png) по ИСО 10303-11, относящуюся к типу данных NUMBER.
<a id="p100640"></a>*Примечание* - Объект mult_expression является выражением, которое вычисляет произведение всех своих операндов. В ISO13584_expressions_schema все такие операнды должны быть выражены числами, относящимися к области числового типа данных.

<a id="p100641"></a>EXPRESS-спецификация
<a id="p100642"></a>*)
<a id="p100643"></a>ENTITY mult_expression
<a id="p100644"></a>SUBTYPE OF (multiple_arity_numeric_expression);
<a id="p100645"></a>**END_ENTITY;**
<a id="p100646"></a>(*

##### <a id="p100647"></a>6.3.19 Объект div_expression

<a id="p100648"></a>Объект div_expression включает в себя семантику оператора языка EXPRESS 'DIV' по ИСО 10303-11, относящуюся к типу данных NUMBER.
<a id="p100649"></a>*Примечание* - Объект div_expression является выражением, которое вычисляет целое частное своих операндов. В ISO13584_expressions_schema все такие операнды должны быть выражены числами, относящимися к области числового типа данных. Результатом является целое число.

<a id="p100650"></a>EXPRESS-спецификация
<a id="p100651"></a>*)
<a id="p100652"></a>ENTITY div_expression
<a id="p100653"></a>SUBTYPE OF (binary_numeric_expression);
<a id="p100654"></a>**END_ENTITY;**
<a id="p100655"></a>(*
<a id="p100656"></a>Неформальное утверждение
<a id="p100657"></a>IP1 - оценкой SELF\binary_generic_expression.operands[2] не должен быть 0.

##### <a id="p100658"></a>6.3.20 Объект mod_expression

<a id="p100659"></a>Объект mod_expression включает в себя семантику оператора языка EXPRESS 'MOD' по ИСО 10303-11, относящуюся к типу данных NUMBER.
<a id="p100660"></a>*Примечание* - Объект mod_expression является выражением, которое вычисляет значение первого аргумента по модулю значения второго аргумента. Его операнды должны быть выражены числами, относящимися к области числового типа данных. Результатом является целое число.

<a id="p100661"></a>EXPRESS-спецификация
<a id="p100662"></a>*)
<a id="p100663"></a>ENTITY mod_expression
<a id="p100664"></a>SUBTYPE OF (binary_numeric_expression);
<a id="p100665"></a>**END_ENTITY;**
<a id="p100666"></a>(*

##### <a id="p100667"></a>6.3.21 Объект slash_expression

<a id="p100668"></a>Объект slash_expression включает в себя семантику оператора языка EXPRESS '/' по ИСО 10303-11, относящуюся к типу данных NUMBER.
<a id="p100669"></a>*Примечание* - Объект slash_expression является выражением, которое вычисляет вещественный результат деления первого аргумента на второй. Его операнды должны быть выражены числами, относящимися к области числового типа данных. Результатом является число.

<a id="p100670"></a>EXPRESS-спецификация
<a id="p100671"></a>*)
<a id="p100672"></a>ENTITY slash_expression
<a id="p100673"></a>SUBTYPE OF (binary_numeric_expression);
<a id="p100674"></a>**END_ENTITY;**
<a id="p100675"></a>(*
<a id="p100676"></a>Неформальное утверждение
<a id="p100677"></a>IP1 - оценкой SELF\binary_generic_expression.operands[2] не должен быть 0.

##### <a id="p100678"></a>6.3.22 Объект power_expression

<a id="p100679"></a>Объект power_expression включает в себя семантику оператора языка EXPRESS '/' по ИСО 10303-11, относящуюся к типу данных NUMBER.
<a id="p100680"></a>*Примечание* - Объект power_expression является выражением, которое вычисляет возведение первого аргумента в степень, определяемую значением второго операнда. Его операнды должны быть выражены числами, относящимися к области числового типа данных. Результатом является число.

<a id="p100681"></a>EXPRESS-спецификация
<a id="p100682"></a>*)
<a id="p100683"></a>ENTITY power_expression
<a id="p100684"></a>SUBTYPE OF (binary_numeric_expression);
<a id="p100685"></a>**END_ENTITY;**
<a id="p100686"></a>(*

##### <a id="p100687"></a>6.3.23 Объект unary_function_call

<a id="p100688"></a>Объект unary_function_call является унарным оператором, относящимся к типу данных NUMBER по ИСО 10303-11.
<a id="p100689"></a>EXPRESS-спецификация
<a id="p100690"></a>    *)
<a id="p100691"></a>    ENTITY unary_function_call
<a id="p100692"></a>    ABSTRACT SUPERTYPE OF (ONEOF (abs_function,
<a id="p100693"></a>                                  minus_function,
<a id="p100694"></a>                                  sin_function,
<a id="p100695"></a>                                  cos_function,
<a id="p100696"></a>                                  tan_function,
<a id="p100697"></a>                                  asin_function,
<a id="p100698"></a>                                  acos_function,
<a id="p100699"></a>                                  exp_function,
<a id="p100700"></a>                                  log_function,
<a id="p100701"></a>                                  log2_function,
<a id="p100702"></a>                                  log10_function,
<a id="p100703"></a>                                  square_root_function))
<a id="p100704"></a>    SUBTYPE OF (unary_numeric_expression);
<a id="p100705"></a>    END_ENTITY;
<a id="p100706"></a>    (*

##### <a id="p100707"></a>6.3.24 Объект binary_function_call

<a id="p100708"></a>Объект binary_function_call является бинарным оператором, относящимся к типу данных NUMBER по ИСО 10303-11.
<a id="p100709"></a>EXPRESS-спецификация
<a id="p100710"></a>*)
<a id="p100711"></a>ENTITY binary_function_call
<a id="p100712"></a>ABSTRACT SUPERTYPE OF (ONEOF (atan_function))
<a id="p100713"></a>SUBTYPE OF (binary_numeric_expression);
<a id="p100714"></a>**END_ENTITY;**
<a id="p100715"></a>(*

##### <a id="p100716"></a>6.3.25 Объект multiple_arity_function_call

<a id="p100717"></a>Объект multiple_arity_function_call является оператором большой арности, относящимся к типу данных NUMBER по ИСО 10303-11.
<a id="p100718"></a>EXPRESS-спецификация
<a id="p100719"></a>    *)
<a id="p100720"></a>    ENTITY multiple_arity_function_call
<a id="p100721"></a>    ABSTRACT SUPERTYPE OF (ONEOF (maximum_function,
<a id="p100722"></a>                                     minimum_function))
<a id="p100723"></a>    SUBTYPE OF (multiple_arity_numeric_expression);
<a id="p100724"></a>    END_ENTITY;
<a id="p100725"></a>    (*

##### <a id="p100726"></a>6.3.26 Объект abs_function

<a id="p100727"></a>Объект abs_function включает в себя семантику функции 'ABS' по ИСО 10303-11, относящуюся к типу данных NUMBER по ИСО 10303-11.
<a id="p100728"></a>*Примечание* - Функция ABS возвращает абсолютное значение числа. Ее параметром является объект numeric_expression, содержащий значение числового типа данных. Результатом выполнения функции является абсолютное значение параметра. Возвращаемый тип данных идентичен типу данных параметра.

<a id="p100729"></a>EXPRESS-спецификация
<a id="p100730"></a>*)
<a id="p100731"></a>ENTITY abs_function
<a id="p100732"></a>SUBTYPE OF (unary_function_call);
<a id="p100733"></a>**END_ENTITY;**
<a id="p100734"></a>(*

##### <a id="p100735"></a>6.3.27 Объект minus_function

<a id="p100736"></a>Объект minus_function включает в себя семантику унарного оператора языка EXPRESS '-' по ИСО 10303-11, относящуюся к типу данных NUMBER по ИСО 10303-11.
<a id="p100737"></a>*Примечание* - Функция MINUS возвращает инвертированное значение числа. Ее параметром является объект numeric_expression, содержащий значение числового типа данных. Результатом выполнения функции является инвертированное значение параметра. Возвращаемый тип данных идентичен типу данных параметра.

<a id="p100738"></a>EXPRESS-спецификация
<a id="p100739"></a>*)
<a id="p100740"></a>ENTITY minus_function
<a id="p100741"></a>SUBTYPE OF (unary_function_call);
<a id="p100742"></a>**END_ENTITY;**
<a id="p100743"></a>(*

##### <a id="p100744"></a>6.3.28 Объект sin_function

<a id="p100745"></a>Объект sin_function включает в себя семантику функции языка EXPRESS 'SIN' по ИСО 10303-11.
<a id="p100746"></a>*Примечание* - Функция SIN возвращает значение синуса угла. Ее параметром является объект numeric_expression, содержащий значение числового типа данных, представляющее собой угол, выраженный в радианах. Результатом выполнения функции является синус параметра (-1,0 <= результат <= 1,0).

<a id="p100747"></a>EXPRESS-спецификация
<a id="p100748"></a>*)
<a id="p100749"></a>ENTITY sin_function
<a id="p100750"></a>SUBTYPE OF (unary_function_call);
<a id="p100751"></a>**END_ENTITY;**
<a id="p100752"></a>(*

##### <a id="p100753"></a>6.3.29 Объект cos_function

<a id="p100754"></a>Объект cos_function включает в себя семантику функции языка EXPRESS 'COS' по ИСО 10303-11.
<a id="p100755"></a>*Примечание* - Функция COS возвращает значение косинуса угла. Ее параметром является объект numeric_expression, содержащий значение числового типа данных, представляющее собой угол, выраженный в радианах. Результатом выполнения функции является косинус параметра (-1,0 <= результат <= 1,0).

<a id="p100756"></a>EXPRESS-спецификация
<a id="p100757"></a>*)
<a id="p100758"></a>ENTITY cos_function
<a id="p100759"></a>SUBTYPE OF (unary_function_call);
<a id="p100760"></a>**END_ENTITY;**
<a id="p100761"></a>(*

##### <a id="p100762"></a>6.3.30 Объект tan_function

<a id="p100763"></a>Объект tan_function включает в себя семантику функции языка EXPRESS 'TAN' по ИСО 10303-11.
<a id="p100764"></a>*Примечание* - Функция TAN возвращает значение тангенса угла. Ее параметром является объект numeric_expression, содержащий значение числового типа данных, представляющее собой угол, выраженный в радианах. Результатом выполнения функции является тангенс параметра.

<a id="p100765"></a>EXPRESS-спецификация
<a id="p100766"></a>*)
<a id="p100767"></a>ENTITY tan_function
<a id="p100768"></a>SUBTYPE OF (unary_function_call);
<a id="p100769"></a>**END_ENTITY;**
<a id="p100770"></a>(*

##### <a id="p100771"></a>6.3.31 Объект asin_function

<a id="p100772"></a>Объект asin_function включает в себя семантику функции языка EXPRESS 'ASIN' по ИСО 10303-11.
<a id="p100773"></a>*Примечание* - Функция ASIN возвращает угол, соответствующий заданному значению синуса. Ее параметром является объект numeric_expression, содержащий значение числового типа данных, представляющее собой синус угла, выраженного в радианах. Результатом выполнения функции является угол, выраженный в радианах $( - \pi/2 \leq \text{результат} \leq \pi/2)$ , синус которого задан параметром.

<a id="p100774"></a>EXPRESS-спецификация
<a id="p100775"></a>*)
<a id="p100776"></a>ENTITY asin_function
<a id="p100777"></a>SUBTYPE OF (unary_function_call);
<a id="p100778"></a>**END_ENTITY;**
<a id="p100779"></a>(*

##### <a id="p100780"></a>6.3.32 Объект acos_function

<a id="p100781"></a>Объект acos_function включает в себя семантику функции языка EXPRESS 'ACOS' по ИСО 10303-11.
<a id="p100782"></a>*Примечание* - Функция ACOS возвращает угол, соответствующий заданному значению косинуса. Ее параметром является объект numeric_expression, содержащий значение числового типа данных, представляющее собой косинус угла, выраженного в радианах. Результатом выполнения функции является угол, выраженный в радианах $( - \pi/2 \leq \text{результат} \leq \pi/2)$ , косинус которого задан параметром.

<a id="p100783"></a>EXPRESS-спецификация
<a id="p100784"></a>*)
<a id="p100785"></a>ENTITY acos_function
<a id="p100786"></a>SUBTYPE OF (unary_function_call);
<a id="p100787"></a>**END_ENTITY;**
<a id="p100788"></a>(*

##### <a id="p100789"></a>6.3.33 Объект exp_function

<a id="p100790"></a>Объект exp_function включает в себя семантику функции языка EXPRESS 'EXP' по ИСО 10303-11.
<a id="p100791"></a>*Примечание* - Функция EXP возвращает значение e (основание системы натуральных логарифмов), возведенное в степень, заданную значением параметра. Ее параметром является объект numeric_expression, содержащий значение числового типа данных, представляющее значение параметра. Результатом выполнения функции является значение e, возведенное в степень, заданную значением параметра.

<a id="p100792"></a>EXPRESS-спецификация
<a id="p100793"></a>*)
<a id="p100794"></a>ENTITY exp_function
<a id="p100795"></a>SUBTYPE OF (unary_function_call);
<a id="p100796"></a>**END_ENTITY;**
<a id="p100797"></a>(*

##### <a id="p100798"></a>6.3.34 Объект log_function

<a id="p100799"></a>Объект log_function включает в себя семантику функции языка EXPRESS 'LOG' по ИСО 10303-11.
<a id="p100800"></a>*Примечание* - Функция LOG возвращает натуральный логарифм числа. Ее параметром является объект numeric_expression, содержащий значение числового типа данных, представляющее собой значение параметра, которое должно быть больше нуля. Результатом выполнения функции является вещественное число, которое является натуральным логарифмом значения параметра.

<a id="p100801"></a>EXPRESS-спецификация
<a id="p100802"></a>*)
<a id="p100803"></a>ENTITY log_function
<a id="p100804"></a>SUBTYPE OF (unary_function_call);
<a id="p100805"></a>**END_ENTITY;**
<a id="p100806"></a>(*

##### <a id="p100807"></a>6.3.35 Объект log2_function

<a id="p100808"></a>Объект log2_function включает в себя семантику функции языка EXPRESS 'LOG2' по ИСО 10303-11.
<a id="p100809"></a>*Примечание* - Функция LOG2 возвращает логарифм числа по основанию 2. Ее параметром является объект numeric_expression, содержащий значение числового типа данных, представляющее собой значение параметра, которое должно быть больше нуля. Результатом выполнения функции является вещественное число, которое является логарифмом по основанию 2 значения параметра.

<a id="p100810"></a>EXPRESS-спецификация
<a id="p100811"></a>*)
<a id="p100812"></a>ENTITY log2_function
<a id="p100813"></a>SUBTYPE OF (unary_function_call);
<a id="p100814"></a>**END_ENTITY;**
<a id="p100815"></a>(*

##### <a id="p100816"></a>6.3.36 Объект log10_function

<a id="p100817"></a>Объект log10_function включает в себя семантику функции языка EXPRESS 'LOG10' по ИСО 10303-11.
<a id="p100818"></a>*Примечание* - Функция LOG10 возвращает десятичный логарифм числа. Ее параметром является объект numeric_expression, содержащий значение числового типа данных, представляющее собой значение параметра, которое должно быть больше нуля. Результатом выполнения функции является вещественное число, которое является десятичным логарифмом значения параметра.

<a id="p100819"></a>EXPRESS-спецификация
<a id="p100820"></a>*)
<a id="p100821"></a>ENTITY log10_function
<a id="p100822"></a>SUBTYPE OF (unary_function_call);
<a id="p100823"></a>**END_ENTITY;**
<a id="p100824"></a>(*

##### <a id="p100825"></a>6.3.37 Объект square_root_function

<a id="p100826"></a>Объект square_root_function включает в себя семантику функции языка EXPRESS 'SQRT' по ИСО 10303-11.
<a id="p100827"></a>*Примечание* - Функция SQRT (квадратный корень) возвращает неотрицательное значение квадратного корня числа. Ее параметром является объект numeric_expression, содержащий значение числового типа данных, представляющее собой значение параметра, которое должно быть больше нуля. Результатом выполнения функции является неотрицательное вещественное число, которое является квадратным корнем значения параметра.

<a id="p100828"></a>EXPRESS-спецификация
<a id="p100829"></a>*)
<a id="p100830"></a>ENTITY square_root_function
<a id="p100831"></a>SUBTYPE OF (unary_function_call);
<a id="p100832"></a>**END_ENTITY;**
<a id="p100833"></a>(*

##### <a id="p100834"></a>6.3.38 Объект atan_function

<a id="p100835"></a>Объект atan_function включает в себя семантику функции языка EXPRESS 'ATAN' по ИСО 10303-11.
<a id="p100836"></a>*Примечание* - Функция ATAN возвращает угол, соответствующий заданному значению тангенса, представленного параметрами. Ее параметрами являются два объекта numeric_expression, представляющие собой значение SELF\binary_generic_expression[1]/SELF/binary_generic_expression[2]. Результатом выполнения функции является угол, выраженный в радианах $( - \pi/2 \leq \text{результат} \leq \pi/2)$ , тангенс которого задан параметрами. Если значением второго выражения, соответствующего SELF\binary_generic_expression[2] является 0, то результат равен $- \pi/2$ или $\pi/2$ в зависимости от знака SELF\binary_generic_expression[1].

<a id="p100837"></a>EXPRESS-спецификация
<a id="p100838"></a>*)
<a id="p100839"></a>ENTITY atan_function
<a id="p100840"></a>SUBTYPE OF (binary_function_call);
<a id="p100841"></a>**END_ENTITY;**
<a id="p100842"></a>(*

##### <a id="p100843"></a>6.3.39 Объект maximum_function

<a id="p100844"></a>Объект maximum_function возвращает максимальное значение из списка значений его операндов, которые должны выражаться числами, относящимися к области типа данных NUMBER.
<a id="p100845"></a>EXPRESS-спецификация
<a id="p100846"></a>*)
<a id="p100847"></a>ENTITY maximum_function
<a id="p100848"></a>SUBTYPE OF (multiple_arity_function_call);
<a id="p100849"></a>**END_ENTITY;**
<a id="p100850"></a>(*

##### <a id="p100851"></a>6.3.40 Объект minimum_function

<a id="p100852"></a>Объект minimum_function возвращает минимальное значение из списка значений его операндов, которые должны выражаться числами, относящимися к области типа данных NUMBER.
<a id="p100853"></a>EXPRESS-спецификация
<a id="p100854"></a>*)
<a id="p100855"></a>ENTITY minimum_function
<a id="p100856"></a>SUBTYPE OF (multiple_arity_function_call);
<a id="p100857"></a>**END_ENTITY;**
<a id="p100858"></a>(*

##### <a id="p100859"></a>6.3.41 Объект integer_defined_function

<a id="p100860"></a>Объект integer_defined_function представляет собой любую функцию, областью значений которой является тип данных INTEGER по ИСО 10303-11.
<a id="p100861"></a>EXPRESS-спецификация
<a id="p100862"></a>*)
<a id="p100863"></a>ENTITY integer_defined_function
<a id="p100864"></a>**ABSTRACT SUPERTYPE**
<a id="p100865"></a>SUBTYPE OF (numeric_defined_function);
<a id="p100866"></a>**END_ENTITY;**
<a id="p100867"></a>(*
<a id="p100868"></a>Неформальное утверждение
<a id="p100869"></a>IP1 - подтипом объекта integer_defined_function может быть либо объект generic_expression, либо такой подтип, который не содержит какой-либо объект generic_variable.
<a id="p100870"></a>*Примечание* - Объект integer_defined_function является ресурсом, позволяющим конкретизировать эту схему путем включения любой определяемой приложением функции, которая возвращает значение, принадлежащее области данных целого типа.


##### <a id="p100871"></a>6.3.42 Объект real_defined_function

<a id="p100872"></a>Объект real_defined_function представляет собой любую функцию, областью значений которой является тип данных REAL по ИСО 10303-11.
<a id="p100873"></a>EXPRESS-спецификация
<a id="p100874"></a>*)
<a id="p100875"></a>ENTITY real_defined_function
<a id="p100876"></a>**ABSTRACT SUPERTYPE**
<a id="p100877"></a>SUBTYPE OF (numeric_defined_function);
<a id="p100878"></a>**END_ENTITY;**
<a id="p100879"></a>(*
<a id="p100880"></a>Неформальное утверждение
<a id="p100881"></a>IP1 - подтипом объекта real_defined_function может быть либо объект generic_expression, либо такой подтип, который не содержит какой-либо объект generic_variable.
<a id="p100882"></a>*Примечание* - Объект real_defined_function является ресурсом, позволяющим конкретизировать эту схему путем включения любой определяемой приложением функции, которая возвращает значение, принадлежащее области данных вещественного типа.


#### <a id="p100883"></a>6.4 Определения объектов булевых выражений

<a id="p100884"></a>Объект boolean_expression представляет собой выражение, областью значений которого является тип данных BOOLEAN по ИСО 10303-11.
<a id="p100885"></a>EXPRESS-спецификация
<a id="p100886"></a>    *)
<a id="p100887"></a>    ENTITY boolean_expression
<a id="p100888"></a>    ABSTRACT SUPERTYPE OF (ONEOF (simple_boolean_expression,
<a id="p100889"></a>                                      unary_boolean_expression,
<a id="p100890"></a>                                      binary_boolean_expression,
<a id="p100891"></a>                                      multiple_arity_boolean_expression,
<a id="p100892"></a>                                      comparison_expression,
<a id="p100893"></a>                                      interval_expression,
<a id="p100894"></a>                                      boolean_defined_function))
<a id="p100895"></a>    SUBTYPE OF (expression);
<a id="p100896"></a>    END_ENTITY;
<a id="p100897"></a>    (*

##### <a id="p100898"></a>6.4.1 Объект simple_boolean_expression

<a id="p100899"></a>Объект simple_boolean_expression представляет собой унарный оператор, областью значений которого является тип данных BOOLEAN по ИСО 10303-11.
<a id="p100900"></a>EXPRESS-спецификация
<a id="p100901"></a>    *)
<a id="p100902"></a>    ENTITY simple_boolean_expression
<a id="p100903"></a>    ABSTRACT SUPERTYPE OF (ONEOF (boolean_literal,
<a id="p100904"></a>                                      boolean_variable))
<a id="p100905"></a>    SUBTYPE OF (boolean_expression, simple_generic_expression);
<a id="p100906"></a>    END_ENTITY;
<a id="p100907"></a>    (*

##### <a id="p100908"></a>6.4.2 Объект boolean_literal

<a id="p100909"></a>Объект boolean_literal представляет собой литерал типа BOOLEAN языка EXPRESS.
<a id="p100910"></a>*Примечание* - Областью значений типа данных Boolean языка EXPRESS является набор, содержащий два литерала TRUE (истина) и FALSE (ложь).

<a id="p100911"></a>EXPRESS-спецификация
<a id="p100912"></a>    *)
<a id="p100913"></a>    ENTITY boolean_literal
<a id="p100914"></a>    SUBTYPE OF (simple_boolean_expression, generic_literal);
<a id="p100915"></a>        the value: BOOLEAN;
<a id="p100916"></a>    END_ENTITY;
<a id="p100917"></a>    (*
<a id="p100918"></a>Определение атрибута
<a id="p100919"></a>the value - значение литерала BOOLEAN.

##### <a id="p100920"></a>6.4.3 Объект boolean_variable

<a id="p100921"></a>Объект boolean_variable представляет собой переменную, которая обозначает булево значение.
<a id="p100922"></a>EXPRESS-спецификация
<a id="p100923"></a>*)
<a id="p100924"></a>ENTITY boolean_variable
<a id="p100925"></a>SUBTYPE OF (simple_boolean_expression, variable);
<a id="p100926"></a>**END_ENTITY;**
<a id="p100927"></a>(*

##### <a id="p100928"></a>6.4.4 Объект unary_boolean_expression

<a id="p100929"></a>Объект unary_boolean_expression представляет собой унарный оператор, областью значений которого является тип данных BOOLEAN по ИСО 10303-11.
<a id="p100930"></a>EXPRESS-спецификация
<a id="p100931"></a>*)
<a id="p100932"></a>ENTITY unary_boolean_expression
<a id="p100933"></a>ABSTRACT SUPERTYPE OF (ONEOF (not_expression, odd_function))
<a id="p100934"></a>SUBTYPE OF (boolean_expression, unary_generic_expression);
<a id="p100935"></a>**END_ENTITY;**
<a id="p100936"></a>(*

##### <a id="p100937"></a>6.4.5 Объект not_expression

<a id="p100938"></a>Объект not_expression включает в себя семантику отрицания 'NOT', применяемого к оператору булевого типа данных по ИСО 10303-11.
<a id="p100939"></a>*Примечание* - Для оператора NOT требуется один булевый операнд и его результатом является булево значение.

<a id="p100940"></a>EXPRESS-спецификация
<a id="p100941"></a>*)
<a id="p100942"></a>ENTITY not_expression
<a id="p100943"></a>SUBTYPE OF (unary_boolean_expression);
<a id="p100944"></a>SELF\unary_generic_expression.operand: boolean_expression;
<a id="p100945"></a>**END_ENTITY;**
<a id="p100946"></a>(*
<a id="p100947"></a>Определение атрибута
<a id="p100948"></a>SELF\unary_generic_expression.operand - выражение boolean_expression, которое представляет собой операнд оператора 'NOT'.

##### <a id="p100949"></a>6.4.6 Объект odd_function

<a id="p100950"></a>Объект odd_function включает в себя семантику оператора языка EXPRESS 'ODD' по ИСО 10303-11.
<a id="p100951"></a>*Примечание* - Функция ODD возвращает значение TRUE или FALSE в зависимости от того, является число нечетным или четным. Ее параметром является числовое выражение, значение которого принадлежит к целому типу данных. В качестве результата функция возвращает значение TRUE, если значение параметра по модулю 2 равно 1, и FALSE - в противном случае.

<a id="p100952"></a>EXPRESS-спецификация
<a id="p100953"></a>    *)
<a id="p100954"></a>    ENTITY odd_function
<a id="p100955"></a>    SUBTYPE OF (unary_boolean_expression);
<a id="p100956"></a>        SELF\unary_generic_expression.operand: numeric_expression;
<a id="p100957"></a>    WHERE
<a id="p100958"></a>        WR1: is_int_expr(SELF\numeric_expression);
<a id="p100959"></a>    END_ENTITY;
<a id="p100960"></a>    (*
<a id="p100961"></a>Определение атрибута
<a id="p100962"></a>SELF\unary_generic_expression.operand - выражение numeric_expression, которое представляет собой операнд функции 'ODD'.
<a id="p100963"></a>Формальное утверждение
<a id="p100964"></a>WR1 - операнд представляет собой выражение numeric_expression, областью значений которого является тип данных INTEGER языка EXPRESS.

##### <a id="p100965"></a>6.4.7 Объект binary_boolean_expression

<a id="p100966"></a>Объект binary_boolean_expression представляет собой бинарный оператор, областью значений которого является тип данных BOOLEAN языка EXPRESS по ИСО 10303-11.
<a id="p100967"></a>EXPRESS-спецификация
<a id="p100968"></a>*)
<a id="p100969"></a>ENTITY binary_boolean_expression
<a id="p100970"></a>ABSTRACT SUPERTYPE OF (ONEOF (xor_expression, equals_expression))
<a id="p100971"></a>SUBTYPE OF (boolean_expression, binary_generic_expression);
<a id="p100972"></a>**END_ENTITY;**
<a id="p100973"></a>(*

##### <a id="p100974"></a>6.4.8 Объект multiple_arity_boolean_expression

<a id="p100975"></a>Объект multiple_arity_boolean_expression представляет собой оператор большой арности, областью значений которого является тип данных BOOLEAN языка EXPRESS по ИСО 10303-11.
<a id="p100976"></a>EXPRESS-спецификация
<a id="p100977"></a>    *)
<a id="p100978"></a>    ENTITY multiple_arity_boolean_expression
<a id="p100979"></a>    ABSTRACT SUPERTYPE OF (ONEOF (and_expression, or_expression))
<a id="p100980"></a>    SUBTYPE OF (boolean_expression, multiple_arity_generic_expression);
<a id="p100981"></a>        SELF\multiple_arity_generic_expression.operands:
<a id="p100982"></a>                                   LIST [2:?] OF boolean_expression;
<a id="p100983"></a>    END_ENTITY;
<a id="p100984"></a>    (*
<a id="p100985"></a>Определение атрибута
<a id="p100986"></a>operands - экземпляры объекта boolean_expression, которые представляют собой параметры оператора большой арности.

##### <a id="p100987"></a>6.4.9 Объект xor_expression

<a id="p100988"></a>Объект xor_expression включает в себя семантику оператора 'XOR' по ИСО 10303-11.
<a id="p100989"></a>*Примечание* - Для оператора XOR требуются два булевых операнда и он вычисляет булево значение, которое является исключающей дизъюнкцией двух операндов.

<a id="p100990"></a>EXPRESS-спецификация
<a id="p100991"></a>    *)
<a id="p100992"></a>    ENTITY xor_expression
<a id="p100993"></a>    SUBTYPE OF (binary_boolean_expression);
<a id="p100994"></a>        SELF\binary_generic_expression.operands:
<a id="p100995"></a>                            LIST [2:2] OF boolean_expression;
<a id="p100996"></a>    END_ENTITY;
<a id="p100997"></a>    (*
<a id="p100998"></a>Определение атрибута
<a id="p100999"></a>operands - два операнда boolean_expression оператора XOR, которые должны представлять собой булевы выражения.

##### <a id="p101000"></a>6.4.10 Объект equals_expression

<a id="p101001"></a>Объект equals_expression включает в себя семантику оператора равенства экземпляров ':=:' по ИСО 10303-11, областью значений которого являются объекты типа данных generic_expression.
<a id="p101002"></a>*Примечание* - Оператор равенства экземпляров сравнивает значения двух экземпляров типа generic_expression, и результатом сравнения является булево значение. В контексте схемы ISO_13584_expressions_schema два значения экземпляров типа generic_expression являются сравнимыми, если их типы данных совпадают либо если один тип данных является подтипом второго.

<a id="p101003"></a>EXPRESS-спецификация
<a id="p101004"></a>*)
<a id="p101005"></a>ENTITY equals_expression
<a id="p101006"></a>SUBTYPE OF (binary_boolean_expression);
<a id="p101007"></a>**END_ENTITY;**
<a id="p101008"></a>(*

##### <a id="p101009"></a>6.4.11 Объект and_expression

<a id="p101010"></a>Объект and_expression включает в себя семантику оператора 'AND' по ИСО 10303-11 и использует свойство ассоциативности для работы с большой арностью.
<a id="p101011"></a>*Примечание* - Для оператора AND требуются, по крайней мере, два булевых выражения и он вычисляет булево значение, которое является конъюнкцией двух операндов.

<a id="p101012"></a>EXPRESS-спецификация
<a id="p101013"></a>*)
<a id="p101014"></a>ENTITY and_expression
<a id="p101015"></a>SUBTYPE OF (multiple_arity_boolean_expression);
<a id="p101016"></a>**END_ENTITY;**
<a id="p101017"></a>(*

##### <a id="p101018"></a>6.4.12 Объект or_expression

<a id="p101019"></a>Объект or_expression включает в себя семантику оператора 'OR' по ИСО 10303-11 и использует свойство ассоциативности для работы с большой арностью.
<a id="p101020"></a>*Примечание* - Для оператора OR требуются, по крайней мере, два булевых выражения, и он вычисляет булево значение, которое является включающей дизъюнкцией двух операндов.

<a id="p101021"></a>EXPRESS-спецификация
<a id="p101022"></a>*)
<a id="p101023"></a>ENTITY or_expression
<a id="p101024"></a>SUBTYPE OF (multiple_arity_boolean_expression);
<a id="p101025"></a>**END_ENTITY;**
<a id="p101026"></a>(*

##### <a id="p101027"></a>6.4.13 Объект comparison_expression

<a id="p101028"></a>Объект comparison_expression включает в себя семантику операторов сравнения различных значений по ИСО 10303-11, которые ограничены типами данных NUMBER, BOOLEAN и STRING языка EXPRESS. Оба операнда должны иметь один и тот же тип данных.
<a id="p101029"></a>EXPRESS-спецификация
<a id="p101030"></a>    *)
<a id="p101031"></a>    ENTITY comparison_expression
<a id="p101032"></a>    ABSTRACT SUPERTYPE OF (ONEOF (comparison_equal,
<a id="p101033"></a>                                     comparison_greater,
<a id="p101034"></a>                                     comparison_greater_equal,
<a id="p101035"></a>                                     comparison_less,
<a id="p101036"></a>                                     comparison_less_equal,
<a id="p101037"></a>                                     comparison_not_equal,
<a id="p101038"></a>                                     like_expression))
<a id="p101039"></a>    SUBTYPE OF (boolean_expression, binary_generic_expression);
<a id="p101040"></a>        SELF\binary_generic_expression.operands: LIST [2:2] OF expression;
<a id="p101041"></a>    WHERE
<a id="p101042"></a>        WR1: (('ISO13584_EXPRESSIONS_SCHEMA.NUMERIC_EXPRESSION'
<a id="p101043"></a>               IN TYPEOF (SELF\binary_generic_expression.operands[1]))
<a id="p101044"></a>          AND
<a id="p101045"></a>              'ISO13584_EXPRESSIONS_SCHEMA.NUMERIC_EXPRESSION'
<a id="p101046"></a>              IN TYPEOF (SELF\binary_generic_expression.operands[2]))
<a id="p101047"></a>        OR
<a id="p101048"></a>              (('ISO13584_EXPRESSIONS_SCHEMA.BOOLEAN_EXPRESSION'
<a id="p101049"></a>                IN TYPEOF (SELF\binary_generic_expression.operands[1]))
<a id="p101050"></a>          AND
<a id="p101051"></a>              ('ISO13584_EXPRESSIONS_SCHEMA.BOOLEAN_EXPRESSION'
<a id="p101052"></a>               IN TYPEOF (SELF\binary_generic_expression.operands[2])))
<a id="p101053"></a>        OR
<a id="p101054"></a>              (('ISO13584_EXPRESSIONS_SCHEMA.STRING_EXPRESSION'
<a id="p101055"></a>                IN TYPEOF (SELF\binary_generic_expression.operands[1]))
<a id="p101056"></a>          AND
<a id="p101057"></a>              ('ISO13584_EXPRESSIONS_SCHEMA.STRING_EXPRESSION'
<a id="p101058"></a>               IN TYPEOF (SELF\binary_generic_expression.operands[2])));
<a id="p101059"></a>    END_ENTITY;
<a id="p101060"></a>    (*
<a id="p101061"></a>Определение атрибута
<a id="p101062"></a>operands - список объектов generic_expressions, содержащий выражения, подлежащие сравнению.
<a id="p101063"></a>Формальное утверждение
<a id="p101064"></a>WR1 - операнды comparison_expression должны быть совместимыми по типу.

##### <a id="p101065"></a>6.4.14 Объект comparison_equal

<a id="p101066"></a>Объект comparison_equal включает в себя семантику оператора равенства значений ('=') по ИСО 10303-11, ограниченного типами данных NUMBER, BOOLEAN и STRING языка EXPRESS. Оба операнда должны иметь один и тот же тип данных.
<a id="p101067"></a>EXPRESS-спецификация
<a id="p101068"></a>*)
<a id="p101069"></a>ENTITY comparison_equal
<a id="p101070"></a>SUBTYPE OF (comparison_expression);
<a id="p101071"></a>**END_ENTITY;**
<a id="p101072"></a>(*
<a id="p101073"></a>*Примечание* - Объект comparison_equal имеет значение TRUE, если оба операнда имеют одно и то же значение.


##### <a id="p101074"></a>6.4.15 Comparison_greater

<a id="p101075"></a>Объект comparison_greater включает в себя семантику оператора '>' (больше чем) по ИСО 10303-11, ограниченного типами данных NUMBER, BOOLEAN и STRING языка EXPRESS. Оба операнда должны иметь один и тот же тип данных.
<a id="p101076"></a>*Примечание* - Объект comparison_greater имеет значение TRUE, если значение первого операнда больше, чем значение второго операнда. Соответствующими порядками старшинства являются:
- <a id="p101077"></a>математическое упорядочение вещественных чисел;
- <a id="p101078"></a>FALSE < TRUE;
- <a id="p101079"></a>лексикографический порядок в строках.

<a id="p101080"></a>EXPRESS-спецификация
<a id="p101081"></a>*)
<a id="p101082"></a>ENTITY comparison_greater
<a id="p101083"></a>SUBTYPE OF (comparison_expression);
<a id="p101084"></a>**END_ENTITY;**
<a id="p101085"></a>(*

##### <a id="p101086"></a>6.4.16 Объект comparison_greater_equal

<a id="p101087"></a>Объект comparison_greater_equal включает в себя семантику оператора '>=' (больше или равно) по ИСО 10303-11, ограниченного типами данных NUMBER, BOOLEAN и STRING языка EXPRESS. Оба операнда должны иметь один и тот же тип данных.
<a id="p101088"></a>*Примечание* - Объект comparison_greater_equal имеет значение TRUE, если значение первого операнда больше или равно значению второго операнда. Соответствующими порядками старшинства являются:
- <a id="p101089"></a>математическое упорядочение вещественных чисел;
- <a id="p101090"></a>FALSE < TRUE;
- <a id="p101091"></a>лексикографический порядок в строках.

<a id="p101092"></a>EXPRESS-спецификация
<a id="p101093"></a>*)
<a id="p101094"></a>ENTITY comparison_greater_equal
<a id="p101095"></a>SUBTYPE OF (comparison_expression);
<a id="p101096"></a>**END_ENTITY;**
<a id="p101097"></a>(*

##### <a id="p101098"></a>6.4.17 Объект comparison_less

<a id="p101099"></a>Объект comparison_less включает в себя семантику оператора '<' (меньше чем) по ИСО 10303-11, ограниченного типами данных NUMBER, BOOLEAN и STRING языка EXPRESS. Оба операнда должны иметь один и тот же тип данных.
<a id="p101100"></a>*Примечание* - Объект comparison_less имеет значение TRUE, если первый операнд имеет меньшее значение, чем второй операнд. Соответствующими порядками старшинства являются:
- <a id="p101101"></a>математическое упорядочение вещественных чисел;
- <a id="p101102"></a>FALSE < TRUE;
- <a id="p101103"></a>лексикографический порядок в строках.

<a id="p101104"></a>EXPRESS-спецификация
<a id="p101105"></a>*)
<a id="p101106"></a>ENTITY comparison_less
<a id="p101107"></a>SUBTYPE OF (comparison_expression);
<a id="p101108"></a>**END_ENTITY;**
<a id="p101109"></a>(*

##### <a id="p101110"></a>6.4.18 Объект comparison_less_equal

<a id="p101111"></a>Объект comparison_less_equal включает в себя семантику оператора языка EXPRESS '<=' (меньше или равно) по ИСО 10303-11, ограниченного типами данных NUMBER, BOOLEAN и STRING языка EXPRESS. Оба операнда должны иметь один и тот же тип данных.
<a id="p101112"></a>*Примечание* - Объект comparison_less_equal имеет значение TRUE, если значение первого операнда меньше или равно значению второго операнда. Соответствующими порядками старшинства являются:
- <a id="p101113"></a>математическое упорядочение вещественных чисел;
- <a id="p101114"></a>FALSE < TRUE;
- <a id="p101115"></a>лексикографический порядок в строках.

<a id="p101116"></a>EXPRESS-спецификация
<a id="p101117"></a>*)
<a id="p101118"></a>ENTITY comparison_less_equal
<a id="p101119"></a>SUBTYPE OF (comparison_expression);
<a id="p101120"></a>**END_ENTITY;**
<a id="p101121"></a>(*

##### <a id="p101122"></a>6.4.19 Объект comparison_not_equal

<a id="p101123"></a>Объект comparison_not_equal включает в себя семантику оператора '<>' (значения не равны) по ИСО 10303-11, ограниченного типами данных NUMBER, BOOLEAN и STRING языка EXPRESS. Оба операнда должны иметь один и тот же тип данных.
<a id="p101124"></a>*Примечание* - Объект comparison_not_equal имеет значение TRUE, если первый операнд имеет значение, отличающееся от значения второго операнда. Соответствующими порядками старшинства являются:
- <a id="p101125"></a>математическое упорядочение вещественных чисел;
- <a id="p101126"></a>FALSE < TRUE;
- <a id="p101127"></a>лексикографический порядок в строках.

<a id="p101128"></a>EXPRESS-спецификация
<a id="p101129"></a>    *)
<a id="p101130"></a>    ENTITY comparison_not_equal
<a id="p101131"></a>    SUBTYPE OF (comparison_expression);
<a id="p101132"></a>    END_ENTITY;
<a id="p101133"></a>        (*

##### <a id="p101134"></a>6.4.20 Объект like_expression

<a id="p101135"></a>Объект like_expression включает в себя семантику оператора соответствия строк LIKE по ИСО 10303-11. Первый операнд является целевой строкой; второй операнд - образцовой строкой. Специальные символы (часто называемые безразличными символами (wild cards)) в образцовой строке определены в ИСО 10303-11.
<a id="p101136"></a>EXPRESS-спецификация
<a id="p101137"></a>    *)
<a id="p101138"></a>    ENTITY like_expression
<a id="p101139"></a>    SUBTYPE OF (comparison_expression);
<a id="p101140"></a>    WHERE
<a id="p101141"></a>        WR1: ('ISO13584_EXPRESSIONS_SCHEMA.STRING_EXPRESSION'
<a id="p101142"></a>              IN TYPEOF (SELF\comparison_expression.operands[1])) AND
<a id="p101143"></a>             ('ISO13584_EXPRESSIONS_SCHEMA.STRING_EXPRESSION'
<a id="p101144"></a>              IN TYPEOF (SELF\comparison_expression.operands[2]));
<a id="p101145"></a>    END_ENTITY;
<a id="p101146"></a>    (*
<a id="p101147"></a>Формальное утверждение
<a id="p101148"></a>WR1 - список операндов должен содержать два выражения generic_expression, которые являются выражениями типа string_expression.

##### <a id="p101149"></a>6.4.21 Объект interval_expression

<a id="p101150"></a>Объект interval_expression включает в себя семантику выражения интервала по ИСО 10303-11, ограниченного типами данных NUMBER, BOOLEAN и STRING языка EXPRESS. Оба операнда должны иметь один и тот же тип данных.
<a id="p101151"></a>*Примечание* - Выражение interval_expression проверяет, находится или нет значение в пределах заданного интервала. Оно принимает значение TRUE, если interval_low <= interval_item <= interval_high. Соответствующими порядками старшинства являются:
- <a id="p101152"></a>математическое упорядочение вещественных чисел;
- <a id="p101153"></a>лексикографический порядок в строках.

<a id="p101154"></a>EXPRESS-спецификация
<a id="p101155"></a>    *)
<a id="p101156"></a>    ENTITY interval_expression
<a id="p101157"></a>    SUBTYPE OF (boolean_expression, multiple_arity_generic_expression);
<a id="p101158"></a>    DERIVE
<a id="p101159"></a>        interval_low: generic_expression
<a id="p101160"></a>                    : = SELF\multiple_arity_generic_expression.operands[1];
<a id="p101161"></a>        interval_item:generic_expression
<a id="p101162"></a>                    : = SELF\multiple_arity_generic_expression.operands[2];
<a id="p101163"></a>        interval_high:generic_expression
<a id="p101164"></a>                    : = SELF\multiple_arity_generic_expression.operands[3];
<a id="p101165"></a>    WHERE
<a id="p101166"></a>        WR1: ('ISO13584_EXPRESSIONS_SCHEMA.EXPRESSION'
<a id="p101167"></a>                                      IN TYPEOF (interval_low))
<a id="p101168"></a>               AND ('ISO13584_EXPRESSIONS_SCHEMA.EXPRESSION'
<a id="p101169"></a>                                      IN TYPEOF (interval_item))
<a id="p101170"></a>               AND ('ISO13584_EXPRESSIONS_SCHEMA.EXPRESSION'
<a id="p101171"></a>                                      IN TYPEOF (interval_high));
<a id="p101172"></a>        WR2: (('ISO13584_EXPRESSIONS_SCHEMA.STRING_EXPRESSION'
<a id="p101173"></a>                                      IN TYPEOF (SELF.interval_low))
<a id="p101174"></a>               AND ('ISO13584_EXPRESSIONS_SCHEMA.STRING_EXPRESSION'
<a id="p101175"></a>                                      IN TYPEOF (SELF.interval_high))
<a id="p101176"></a>               AND ('ISO13584_EXPRESSIONS_SCHEMA.STRING_EXPRESSION'
<a id="p101177"></a>                                      IN TYPEOF (SELF.interval_item)))
<a id="p101178"></a>          OR
<a id="p101179"></a>          (('ISO13584_EXPRESSIONS_SCHEMA.STRING_EXPRESSION'
<a id="p101180"></a>                                      IN TYPEOF (SELF.interval_low))
<a id="p101181"></a>            AND ('ISO13584_EXPRESSIONS_SCHEMA.NUMERIC_EXPRESSION'
<a id="p101182"></a>                                      IN TYPEOF (SELF.interval_item))
<a id="p101183"></a>            AND ('ISO13584_EXPRESSIONS_SCHEMA.NUMERIC_EXPRESSION'
<a id="p101184"></a>                                      IN TYPEOF (SELF.interval_high)));
<a id="p101185"></a>    END_ENTITY;
<a id="p101186"></a>    (*
<a id="p101187"></a>Определения атрибутов
<a id="p101188"></a>interval_low - операнд, задающий нижнюю границу (bound_1) интервального выражения (пункт 12.2.4 ИСО 10303-11);
<a id="p101189"></a>interval_high - операнд, задающий верхнюю границу (bound_2) интервального выражения (пункт 12.2.4 ИСО 10303-11);
<a id="p101190"></a>interval_item - операнд interval_item интервального выражения (пункт 12.2.4 ИСО 10303-11).
<a id="p101191"></a>Формальные утверждения
<a id="p101192"></a>WR1 - операнды должны иметь тип данных expression.
<a id="p101193"></a>WR2 - типы сравниваемых в interval_expression выражений должны быть выражены в сравнимых выражениях.

##### <a id="p101194"></a>6.4.22 Объект booiean_defined_function

<a id="p101195"></a>Объект boolean_defined_function представляет собой любой оператор, определенный в прикладной программе, областью значений которого является тип данных BOOLEAN по ИСО 10303-11.
<a id="p101196"></a>EXPRESS-спецификация
<a id="p101197"></a>*)
<a id="p101198"></a>ENTITY boolean_defined_function
<a id="p101199"></a>**ABSTRACT SUPERTYPE**
<a id="p101200"></a>SUBTYPE OF (defined_function, boolean_expression);
<a id="p101201"></a>**END_ENTITY;**
<a id="p101202"></a>(*
<a id="p101203"></a>Неформальное утверждение
<a id="p101204"></a>IP1 - подтипом объекта boolean_defined_function может быть либо объект generic_expression, либо такой объект, который не содержит ни одного объекта generic_variable.

#### <a id="p101205"></a>6.5 Определения объектов строковых выражений

<a id="p101206"></a>Объект string_expression представляет собой выражение, областью значений которого является тип данных STRING языка EXPRESS по ИСО 10303-11.
<a id="p101207"></a>EXPRESS-спецификация
<a id="p101208"></a>    *)
<a id="p101209"></a>    ENTITY string_expression
<a id="p101210"></a>    ABSTRACT SUPERTYPE OF (ONEOF (simple_string_expression,
<a id="p101211"></a>                                     index_expression,
<a id="p101212"></a>                                     substring_expression,
<a id="p101213"></a>                                     concat_expression,
<a id="p101214"></a>                                     format_function,
<a id="p101215"></a>                                     string_defined_function))
<a id="p101216"></a>    SUBTYPE OF (expression);
<a id="p101217"></a>    END_ENTITY;
<a id="p101218"></a>    (*

##### <a id="p101219"></a>6.5.1 Объект simple_string_expression

<a id="p101220"></a>Объект simple_string_expression представляет собой унарный оператор, областью значений которого является тип данных STRING языка EXPRESS по ИСО 10303-11.
<a id="p101221"></a>EXPRESS-спецификация
<a id="p101222"></a>    *)
<a id="p101223"></a>    ENTITY simple_string_expression
<a id="p101224"></a>    ABSTRACT SUPERTYPE OF (ONEOF (string_literal,
<a id="p101225"></a>                                      string_variable))
<a id="p101226"></a>    SUBTYPE OF (string_expression, simple_generic_expression);
<a id="p101227"></a>    END_ENTITY;
<a id="p101228"></a>    (*

##### <a id="p101229"></a>6.5.2 Объект string_literal

<a id="p101230"></a>Объект string_literal представляет собой литерал типа STRING языка EXPRESS.
<a id="p101231"></a>*Примечание* - Областью значений типа данных STRING языка EXPRESS являются последовательности символов.

<a id="p101232"></a>EXPRESS-спецификация
<a id="p101233"></a>    *)
<a id="p101234"></a>    ENTITY string_literal
<a id="p101235"></a>    SUBTYPE OF (simple_string_expression, generic_literal);
<a id="p101236"></a>        the_value: STRING;
<a id="p101237"></a>    END_ENTITY;
<a id="p101238"></a>    (*
<a id="p101239"></a>Определение атрибута
<a id="p101240"></a>the_value - значение литерала STRING.

##### <a id="p101241"></a>6.5.3 Объект string_variable

<a id="p101242"></a>Объект string_variable представляет собой переменную, которая обозначает значение типа STRING.
<a id="p101243"></a>EXPRESS-спецификация
<a id="p101244"></a>*)
<a id="p101245"></a>ENTITY string_variable
<a id="p101246"></a>SUBTYPE OF (simple_string_expression, variable);
<a id="p101247"></a>**END_ENTITY;**
<a id="p101248"></a>(*

##### <a id="p101249"></a>6.5.4 Объект index_expression

<a id="p101250"></a>Объект index_expression включает в себя семантику оператора индексирования строки ([]) по ИСО 10303-11.
<a id="p101251"></a>*Примечание* - У строкового оператора index_expression есть два операнда: строковое значение (представленное атрибутом operand) индексируется значением индекса (представленного атрибутом index). Результирующее строковое значение представляет собой символ, расположенный на позиции, определяемой значением атрибута index.

<a id="p101252"></a>EXPRESS-спецификация
<a id="p101253"></a>    *)
<a id="p101254"></a>    ENTITY index_expression
<a id="p101255"></a>    SUBTYPE OF (string_expression, binary_generic_expression);
<a id="p101256"></a>    DERIVE
<a id="p101257"></a>        operand: generic_expression :=
<a id="p101258"></a>    SELF\binary_generic_expression.operands[1];
<a id="p101259"></a>        index:generic_expression :=
<a id="p101260"></a>    SELF\binary_generic_expression.operands[2];
<a id="p101261"></a>    WHERE
<a id="p101262"></a>        WR1: ('ISO13584_EXPRESSIONS_SCHEMA.STRING_EXPRESSION'
<a id="p101263"></a>              IN TYPEOF (operand))
<a id="p101264"></a>          AND ('ISO13584_EXPRESSIONS_SCHEMA.NUMERIC_EXPRESSION'
<a id="p101265"></a>              IN TYPEOF (index));
<a id="p101266"></a>        WR2: is_int_expr (index);
<a id="p101267"></a>    END_ENTITY;
<a id="p101268"></a>    (*
<a id="p101269"></a>Определения атрибутов
<a id="p101270"></a>operand - объект string_expression, который представляет литерал STRING;
<a id="p101271"></a>index - целочисленное выражение numeric_expression, которое показывает значение индекса.
<a id="p101272"></a>Формальные утверждения
<a id="p101273"></a>WR1 - первый операнд должен быть объектом string_expression, а второй операнд - объектом numeric_expression.
<a id="p101274"></a>WR2 - позиция, определяемая операндом index, должна иметь целое значение.
<a id="p101275"></a>Неформальное утверждение
<a id="p101276"></a>IP1 - операнд index должен иметь значение типа INTEGER, которые больше нуля и меньше или равно длине строки, заданной операндом STRING.

##### <a id="p101277"></a>6.5.5 Объект substring_expression

<a id="p101278"></a>Объект substring_expression включает в себя семантику оператора индексирования подстроки ([:]) по ИСО 10303-11.
<a id="p101279"></a>*Примечание* - У строкового оператора substring_expression есть три операнда: строковое значение (представленное атрибутом operand) индексируется значением индекса (представленного атрибутами index1 и index2). Оператор substring_expression вычисляет строковое значение длиной (index2 - index1 + 1). В результате строковое значение эквивалентно последовательности символов, расположенных с позиции index1 по позицию index2.

<a id="p101280"></a>EXPRESS-спецификация
<a id="p101281"></a>    *)
<a id="p101282"></a>    ENTITY substring_expression
<a id="p101283"></a>    SUBTYPE OF (string_expression, multiple_arity_generic_expression);
<a id="p101284"></a>    DERIVE
<a id="p101285"></a>        operand:generic_expression :=
<a id="p101286"></a>               SELF\multiple_arity_generic_expression.operands[1];
<a id="p101287"></a>        index1 :generic_expression :=
<a id="p101288"></a>               SELF\multiple_arity_generic_expression.operands[2];
<a id="p101289"></a>        index2:generic_expression :=
<a id="p101290"></a>               SELF\multiple_arity_generic_expression.operands[3];
<a id="p101291"></a>    WHERE
<a id="p101292"></a>        WR1: ('ISO13584_EXPRESSIONS_SCHEMA.STRING_EXPRESSION'
<a id="p101293"></a>                                          IN TYPEOF (operand))
<a id="p101294"></a>        AND ('ISO13584_EXPRESSIONS_SCHEMA.NUMERIC_EXPRESSION'
<a id="p101295"></a>                                          IN TYPEOF (index1))
<a id="p101296"></a>        AND ('ISOI3584_EXPRESSIONS_SCHEMA.NUMERIC_EXPRESSION'
<a id="p101297"></a>                                          IN TYPEOF (index2));
<a id="p101298"></a>        WR2: SIZEOF (SELF\multiple_arity_generic_expression.operands) = 3;
<a id="p101299"></a>        WR3: is_int_expr(index1);
<a id="p101300"></a>        WR4: is_int_expr (index2);
<a id="p101301"></a>    END_ENTITY;
<a id="p101302"></a>    (*
<a id="p101303"></a>Определения атрибутов
<a id="p101304"></a>operand - объект string_expression, из которого выделяется подстрока;
<a id="p101305"></a>index1 - объект numeric_expression, который показывает нижнюю границу подстроки в operand;
<a id="p101306"></a>index2 - объект numeric_expression, который показывает верхнюю границу подстроки в operand.
<a id="p101307"></a>Формальные утверждения
<a id="p101308"></a>WR1 - операнд должен быть объектом string_expression; index1 и index2 должны быть объектами numeric_expression.
<a id="p101309"></a>WR2 - список операндов объекта substring_expression должен содержать три элемента.
<a id="p101310"></a>WR3 - операнд index1 должен иметь значение типа INTEGER.
<a id="p101311"></a>WR3 - операнд index2 должен иметь значение типа INTEGER.
<a id="p101312"></a>Неформальные утверждения
<a id="p101313"></a>IP1 - операнды index1 и index2 должны иметь значения типа INTEGER, которые больше нуля и меньше или равны длине строки, заданной операндом STRING.
<a id="p101314"></a>IP2 - значение index1 должно быть меньше или равно значению index2.

##### <a id="p101315"></a>6.5.6 Объект concat_expression

<a id="p101316"></a>Объект concat_expression включает в себя семантику оператора конкатенации (+) по ИСО 10303-11, относящуюся к типу данных STRING.
<a id="p101317"></a>*Примечание* - У оператора concat_expression есть, по крайней мере, два операнда типа string_expression. Он вычисляет строковое значение, являющееся результатом конкатенации всех элементов списка SELF\multiple_arity_generic_expression.operands. Конкатенация этих элементов осуществляется в порядке их расположения в списке.

<a id="p101318"></a>EXPRESS-спецификация
<a id="p101319"></a>    *)
<a id="p101320"></a>    ENTITY concat_expression
<a id="p101321"></a>    SUBTYPE OF (string_expression, multiple_arity_generic_expression);
<a id="p101322"></a>        SELF\multiple_arity_generic_expression.operands:
<a id="p101323"></a>                                     LIST [2:?] OF string_expression;
<a id="p101324"></a>    END_ENTITY;
<a id="p101325"></a>    (*
<a id="p101326"></a>Определение атрибута
<a id="p101327"></a>SELF\multiple_arity_generic_expression.operands - выражения типа string_expression, которые подлежат конкатенации.

##### <a id="p101328"></a>6.5.7 Объект format_function

<a id="p101329"></a>Объект format_function включает в себя семантику функции FORMAT по ИСО 10303-11.
<a id="p101330"></a>*Примечание* - Функция format_function возвращает отформатированное строковое представление числа. Ее параметрами являются: numeric_expression, соответствующее операнду value_to_format, которое выражается в виде вещественного или целого числа, и string_expression, соответствующее операнду format_string, которое выражается в виде строки, содержащей команды форматирования. Результатом функции является строковое представление значения операнда value_to_format, соответствующее значению операнда format_string. Строка форматирования содержит специальные символы, которые указывают, какой формат должен быть у результата. Различные способы описания строки форматирования установлены в ИСО 10303-11.

<a id="p101331"></a>EXPRESS-спецификация
<a id="p101332"></a>    *)
<a id="p101333"></a>    ENTITY format_function
<a id="p101334"></a>    SUBTYPE OF (string_expression, binary_generic_expression);
<a id="p101335"></a>    DERIVE
<a id="p101336"></a>        value_to_format: generic_expression :=
<a id="p101337"></a>               SELF\binary_generic_expression.operands[1];
<a id="p101338"></a>        format_string:generic_expression :=
<a id="p101339"></a>               SELF\binary_generic_expression.operands[2];
<a id="p101340"></a>    WHERE
<a id="p101341"></a>        WR1:(('ISO13584_EXPRESSIONS_SCHEMA.NUMERIC_EXPRESSION')
<a id="p101342"></a>                                          IN TYPEOF (value_to_format))
<a id="p101343"></a>        AND (('ISO13584_EXPRESSIONS_SCHEMA.STRING_EXPRESSION')
<a id="p101344"></a>                                          IN TYPEOF (format_string));
<a id="p101345"></a>    END_ENTITY;
<a id="p101346"></a>    (*
<a id="p101347"></a>Определения атрибутов
<a id="p101348"></a>value_to_format - объект numeric_expression, который должен быть отформатирован;
<a id="p101349"></a>format_string - команды форматирования, которые определяют вид результата.
<a id="p101350"></a>Формальное утверждение
<a id="p101351"></a>WR1 - операнд value_to_format должен принадлежать к типу numeric_expression, а операнд format_string - к типу string_expression.

##### <a id="p101352"></a>6.5.8 Объект string_defined_function

<a id="p101353"></a>Объект string_defined_function представляет собой любой оператор, определенный в прикладной программе, областью значений которого является тип данных STRING по ИСО 10303-11.
<a id="p101354"></a>EXPRESS-спецификация
<a id="p101355"></a>*)
<a id="p101356"></a>ENTITY string_defined_function
<a id="p101357"></a>**ABSTRACT SUPERTYPE**
<a id="p101358"></a>SUBTYPE OF (defined_function, string_expression);
<a id="p101359"></a>**END_ENTITY;**
<a id="p101360"></a>(*
<a id="p101361"></a>Неформальное утверждение
<a id="p101362"></a>IP1 - подтип объекта string_defined_function может быть либо объектом generic_expression, либо он не должен содержать ни одного объекта generic_variable.

#### <a id="p101363"></a>6.6 Функции для определения свойств выражения

<a id="p101364"></a>Следующие декларации на языке EXPRESS устанавливают различные функции, которые позволяют определять свойства выражений.

##### <a id="p101365"></a>6.6.1 Функция is_int_expr

<a id="p101366"></a>Функция is_int_expr проверяет, является ли результатом синтаксически правильного выражения целочисленное значение или нет.
<a id="p101367"></a>EXPRESS-спецификация
<a id="p101368"></a>    *)
<a id="p101369"></a>    FUNCTION is_int_expr (arg: numeric_expression): BOOLEAN;

<a id="p101370"></a>    LOCAL
<a id="p101371"></a>        i: INTEGER;
<a id="p101372"></a>    END_LOCAL;

<a id="p101373"></a>    IF 'ISO13584_EXPRESSIONS_SCHEMA.INT_LITERAL' IN TYPEOF (arg)
<a id="p101374"></a>    THEN
<a id="p101375"></a>        RETURN (TRUE);
<a id="p101376"></a>    END_IF;
<a id="p101377"></a>    IF 'ISO13584_EXPRESSIONS_SCHEMA.REAL_LITERAL' IN TYPEOF (arg)
<a id="p101378"></a>    THEN
<a id="p101379"></a>        RETURN (FALSE);
<a id="p101380"></a>    END_IF;
<a id="p101381"></a>    IF 'ISO13584_EXPRESSIONS_SCHEMA.INT_NUMERIC_VARIABLE' IN TYPEOF (arg)
<a id="p101382"></a>    THEN
<a id="p101383"></a>        RETURN (TRUE);
<a id="p101384"></a>    END_IF;
<a id="p101385"></a>    IF 'ISO13584_EXPRESSIONS_SCHEMA.REAL_NUMERIC_VARIABLE' IN TYPEOF (arg)
<a id="p101386"></a>    THEN
<a id="p101387"></a>        RETURN (FALSE);
<a id="p101388"></a>    END_IF;
<a id="p101389"></a>    IF 'ISO13584_EXPRESSIONS_SCHEMA.ABS_FUNCTION' IN TYPEOF (arg)
<a id="p101390"></a>    THEN
<a id="p101391"></a>        RETURN (is_int_expr(arg\unary_numeric_expression.operand));
<a id="p101392"></a>    END_IF;
<a id="p101393"></a>    IF 'ISO13584_EXPRESSIONS_SCHEMA.MINUS_FUNCTION' IN TYPEOF (arg)
<a id="p101394"></a>    THEN
<a id="p101395"></a>        RETURN (is_int_expr(arg\unary_numeric_expression.operand));
<a id="p101396"></a>    END_IF;
<a id="p101397"></a>    IF ('ISO13584_EXPRESSIONS_SCHEMA.SIN_FUNCTION' IN TYPEOF (arg))
<a id="p101398"></a>        OR ('ISO13584_EXPRESSIONS_SCHEMA.COS_FUNCTION' IN TYPEOF (arg))
<a id="p101399"></a>        OR ('ISO13584_EXPRESSIONS_SCHEMA.TAN_FUNCTION' IN TYPEOF (arg))
<a id="p101400"></a>        OR ('ISO13584_EXPRESSIONS_SCHEMA.ASIN_FUNCTION' IN TYPEOF (arg))
<a id="p101401"></a>        OR ('ISO13584_EXPRESSIONS_SCHEMA.ACOS_FUNCTION' IN TYPEOF (arg))
<a id="p101402"></a>        OR ('ISO13584_EXPRESSIONS_SCHEMA.ATAN_FUNCTION' IN TYPEOF (arg))
<a id="p101403"></a>        OR ('ISO13584_EXPRESSIONS_SCHEMA.EXP_FUNCTION' IN TYPEOF (arg))
<a id="p101404"></a>        OR ('ISO13584_EXPRESSIONS_SCHEMA.LOG_FUNCTION' IN TYPEOF (arg))
<a id="p101405"></a>        OR ('ISO13584_EXPRESSIONS_SCHEMA.LOG2_FUNCTION' IN TYPEOF (arg))
<a id="p101406"></a>        OR ('ISO13584_EXPRESSIONS_SCHEMA.LOG10_FUNCTION' IN TYPEOF (arg))
<a id="p101407"></a>        OR ('ISO13584_EXPRESSIONS_SCHEMA.SQUARE_ROOT_FUNCTION'
<a id="p101408"></a>                                                      IN TYPEOF (arg))
<a id="p101409"></a>    THEN
<a id="p101410"></a>        RETURN (FALSE);
<a id="p101411"></a>    END_IF;
<a id="p101412"></a>    IF ('ISO13584_EXPRESSIONS_SCHEMA.PLUS_EXPRESSION' IN TYPEOF (arg))
<a id="p101413"></a>        OR ('ISO13584_EXPRESSIONS_SCHEMA.MULT_EXPRESSION'
<a id="p101414"></a>                                                      IN TYPEOF (arg))
<a id="p101415"></a>        OR ('ISO13584_EXPRESSIONS_SCHEMA.MAXIMUM_FUNCTION'
<a id="p101416"></a>                                                      IN TYPEOF (arg))
<a id="p101417"></a>        OR ('ISO13584_EXPRESSIONS_SCHEMA.MINIMUM_FUNCTION'
<a id="p101418"></a>                                                      IN TYPEOF (arg))
<a id="p101419"></a>    THEN
<a id="p101420"></a>    REPEAT i:=1 TO SIZEOF (
<a id="p101421"></a>           arg\multiple_arity_numeric_expression.operands);
<a id="p101422"></a>    IF NOT
<a id="p101423"></a>        is_int_expr(arg\multiple_arity_numeric_expression.operands[i])
<a id="p101424"></a>    THEN
<a id="p101425"></a>        RETURN (FALSE);
<a id="p101426"></a>    END_IF;
<a id="p101427"></a>    END_REPEAT;
<a id="p101428"></a>    RETURN (TRUE);
<a id="p101429"></a>    END_IF;
<a id="p101430"></a>    IF ('ISO13584_EXPRESSIONS_SCHEMA.MINUS_EXPRESSION' IN TYPEOF (arg))
<a id="p101431"></a>        OR ('ISO13584_EXPRESSIONS_SCHEMA.POWER_EXPRESSION'
<a id="p101432"></a>                                                      IN TYPEOF (arg))
<a id="p101433"></a>    THEN
<a id="p101434"></a>        RETURN (is_int_expr(arg\binary_numeric_expression.operands[1])
<a id="p101435"></a>          AND is_int_expr(arg\binary_numeric_expression.operands[2]));
<a id="p101436"></a>    END_IF;
<a id="p101437"></a>    IF ('ISO13584_EXPRESSIONS_SCHEMA.DIV_EXPRESSION' IN TYPEOF (arg))
<a id="p101438"></a>        OR ('ISO13584_EXPRESSIONS_SCHEMA.MOD_EXPRESSION' IN TYPEOF (arg))
<a id="p101439"></a>    THEN
<a id="p101440"></a>        RETURN (TRUE); (* всегда выдает результат типа INTEGER *)
<a id="p101441"></a>    END_IF;
<a id="p101442"></a>    IF 'ISO13584_EXPRESSIONS_SCHEMA.SLASH_EXPRESSION' IN TYPEOF (arg)
<a id="p101443"></a>    THEN
<a id="p101444"></a>        RETURN (FALSE); (* всегда выдает результат типа REAL *)
<a id="p101445"></a>    END_IF;
<a id="p101446"></a>    IF 'ISO13584_EXPRESSIONS_SCHEMA.LENGTH_FUNCTION' IN TYPEOF (arg)
<a id="p101447"></a>    THEN
<a id="p101448"></a>        RETURN (TRUE);
<a id="p101449"></a>    END_IF;
<a id="p101450"></a>    IF 'ISO13584_EXPRESSIONS_SCHEMA.VALUE_FUNCTION' IN TYPEOF (arg)
<a id="p101451"></a>    THEN
<a id="p101452"></a>        IF 'ISO13584_EXPRESSIONS_SCHEMA.INT_VALUE_FUNCTION'
<a id="p101453"></a>                                                      IN TYPEOF (arg)
<a id="p101454"></a>        THEN
<a id="p101455"></a>          RETURN (TRUE);
<a id="p101456"></a>        ELSE
<a id="p101457"></a>          RETURN (FALSE);
<a id="p101458"></a>        END_IF;
<a id="p101459"></a>    END_IF;
<a id="p101460"></a>    IF 'ISO13584_EXPRESSIONS_SCHEMA.INTEGER_DEFINED_FUNCTION'
<a id="p101461"></a>                                                      IN TYPEOF (arg)
<a id="p101462"></a>    THEN
<a id="p101463"></a>        RETURN (TRUE);
<a id="p101464"></a>    END_IF;
<a id="p101465"></a>    IF 'ISO13584_EXPRESSIONS_SCHEMA.REAL_DEFINED_FUNCTION' IN TYPEOF (arg)
<a id="p101466"></a>    THEN
<a id="p101467"></a>        RETURN (FALSE);
<a id="p101468"></a>    END_IF;
<a id="p101469"></a>    IF 'ISO13584_EXPRESSIONS_SCHEMA.BOOLEAN_DEFINED_FUNCTION'
<a id="p101470"></a>                                                      IN TYPEOF (arg)
<a id="p101471"></a>    THEN
<a id="p101472"></a>        RETURN (FALSE);
<a id="p101473"></a>    END_IF;
<a id="p101474"></a>    IF 'ISO13584_EXPRESSIONS_SCHEMA.STRING_DEFINED_FUNCTION'
<a id="p101475"></a>                                                      IN TYPEOF (arg)
<a id="p101476"></a>    THEN
<a id="p101477"></a>        RETURN (FALSE);
<a id="p101478"></a>    END_IF;
<a id="p101479"></a>    (*  Если  встречается  другое  generic_expression,  которое не является
подтипом  integer_defined_function,  то  его  результат  не  является целым
числом *)
<a id="p101480"></a>    RETURN (FALSE);

<a id="p101481"></a>    END_FUNCTION; -- is_int_expr
<a id="p101482"></a>    (*

##### <a id="p101483"></a>6.6.2 Функция is_SQL_mappable

<a id="p101484"></a>Функция is_SQL_mappable проверяет, содержит ли ациклический граф, представляющий выражение, только элементы, отображаемые на языке SQL.
<a id="p101485"></a>EXPRESS-спецификация
<a id="p101486"></a>    *)
<a id="p101487"></a>    FUNCTION is_SQL_mappable (arg: expression): BOOLEAN;

<a id="p101488"></a>    LOCAL
<a id="p101489"></a>        i: INTEGER;
<a id="p101490"></a>    END_LOCAL;

<a id="p101491"></a>    IF 'ISO13584_EXPRESSIONS_SCHEMA.SIMPLE_NUMERIC_EXPRESSION'
<a id="p101492"></a>                                                        IN TYPEOF (arg)
<a id="p101493"></a>    THEN
<a id="p101494"></a>    RETURN (TRUE);
<a id="p101495"></a>    END_IF;
<a id="p101496"></a>    IF 'ISO13584_EXPRESSIONS_SCHEMA.SQL_MAPPABLE_DEFINED_FUNCTION'
<a id="p101497"></a>                                                        IN TYPEOF (arg)
<a id="p101498"></a>    THEN
<a id="p101499"></a>    RETURN (TRUE);
<a id="p101500"></a>    END_IF;
<a id="p101501"></a>    IF 'ISO13584_EXPRESSIONS_SCHEMA.MINUS_FUNCTION' IN TYPEOF (arg)
<a id="p101502"></a>    THEN
<a id="p101503"></a>        RETURN (is_SQL_mappable(arg\unary_numeric_expression.operand));
<a id="p101504"></a>    END_IF;
<a id="p101505"></a>    IF ('ISO13584_EXPRESSIONS_SCHEMA.ABS_FUNCTION' IN TYPEOF (arg))
<a id="p101506"></a>        OR ('ISO13584_EXPRESSIONS_SCHEMA.SIN_FUNCTION' IN TYPEOF (arg))
<a id="p101507"></a>        OR ('ISO13584_EXPRESSIONS_SCHEMA.COS_FUNCTION' IN TYPEOF (arg))
<a id="p101508"></a>        OR ('ISO13584_EXPRESSIONS_SCHEMA.TAN_FUNCTION' IN TYPEOF (arg))
<a id="p101509"></a>        OR (ISO13584_EXPRESSIONS_SCHEMA.ASIN_FUNCTION' IN TYPEOF (arg))
<a id="p101510"></a>        OR ('ISO13584_EXPRESSIONS_SCHEMA.ACOS_FUNCTION' IN TYPEOF (arg))
<a id="p101511"></a>        OR ('ISO13584_EXPRESSIONS_SCHEMA.ATAN_FUNCTION' IN TYPEOF (arg))
<a id="p101512"></a>        OR (ISO13584_EXPRESSIONS_SCHEMA.EXP_FUNCTION' IN TYPEOF (arg))
<a id="p101513"></a>        OR ('ISO13584_EXPRESSIONS_SCHEMA.LOG_FUNCTION' IN TYPEOF (arg))
<a id="p101514"></a>        OR ('ISO13584_EXPRESSIONS_SCHEMA.LOG2_FUNCTION' IN TYPEOF (arg))
<a id="p101515"></a>        OR ('ISO13584_EXPRESSIONS_SCHEMA.LOG10_FUNCTION' IN TYPEOF (arg))
<a id="p101516"></a>        OR (4S013584_EXPRESSIONS_SCHEMA.SQUARE_ROOT_FUNCTION'
<a id="p101517"></a>                                                        IN TYPEOF (arg))
<a id="p101518"></a>        OR ('ISO13584_EXPRESSIONS_SCHEMA.VALUE_FUNCTION' IN TYPEOF (arg))
<a id="p101519"></a>        OR ('ISO13584_EXPRESSIONS_SCHEMA.LENGTH_FUNCTION'
<a id="p101520"></a>                                                        IN TYPEOF (arg))
<a id="p101521"></a>    THEN
<a id="p101522"></a>        RETURN (FALSE);
<a id="p101523"></a>    END_IF;
<a id="p101524"></a>    IF ('ISO13584_EXPRESSIONS_SCHEMA.PLUS_EXPRESSION' IN TYPEOF (arg))
<a id="p101525"></a>        OR ('ISO13584_EXPRESSIONS_SCHEMA.MULT_EXPRESSION' IN TYPEOF (arg))
<a id="p101526"></a>        OR ('ISO13584_EXPRESSIONS_SCHEMA.MAXIMUM_FUNCTION'
<a id="p101527"></a>                                                        IN TYPEOF (arg))
<a id="p101528"></a>        OR ('ISO13584_EXPRESSIONS_SCHEMA.MINIMUM_FUNCTION'
<a id="p101529"></a>                                                        IN TYPEOF (arg))
<a id="p101530"></a>    THEN
<a id="p101531"></a>        REPEAT i := 1 TO SIZEOF (
<a id="p101532"></a>               arg\multiple_arity_numeric_expression.operands);
<a id="p101533"></a>           IF NOT is_SQL_mappable (
<a id="p101534"></a>               arg\multiple_arity_numeric_expression.operands[i])
<a id="p101535"></a>        THEN
<a id="p101536"></a>               RETURN (FALSE);
<a id="p101537"></a>        END_IF;
<a id="p101538"></a>    END_REPEAT;
<a id="p101539"></a>    RETURN (TRUE);
<a id="p101540"></a>    END_IF;
<a id="p101541"></a>    IF ('ISO13584_EXPRESSIONS_SCHEMA.MINUS_EXPRESSION' IN TYPEOF (arg))
<a id="p101542"></a>        OR (ISO13584_EXPRESSIONS_SCHEMA.SLASH_EXPRESSION'
<a id="p101543"></a>                                                        IN TYPEOF (arg))
<a id="p101544"></a>    THEN
<a id="p101545"></a>        RETURN (is_SQL_mappable(
<a id="p101546"></a>            arg\binary_numeric_expression.operands[1])
<a id="p101547"></a>        AND is_SQL_mappable (arg\binary_numeric_expression.operands[2]));
<a id="p101548"></a>    END_IF;
<a id="p101549"></a>    IF ('ISO13584_EXPRESSIONS_SCHEMA.DIV_EXPRESSION' IN TYPEOF (arg))
<a id="p101550"></a>        OR ('ISO13584_EXPRESSIONS_SCHEMA.MOD_EXPRESSION' IN TYPEOF (arg))
<a id="p101551"></a>        OR ('ISO13584_EXPRESSIONS_SCHEMA.POWER_EXPRESSION'
<a id="p101552"></a>                                                        IN TYPEOF (arg))
<a id="p101553"></a>    THEN
<a id="p101554"></a>        RETURN (FALSE); (* операторы, не поддерживаемые в языке SQL *)
<a id="p101555"></a>    END_IF;
<a id="p101556"></a>    IF 'ISO13584_EXPRESSIONS_SCHEMA.SIMPLE_BOOLEAN_EXPRESSION'
<a id="p101557"></a>                                                        IN TYPEOF (arg)
<a id="p101558"></a>    THEN
<a id="p101559"></a>    RETURN (TRUE);
<a id="p101560"></a>    END_IF;
<a id="p101561"></a>    IF 'ISO13584_EXPRESSIONS_SCHEMA.NOT_EXPRESSION' IN TYPEOF (arg)
<a id="p101562"></a>    THEN
<a id="p101563"></a>        RETURN (is_SQL_mappable (arg\UNARY_GENERIC_EXPRESSION.OPERAND));
<a id="p101564"></a>    END_IF;
<a id="p101565"></a>    IF ('ISO13584_EXPRESSIONS_SCHEMA.ODD_FUNCTION' IN TYPEOF (arg))
<a id="p101566"></a>        OR ('ISO13584_EXPRESSIONS_SCHEMA.XOR_EXPRESSION'
<a id="p101567"></a>                                                        IN TYPEOF (arg))
<a id="p101568"></a>    THEN
<a id="p101569"></a>        RETURN (FALSE);
<a id="p101570"></a>    END_IF;
<a id="p101571"></a>    IF ('ISO13584_EXPRESSIONS_SCHEMA.AND_EXPRESSION' IN TYPEOF (arg))
<a id="p101572"></a>        OR ('ISO13584_EXPRESSIONS_SCHEMA.OR_EXPRESSION' IN TYPEOF (arg))
<a id="p101573"></a>    THEN
<a id="p101574"></a>        REPEAT i := 1 TO SIZEOF(
<a id="p101575"></a>               arg\MULTIPLE_ARITY_BOOLEAN_EXPRESSION.OPERANDS);
<a id="p101576"></a>           IF NOT is_SQL_mappable (
<a id="p101577"></a>               arg\MULTIPLE_ARITY_BOOLEAN_EXPRESSION.OPERANDS[i])
<a id="p101578"></a>    THEN
<a id="p101579"></a>               RETURN (FALSE);
<a id="p101580"></a>        END_IF;
<a id="p101581"></a>        END_REPEAT;
<a id="p101582"></a>        RETURN (TRUE);
<a id="p101583"></a>    END_IF;
<a id="p101584"></a>    IF 'ISO13584_EXPRESSIONS_SCHEMA.EQUALS_EXPRESSION' IN TYPEOF (arg)
<a id="p101585"></a>    THEN
<a id="p101586"></a>        RETURN (is_SQL_mappable (
<a id="p101587"></a>                arg\BINARY_GENERIC_EXPRESSION.OPERANDS[1])
<a id="p101588"></a>          AND is_SQL_mappable(
<a id="p101589"></a>                arg\BINARY_GENERIC_EXPRESSION.OPERANDS[2]));
<a id="p101590"></a>    END_IF;
<a id="p101591"></a>    IF ('ISO13584_EXPRESSIONS_SCHEMA.COMPARISON_EQUAL' IN TYPEOF (arg))
<a id="p101592"></a>        OR ('ISO13584_EXPRESSIONS_SCHEMA.COMPARISON_GREATER'
<a id="p101593"></a>                                                        IN TYPEOF (arg))
<a id="p101594"></a>        OR ('ISO13584_EXPRESSIONS_SCHEMA.COMPARISON_GREATER_EQUAL'
<a id="p101595"></a>                                                        IN TYPEOF (arg))
<a id="p101596"></a>        OR ('ISO13584_EXPRESSIONS_SCHEMA.COMPARISON_LESS'
<a id="p101597"></a>                                                        IN TYPEOF (arg))
<a id="p101598"></a>        OR ('ISO13584_EXPRESSIONS_SCHEMA.COMPARISON_LESS_EQUAL'
<a id="p101599"></a>                                                        IN TYPEOF (arg))
<a id="p101600"></a>        OR ('ISO13584_EXPRESSIONS_SCHEMA.COMPARISON_NOT_EQUAL'
<a id="p101601"></a>                                                        IN TYPEOF (arg))
<a id="p101602"></a>        OR ('ISO13584_EXPRESSIONS_SCHEMA.LIKE_EXPRESSION'
<a id="p101603"></a>                                                        IN TYPEOF (arg))
<a id="p101604"></a>    THEN
<a id="p101605"></a>        RETURN (is_SQL_mappable (arg\COMPARISON_EXPRESSION.OPERANDS[1])
<a id="p101606"></a>          AND is_SQL_mappable (arg\COMPARISON_EXPRESSION.OPERANDS[2]));
<a id="p101607"></a>    END_IF;
<a id="p101608"></a>    IF 'ISO13584_EXPRESSIONS_SCHEMA.INTERVAL_EXPRESSION' IN TYPEOF (arg)
<a id="p101609"></a>    THEN
<a id="p101610"></a>        RETURN (is_SQL_mappable(arg\interval_expression.interval_low)
<a id="p101611"></a>          AND is_SQL_mappable(arg\interval_expression.interval_high)
<a id="p101612"></a>          AND is_SQL_mappable(arg\interval_expression.interval_item));
<a id="p101613"></a>    END_IF;
<a id="p101614"></a>    IF ('ISO13584_EXPRESSIONS_SCHEMA.NUMERIC_DEFINED_FUNCTION'
<a id="p101615"></a>                                                        IN TYPEOF (arg))
<a id="p101616"></a>        OR ('ISO13584_EXPRESSIONS_SCHEMA.BOOLEAN_DEFINED_FUNCTION'
<a id="p101617"></a>                                                        IN TYPEOF (arg))
<a id="p101618"></a>        OR ('ISO13584_EXPRESSIONS_SCHEMA.STRING_DEFINED_FUNCTION'
<a id="p101619"></a>                                                        IN TYPEOF (arg))
<a id="p101620"></a>    THEN
<a id="p101621"></a>        RETURN (FALSE);
<a id="p101622"></a>    END_IF;
<a id="p101623"></a>    (*   Предполагается,   что   все   определенные   функции  не  являются
отображаемыми на языке SQL *)
<a id="p101624"></a>    IF 'ISO13584_EXPRESSIONS_SCHEMA.SIMPLE_STRING_EXPRESSION'
<a id="p101625"></a>                                                        IN TYPEOF (arg)
<a id="p101626"></a>    THEN
<a id="p101627"></a>        RETURN (TRUE);
<a id="p101628"></a>    END_IF;
<a id="p101629"></a>    IF ('ISO13584_EXPRESSIONS_SCHEMA.INDEX_EXPRESSION' IN TYPEOF (arg))
<a id="p101630"></a>        OR ('ISO13584_EXPRESSIONS_SCHEMA.SUBSTRING_EXPRESSION'
<a id="p101631"></a>                                                        IN TYPEOF (arg))
<a id="p101632"></a>        OR ('ISO13584_EXPRESSIONS_SCHEMA.CONCAT_EXPRESSION'
<a id="p101633"></a>                                                        IN TYPEOF (arg))
<a id="p101634"></a>        OR ('ISO13584_EXPRESSIONS_SCHEMA.FORMAT_FUNCTION'
<a id="p101635"></a>                                                        IN TYPEOF (arg))
<a id="p101636"></a>    THEN
<a id="p101637"></a>        RETURN (FALSE);
<a id="p101638"></a>    END_IF;
<a id="p101639"></a>    (*  Если  встречается  другое  generic_expression,  которое не является
подтипом  SQL_mappable_defined_function, то оно не является отображаемым на
языке SQL *)
<a id="p101640"></a>        RETURN (FALSE);
<a id="p101641"></a>    END_FUNCTION; -- is_SQL_mappable
<a id="p101642"></a>    (*

##### <a id="p101643"></a>6.6.3 Функция used_functions

<a id="p101644"></a>Функция used_functions просматривает весь граф выражения, собирая все функции application_defined, и в результате возвращает их. Данная функция просматривает ориентированный ациклический граф, представляющий выражение.
<a id="p101645"></a>*Примечание* - Эта функция является ресурсом для схем, использующих ISO13584_expressions_schema или ее возможные конкретизации. Например, она используется в некоторых частях комплекса стандартов ИСО 13584 для записи ограничений на функции, встречающиеся в выражениях.

<a id="p101646"></a>EXPRESS-спецификация
<a id="p101647"></a>    *)
<a id="p101648"></a>    FUNCTION used_functions (arg: expression): SET OF defined_function;

<a id="p101649"></a>    LOCAL
<a id="p101650"></a>        result: SET OF defined_function := [];
<a id="p101651"></a>    END_LOCAL;

<a id="p101652"></a>    IF ('ISO13584_EXPRESSIONS_SCHEMA.DEFINED_FUNCTION' IN TYPEOF (arg))
<a id="p101653"></a>    THEN
<a id="p101654"></a>        RETURN ([arg]);
<a id="p101655"></a>    END_IF;
<a id="p101656"></a>    IF 'ISO13584_EXPRESSIONS_SCHEMA.UNARY_NUMERIC_EXPRESSION' IN
<a id="p101657"></a>        TYPEOF (arg)
<a id="p101658"></a>    THEN
<a id="p101659"></a>        RETURN (used_functions (arg\unary_numeric_expression.operand));
<a id="p101660"></a>    END_IF;
<a id="p101661"></a>    IF 'ISO13584_EXPRESSIONS_SCHEMA.BINARY_NUMERIC_EXPRESSION' IN
<a id="p101662"></a>        TYPEOF (arg)
<a id="p101663"></a>    THEN
<a id="p101664"></a>        RETURN (used_functions (arg\binary_numeric_expression.operands[1])
<a id="p101665"></a>          + used_functions (arg\binary_numeric_expression.operands[2])));
<a id="p101666"></a>    END_IF;
<a id="p101667"></a>    IF 'ISO13584_EXPRESSIONS_SCHEMA.MULTIPLE_ARITY_NUMERIC_EXPRESSION' IN
<a id="p101668"></a>        TYPEOF (arg)
<a id="p101669"></a>    THEN
<a id="p101670"></a>        REPEAT i := 1 TO SIZEOF (
<a id="p101671"></a>               arg\multiple_arity_numeric_expression.operands);
<a id="p101672"></a>          result := result + used_functions (
<a id="p101673"></a>               arg\multiple_arity_numeric_expression.operands[i]);
<a id="p101674"></a>        END_REPEAT;
<a id="p101675"></a>        RETURN (result);
<a id="p101676"></a>    END_IF;
<a id="p101677"></a>    IF 'ISO13584_EXPRESSIONS_SCHEMA.UNARY_GENERIC_EXPRESSION'
<a id="p101678"></a>                                                         IN TYPEOF (arg)
<a id="p101679"></a>    THEN
<a id="p101680"></a>        RETURN (used_functions (arg\unary_generic_expression.operand));
<a id="p101681"></a>    END_IF;
<a id="p101682"></a>    IF 'ISO13584_EXPRESSIONS_SCHEMA.BINARY_BOOLEAN_EXPRESSION'
<a id="p101683"></a>                                                         IN TYPEOF (arg)
<a id="p101684"></a>    THEN
<a id="p101685"></a>        RETURN (used_functions
<a id="p101686"></a>        (arg\binary_generic_expression.operands[1])
<a id="p101687"></a>         + used_functions (
<a id="p101688"></a>            arg\binary_generic_expression.operands[2]));
<a id="p101689"></a>    END_IF;
<a id="p101690"></a>    IF 'ISO13584_EXPRESSIONS_SCHEMA.MULTIPLE_ARITY_BOOLEAN_EXPRESSION'
<a id="p101691"></a>                                                         IN TYPEOF (arg)
<a id="p101692"></a>    THEN
<a id="p101693"></a>        REPEAT i := 1 TO
<a id="p101694"></a>            SIZEOF (arg\multiple_arity_Boolean_expression.operands);
<a id="p101695"></a>            result := result + used_functions (
<a id="p101696"></a>                arg\multiple_arity_Boolean_expression.operands[i]);
<a id="p101697"></a>        END_REPEAT;
<a id="p101698"></a>        RETURN (result);
<a id="p101699"></a>    END_IF;
<a id="p101700"></a>    IF 'ISO13584_EXPRESSIONS_SCHEMA.COMPARISON_EXPRESSION'
<a id="p101701"></a>                                                         IN TYPEOF (arg)
<a id="p101702"></a>    THEN
<a id="p101703"></a>        RETURN (used_functions (arg\comparison_expression.operands[1])
<a id="p101704"></a>                + used_functions (arg\comparison_expression.operands[2]));
<a id="p101705"></a>    END_IF;
<a id="p101706"></a>    IF 'ISO13584_EXPRESSIONS_SCHEMA.INTERVAL_EXPRESSION' IN TYPEOF (arg)
<a id="p101707"></a>    THEN
<a id="p101708"></a>        RETURN (used_functions(arg\interval_expression.interval_low)
<a id="p101709"></a>                + used_functions(arg\interval_expression.interval_high)
<a id="p101710"></a>                + used_functions(arg\interval_expression.interval_item));
<a id="p101711"></a>    END_IF;
<a id="p101712"></a>    IF 'ISO13584_EXPRESSIONS_SCHEMA.INDEX_EXPRESSION' IN TYPEOF (arg)
<a id="p101713"></a>    THEN
<a id="p101714"></a>        RETURN (used_functions (arg\index_expression.operand)
<a id="p101715"></a>          + used_functions (arg\index_expression.index));
<a id="p101716"></a>    END_IF;
<a id="p101717"></a>    IF 'ISO13584_EXPRESSIONS_SCHEMA.SUBSTRING_EXPRESSION' IN TYPEOF (arg)
<a id="p101718"></a>    THEN
<a id="p101719"></a>        RETURN (used_functions (arg\substring_expression.operand)
<a id="p101720"></a>          + used_functions (arg\substring_expression.index1)
<a id="p101721"></a>          + used_functions (arg\substring_expression.index2));
<a id="p101722"></a>    END_IF;
<a id="p101723"></a>    IF 'ISO13584_EXPRESSIONS_SCHEMA.CONCAT_EXPRESSION' IN TYPEOF (arg)
<a id="p101724"></a>    THEN
<a id="p101725"></a>        REPEAT i := 1 TO SIZEOF (arg\concat_expression.operands);
<a id="p101726"></a>            result := result + used_functions (
<a id="p101727"></a>                arg\concat_expression.operands[i]);
<a id="p101728"></a>            END_REPEAT;
<a id="p101729"></a>            RETURN (result);
<a id="p101730"></a>    END_IF;
<a id="p101731"></a>    IF 'ISO13584_EXPRESSIONS_SCHEMA.FORMAT_FUNCTION' IN TYPEOF (arg)
<a id="p101732"></a>    THEN
<a id="p101733"></a>        RETURN (used_functions (arg\format_function.value_to_format)
<a id="p101734"></a>          + used_functions (arg\format_function. format_string));
<a id="p101735"></a>    END_IF;
<a id="p101736"></a>    IF 'ISO13584_EXPRESSIONS_SCHEMA.LIKE_EXPRESSION' IN TYPEOF (arg)
<a id="p101737"></a>    THEN
<a id="p101738"></a>        RETURN (used_functions (arg\like_expression.operands[1])
<a id="p101739"></a>          + used_functions (arg\like_expression.operands[2]));
<a id="p101740"></a>    END_IF;
<a id="p101741"></a>    RETURN ([]);

<a id="p101742"></a>    END_FUNCTION; -- used_functions

<a id="p101743"></a>    END_SCHEMA; -- ISO13584_expressions_schema
<a id="p101744"></a>    (*





<a id="p101745"></a>Приложение A
(обязательное)

<a id="p101746"></a>**СОКРАЩЕННЫЕ НАИМЕНОВАНИЯ ОБЪЕКТОВ**

<a id="p101747"></a>Сокращенные наименования объектов, установленных в настоящем стандарте, приведены в таблице A.1. Требования к использованию сокращенных наименований указаны в методах реализации, приведенных в стандартах комплекса ИСО 10303.

<a id="p101748"></a>Таблица A.1

<a id="p101749"></a>Сокращенные наименования объектов


| <a id="p101750"></a>Наименование объекта | <a id="p101751"></a>Сокращенное наименование |
| --- | --- |
| <a id="p101752"></a>ABS_FUNCTION | <a id="p101753"></a>ABSFNC |
| <a id="p101754"></a>ACOS_FUNCTION | <a id="p101755"></a>ACSFNC |
| <a id="p101756"></a>AND_EXPRESSION | <a id="p101757"></a>ANDEXP |
| <a id="p101758"></a>ASIN_FUNCTION | <a id="p101759"></a>ASNFNC |
| <a id="p101760"></a>ATAN_FUNCTION | <a id="p101761"></a>ATNFNC |
| <a id="p101762"></a>BINARY_BOOLEAN_EXPRESSION | <a id="p101763"></a>BNBLEX |
| <a id="p101764"></a>BINARY_FUNCTION_CALL | <a id="p101765"></a>BNFNCL |
| <a id="p101766"></a>BINARY_GENERIC_EXPRESSION | <a id="p101767"></a>BNGNEX |
| <a id="p101768"></a>BINARY_NUMERIC_EXPRESSION | <a id="p101769"></a>BNNMEX |
| <a id="p101770"></a>BOOLEAN_DEFINED_FUNCTION | <a id="p101771"></a>BLDFFN |
| <a id="p101772"></a>BOOLEAN_EXPRESSION | <a id="p101773"></a>BLNEXP |
| <a id="p101774"></a>BOOLEAN_LITERAL | <a id="p101775"></a>BLNLTR |
| <a id="p101776"></a>BOOLEAN_VARIABLE | <a id="p101777"></a>BLNVRB |
| <a id="p101778"></a>COMPARISON_EQUAL | <a id="p101779"></a>CMPEQL |
| <a id="p101780"></a>COMPARISON_EXPRESSION | <a id="p101781"></a>CMPEXP |
| <a id="p101782"></a>COMPARISON_GREATER | <a id="p101783"></a>CMPGRT |
| <a id="p101784"></a>COMPARISON_GREATER_EQUAL | <a id="p101785"></a>CMGREQ |
| <a id="p101786"></a>COMPARISON_LESS | <a id="p101787"></a>CMPLSS |
| <a id="p101788"></a>COMPARISON_LESS_EQUAL | <a id="p101789"></a>CMLSEQ |
| <a id="p101790"></a>COMPARISON_NOT_EQUAL | <a id="p101791"></a>CMNTEQ |
| <a id="p101792"></a>CONCAT_EXPRESSION | <a id="p101793"></a>CNCEXP |
| <a id="p101794"></a>COS_FUNCTION | <a id="p101795"></a>CSFNC |
| <a id="p101796"></a>DEFINED_FUNCTION | <a id="p101797"></a>DFNFNC |
| <a id="p101798"></a>DIV_EXPRESSION | <a id="p101799"></a>DVEXP |
| <a id="p101800"></a>ENVIRONMENT | <a id="p101801"></a>ENVRNM |
| <a id="p101802"></a>EQUALS_EXPRESSION | <a id="p101803"></a>EQLEXP |
| <a id="p101804"></a>EXPRESSION | <a id="p101805"></a>EXPRSS |
| <a id="p101806"></a>EXP_FUNCTION | <a id="p101807"></a>EXPFNC |
| <a id="p101808"></a>FORMAT_FUNCTION | <a id="p101809"></a>FRMFNC |
| <a id="p101810"></a>GENERIC_EXPRESSION | <a id="p101811"></a>GNREXP |
| <a id="p101812"></a>GENERIC_LITERAL | <a id="p101813"></a>GNRLTR |
| <a id="p101814"></a>GENERIC_VARIABLE | <a id="p101815"></a>GNRVRB |
| <a id="p101816"></a>SQUARE_ROOT_FUNCTION | <a id="p101817"></a>SQRTFN |
| <a id="p101818"></a>STRING_DEFINED_FUNCTION | <a id="p101819"></a>STDFFN |
| <a id="p101820"></a>STRING_EXPRESSION | <a id="p101821"></a>STREXP |
| <a id="p101822"></a>STRING_LITERAL | <a id="p101823"></a>STRLTR |
| <a id="p101824"></a>STRING_VARIABLE | <a id="p101825"></a>STRVRB |
| <a id="p101826"></a>SUBSTRING_EXPRESSION | <a id="p101827"></a>SBSEXP |
| <a id="p101828"></a>TAN_FUNCTION | <a id="p101829"></a>TNFNC |
| <a id="p101830"></a>UNARY_BOOLEAN_EXPRESSION | <a id="p101831"></a>UNBLEX |
| <a id="p101832"></a>UNARY_FUNCTION_CALL | <a id="p101833"></a>UNFNCL |
| <a id="p101834"></a>UNARY_GENERIC_EXPRESSION | <a id="p101835"></a>UNGNEX |
| <a id="p101836"></a>UNARY_NUMERIC_EXPRESSION | <a id="p101837"></a>UNNMEX |
| <a id="p101838"></a>VALUE_FUNCTION | <a id="p101839"></a>VLFNC |
| <a id="p101840"></a>VARIABLE | <a id="p101841"></a>VRBL |
| <a id="p101842"></a>VARIABLE_SEMANTICS | <a id="p101843"></a>VRBSMN |
| <a id="p101844"></a>XOR_EXPRESSION | <a id="p101845"></a>XREXP |






<div align="center">

<a id="p101846"></a>Приложение B<br>
(обязательное)

<a id="p101847"></a>**РЕГИСТРАЦИЯ ИНФОРМАЦИОННОГО ОБЪЕКТА**

<a id="p101848"></a>B.1 Обозначение документа<br>
<a id="p101849"></a>Для обеспечения однозначного обозначения информационного объекта в открытой системе настоящему стандарту присвоен следующий идентификатор объекта:<br>
<a id="p101850"></a>{ISO standard 13584 part (20) version (1))<br>
<a id="p101851"></a>Значение этого обозначения установлено в ИСО 8824-1 и описано в ИСО 13584-1.<br>
<a id="p101852"></a>B.2 Обозначение схем<br>
<a id="p101853"></a>B.2.1 Обозначение ISO_generic_expressions_schema

</div>

<a id="p101854"></a>Схеме ISO_generic_expressions_schema [(раздел 4)](#p100097) присвоен следующий идентификатор объекта
<a id="p101855"></a>{ISO standard 13584 part (20) version (1) object (1) ISO13584-generic-expressions-schema(1)}

<div align="center">

<a id="p101856"></a>B.2.2 Обозначение ISO_generic_expressions_schema<br>
<a id="p101857"></a>Схеме ISO_expressions_schema [(раздел 5)](#p100143) присвоен следующий идентификатор объекта<br>
<a id="p101858"></a>{ISO standard 13584 part (20) version (1) object (1) ISO13584-expressions-schema(2)}

</div>






<div align="center">

<a id="p101859"></a>Приложение C<br>
(справочное)

<a id="p101860"></a>**ДИАГРАММЫ НА ЯЗЫКЕ EXPRESS-G**

<a id="p101861"></a>[Рисунки C.1](#p101863) - [C.13](#p101887) соответствуют текстам на языке EXPRESS, приведенным в [разделах 4](#p100097) и [5](#p100143). В диаграммах использована графическая нотация EXPRESS-G для языка EXPRESS. Язык EXPRESS-G определен в приложении A ИСО 10303-11.

</div>


<a id="p101862"></a> ![рис. 2](https://i.bukva.ai/jAWmK4tc/img_1.png) 

<div align="center">

<a id="p101863"></a>Рисунок C.1 - ISO13584_generic_expressions_schema -<br>
EXPRESS-G диаграмма 1 из 1

</div>




<a id="p101864"></a> ![рис. 3](https://i.bukva.ai/jAWmK4tc/img_2.png) 

<div align="center">

<a id="p101865"></a>Рисунок C.2 - ISO13584_expressions_schema - EXPRESS-G<br>
диаграмма 1 из 12. Строковая типизация выражений

</div>




<a id="p101866"></a> ![рис. 4](https://i.bukva.ai/jAWmK4tc/img_3.png) 

<div align="center">

<a id="p101867"></a>Рисунок C.3 - ISO13584_expressions_schema - EXPRESS-G<br>
диаграмма 2 из 12. Переменные

</div>




<a id="p101868"></a> ![рис. 5](https://i.bukva.ai/jAWmK4tc/img_4.png) 

<div align="center">

<a id="p101869"></a>Рисунок C.4 - ISO13584_expressions_schema - EXPRESS-G<br>
диаграмма 3 из 12. Числовые выражения

</div>




<a id="p101870"></a> ![рис. 6](https://i.bukva.ai/jAWmK4tc/img_5.png) 

<div align="center">

<a id="p101871"></a>Рисунок C.5 - ISO13584_expressions_schema - EXPRESS-G<br>
диаграмма 4 из 12. Булевы выражения

</div>




<a id="p101872"></a> ![рис. 7](https://i.bukva.ai/jAWmK4tc/img_6.png) 

<div align="center">

<a id="p101873"></a>Рисунок C.6 - ISO13584_expressions_schema - EXPRESS-G<br>
диаграмма 5 из 12. Строковые выражения

</div>




<a id="p101874"></a> ![рис. 8](https://i.bukva.ai/jAWmK4tc/img_7.png) 

<div align="center">

<a id="p101875"></a>Рисунок C.7 - ISO13584_expressions_schema - EXPRESS-G<br>
диаграмма 6 из 12. defined function

</div>




<a id="p101876"></a> ![рис. 9](https://i.bukva.ai/jAWmK4tc/img_8.png) 

<div align="center">

<a id="p101877"></a>Рисунок C.8 - ISO13584_expressions_schema - EXPRESS-G<br>
диаграмма 7 из 12. Подтипы simple_generic_expression

</div>




<a id="p101878"></a> ![рис. 10](https://i.bukva.ai/jAWmK4tc/img_9.png) 

<div align="center">

<a id="p101879"></a>Рисунок C.9 - ISO13584_expressions_schema - EXPRESS-G<br>
диаграмма 8 из 12. Бинарные числовые выражения

</div>




<a id="p101880"></a> ![рис. 11](https://i.bukva.ai/jAWmK4tc/img_10.png) 

<div align="center">

<a id="p101881"></a>Рисунок C.10 - ISO13584_expressions_schema - EXPRESS-G<br>
диаграмма 9 из 12. Большая арность

</div>




<a id="p101882"></a> ![рис. 12](https://i.bukva.ai/jAWmK4tc/img_11.png) 

<div align="center">

<a id="p101883"></a>Рисунок C.11 - ISO13584_expressions_schema - EXPRESS-G<br>
диаграмма 10 из 12. Бинарные булевы выражения

</div>




<a id="p101884"></a> ![рис. 13](https://i.bukva.ai/jAWmK4tc/img_12.png) 

<div align="center">

<a id="p101885"></a>Рисунок C.12 - ISO13584_expressions_schema - EXPRESS-G<br>
диаграмма 11 из 12. Булевы выражения большой арности

</div>




<a id="p101886"></a> ![рис. 14](https://i.bukva.ai/jAWmK4tc/img_13.png) 

<div align="center">

<a id="p101887"></a>Рисунок C.13 - ISO13584_expressions_schema - EXPRESS-G<br>
диаграмма 12 из 12. Выражения сравнения

</div>






<div align="right">

<a id="p101888"></a>Приложение D<br>
(справочное)

</div>


<div align="center">

<a id="p101889"></a>**ИСПОЛЬЗОВАНИЕ СХЕМЫ ISO13584_EXPRESSIONS_SCHEMA**

</div>


<a id="p101890"></a>D.1 Введение
<a id="p101891"></a>Схемы, установленные в настоящем стандарте, являются обобщенными ресурсами, предназначенными для использования во всех случаях, когда выражения должны быть промоделированы на языке EXPRESS.
<a id="p101892"></a>В настоящем приложении рассмотрены возможные варианты использования и применения этих обобщенных ресурсов.
<a id="p101893"></a>ISO13584_expressions_schema кодирует выражения, которые могут быть построены из комбинации операторов простых выражений (взятых из языка EXPRESS), констант и переменных.
<a id="p101894"></a>Для каждого из этих элементов (операторов, констант и переменных) семантика должна быть задана для каждого использования выражения.
<a id="p101895"></a>Семантика операторов устанавливается в соответствии с тем, как она определена для каждого оператора в руководстве по языку EXPRESS.
<a id="p101896"></a>При использовании выражений единственной семантикой, которая должна быть определена, является семантика переменных, т.е. должна быть определена функция интерпретации, которая ограничивает значения этих переменных.
<a id="p101897"></a>D.2 Функция интерпретации и семантика переменной
<a id="p101898"></a>Семантика операторов и констант определена в настоящем стандарте.
<a id="p101899"></a>Константы имеют простую семантику, поскольку они интерпретируются значением, которое они представляют.
<a id="p101900"></a>В выражениях переменные обозначают понятия, которые связаны со значениями. Выражения, использующие эти переменные, обозначают взаимосвязи между их текущими значениями.
<a id="p101901"></a>При использовании ISO13584_expressions_schema для каждой переменной должно быть определено следующее:
- <a id="p101902"></a>какое понятие обозначает переменная;
- <a id="p101903"></a>в каком контексте это понятие может быть использовано;
- <a id="p101904"></a>каков механизм (функция интерпретации), который ограничивает значение этой переменной.
<a id="p101905"></a>В настоящем стандарте понятие, которое обозначает переменная (ее семантика), представлено объектом variable_semantics. Поэтому три указанные выше позиции должны быть заданы определением подтипа типа данных этого абстрактного объекта.
<a id="p101906"></a>D.3 Представление функции интерпретации в настоящем стандарте
<a id="p101907"></a>Как указано в [D.2](#p101897), переменные должны иметь функцию интерпретации для того, чтобы задать их семантику. В комплексе стандартов ИСО 13584 эта цель достигается путем комбинации трех объектов: variable, environment и variable_semantics. Объект variable определяет синтаксическое представление семантического понятия, которое представлено объектом variable_semantics. Объект environment связывает эти два объекта, чтобы точно ассоциировать одну семантику с данной переменной.

<div align="center">

<a id="p101908"></a>На рисунке D.1 приведена схема определения этих объектов.

</div>


<a id="p101909"></a> ![рис. 15](https://i.bukva.ai/jAWmK4tc/img_14.png) 

<div align="center">

<a id="p101910"></a>Рисунок D.1 - Связь синтаксиса и семантики переменной

</div>


<a id="p101911"></a>D.4 Использование объекта variable_semantics для определения семантики новых переменных
<a id="p101912"></a>Предполагается, что понятие, которое должно быть представлено переменной, уже существует в виде объекта модели данных. Поэтому на уровне модели данных возможны следующие два подхода, чтобы связать это понятие с переменной:
- <a id="p101913"></a>при первом подходе используется отдельный подтип объекта variable_semantics, который представляет этот объект посредством атрибута(ов);
- <a id="p101914"></a>при втором подходе определяется общий подтип для объекта variable_semantics и типа данных этого объекта.
<a id="p101915"></a>Данная информационная модель определяет только первую из упомянутых выше позиций (см. [D.2](#p101897)). Другая позиция должна быть определена в документации на эту модель.
<a id="p101916"></a>Иллюстрация этих двух подходов приведена в D.4.1 и [D.4.2](#p101930).
<a id="p101917"></a>D.4.1 Использование отдельного подтипа объекта variable_semantics
<a id="p101918"></a>Данный подход к определению семантики заключается во введении подтипа объекта variable_semantics, который представляет собой понятие, которое обозначает переменная, посредством атрибута(ов).
<a id="p101919"></a>Следующий пример показывает, как этот подход работает. Выбран реальный пример, чтобы показать осуществимость этого подхода на практике.
<a id="p101920"></a>*Пример* - Определение переменной SELF:
<a id="p101921"></a>Напомним, что переменная SELF является особой переменной, встречающейся в объектно-ориентированных подходах. Она используется в контексте экземпляра класса для представления этого отдельного экземпляра и, возможно, значения одного отдельного атрибута этого отдельного экземпляра.
<a id="p101922"></a>В ИСО 13584-24, в котором моделирование семейств деталей осуществляется на основе объектно-ориентированного подхода, показана необходимость представления переменных SELF, чтобы допустить использование выражений, включающих этот вид переменных. На [рисунке D.2](#p101924) приведена EXPRESS-G диаграмма, демонстрирующая способ представления этой семантики на основе простого наследования объекта variable_semantics.

<a id="p101923"></a> ![рис. 16](https://i.bukva.ai/jAWmK4tc/img_15.png) 

<div align="center">

<a id="p101924"></a>Рисунок D.2 - Установление семантики определением подтипа<br>
объекта variable_semantics

</div>


<a id="p101925"></a>*Примечание* - Объект property_BSU определен в ИСО 13584-42. Он позволяет идентифицировать одно отдельное свойство.

<a id="p101926"></a>Объект self_property_variable_semantics определен как подтип объекта variable_semantics. Он имеет атрибут, называемый the_property, который идентифицирует отдельное свойство вложенного класса (представленного объектом property_BSU). Поэтому этот объект несет в себе семантику the_property экземпляра SELF.
<a id="p101927"></a>Заметим, что в документации на объект self_property_variable_semantics определено, что:
- <a id="p101928"></a>соответствующая переменная должна использоваться в контексте экземпляра класса PLib;
- <a id="p101929"></a>переменная обозначает значение релевантного свойства экземпляра этого класса.
<a id="p101930"></a>D.4.2 Множественное наследование объекта variable_semantics и другого объекта
<a id="p101931"></a>Множественное наследование позволяет собрать в общем объекте свойства различных супертипов.
<a id="p101932"></a>Беря за основу концепцию совместного использования, можно определить семантику переменной как совместное использование объекта variable_semantics (чтобы показать, что мы имеем дело с семантикой переменной) и любого другого объекта, который мы хотим представить через эту переменную.
<a id="p101933"></a>*Пример* - Определение объекта variable_semantics, связанного с объектом materlal_property_representation, описанным в ИСО 10303-45.

<a id="p101934"></a>Путем определения подтипов конструкций ресурсов из material_property_representation_schema, установленной в ИСО 10303-45, значение объекта material_property может быть связано с выражением numeric_expression, которое определяет зависимость между значением этого material_property и другими property_definitions, на которые ссылается их material_property_representation.

<div align="center">

<a id="p101935"></a>Способ реализации вышеуказанного представлен на [рисунке D.3](#p101937).

</div>


<a id="p101936"></a> ![рис. 17](https://i.bukva.ai/jAWmK4tc/img_16.png) 

<div align="center">

<a id="p101937"></a>Рисунок D.3 - Конкретизация семантики путем определения<br>
подтипа объекта variables_semantics и другого объекта

</div>


<a id="p101938"></a>Правило WHERE (где) в объекте material_property_representation_and_function необходимо обеспечить, чтобы выражение functional_specification numeric_expression включало в качестве переменных только те переменные, которые связаны через объект environment с material_property_semantics, и для которых все эти material_property_semantics соответствуют набору свойств, моделирующих среду (т.е. на каждую из этих material_property_semantics ссылается SELF.dependent_environment.elements[i].definition через некоторый индекс i).
<a id="p101939"></a>Используя подтип material_property_representation_and_function, объект material_property связывается как со значением, которое соответствует некоторым отдельным значениям свойств, от которых они зависят, так и с функцией, определяющей функциональную зависимость между этими значениями.
<a id="p101940"></a>Отметим, что этот подход не требует использования дополнительного атрибута у объекта material_property_semantics. Механизм наследования распространяет все атрибуты объекта material_property (т.е. идентификацию свойства).
<a id="p101941"></a>Отметим также, что в этом примере в документации должны быть описания контекста использования переменной (для одного отдельного изделия, для любого изделия из некоторого набора и т.д.) и функции интерпретации.
<a id="p101942"></a>D.4.3 Определение понятия, не представленного в модели
<a id="p101943"></a>Семантика некоторой переменной может соответствовать понятиям, которые еще не представлены в модели в явном виде. В этом случае полная информационная модель этого понятия должна быть построена как подтип variable_semantics.
<a id="p101944"></a>На [рисунке D.4](#p101946) показано, как могут быть определены две переменные, которые представляют координаты x и y в некотором отдельном двумерном пространстве. Такие переменные могут быть включены в любое числовое выражение, которое определяет точную (математическую) форму конкретного объекта curve.

<a id="p101945"></a> ![рис. 18](https://i.bukva.ai/jAWmK4tc/img_17.png) 

<div align="center">

<a id="p101946"></a>Рисунок D.4 - Пример определения понятия,<br>
не представленного в модели: координаты

</div>






<div align="right">

<a id="p101947"></a>Приложение E<br>
(справочное)

</div>


<div align="center">

<a id="p101948"></a>**КОНКРЕТИЗАЦИЯ СХЕМ**

</div>


<a id="p101949"></a>E.1 Введение
<a id="p101950"></a>Определения схем ISO13584_generic_expressions_schema и ISO13584_expressions_schema являются обобщенными ресурсами, так как они могут быть конкретизированы без оказания какого-либо воздействия на уже определенные ресурсы. Эти схемы были определены для того, чтобы они могли быть конкретизированы или расширены для введения и моделирования выражений любого вида. Целью настоящего приложения является показать, как может быть выполнена конкретизация этих двух схем.
<a id="p101951"></a>E.2 Конкретизация схемы ISO13584_generic_expressions_schema
<a id="p101952"></a>ISO13584_generic_expressions_schema определяет структуру выражения любого вида без введения какого-либо конкретного типа данных.
<a id="p101953"></a>Конкретизация ISO13584_generic_expressions_schema требует введения конкретного(ых) типа(ов) данных. Такой тип данных должен быть введен путем определения подтипа существующих EXPRESS-ресурсов и может указываться как источник новыми операторами, которые манипулируют этим нововведенным типом данных.
<a id="p101954"></a>*Пример* - В схеме ISO13584_expressions_schema в качестве конкретных типов данных определены только integer, real, Boolean и string. Поэтому только эти типы связаны с операторами, которые вычисляют значения.

<a id="p101955"></a>При введении нового типа данных в процесс конкретизации вовлекаются следующие объекты языка EXPRESS:
- <a id="p101956"></a>generic_expression;
- <a id="p101957"></a>generic_variable;
- <a id="p101958"></a>variable_semantics;
- <a id="p101959"></a>generic_literal;
- <a id="p101960"></a>unary_generic_expression;
- <a id="p101961"></a>binary_generic_expression;
- <a id="p101962"></a>multiple_arity_generic_expression.
<a id="p101963"></a>E.3 Конкретизация схемы ISO13584_expressions_schema
<a id="p101964"></a>Конкретизация схемы ISO13584_expressions_schema представляет возможность расширения набора операторов теми, которые либо объединяют значения, принадлежащие к базовым типам данных этой схемы (т.е. NUMBER, REAL, INTEGER, BOOLEAN и STRING), либо производят значения, принадлежащие к этим базовым типам данных (например, расстояние между двумя точками).
<a id="p101965"></a>Такая специализация должна обеспечить прочность и корректность результирующих выражений и не должна влиять на корректность обобщенных ресурсов, представленных как EXPRESS-функции. Кроме того, эти ресурсы должны быть согласованы с их абстрактными описаниями (например, is_int_expr должно позволить определить, принадлежит ли тип данных выражения к типу данных INTEGER).
<a id="p101966"></a>Следующие EXPRESS-объекты были специально введены, чтобы поддерживать такой процесс конкретизации:
- <a id="p101967"></a>boolean_defined_function;
- <a id="p101968"></a>integer_defined_function;
- <a id="p101969"></a>numeric_defined_function;
- <a id="p101970"></a>real_defined_function;
- <a id="p101971"></a>string_defined_function;
- <a id="p101972"></a>SQL_mappable_defined_function.
<a id="p101973"></a>E.4 Методология для конкретизации настоящего стандарта
<a id="p101974"></a>В данном разделе установлена последовательность действий для определения различных конкретизаций схем, установленных в настоящем стандарте.
<a id="p101975"></a>E.4.1 Идентифицировать конкретный тип данных, который должен быть обработан выражением. Если должны использоваться только типы данных INTEGER, REAL, BOOLEAN и STRING, следует конкретизировать схему ISO13584_expressions_schema, в противном случае следует конкретизировать схему ISO13584_generic_expressions_schema.
<a id="p101976"></a>E.4.2 Идентифицировать семантические понятия, которые должны соответствовать определенным выражениям. Определить требуемые подтипы объекта variable_semantics (см. [приложение D](#p101889)).
<a id="p101977"></a>E.4.3 Конкретизация схемы ISO13584_generic_expressions_schema
<a id="p101978"></a>E.4.3.1 Определить корень всех выражений нового типа данных путем определения подтипа объекта generic_expression (или numeric_expression, Boolean_expression, либо string_expression соответственно).
<a id="p101979"></a>E.4.3.2 Определить переменные этих выражений путем определения подтипа объекта generic_variable, который связан через объект environment с семантикой, определенной по E.4.2.
<a id="p101980"></a>E.4.3.3 Определить константы этих выражений путем определения подтипа объекта generic_literal.
<a id="p101981"></a>E.4.3.4 Определить операторы, которые объединяют переменные и константы нового типа данных, путем определения подтипов объектов unary_generic_expression, binary_generic_expression и multiple_arity_generic_expression в соответствии с их арностью. Присоединить правила, которые обеспечивают семантическую прочность и корректность этих операторов.
<a id="p101982"></a>E.4.4 Интеграция со схемой ISO13584_expressions_schema
<a id="p101983"></a>E.4.4.1 Если существует какой-либо оператор, который производит значения нового типа данных из выражений expression (например, комплексное число, определяемое двумя вещественными числами), то:
- <a id="p101984"></a>снабдить ссылками схему ISO13584_expressions_schema;
- <a id="p101985"></a>определить этот оператор как общий тип данных корневого объекта, определенного по [E.4.3.1](#p101978), и один из следующих объектов: unary_generic_expression, binary_generic_expression или multiple_arity_generic_expression, в соответствии с арностью этого оператора. Добавить правила, которые обеспечивают семантическую корректность этого оператора.
<a id="p101986"></a>E.4.4.2 Если существует какой-либо оператор на новом типе данных, который генерирует значения одного из базовых типов данных схемы ISO13584_expressions_schema, то для каждого оператора или функции, возвращающих типы данных INTEGER, REAL, BOOLEAN или STRING, необходимо ввести подтип соответствующего объекта defined_function, чтобы определить соответствующую функцию и один из объектов unary_generic_expression, binary_generic_expression или multiple_arity_generic_expression в соответствии с арностью этого оператора.
<a id="p101987"></a>Этот процесс обеспечивает следующее:
- <a id="p101988"></a>любое выражение, согласующееся с конкретизированной схемой, является семантически корректным;
- <a id="p101989"></a>все функции, определенные настоящим стандартом как ресурсы (например, is_int_expr, used_variables, is_SQL_mappable и т.д.) согласуются со своими абстрактными описаниями.
<a id="p101990"></a>Примечание - При конкретизации схемы ISO13584_expressions_schema действия по [E.4.3](#p101977) не проводят.

<a id="p101991"></a>E.5 Пример конкретизации схемы ISO13584_generic_expressions_schema
<a id="p101992"></a>В данном примере фрагмент описания на языке EXPRESS выбран настолько простым, насколько это возможно, чтобы сделать понятной конкретизацию данной схемы.
<a id="p101993"></a>Рассмотрим конкретизацию схемы ISO13584_generic_expressions_schema для обработки выражений, оперирующих с комплексными числами. Эти выражения получают путем определения подтипа схемы ISO13584_generic_expressions_schema.
<a id="p101994"></a>В следующих EXPRESS-спецификациях показана суть такой схемы. При этом будут использоваться лишь несколько выражений:
<a id="p101995"></a>Шаг 1 - заданным типом данных являются комплексные числа.
<a id="p101996"></a>Шаг 2 - семантическое понятие, которое должно быть определено комплексными выражениями.
<a id="p101997"></a>Предположим, что необходимо связать эти выражения с парой координат двумерных объектов cartesian_point (по ИСО 10303-42).
<a id="p101998"></a>Можно определить следующую семантику для обеспечения связи с комплексными переменными.
<a id="p101999"></a>EXPRESS-спецификация
<a id="p102000"></a>    *)
<a id="p102001"></a>    ENTITY position_variable_semantics
<a id="p102002"></a>    SUBTYPE OF (variable_semantics, cartesian_point);
<a id="p102003"></a>    WHERE
<a id="p102004"></a>        SELF\geometric_representation_item.dimension = 2;
<a id="p102005"></a>    END_ENTITY;
<a id="p102006"></a>    (*
<a id="p102007"></a>Семантикой должна быть точка в двумерном пространстве, а в описании должно быть указано, что действительная часть является координатой x, а мнимая часть - координатой y.
<a id="p102008"></a>Предполагается, что в данном примере не нужны выражения point_expressions.
<a id="p102009"></a>Шаг 3 - определение complex_expression путем конкретизации схемы ISO13584_generic_expressions_schema.
<a id="p102010"></a>EXPRESS-спецификация
<a id="p102011"></a>    *)
<a id="p102012"></a>    ENTITY complex_expression
<a id="p102013"></a>    SUBTYPE OF (generic_expression)
<a id="p102014"></a>    ASTRACT SUPERTYPE OF (ONEOF (      simple_complex_expression,
<a id="p102015"></a>                                       unary_complex_expression,
<a id="p102016"></a>                                       binary_complex_expression,
<a id="p102017"></a>                                       multiple_arity_complex_expression));
<a id="p102018"></a>    END_ENTITY;

<a id="p102019"></a>    ENTITY simple_complex_expression
<a id="p102020"></a>    ABSTRACT SUPERTYPE (OF ONEOF(      complex_variable,
<a id="p102021"></a>                                       complex_literal))
<a id="p102022"></a>    SUBTYPE OF (complex_expression, simple_generic_expression);
<a id="p102023"></a>    END_ENTITY;

<a id="p102024"></a>    ENTITY complex_variable;
<a id="p102025"></a>    SUBTYPE OF (simple_complex_expression, generic_variable);
<a id="p102026"></a>    END_ENTITY;

<a id="p102027"></a>    ENTITY complex_literal
<a id="p102028"></a>    SUBTYPE OF (simple_complex_expression, generic_literal);
<a id="p102029"></a>    real_part, imag_part: REAL;
<a id="p102030"></a>    END_ENTITY;

<a id="p102031"></a>    ENTITY unary_complex_expression
<a id="p102032"></a>    .......
<a id="p102033"></a>    END_ENTITY;

<a id="p102034"></a>    ENTITY binary_complex_expression
<a id="p102035"></a>    .....
<a id="p102036"></a>    END_ENTITY;

<a id="p102037"></a>    ENTITY multiple_arity_complex_expression
<a id="p102038"></a>    ......
<a id="p102039"></a>    END_ENTITY;

<a id="p102040"></a>    ENTITY position_cartesian_constructor
<a id="p102041"></a>    SUBTYPE OF (complex_expression, binary_generic_expression);
<a id="p102042"></a>      x, y: REAL
<a id="p102043"></a>    END_ENTITY;

<a id="p102044"></a>    ENTITY position_polar_constructor
<a id="p102045"></a>    SUBTYPE OF (complex_expression, binary_generic_expression);
<a id="p102046"></a>      ro, theta: REAL;
<a id="p102047"></a>    END_ENTITY;
<a id="p102048"></a>    (*
<a id="p102049"></a>Шаг 4 - Специализация схемы ISO13584_generic_expressions_schema задается определением следующих объектов:
<a id="p102050"></a>EXPRESS-спецификация
<a id="p102051"></a>    *)
<a id="p102052"></a>    ENTITY real_part_defined_function
<a id="p102053"></a>    SUBTYPE OF (real_defined_function, unary_generic_expression);
<a id="p102054"></a>      the_complex: complex_expression;
<a id="p102055"></a>    END_ENTITY;

<a id="p102056"></a>    ENTITY imaginary_part_defined_function
<a id="p102057"></a>    SUBTYPE OF (real_defined_function, unary_generic_expression)
<a id="p102058"></a>      the_complex: complex_expression;
<a id="p102059"></a>    END_ENTITY;

<a id="p102060"></a>    ENTITY angle_defined_function
<a id="p102061"></a>    SUBTYPE OF (real_defined_function, unary_generic_expression)
<a id="p102062"></a>    END_ENTITY;

<a id="p102063"></a>    ENTITY module_defined_function
<a id="p102064"></a>    SUBTYPE OF (real_defined_function, unary_generic_expression);
<a id="p102065"></a>    END_ENTITY;
<a id="p102066"></a>    (*
<a id="p102067"></a>Отметим, что эта схема осталась неполной, так как целью данного приложения не является установка стандартной схемы для комплексных выражений.
<a id="p102068"></a>E.6 Пример специализации схемы ISO13584_expressions_schema
<a id="p102069"></a>Данный пример соответствует случаю, когда шаг 3, приведенный в [E.5](#p101991), опущен.
<a id="p102070"></a>Необходимо ввести оператор, который вычисляет расстояние между двумя точками в декартовом пространстве. Эта функция возвращает вещественное число. Объект, соответствующий этой функции, получают путем конкретизации. Вводят подтип функции real_defined_function. Определяют следующий объект:
<a id="p102071"></a>EXPRESS-спецификация
<a id="p102072"></a>    *)
<a id="p102073"></a>    ENTITY Distance_function
<a id="p102074"></a>    SUBTYPE OF (real_defined_function);
<a id="p102075"></a>      pt1, pt2: point;
<a id="p102076"></a>    END_ENTITY;
<a id="p102077"></a>    (*





<div align="right">

<a id="p102078"></a>Приложение F<br>
(справочное)

</div>


<div align="center">

<a id="p102079"></a>**СТАТИЧЕСКИЙ АНАЛИЗ ВЫРАЖЕНИЙ**

</div>


<a id="p102080"></a>F.1 Введение
<a id="p102081"></a>В данном приложении рассматриваются выражения в контексте настоящего стандарта. Могут быть выделены две возможные точки зрения в соответствии с введенными понятиями и предположениями, сделанными в [разделе 4](#p100097): период обмена и период оценки.
<a id="p102082"></a>В настоящем стандарте рассматривается только обмен выражениями. Только статические свойства выражений могут быть выведены на этом этапе. На нем не моделируются ни функция оценки, ни то, как эта оценка проводится.
<a id="p102083"></a>В данном приложении рассматривается анализ выражений, который может быть выполнен в период обмена, и даются некоторые пояснения по этим процессам.
<a id="p102084"></a>На уровне обобщенных выражений возможны вычисления значений используемых переменных и функций. Более того, ацикличность графа, представляющего выражение, также может быть проверена.
<a id="p102085"></a>На уровне выражений можно вычислить тип данных выражения.
<a id="p102086"></a>F.2 Функция is_acyclic_function
<a id="p102087"></a>Напомним, что:
- <a id="p102088"></a>ориентированный граф представляет собой набор узлов, соединенных некоторыми однонаправленными связями;
- <a id="p102089"></a>ориентированный граф является ациклическим, если не существует пути из узла, приводящего обратно в этот же узел.
<a id="p102090"></a>Как установлено в [разделе 4](#p100097) настоящего стандарта, структурой, лежащей в основе выражения, является ориентированный ациклический граф. Эта структура является обязательной для обхода выражения и обеспечивает, что все функции, которые выполняют обход такого графа, завершаются, когда они достигают узла, из которого нет исходящей связи, приводящей к этому узлу.
<a id="p102091"></a>Функция is_acyclic проверяет, соответствует ли выражение этому условию.
<a id="p102092"></a>Заметим, что дерево является частным случаем ориентированного ациклического графа.
<a id="p102093"></a>F.3 Функции used_variables и used_functions
<a id="p102094"></a>Функции used_variables и used_functions являются функциями, которые в качестве результата возвращают все объекты, представляющие переменные или функции, встречающиеся в данном выражении.
<a id="p102095"></a>Эти функции осуществляют обход ориентированного ациклического графа, который представляет собой выражение, для оценки и синтеза типа данных и возвращают переменные и функции, встречающиеся в этом выражении.
<a id="p102096"></a>F.4 Функция is_SQL_mappable
<a id="p102097"></a>Функция is_SQL_mappable проверяет, является ли данное выражение отображаемым на языке SQL для баз данных с запросами.
<a id="p102098"></a>Эта функция осуществляет обход ориентированного ациклического графа, который представляет собой выражение, для оценки и синтеза типа данных и возвращает значение TRUE, если выражение является отображаемым.
<a id="p102099"></a>В ИСО 13584-24 эта функция была использована для обработки структур данных, связанных с таблицами и реляционными базами данных, а также для проверки отображаемости нескольких выражений, встречающихся в ограничениях.
<a id="p102100"></a>F.5 Контроль типа и синтез типа
<a id="p102101"></a>Контроль типа является процессом, который позволяет проверить корректность типа выражения.
<a id="p102102"></a>Синтез типа является процессом, который позволяет синтезировать тип данных выражения.
<a id="p102103"></a>В ISO13584_expressions_schema, определенной в настоящем стандарте, контроль типа обеспечивается ограничениями этой схемы. Синтез типа является результатом применения EXPRESS-функции TYPEOF к объекту, который является носителем типа данных.





<div align="right">

<a id="p102104"></a>Приложение G<br>
(справочное)

</div>


<div align="center">

<a id="p102105"></a>**СВЕДЕНИЯ О СООТВЕТСТВИИ НАЦИОНАЛЬНЫХ СТАНДАРТОВ РОССИЙСКОЙ**<br>
**ФЕДЕРАЦИИ ССЫЛОЧНЫМ МЕЖДУНАРОДНЫМ СТАНДАРТАМ**

</div>


<div align="right">

<a id="p102106"></a>Таблица G.1

</div>



| <a id="p102107"></a>Обозначение ссылочного международного стандарта | <a id="p102108"></a>Обозначение и наименование соответствующего национального стандарта |
| --- | --- |
| <a id="p102109"></a>ИСО/МЭК 9075:1992 | <a id="p102110"></a>ГОСТ Р ИСО/МЭК 9075-93 Информационная технология. Язык баз данных SQL с расширением целостности |
| <a id="p102111"></a>ИСО 10303-11:1994 | <a id="p102112"></a>ГОСТ Р ИСО 10303-11-2000 Системы автоматизации производства и их интеграция. Представление данных об изделии и обмен этими данными. Часть 11. Методы описания. Справочное руководство по языку EXPRESS |
| <a id="p102113"></a>ИСО 10303-44:1994 | <a id="p102114"></a>[ГОСТ Р ИСО 10303-44-2002](https://bukva.ai/docs/standart-gost-r-iso-10303-44-2002) Системы автоматизации производства и их интеграция. Представление данных об изделии и обмен этими данными. Часть 44. Интегрированные обобщенные ресурсы. Конфигурация структуры изделия |




<a id="p102115"></a>

---
