XML-‐basierte Kommunikation im IHE - Institute of Health ...

XML-‐basierte Kommunikation im IHE - Institute of Health ... XML-‐basierte Kommunikation im IHE - Institute of Health ...

07.01.2013 Aufrufe

3. Methoden und Vorgehensplanung Die XML Datei wird wie ein Datenstrom gelesen und bei bestimmten Inhalte wird ereignisge-­‐ steuert eine vorher definierte Call-­‐Back Methode aufgerufen [31]. Stößt der Parser beim Einle-­‐ sen auf ein XML-­‐Element, wird die vom Benutzer definierte Methode „startElement()“ aufgeru-­‐ fen. Erkennt der Parser Text innerhalb des Elements, wird die Methode „characters()“ aufgeru-­‐ fen, welche den Text einliest. Wird das Element-­‐Tag dann geschlossen folgt eine „endElement()“ Methode. So können die Elemente eines XML-­‐Dokuments sequentiell eingelesen werden. Der Vorteil einer Push-­‐API ist somit die speicherarme Abarbeitung beim Einlesen, womit auch die Verarbeitung von sehr großen Dokumenten ermöglicht wird. Der iterative Vorgang ist aber mit dem Nachteil verbunden, dass sich der Benutzer um die Weiterverarbeitung der gewonnen Da-­‐ ten kümmern muss und so ein Zugriff auf ein bestimmtes Element nicht ohne benutzerdefinierte Zwischenspeicherung möglich ist. Außerdem ist es mit einer Push-­‐API nur möglich, XML-­‐ Dokumente zu lesen, jedoch nicht zu schreiben. „Simple API for XML Parsing“, kurz SAX, ist der bekannteste JAVA Vertreter der Push-­‐APIs [36]. Die API bietet Interfaces für JAVA an, um ein XML sequentiell nach dem Push-­‐Ansatz zu parsen. SAX ist seit 2002 in der Version 2 verfügbar und gilt als De-­‐facto-­‐Standard, da es zwar von kei-­‐ nem offiziellen Gremium verabschiedet wurde, jedoch schnell Beliebtheit in der XML-­‐ Verarbeitung errungen hatte. Pull-­‐API Eine Pull-­‐API verarbeitet ein XML–Dokument ähnlich sequentiell wie eine Push-­‐API. Der Unter-­‐ schied ist, dass bei einer Push-­‐API der Parser das Anwendungsprogramm über die Call-­‐Back-­‐ Methoden aufruft, während bei einer Pull-­‐API das Anwendungsprogramm iterativ den Parser aufruft. Somit wird bei einer Pull-­‐API aktiv der nächste Teil des Dokuments angefordert. Dieses Prinzip entspricht dem Iterator Design Pattern [37]. Der Iterator muss somit vom Anwendungs-­‐ programm von Element zu Element weiter bewegt werden. Es gibt zwei Verarbeitungstypen einer Pull-­‐API: 1. Iterator-­‐Verarbeitung 2. Curser-­‐Verarbeitung Bei der Iterator-­‐Verarbeitung wird bei jedem neuen Element im XML ein neues Objekt erzeugt. Dieses Objekt kann in einer Datenstruktur gespeichert werden, um später darauf zurückgreifen zu können. Die Iterator-­‐Verarbeitung ist somit flexibler als die Curser-­‐Verarbeitung. Bei der Curser-­‐Verarbeitung wird das XML immer im selben Objekt weitergeparst. Somit steht zu einem bestimmten Zeitpunkt immer nur das Objekt mit der aktuellen Position zur Verfügung. 24

3. Methoden und Vorgehensplanung Die Curser-­‐Verarbeitung ist zwar unflexibler, aber auch speichereffizienter und besitzt eine hö-­‐ here Verarbeitungsgeschwindigkeit. Der Vorteil der Pull-­‐API ist die Kombination aus DOM und SAX: Es können auch große Dokumen-­‐ te geparst werden, die Kontrolle geht aber vom Anwendungsprogramm aus. Außerdem können mit Pull-­‐APIs XML Dokumente sowohl gelesen als auch erzeugt werden. „The Streaming API for XML“ [38], kurz StAX, ist der Hauptvertreter der Pull-­‐APIs. Mapping-­‐API Mapping-­‐APIs, bzw. auch XML-­‐Binding genannt, versuchen anders als bei den vorher vorgestell-­‐ ten Parsertypen das Dokument direkt auf eine Klassenstruktur abzubilden. Das bedeutet, dass ein XML-­‐Dokument ohne direkte Schnittstelle direkt in eine Klasseninstanz übergeführt wird. Vorteil der Mapping-­‐APIs ist die leichte Verwendung in einer Applikation, da man sich den um-­‐ fangreichen Parsvorgang spart. Das führt auch zu einem geringen Wartungsaufwand und einer geringen Fehleranfälligkeit. Die Nachteile ergeben sich aus den meist sehr umfangreichen Vor-­‐ arbeiten, bis man den korrekten Mapping-­‐Algorithmus generiert hat. Die bekannteste XML-­‐ Mapping-­‐API für JAVA ist JAXB („JAVA API for XML Bindung“) [39]. 3.2.1.3 Auswahl des geeignetsten Parser-­‐Frameworks anhand eines qualitativen Vergleichs In diesem Abschnitt werden o.g. Parser-­‐Frameworks untereinander verglichen. Dafür werden verschiedene Merkmale gegenüberstellt und bewertet. Die Merkmale umfassen dabei: • Performance: wie effizient kann der Parser ein XML-­‐Dokument einlesen • Speicherintensität: wie viel Speicher benötigt der Parser für das Einlesen eines XML-­‐ Dokuments • Erstellen von Dokumenten: kann mit dem Parser auch ein XML-­‐Dokument erzeugt wer-­‐ den • Zugriff auf bestimmten Knoten: wie flexibel/schnell kann auf einem bestimmten Knoten in der Struktur zugegriffen werden • Programmieraufwand: welcher Aufwand muss für die Implementierung bzw. Anpassung der Parser-­‐Schnittstellen aufgebracht werden • Aufwand Objektabbildung: wie viel Code muss programmiert werden, um die geparsten Daten in ein Objekt zu bekommen • Einarbeitungszeit: wie lange wird für das Erlernen der Parser-­‐Syntax benötigt • Dokumentation: wie gut ist verfügbare Dokumentation Alle Merkmale werden für jedes Parser-­‐Framework folgendermaßen bewertet: 25

