gms | German Medical Science

MAINZ//2011: 56. GMDS-Jahrestagung und 6. DGEpi-Jahrestagung

Deutsche Gesellschaft für Medizinische Informatik, Biometrie und Epidemiologie e. V.
Deutsche Gesellschaft für Epidemiologie e. V.

26. - 29.09.2011 in Mainz

DSHL7: Eine Domain Specific Language (DSL) für HL7v3 in Scala

Meeting Abstract

Search Medline for

  • Markus Gumbel - Hochschule Mannheim, Mannheim
  • Ahmet Gül - Hochschule Mannheim, Mannheim

Mainz//2011. 56. Jahrestagung der Deutschen Gesellschaft für Medizinische Informatik, Biometrie und Epidemiologie (gmds), 6. Jahrestagung der Deutschen Gesellschaft für Epidemiologie (DGEpi). Mainz, 26.-29.09.2011. Düsseldorf: German Medical Science GMS Publishing House; 2011. Doc11gmds413

doi: 10.3205/11gmds413, urn:nbn:de:0183-11gmds4130

Published: September 20, 2011

© 2011 Gumbel et al.
This is an Open Access article distributed under the terms of the Creative Commons Attribution License (http://creativecommons.org/licenses/by-nc-nd/3.0/deed.en). You are free: to Share – to copy, distribute and transmit the work, provided the original author and source are credited.


Outline

Text

Einführung: HL7 in der Version 3 [1] ist ein Standard zum Nachrichtenaustausch im Gesundheitswesen, der XML als Standard-Transportformat nutzt. Deshalb verarbeitet jede Software für HL7v3-Nachrichten XML-Dokumente. Da die Software typischerweise in einer objektorientierten Sprache wie C# oder Java geschrieben ist, ist eine Umwandlung zwischen Objekten im Hauptspeicher und der XML-Struktur nötig. Gleichwohl es Bibliotheken hierfür gibt (z.B. [2]), ist dies immer noch ein aufwändiges Unterfangen und der Source-Code hat eine hohe Komplexität. Für HL7v3-Nachrichten speziell gibt es nur wenig Tool-Unterstützung. Domain Specific Languages (DSL) versprechen die Software-Entwicklung abermals zu vereinfachen, indem ihre Syntax an die speziellen Bedürfnisse der Domäne angepasst wird [3]. Wir haben aufbauend auf dem HL7-Java-SIG-Framework des Regenstrief-Instituts [4] eine DSL in Scala mit Namen DSHL7 (sprich: Disl Seven) entwickelt, die die Komplexität stark reduziert und so die Entwicklung weiterhin vereinfacht.

Material/Methoden: Scala [5] ist eine auf der Java-Virtual-Machine (JVM) basierende moderne „general purpose“ Programmiersprache, die funktionale und objektorientierte Eigenschaften kombiniert, wodurch sich eine in die Wirtssprache (hier Scala) eingebettete DSL gut realisieren lässt. Zunächst wird mit einem Builder-Pattern und Pre-Initializied-Fields [5] ein Objektgraph erstellt, der domänen-neutral und kompatibel zum HL7v3-Reference-Information-Modell (RIM) ist. Anschließend wird dieser Graph über die HL7-Java-SIG-Bibliothek weiterverarbeitet. Für alle RIM-Klassen des HL7-Java-SIG-Projekts wurden entsprechende Scala-Wrapper-Klassen geschrieben. HL7-Java-SIG -Datentypen und andere Anweisungen werden über implicit-defs konvertiert, so dass HL7-Java-SIG-Anweisungen und Elemente unserer DSL beliebig gemischt werden können. Der Source-Code ist frei verfügbar [6].

Ergebnisse: Unsere DSL ermöglicht das Lesen, Verändern und Erzeugen von HL7v3-Nachrichten aller HL7-Domänen. Neu ist, dass sich neben den Attribute der RIM-Klassen auch (komplexe) HL7v3-Datentypen konsistent ansprechen und verändern lassen. Die Syntax der DSL ist an die XML-Struktur angelehnt, wodurch der DSL-Source-Code – im Gegensatz zum Java-Source-Code – sehr wenig redundante Anweisungen enthält. Exemplarisch haben wir die DSL für Clinical-Document-Architecture-Dokumente (CDA) des VHitG-Implementierungsleitfadens [7] angewandt. Die Erstellung eines am Beispieldokument vhitg-POCD_EX000001.xml angelehnten CDA-Dokuments umfasst in Java rund 14.300 und mit unserer DSL 5.500 Wörter, was einer Reduzierung von etwa 61% entspricht.

Diskussion: Offenbar handelt es sich bei unserer DSL um die erste verfügbare DSL für die HL7 Version 3 (Version 2 siehe z.B. [8]). Die Entwicklung der Beispiel-CDA-Dokumente damit war um ein Vielfaches einfacher im Vergleich zum Java-Ansatz. Denkbare Einsatzgebiete sind u.a. Integrationslösungen [9] wie z.B. die Scala-Erweiterung (zur Parallelisierung) von Apache Camel [10]. Wir sind überzeugt, dass eine ausgereifte DSL ein weiterer Schritt für die Akzeptanz von HL7 in der Version 3 sein wird.


Literatur

1.
Hinchley A. Understanding Version 3. Alexander Mönch Publishing; 2007.
2.
http://jaxb.java.net. Zugegriffen am 31.03.2011. External link
3.
Fowler M, Parsons R. Domain Specific Languages. Addison-Wesley Longman; 2010.
4.
http://aurora.regenstrief.org/javasig. Zugegriffen am 31.03.2011. External link
5.
Odersky M, et al. Programming in Scala. Artima Press; 2007.
6.
https://github.com/markusgumbel/dshl7. External link
7.
Kassner A, et al. Arztbrief auf Basis der HL7 Clinical Document Architecture Release 2 für das Deutsche Gesundheitswesen. Implementierungsleitfaden. Verband der Hersteller von IT-Lösungen für das Gesundheitswesen VHitG; 2006.
8.
http://repo.openehealth.org/confluence/display/ipf2/HL7+DSL. zugegriffen am 05.04.2011. External link
9.
Hohpe G, Woolf B. Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions. Addison-Wesley Longman; 2003.
10.
Krasser M. A Scalaz-based DSL for Apache Camel. Available from: https://github.com/krasserm/scalaz-camel. Zugegriffen am 04.04.2011. External link