Правила позволяют определить ограничения, применяемые к одному или нескольким типам данных в пределах области видимости схемы. Локальные правила (к которым относятся ограничения уникальности и правила области видимости в объявлении объектов) объявляют ограничения, применяемые индивидуально к каждому экземпляру объектного типа данных. Объявление RULE позволяет определить ограничения, применяемые в совокупности ко всей области определения объектного типа данных или к экземплярам нескольких объектных типов данных. Одним из применений объявления RULE является скоординированное ограничение значений атрибутов разных объектов.
В объявлении правила ему присваивается имя и указываются объекты, на которые оно распространяется.
Тело правила состоит из локальных объявлений, исполняемых операторов и правил области определения. Конечное состояние правила показывает, удовлетворяется или нет некоторое глобальное ограничение. Правило оценивается посредством выполнения операторов с последующей оценкой каждого из правил области определения. Если правило нарушено для совокупности экземпляров объектных типов данных, переданных в качестве параметров, то данные экземпляры не соответствуют EXPRESS-схеме.
Синтаксис: |
Правила и ограничения:
a) Результатом оценки любого правила области определения должно быть логическое (LOGICAL) или неопределенное (?) значение.
b) Выражение принимается, если оценкой его значения является TRUE; выражение отвергается, если оценкой его значения является FALSE; и выражение ни отвергается, ни принимается, если оценкой выражения является неопределенное (?) значение или значение UNKNOWN.
c) Ни одно из правил области определения не должно быть отвергнуто для допустимой совокупности экземпляров объектов объектных типов данных, указанных в заголовке правила.
d) Для совокупности экземпляров, принадлежащих допустимой области определения, все глобальные правила, заданные для данной области определения, должны быть приняты. Данное правило относится и к принятию правил для объектных типов данных, для которых не существует экземпляров в совокупности тестируемых экземпляров.
Примечание - Глобальное правило может быть задано для обеспечения существования, по крайней мере, одного экземпляра указанного типа данных. Данное правило не проверяет отсутствие экземпляров указанного объектного типа данных, поддерживающих необходимую семантику.
Примеры
1 Следующее правило устанавливает, что в первом и седьмом октантах должно быть одинаковое число точек:
RULE point_match FOR (point); | ||||||
LOCAL | ||||||
first_oct , | ||||||
seventh_oct : SET OF POINT := [ ]; -- пустой набор точек (см. 12.9) | ||||||
END LOCAL | ||||||
first_oct := QUERY(temp <* point | (temp.x > 0) AND | ||||||
(temp.y > 0) AND | ||||||
(temp.z > 0) ); | ||||||
seventh_oct := QUERY(temp <* point | (temp.x < 0) AND | ||||||
(temp.y < 0) AND | ||||||
(temp.z < 0) ); | ||||||
WHERE | ||||||
SIZEOF(first_oct) = SIZEOF(seventh_oct); | ||||||
END RULE; |
2 Правило может быть использовано для задания совокупной уникальности значений атрибутов объекта:
ENTITY b; | ||||
a1 : с; | ||||
а2 : d; | ||||
аЗ : f; | ||||
UNIQUE | ||||
ur1 : a1, a2; | ||||
END_ ENTITY; |
Ограничение совместной уникальности в b применяется к экземплярам c и d. Следующее правило вводит дополнительное ограничение, что совокупная уникальность должна основываться на значениях: