Während in der Anfangsphase (v0.x) die einzelnen Satz-Elemente über Enums zusammen mit Annotationen beschrieben wurde, wurde mit v1.0 zusätzlich die XML-Beschreibung herangezogen, die inzwischen vom GDV zur Verfügung gestellt wurde. Mit v5.0 können inzwischen alle Satzarten aus der XML-Beschreibung generiert werden. Diese Aufgabe übernimmt der XmlService.
Brauchst du nur die vom GDV definierten Satzarten, ist der XmlService ausreichend. Möchtest du hingegen noch eigene Satzarten definieren oder leicht abgewandelte Satzarten einsetzen, brauchst du die SatzFactory und SatzRegistry.
Normalerweise holst du dir über XmlService.getInstance()
die aktuelle Version der XML-Beschreibung als Basis (derzeit VUVM2018.xml).
Da die verschiedenen XML-Beschreibungen aufwärtskompatibel sind, kannst du damit auch Datensätze, die noch auf einer älteren Beschreibung basiseren, importieren oder exportieren. Willst du dennoch die Instanz zur entsprechenden XML-Beschreibung, kannst du sie als Parameter übergeben:
XmlService service = XmlService.getInstance("VUVM2013.xml");
In der Anfangsphase unterstützte gdv.xport nur sehr wenige Satzarten. Um trotzdem weitere Satzarten zu unterstützen, konnte man programmatisch eigene Satzarten über Ableitung definierten oder über Enums zusammen mit Annotationen beschreiben. Über die SatzFactory konnte man bereits seit v0.1 so neue Satzarten registrieren, die dann dann Import und Export unbekannter Satzarten ermöglichten.
In der Zwischenzeit wurde viele der Enums, die in der Anfangsphase zur Unterstützung der verschiedenen Satzarten entstanden sind, durch die Satzart aus dem XmlService ersetzt. Inzwischen können eigene Satzarten auch über XML beschrieben werden. Damit werden Enums nicht mehr benötigt und werden in Zukunft nicht mehr unterstützt werden.
Die SatzRegistry-Klasse ist später hinzugekommen. Sie ermöglicht im Gegensatz zur rein statischen SatzFactory-Klasse die Verwendung mehrere Instanzen, z.B. zur gleichzeitigen Unterstützung mehrere Versionen der GDV-Handbücher.
Mit der SatzXML-Klasse können eigene Satzarten auf Basis der XML-Beschreibung des GDVs beschrieben werden. Am einfachsten geht das, wenn man über die GdvXmlFormatter-Klasse einen beliebige Satzart exportiert und diese dann anpasst:
Satz satz = XmlService.getInstance().getSatzart(SatzTyp.of(221, 51));
try (FileOutputStream ostream = new FileOutputStream(new File("Satz0221.051.xml"));
GdvXmlFormatter formatter = new GdvXmlFormatter(ostream)) {
formatter.write(satz);
}
Die Datei "Satz0221.051.xml", die durch dieses Code-Beispiel erzeugt wird, kann anschließend für eigenen Vorstellungen der gewünschten Satzart angepasst werden. Damit der neue Satz für eigene Imports und Exports verwendet werden kann, registriert man ihn über die SatzXML-Klasse:
Satz mySatz = SatzXml.of(new File("Satz0221.051.xml")); SatzRegistry.getInstance().register(mySatz, SatzTyp.of("0221.051"));
Es ist möglich, ungültige Sätze und Felder anzulegen. Dies ist dem Import geschuldet. Dort soll ein ungültiger Wert nicht zu einem Abbruch bzw. Exception führen.
Um trotzdem Datensätze und Felder überprüfen zu können, gibt es eine validate()
-Methode.
Diese liefert eine Liste von Verletzungen auf, die dann weiter analyisiert werden können.
Wenn man nur wissen will, ob ein Wert oder Satz gütig ist, verwendet man die isValid()
-Methode.