ГОСТ Р И С 0 10303-11 — 2009
ограничение. Правило оценивается посредством выполнения операторов с последующей оценкой каждого
из правил области определения. Если правило нарушено для совокупности экземпляров объектных типов
данных, переданных в качестве параметров, то данные экземпляры не соответствуют EXPRESS-схеме.
Синтаксис:
291 rule_decl = rule_headalgorithm_head{ stmt} where_clauseEND_RULE
292 rule_head = RULE rulejd FOR ’( ’ entity_ref { ’entity_ref} ’ )* ’ ;’.
173 algorithm_head = { declaration} [ constant_ded) [ local_decl).
199 declaration = entity_decl |function_decl |procedure_decJ |
subtype_constraint_decl |type_decl.
Правила и ограничения:
a) Результатом оценки любого правилаобласти определения должно быть логическое (LOGICAL) или
неопределенное (?) значение.
b
) Выражение принимается, если оценкой его значения является TRUE: выражение отвергается, если
оценкой его значения является FALSE; и выражение ни отвергается, ни принимается, если оценкой выра
жения является неопределенное (?) значение или значение UNKNOWN.
c) Ни одно из правил области определения не должно бытьотвергнутодля допустимой совокупности
экземпляров объектов объектных типовданных, указанных в заголовке правила.
d)Для совокупности экземпляров, принадлежащих допустимой области определения, все глобаль
ные правила, заданныедля данной области определения, должны быть приняты. Данное правило относит
ся и к принятию правил для объектных типовданных, для которых не существует экземпляров в
совокуп ности тестируемых экземпляров.
П р и м е ч а н и е — Глобальное правило может быть задано для обеспечения существования, по крайней
мере, одного экземпляра указанного типа данных. Данное правило не проверяет отсутствие экземпляров указан
ного объектного типа данных, поддерживающих необходимую семантику.
Примеры
1 Следующее правило устанавливает, что в первом и седьмом октантах должно быть
одинаковое число точек:
RULE point_match FOR (point);
LOCAL
first_oct,
seventh_oct : SETOF POINT := []; --пустой набор точек (см. 12.9)
ENDLOCAL
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 :
c;
a2 ;
dt
a3 : f;
UNIQUE
ur1 : a1
END_ENTTTY:
Ограничение совместной уникальности в Ь применяется к экземплярам c u d . Следующее
правило вводит дополнительное ограничение, что совокупная уникальность должна основываться на
значениях:
RULE vu FOR (b);
ENTITY temp;
a1 : c;
a2 : d;
ENDENTITY;
54