next up previous contents
Next: Input and Output Up: Protocol Classes and Previous: Representing Protocols

Protocol Classes

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.