Go to the first, previous, next, last section, table of contents.

The paragons of ProtoGen

The idea of ProtoGen is not only applicalble to HL7 but also to similar standards like EDIFACT. In fact, the idea to automatically build data structures and methods from a formal specification of the protocol is not new. In the OSI world, ASN.1 is the language in which protocols are described. Many different ASN.1 compilers exist today by which ASN.1 descriptions can be translated into C or C++ code. What might be new about ProtoGen is that it tries to compile a standard document which was meant to be read by humans rather than by computers.

Unfortunately HL7 does not comply very much to the models that the OSI proposes, even though the "7" in "HL7" is derived from the seventh layer of the OSI protocol stack, beside of this, HL7 has little in common with OSI. That is why it is not as easy as it could be to apply the methods and tools that exist in the OSI world to HL7. If we had a ASN.1 description of HL7 that could be produced by a compiler like ProtoGen we would not gain much. Most applications that use HL7 do not only use the data model that in fact belongs to the seventh layer. They also use the HL7 encoding rules which actually belong to the sixth layer. It is the problem that layer 7 and layer 6 can not be easily separated in HL7. There is on the other hand no ASN.1 compiler that would compile code for the HL7 encoding rules. From OSI's point of view there is nothing wrong with it, since the HL7 encoding rules are not qualified for encoding everything that can be expressed with ASN.1. ProtoGen was made to provide for HL7 what is already available in the OSI domain.

An other paragon for ProtoGen is rpcgen(1), a compiler for the remote procedure call protocol (RPC). ASN.1 compilers, rpcgen(1) and ProtoGen have in common that they read a specification of a protocol and transform this input into one or more files which can be used with common programming languages like C or C++. The produced files usually include one or more header (`*.h') files, which contain definitions for the data structures and one or more implementation (`*.c') files which contain the function definitions for encoding and decoding the data structure. The result of such a compilation is an application programming interface to the protocol that was specified by the compiler input.


Go to the first, previous, next, last section, table of contents.