Понятия подтипа и супертипа определены в 9.2.3. Понятие ограничений подтипов/супертипов определено в 9.2.5. Существует возможность определить ограничения, в соответствии с которыми графы подтипов/супертипов могут быть реализованы вне объявления объекта. Данная возможность реализуется посредством объявления SUBTYPE_CONSTRAINT.
Синтаксис: | |||
315 | subtype_constraint_decl = subtype_constraint_head subtype_constraint_body | ||
END_SUBTYPE_CONSTRAINT ' ; ' . | |||
316 | subtype_constraint_head = SUBTYPE_CONSTRAINTsubtype_constraint_ID FOR | ||
entity_ref ' ; ' . | |||
314 | subtype_constraint_body = [ abstract_supertype ] [ total_over ] | ||
[ supertype_expression ' ; ' . | |||
165 | abstract_supertype = ABSTRACT SUPERTYPE ' ; ' . | ||
326 | total_over = TOTAL_OVER ' ( ' entity_ref { ',' entity_ref } ' ) ' ' ; ' . | ||
320 | supertype_expression = supertype_factor { ANDOR supertype_factor } . | ||
321 | supertype_factor = supertype_term { AND supertype_term } . | ||
323 | supertype_term-entity_ref | one_of | ' ( ' supertype_expression ' ) ' . | ||
263 | one_of = ONEOF ' ( ' supertype_expression { ' , ' supertype_expression } ' ) ' . |
Объявление SUBTYPE_CONSTRAINT используется для определения следующих ограничений на возможную реализацию подтипов/супертипов:
- ограничение, что супертип является абстрактным и должен реализовываться только через свои подтипы;
- ограничение, что совокупность подтипов данного супертипа обеспечивает полное покрытие; то есть если полное покрытие задано, то экземпляр любого подтипа данного супертипа должен также быть экземпляром, по крайней мере, одного из подтипов, определенных в спецификации TOTAL_OVER;
- ограничение взаимосвязи между некоторыми подтипами.
Каждый из этих видов ограничений более детально рассмотрен в последующих пунктах. Формальный подход к определению потенциальных комбинаций подтип/супертип, которые могут быть реализованы при нескольких возможных ограничениях, описанных ниже, представлен в приложении B.