ГОСТ Р ИСО/МЭК 8824-3-2002
10.3 Нотацией для табличного ограничения «TableConstraint» является
TableConstraint : : =
SimpleTableConstraint |
ComponentRelationConstraint
SimpleTableConstraint : : = ObjectSet
10.4 Множество объектов «ObjectSet» в ограничении «SimpleTableConstraint» управляется классом, который появляется в ограничиваемом типе «ObjectClassFieldType».
10.5 Семантика «SimpleTableConstraint» специфицируется с использованием ассоциированной таблицы ограничивающего множества информационных объектов.
10.6 Имя поля «FieldName» типа, который будет ограничен, используется для выбора применяемого столбца ассоциированной таблицы, и при этом применяются следующие правила:
а) для поля типа компонент ограничен тем, что должен быть любым значением одного из типов в любой строке этого столбца;
б) для поля значения компонент ограничен тем, что должен быть одним из значений в любой строке этого столбца;
в) для поля множество значений компонент ограничен тем, что должен быть одним из множества значений в любой из строк этого столбца.
Примечание — Если для некоторого данного множества объектов сформулированные выше алгоритмы приводят к недопустимому значению, то ограничение всегда нарушается, если этот компонент присутствует в значении содержащего типа,
Пример
В примере раздела 10 перечисление б) применяется к компоненту errorCategory:
errorCategory ERROR-CLASS.&category ({ErrorSet}) OPTIONAL, с ассоциированной таблицей ErrorSet, ограничивающей его возможные значения до «А» и «В».
10.7 Ограничение связи компонента применяется с использованием ассоциированной таблицы множества информационных объектов и следующей продукции:
ComponentRelationConstraing : : =
« { » DefinedObjectSet « } » « { » AtNotation «,» + « } »
AtNotation : : =
«@» ComponentIdLits |
«@.» ComponentIdList
ComponentIdList : : = identifier «.» +
10.8 Каждый «identifier» в списке «ComponentIdList» идентифицирует компонент, порождающим которого является тип «множество», «последовательность» или выборочный тип, и он должен быть последним идентификатором «identifier», если компонент, им определяемый, не является типом «множество», «последовательность» или выборочным типом.
10.9 В случае, когда порождающий тип является типом «множество» или «последовательность», «identifier» должен быть одним из идентификаторов «identifier» типа «NamedType» в списке типов компонентов «ComponentTypeList» этого порождающего. В случае, когда порождающий тип является выборочный типом, «identifier» должен быть одним из идентификаторов «identifier» альтернативы «NamedType» в списке типов альтернатив «AlternativeTypeList» этого выборочного типа.
10.10 Продукция «AtNotation» предоставляет указатель на другие компоненты структуры АСН. 1, в которой она появляется. Порождающая структура для первого идентификатора «identifier» в списке «ComponentIdList» определяется следующим образом:
а) если выбрана первая альтернатива «AtNotation» (нет точки после «@»), то порождающая структура является самой внешней, текстуально содержащей тип «множество», «последовательность» или выборочный тип;
б) если выбрана вторая альтернатива «AtNotation» (есть точка после «@»), то порождающая структура является самой внутренней, текстуально содержащей тип «множество» или «последовательность».
Примечание — Альтернатива «AtNotation» допустима только тогда, когда она текстуально находится внутри типа «множество» или «последовательность» и указывает на некоторое другое поле, которое текстуально находится в том же самом типе «множество» или «последовательность», хотя, возможно, на другом уровне вложенности.
5