3. Methoden und Vorgehensplanung<br />

Die <strong>XML</strong> Datei wird wie ein Datenstrom gelesen und bei best<strong>im</strong>mten Inhalte wird ereignisge-­‐<br />

steuert eine vorher definierte Call-­‐Back Methode aufgerufen [31]. Stößt der Parser be<strong>im</strong> Einle-­‐<br />

sen auf ein <strong>XML</strong>-­‐Element, wird die vom Benutzer definierte Methode „startElement()“ aufgeru-­‐<br />

fen. Erkennt der Parser Text innerhalb des Elements, wird die Methode „characters()“ aufgeru-­‐<br />

fen, welche den Text einliest. Wird das Element-­‐Tag dann geschlossen folgt eine „endElement()“<br />

Methode. So können die Elemente eines <strong>XML</strong>-­‐Dokuments sequentiell eingelesen werden. Der<br />

Vorteil einer Push-­‐API ist somit die speicherarme Abarbeitung be<strong>im</strong> Einlesen, womit auch die<br />

Verarbeitung von sehr großen Dokumenten ermöglicht wird. Der iterative Vorgang ist aber mit<br />

dem Nachteil verbunden, dass sich der Benutzer um die Weiterverarbeitung der gewonnen Da-­‐<br />

ten kümmern muss und so ein Zugriff auf ein best<strong>im</strong>mtes Element nicht ohne benutzerdefinierte<br />

Zwischenspeicherung möglich ist. Außerdem ist es mit einer Push-­‐API nur möglich, <strong>XML</strong>-­‐<br />

Dokumente zu lesen, jedoch nicht zu schreiben.<br />

„S<strong>im</strong>ple API for <strong>XML</strong> Parsing“, kurz SAX, ist der bekannteste JAVA Vertreter der Push-­‐APIs [36].<br />

Die API bietet Interfaces für JAVA an, um ein <strong>XML</strong> sequentiell nach dem Push-­‐Ansatz zu parsen.<br />

SAX ist seit 2002 in der Version 2 verfügbar und gilt als De-­‐facto-­‐Standard, da es zwar von kei-­‐<br />

nem <strong>of</strong>fiziellen Gremium verabschiedet wurde, jedoch schnell Beliebtheit in der <strong>XML</strong>-­‐<br />

Verarbeitung errungen hatte.<br />

Pull-­‐API<br />

Eine Pull-­‐API verarbeitet ein <strong>XML</strong>–Dokument ähnlich sequentiell wie eine Push-­‐API. Der Unter-­‐<br />

schied ist, dass bei einer Push-­‐API der Parser das Anwendungsprogramm über die Call-­‐Back-­‐<br />

Methoden aufruft, während bei einer Pull-­‐API das Anwendungsprogramm iterativ den Parser<br />

aufruft. Somit wird bei einer Pull-­‐API aktiv der nächste Teil des Dokuments angefordert. Dieses<br />

Prinzip entspricht dem Iterator Design Pattern [37]. Der Iterator muss somit vom Anwendungs-­‐<br />

programm von Element zu Element weiter bewegt werden. Es gibt zwei Verarbeitungstypen<br />

einer Pull-­‐API:<br />

1. Iterator-­‐Verarbeitung<br />

2. Curser-­‐Verarbeitung<br />

Bei der Iterator-­‐Verarbeitung wird bei jedem neuen Element <strong>im</strong> <strong>XML</strong> ein neues Objekt erzeugt.<br />

Dieses Objekt kann in einer Datenstruktur gespeichert werden, um später darauf zurückgreifen<br />

zu können. Die Iterator-­‐Verarbeitung ist somit flexibler als die Curser-­‐Verarbeitung.<br />

Bei der Curser-­‐Verarbeitung wird das <strong>XML</strong> <strong>im</strong>mer <strong>im</strong> selben Objekt weitergeparst. Somit steht<br />

zu einem best<strong>im</strong>mten Zeitpunkt <strong>im</strong>mer nur das Objekt mit der aktuellen Position zur Verfügung.<br />

24

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!