Die Aufgabe
In meinem Java-Programm zur IBAN-Prüfung wird bei deutschen IBANs auch geprüft, ob die Bankleitzahl (BLZ) gültig ist und welche Prüfzifferberechnungsmethode (PZBM) für die Kontonummern der Bank verwendet werden soll.
In der ersten Version meines Programms habe ich diese Informationen über einen SQL-Zugriff in eine Postgres-Datenbank ermittelt.

Das ist zwar einfach zu programmieren, es benötigt aber auch viel Rechenzeit. Deshalb wollte ich den SQL-Zugriff auf die Datenbank durch den Zugriff auf eine Tabelle ersetzen, die die benötigten Informationen enthält.
Der Lösungsansatz
Ich habe die relevanten Daten aus der Datenbank gelesen und in eine XML-Datei tabelle.xml geschrieben:

Für jeden Gültigkeitszeitraum einer BLZ wird die zugeordnete PZBM angegeben.
Um die passende PZBM zu einer BLZ an einem Stichtag zu finden, kann man auf diese XML-Datei über diesen XPath2.0 zugreifen. Man muss dabei die beiden Variablen $blz und $stichtag mit den gewünschten Werten belegen:

Mit der Belegung $blz = ‚10010123‘ und $stichtag = ‚2025-02-28′ erhält man das Ergebnis pzbm ’09‘.
Ich verwende hier ein XPath2.0-Feature, die Funktion fn:compare, mit deren Hilfe man vergleichen kann, ob ein String größer oder kleiner als ein anderer ist.
Die Umsetzung
Um XPath2.0 in Java nutzen zu können, verwende ich Saxon über das s9api. In meinem Java-Programm muss ich jetzt folgende Aufgaben erledigen:
a) bei der Projektinitialisierung:
- die Datei tabelle.xml einlesen und als XmlNode bereitstellen
- den XPath einlesen und als XPathExecutable mit den Variablen $blz und $stichtag bereitstellen
b) bei der Selektion:
- einen Selektor für das XPathExecutable erzeugen
- die Variable $blz im Selektor auf die aktuelle BLZ setzen
- die Variable $stichtag im Selektor auf das gewünschte Datum setzen
- die bereitgestellte XmlNode im Selektor als ContextNode setzen
- die PZBM als Ergebnis des Selektors ermitteln
Da bei der Selektion ein vorbereitetes XPathExecutable und ein vorbereiteter XmlNode verwendet werden, ist die Ausführung der Selektion sehr schnell.
Die Implementierung habe ich in eine Klasse BlzHelper ausgelagert, die neben den beiden Attributen
- XmlNode blzTabelle und
- XPathExecutable pzbmFuerBlzAmStichtag
die beiden Methoden
- initialisiereTabelle und
- getPzbm
enthält.



Fazit
Um diesen BlzHelper in einem Java-Programm zu verwenden, muss zuerst einmalig die Methode BlzHelper.initialisiereTabelle aufgerufen werden:

Danach kann die PZBM zu jeder BLZ an jedem Stichtag über die Methode BlzHelper.getPzbm ermittelt werden:

Die Highlights dieser Lösung sind:
- Die Navigation im XML-Dokument wird nicht in Java programmiert, sondern als XPath beschrieben.
- Die Aufbereitung des XML-Dokuments und des XPaths muss nur einmalig bei der Initialisierung des Programms ausgeführt werden.
- Da im XPath Variablen verwendet werden, kann der compilierte XPath wiederverwendet werden.
- Die Komplexität des Zugriffs auf das XML-Dokument ist in der Helper-Klasse gekapselt.
Wenn Sie Interesse an dieser Implementierung haben, dann müssen Sie den Code nicht aus den Bildern abschreiben. Melden Sie sich einfach bei mir.
Schreibe einen Kommentar