Protocol instances are objects that have additional protocol-specific characteristics. In order to capture these characteristics, protocol instances are classified into protocol classes. Like base object classes, protocol classes have class names, optional class descriptions, optional class example specifications, optional identifiers, optional representative display attributes, can be associated with and an optional list of domain-specific properties, and are associated with (member) attributes. Again, although identifiers for protocol classes are optional, it is advised that each protocol class be associated with an identifier. A protocol class can also be associated with delete rules (see section 6).
Protocol expansion
allows specifying alternative protocols, sequences of
protocols, and optional protocols;
``or'', ``,'', and ``[ ]'' are used to denote
alternative, sequences of, and optional protocols, respectively,
and parentheses are used for specifying complex protocol compositions.
Operator ``,'' has higher precedence than `` or''.
For example, if P is a protocol whose expansion is
(
) or D then protocol P is defined as either
(i) the sequence of protocols A followed by B and followed
by optional protocol C, or (alternative) (ii) protocol D alone.
The protocol expansion must be acyclic, that is, if a
protocol class
is involved in the expansion of protocol
class
, then
cannot be involved in the expansion
of
or any subprotocol of
.
<protocol class> ::= PROTOCOL CLASS <protocol class name>
<permission mode>
<class description>
<class example>
<domain-specific properties>
<protocol specification>
<protocol class delete rules>
;
<protocol class name> ::= <class name>
;
<protocol specification> ::= <protocol identifier>
<represented by>
| <protocol identifier>
<represented by>
<protocol expansion>
;
<protocol identifier> ::= ID : <attribute list>
| ID : ( <comp attribute list> )
| <null>
;
<protocol expansion> ::= EXPANSION : <expansion>
;
<expansion> ::= <protocol class name>
| ( <expansion> )
| [ <expansion> ]
| <expansion> , <expansion>
| <expansion> or <expansion>
;
For example, the protocol for labeling and blotting an electrophoretic gel shown in Figure 3 is specified using the following protocol classes:
PROTOCOL CLASS LABEL
ID: label_id
EXPANSION: STAIN or ([SOUTHERN_BLOT], HYBRIDIZATION)
ATTRIBUTE label_id: [1,1] INTEGER
ATTRIBUTE electro_gel: [1,1] ELECTRO_GEL input
ATTRIBUTE labeled_separation : [1,1] STAINED_GEL or PROBED_FILTER output
PROTOCOL CLASS STAIN
ID: stain_experiment
ATTRIBUTE stain_experiment: [1,1] INTEGER
ATTRIBUTE electro_gel: [1,1] ELECTRO_GEL input
isa LABEL.electro_gel
ATTRIBUTE stained_gel: [1,1] STAINED_GEL output
isa LABEL.labeled_separation
PROTOCOL CLASS SOUTHERN_BLOT
ID: blot_experiment
ATTRIBUTE blot_experiment: [1,1] INTEGER
ATTRIBUTE electro_gel: [1,1] ELECTRO_GEL input
isa LABEL.electro_gel
ATTRIBUTE filter: [1,1] FILTER output
PROTOCOL CLASS HYBRIDIZATION
ID: hybr_experiment
ATTRIBUTE hybr_experiment: [1,1] INTEGER
ATTRIBUTE gel_filter: [1,1] ELECTRO_GEL or FILTER input
isa LABEL.electro_gel or
from SOUTHERN_BLOT via filter
ATTRIBUTE probe: [0,1] PROBE input
ATTRIBUTE probed_filter: [1,1] PROBED_FILTER output
isa LABEL.labeled_separation
A protocol class can have primitive and abstract member attributes like an object class.
Besides regular attributes, a protocol class can also have input and output attribute and attributes representing protocol connections. Input attributes, output attributes, and protocol connection attributes associated with protocol classes are described in the next subsections.