Тип ENUMERATION в языке EXPRESS является конструируемым (constructed) типом, а ближайшей его аналогией является enum class языка C++. Тип используется для задания перечисляемых значений, в реализациях СИДД работа с атрибутами перечисляемого типа ведётся через строковые значения, так как при наличии одинаковых значений в процессе создания новых ревизий схемы может меняться их индексация, если были добавлены новые значения или изменился порядок старых (например, изменения индексации наблюдаются в версиях формата IFC).
TYPE DirectionsEnum = ENUMERATION OF (NORTH ,EAST ,SOUTH ,WEST); END_TYPE;
В языке EXPRESS тип ENUMERATION может быть расширяемым (extendable), т.е. возможно наследование от базового ENUM для дополнения его новыми перечисляемыми значениями, например:
TYPE DirectionsEnumBase = EXTENSIBLE ENUMERATION OF (NORTH ,EAST ,SOUTH ,WEST); END_TYPE;
Дополним набор значений базового типа четырьмя дополнительными:
TYPE ExtendedDirectionsEnum = ENUMERATION BASED_ON DirectionsEnumBase WITH (NORTH_EAST ,NORTH_WEST ,SOUTH_EAST ,SOUTH_WEST); END_TYPE;
Следующий тип наследует пункты из своего базового типа, но при этом тоже является расширяемым перечислением:
TYPE ExtensibleExtendedDirectionsEnum = EXTENSIBLE ENUMERATION BASED_ON BaseDirectionsEnum WITH (NORTH_EAST ,NORTH_WEST ,SOUTH_EAST ,SOUTH_WEST); END_TYPE;
Так как ENUMERATION в схеме всегда присутствует как именованный тип, для него могут быть заданы ограничения, что на практике обычно не используется:
TYPE NorthDirectionsEnum = ENUMERATION BASED_ON ExtensibleExtendedDirectionsEnum; WHERE WR1 : SELF IN ['NORTH', 'NORTH_EAST', 'NORTH_WEST']; END_TYPE;