Welcome unknown traveller of the Cyberspace! This is Gunther Schadow's World Wide Web node. You will find interesting things about medical informatics (HL7), a unit converter, an object oriented DBMS interface, free software in general, and the FreeBSD operating system. Pragmatic Data, LLC provides services related to the contents of this site.

Please check out my other page for more recent stuff

Quick Access to the Hilights:

ProtoGen/HL7 - an implementation of HL7 in C++

My project for my doctoral thesis, that started out in 1993, is to develop and gain experience with a communication server. HL7 was chosen as the basic protocol to be used (since there is in effect no choice at all). No freely available implementation was available at that time and I decided to develop one myself. An outline of my Ph.D. Project

ProtoGen/HL7 is essentially a parser/builder generator that extracts it's rules from the HL7 standard document. The interface to the parser/builder is C++. Thus, the result of the generator is a C++ class library for the HL7 protocol. With the library you can build HL7 client/server applications or batch processors very easily. With the generator you can easily extend and customize the HL7 standard in order to fit the needs and customs of the systems you want to interface... current ProtoGen/HL7 release notes

There are a few papers on ProtoGen/HL7 that are written in german language. Unfortunately I have to use german language for certain writings including my Ph.D. thesis itself. I would rather share them with more people than just those who happen to speak german.

Thanks to the Regenstrief Institute, Indianapolis, I was able to hold a workshop at the HL7 plenary meeting '97 in San Francisco. The workshop was entitled ``Developing Standard-Complient Applications with ProtoGen/HL7''. Please have a look at the announcement and slides.

Unfortunately the documentation of ProtoGen/HL7 is still in a bad state. This loads some burdon on the new user of the system, since (s)he must figure out how things work by hunting for information all over the system. However, there are a few documents that might serve as an introduction.

Since there are enough words now, here is the Code of the complete ProtoGen/HL7 system: It is offered to you under the terms of the GNU General Public License. Please click through the source code tree of the latest ProtoGen/HL7 release (1.3) or get it in whole as a gzip compressed TAR file (about 2 MB) You should also check if you have the required software packages

There is now an update for release 1.3 to a more recent version. Due to a cronic lack of time I am currently unable to package a new major release, even though it is high time to do this.

There are some of the nice features of ProtoGen/HL7 that I want to invite you to try right here: Documentation is always an issue in interface implementation (DICOM formally calls this ``Conformance Statements''). ProtoGen/HL7 now generates hypertext documentation about the HL7 class library that it is about to build. This documentation is always in sync with the library and shows:

Unfortunately this feature is broken in the current 1.3 release but will be back in soon!

The unit converter is a feature of ProtoGen/HL7 that greatly faciliates the communication of observation results in OBX segments. The important features are:

The class Unit inherits from class Code and shows impressingly that a code can be more than a mere list of allowed values. Other ``active'' codes should be: ICD 9/10, SNOMED, etc...

An other example for a more ``intelligent'' code is the LOINC database. .

There is a HL7 test server to which you can send HL7 messages via e-mail. The server does nothing else than acknowledging your messages. The reply message will report any message format or contents errors it had detected. Just put your HL7 message (using HL7 encoding rules) into an e-mail addressed to hl7@uks3p.ukbf.fu-berlin.de. You can now send MIME encoded HL7 messages to this server too. The server is conformant to RFC 1767, the new internet standard for MIME encapsulation of EDI objects. Send single or multi-part messages with content type: ``application/edi-consent'' or ``application/edi-hl7'' in whatever transfer encoding you like.


Certainly, it is impossible to just implement a standard without reflecting it. And it is nearly impossible to reflect a standard without coming up with Ideas about how to improve it. There are two writings that I posted to the HL7 e-mail list but which I want to bring further to the state of a proposal. First there is the problem of Ambiguity in HL7 Messages.

Here is my proposal for An Improved HL7 Query Processing Method. Even though the latter was written before the first version 2.3 ballot draft was published I do think that this is still a better approach to querying, since it is more straight forward. Unfortunately there is currently an inflation of different querying protocols for HL7 but this might reflect the fact, that the optimal solution to this problem is not yet found. While my proposal is quite similar to the ``Event Replay'' method of receiving Answers it still improves the way of posing queries.

HL7 v3.0 does extensive data modeling work in order to make the standard more consistent. However, process modeling is still a somewhat open issue and probably much less understood as data modeling. But as process modeling is as important for protocol standardization, there is still some work to do. Here is my paper on Petri Nets, which can be helpful in understanding the issues involved.

See also The World of Petri Nets.

Frank Oemig has compiled an awesome database that contains all the HL7 specifications from version 2.1 up to 2.3. You can browse through the HTML that he produced from this database here.

Finally, it is important to note that I was able to do all the developement work on my ProtoGen/HL7 project using not a single bit of proprietary software! Thanks to all the people working on the GNU project and on FreeBSD. Thus it was only natural for me to give away my work as free software as well. It is worthwhile to consider the alternative that free software adds to the software industry. Please read Free Software -- the solution to the Open Systems dilemma.

Please note the following interesting software developments. They are dealing with object oriented communication, database interfacing and distributed multiprocessing. I consider using them for my comunication project.

T2C - Interfacing DBMS relations trough C++ shuttle classes
T2C generates C++ source code for so called "shuttle classes". A shuttle class is a C++ class that reflects a certain relation within a DBMS. There are methods for retrieving, inserting, updating and deleting tuples whithout having to spell out any attribute in an SQL statement. This greatly faciliates DBMS interfacing for C++ applications thereby adding flexibility. T2C was written by myself, and you can either visit the source code here or take it home.
Goofie - A General Object-Oriented Framework for Interface Expression
Goofie is said to be able to scan any C++ class declaration and produce marshalling routines from it. This is particularely useful if the encoding rules used are more efficient than the HL7 rules. Moreover there is a kind of an object store, where messages could be held like in a queue. I will evaluate this.
DC++ -- Distributed C++
Language support and runtime library for distributed objects with C++. This approach seems to go even further than Goofie. DC++ supports distributed variables and completely transparent remote method invocation. While this might aim beyond the scope of ProtoGen/HL7, it is still highly interesting for building distributed applications in health care environments.
The distributed object approach is the essence of CORBA too. CORBA has become very popular in the health care communication standards communities.
Fast and Flexible Mach-based Systems
Even more: The new generation of operating systems. Highly supports distributed computing. Uses Goofie, and DC++ does run on Mach too. Maintains backward compatibility to BSD 4.4 on application programming level.

Other Medical Informatics Sites