Anmerkungen zum EDIFACT-Parser
Der EDIFACT-Parser verfährt mit Segmenten ähnlich wie mit Zeilen in CSV- oder Feste-Länge-Dateien. Der Parser zerlegt die Datei in Segmente, indem er alles zwischen einer Segmentkennung und dem Segmentende als Zeile betrachtet. Diese Zeile kann, analog zu CSV- oder Feste-Länge-Dateien, als Meta-Spalte angesehen werden. Dabei kommt der EDIFACT-Parser mit Zeilenumbrüchen am Segmentende oder innerhalb des Segmentes zurecht.
Jedes Segment wird vom Parser einem Knoten auf oberster Ebene der Quellstruktur zugeordnet. Die Zuordnung der Segmentnamen zu den Knoten wird über die Satzarterkennung vorgenommen. Im Unterschied zum Feste-Länge- oder CSV-Parser, werden die Segmente nicht starr dem ersten Knoten zugeordnet. Der Parser merkt sich den zuletzt betretenen Knoten und nimmt keine Zuordnungen oberhalb dieses Knotens vor! Grund dafür ist die EDIFACT-Syntax. Die Segmente dürfen nicht in wahlfreier Reihenfolge angeordnet werden, die Reihenfolge ist festgelegt.
Die folgende Abbildung zeigt die Zuordnung von Segmenten zu Knoten der Quellstruktur.
(1) Das BGM-Segment wird dem Knoten über die Satzarterkennung zugeordnet.
(2) Die DTM-Segmente werden dem Knoten über die Satzarterkennung zugeordnet. Da zwei Segmente vorhanden sind, wird der Knoten zweimal wiederholt.
(3) Das DTM-Segment wird dem Knoten über die Satzarterkennung zugeordnet. Das Segment wird nicht (2) zugeordnet, da der Parser bereits den FTX-Knoten betreten hatte.
Die folgende Abbildung zeigt die Zuordnung von Segmenten zu Feldern der Quellstruktur.
(1) Das UNH-Segment wird dem Knoten über die Satzarterkennung zugeordnet.
(2) Das Segment-Feld in UNH wird dem Baum-Feld über die Reihenfolge zugeordnet. Der Wert im Beispiel für das Baum-Feld ist UNH.
(3) Das Segment-Feld in UNH wird dem Baum-Feld über die Reihenfolge zugeordnet. Der Wert im Beispiel für das Baum-Feld ist 67061107514198. Sind mehr Baum-Felder als Segment-Felder vorhanden, bleiben die letzten Baum-Felder leer.
Die folgende Abbildung zeigt die Zuordnung von Komponenten zu Feldern der Quellstruktur.
(1) Das DTM-Segment wird dem Knoten über die Satzarterkennung zugeordnet.
(2) Das Segment-Feld in DTM wird dem Baum-Feld über die Reihenfolge zugeordnet. Der Wert im Beispiel für das Baum-Feld ist DTM.
(3) Der Knoten in der Quellstruktur wird benötigt, da das zweite Feld im DTM-Segment aus mehreren Komponenten besteht. Eine Zuordnung über Satzarterkennung findet nicht statt. Der EDIFACT-Parser geht bei Knoten ohne eingetragene Satzarterkennung immer von einem Feld mit Komponenten aus!
(4) Die Komponente aus dem Segment-Feld wird dem Baum-Feld über die Reihenfolge zugeordnet. Der Wert im Beispiel ist 200.
(5) Die Komponente aus dem Segment-Feld wird dem Baum-Feld über die Reihenfolge zugeordnet. Sind mehr Baum-Felder als Komponenten vorhanden, bleiben die letzten Baum-Felder leer.
EDIFACT-Strukturen können Subsegmente enthalten. Das sind Segmente, die unterhalb von Segmenten angeordnet sind. Diese Subsegmente werden in Lobster_data, analog zu normalen Segmenten, ebenfalls als Knoten abgebildet. Der Knoten des übergeordneten Segmentes muss in der Satzarterkennung alle Namen der Subsegmente enthalten, andernfalls kann ein Subsegment nicht dem Segment zugeordnet werden.
Die folgende Abbildung zeigt die Zuordnung von Subsegmenten zu Knoten und Feldern der Quellstruktur.
(1) Das SG1-Segment hat die Subsegmente LOC und DTM. Damit diese Subsegemente korrekt zugeordnet werden können, muss die Satzarterkennung in SG1 die Zeichenketten LOC und DTM enthalten.
(2) Das Subsegment LOC wird wie ein normales Segment über die Satzarterkennung LOC zugeordnet. Das erste Auftreten eines LOC Subsegmentes erzeugt das Segment SG1. Die LOC-Subsegmente werden wiederholt, bis ein DTM Subsegment auftritt. Alle diese Subsegmente werden dem gleichen Segment zugeordnet, bis nach einem DTM-Subsegment wieder ein LOC-Subsegment auftritt. Dieses Auftreten erzeugt ein neues SG1-Segment.
(3) Alle DTM-Subsegmente werden dem gleichen Segment zugeordnet, bis nach einem DTM-Subsegment wieder ein LOC-Subsegment auftritt. Dieses Auftreten erzeugt ein neues SG1-Segment.
(4) Nach dem Auftreten eines nachfolgenden Segments (FTX, DTM-2, ...) erzeugt ein neues LOC-Segment natürlich kein SG1-Segment mehr.