Minimales Beispiel - 8. Verbindungen konvertieren#
In den vorherigen Schritten wurden die Konverter zu Objekten und Attributen angelegt und die Konvertierungen durchgeführt
Als letzter Schritt muss noch ein Konverter für die Verbindung „Sporthallen -> Adressen“ angelegt werden. Grundsätzlich könnte dies wie bei den Objekten und Attributen direkt beim Konverter „Sporthallencsv2Sporthallen“ geschehen.
Allerdings sind Verbindungen ihre eigenen Objekte bzw. Klasse, daher stehen Verbindungen für sich selbst und können eine Ebene höher angelegt werden. Dies wird im folgenden Beispiel gezeigt.
Konverter für die Verbindung „Sporthallen -> Adressen“ erstellen#
Auf der Ansicht der Klasse „Sporthallen“ auf dem Reiter „Verbindungsklasse“ auf die Verbindung „Sporthallen -> Adressen“ klicken.
Die Ansicht der Verbindung öffnet sich. Noch sind keine Konvertierungen verfügbar.
Auf „Verbindungs-Konvertierung erstellen“ klicken.
Die Ansicht „Neue Verbindungs-Konvertierung erstellen“ öffnet sich.
Die Quelle und die Verbindungsklasse (Struktur), für die eine Konvertierung angelegt werden soll, sind vorausgefüllt. In diese Verbindungsklasse sollen die Objekte hineinkonvertiert werden.
Angegeben werden muss die Quelltabelle - in diesem Fall „q_(laufendenummer) Sporthallen.csv (kompletter Datensatz)“.
Als Name wird im Beispiel als Konvention „<quelle>2<ziel>-><verbindungsziel>“ genutzt, das ergibt „Sporthallen.csv2Sporthallen->Adressen“. Wichtig ist nur, dass eine möglichst gleichbleibende Konvention im eigenen Projekt genutzt wird, um Konverter auch in der Zukunft wiederzufinden.
Wichtig sind die beiden Felder „Linke Join-Bedingung“ und „Rechte Join-Bedingung“.
Die Verbindung ist gerichtet von Sporthallen zu Adressen. Die „Linke Join-Bedingung“ gibt an, wie wir die Daten auf der linken Seite der gerichteten Verbindung erhalten. Die „Rechte Join-Bedingung“ gibt an, wie wir die Daten auf der rechten Seite der gerichteten Verbindung erhalten.
Linke Join-Bedingung einrichten#
Dazu werfen wir einen Blick auf die Quelltabelle der Sporthallen.csv.

Der eindeutige Schlüssel der Sporthallen in der Quelltabelle ist die proc_id
.
In Textform wäre die Anweisung daher folgendermaßen:
Befülle für jede Zeile im Objekt 1 (für die linke = erste Seite) den eindeutigen Schlüssel ndx
mit dem Inhalt der Quelltabellen-Spalte proc_id
. Optional kann zusätzlich angegeben werden, dass proc_id
als Text gehandhabt werden soll.
In SQL-Form ergibt dies folgende Eingabe:
obj1.ndx=q.proc_id::text
Rechte Join-Bedingung einrichten#
Dazu werfen wir einen ersten Blick auf die schon vorhandenen Adressen-Objekte. Adressen sind nur einmal vorhanden, können aber mit beliebigen anderen Objekten verknüpft werden, die eine Adressangabe haben, wie in unserem Beispiel die Sporthallen.
Dazu die Adressen aufrufen und auf „Betrachten“ gehen.

In den schon angelegten Adressen-Objekten ist der eindeutige Schlüssel eine Kombination von Strasse, Hausnummer, PLZ und Ort.

In Sporthallen.csv hingegen gibt es keine einzelne Spalte, die diese Information enthält. Stattdessen verteilt sich die Information auf zwei Spalten: strasse
(enthält Strasse und Hausnummer) und plz_ort
.

Diese beiden Spalten müssen daher verknüpft werden.
In Textform wäre die Anweisung folgendermaßen:
Befülle für jede Zeile im Objekt 2 (für die rechte = zweite Seite) den eindeutigen Schlüssel ndx
mit dem kombinierten Inhalt der Quelltabellen-Spalten strasse
und plz_ort
, mit einem Leerzeichen dazwischen.
In SQL-Form ergibt dies folgende Eingabe:
obj2.ndx=contact(q.strasse, ' '::text, q.plz_ort)
Konfiguration abschließen#
Damit ist die Definition der beiden Joins abgeschlossen. Wenn bei der Konvertierung für eine Zeile die linke Join-Bedingung und die rechte Join-Bedingung erfüllt sind, wird dies als Verbindung zwischen diesen Objekten abgelegt.
Rechts oben auf „Speichern“ klicken.

Die Ansicht kehrt auf die Verbindung „Sporthallen.csv2Sporthallen->Adressen“ zum Reiter „Konvertierungen“ zurück.
Verbindung konvertieren#
Auf „Konvertieren“ klicken.

Eine Prozess-Liste öffnet sich. Diese ist auf den ersten Blick nicht sehr sprechend. Der zuletzt gelaufene Konverter ist unter „converter.executer“ üblicherweise am Ende der Liste zu finden, ggf. an der Uhrzeit orientieren.

Folgendes wird ausgegeben (analog zur Ausgabe beim Konvertieren von Objekten und Attributen):
sourceCount
: Zahl der Verbindungs-Einträge in der Quelltabelle, hier 165upsertCount
: Zahl der Verbindungs-Einträge, die aktualisiert wurden, hier 0 (da die Einträge davor leer waren)insertCount
: Zahl der neu hinzugefügten Verbindungs-Einträge in den Zielobjekten, hier 165 (da die Einträge davor leer waren), d.h. es wurden alle Verbindungs-Einträge der Quelltabelle importierttargetCount
: Zahl der Verbindungs-Einträge insgesamt, hier 165 (da die Einträge davor leer waren)
Über „Zurück“ diese Ansicht verlassen.
Über die Statistik prüfen, dass die Verbindung korrekt konvertiert wurde#
Auf den Reiter „Statistik“ klicken.

Folgendes wird ausgegeben:
Gesamt: Zahl der Verbindungen - es wird sichtbar, dass von den 165 prozessierten Zeilen nur 163 erfolgreich eine Verbindung erhielten. Diese fehlenden Verbindungen stehen auch unter „Nicht verbundene Objekte“.
Darunter sind die Daten nach Sporthallen- und Adressen-Objekten aufgeschlüsselt dargestellt.
Gesamtanzahl Objekte: 165 Sporthallen stehen 68.477 Adressen gegenüber.
Verbundene Objekte: Verbunden wurden 163 Sporthallen und nur 142 Adressen (diese Zahl enthält sowohl einfach als auch mehrfach belegte Adressen).
Mehrfach verbundene Objekte: Es sind 14 Adressen mehrfach belegt, d.h. es befinden sich zwei oder mehr Sporthallen unter derselben Adresse.
Nicht verbundene Objekte: 2 - dies bedeutet, dass zu zwei Sporthallen-Objekten keine passende Adresse gefunden werden. Für diese wird im Folgenden eine Fehleranalyse demonstriert.
Fehleranalyse der zwei nicht mit Adressen verlinkten Sporthallen#
Ein Klick auf die „2“ zeigt die beiden Sporthallen-Objekte, bei denen über die Verbindung keine Adresse eingefügt wurde. (Ggf. die Adressen-Spalte über „Verdeckte Spalten“ hinzufügen, falls diese noch nicht angezeigt wird.)

Fall 1: STO Erlweinstraße 6a - Sporthalle#
Ein Blick in die gefilterten Adress-Objekte zeigt, dass es nur die Hausnummer 6, aber keine 6a gibt.

Als Filter dient folgendes SQL-Statement in der Spalte ndx
:

Fall 2: Emerich Ambros-Ufer 74 - Sporthalle#
Eine Analyse in der Quelltabelle zeigt, dass bei dieser Sporthalle kein Eintrag in plz_ort
existiert, es handelt sich also um einen Fehler in der Quelltabelle.

Ein Blick in die gefilterten Adress-Objekte zeigt, dass der korrekte Ort „01195 Dresden“ wäre.

Hinweise zum Umgang mit inkonsistenten oder fehlerhaften Daten#
Wie mit Dateninkonsistenzen umgegangen werden kann, hängt vom konkreten Kontext ab. Es gibt keine bevorzugte Strategie für Fehlerkorrekturen, da diese von den Daten abhängen und davon, wo diese herkommen, wozu sie in Simplex4TwIS eingespielt werden und was damit danach geschehen soll.
Alle Klassen in Simplex4TwIS sind nicht editierbar, außer sie wurden explizit als editierbar markiert. Das bedeutet, dass in Simplex4TwIS zwar die Konvertierungen ausführen werden, danach aber nicht ein einzelnes Objekt „geöffnet“ werden kann, um Angaben darin korrigieren. Der Hintergrund ist, dass es ansonsten extrem kompliziert werden würde, den Überblick über Änderungen zu behalten, und eine weitere Nutzung der Konverter später zum Überschreiben der lokalen Objekt-Änderungen führen könnte.
Änderungen sollten daher - wenn überhaupt - in den Quelltabellen vorgenommen werden, mit folgenden Einschränkungen:
In größeren Kontexten mit vielen eingespielten Daten ist ggf. das manuelle Ändern einer einzelnen Datei nicht praktikabel.
Falls die Daten aus einer Web-Schnittstelle stammen, hat man keinen Zugriff auf die Ausgangsdaten und kann sie somit nicht ändern. Dann hängt es von den Umständen ab, ob es sinnvoll wäre, die entsprechende datenhaltende Stelle um Korrektur ihrer Daten zu bitten.
Je nach konkretem Problem kann über komplexere Konverter gegangen werden, die passgenau mittels SQL die Daten während der Konvertierung korrigieren. Konkretes Beispiel dazu wäre ein Konverter, der die fehlende PLZ und Ortsangabe bei genau dieser einen Sporthalle „Emerich Ambros-Ufer 74“ ergänzt.
Ergebnis der Konvertierungen in den Sporthallen-Objekten betrachten#
Zurück zur Sporthallen-Objektklasse gehen über „Open Data Spielwiese (Klassen)“ > „Objektklassen“ > „Sporthallen“.
Die Sporthallen-Übersicht öffnet sich.
Rechts oben auf „Betrachten“ klicken, um einen Blick auf die tabellarische Ansicht zu werfen.
Ggf. die Ortsangaben- und Adressen-Spalten über „Verdeckte Spalten“ hinzufügen, falls diese noch nicht angezeigt werden. Für das Laden der Daten dann noch auf das kleine „Reload“-Symbol klicken.
Nach den Konvertierungen sind nun beide Spalten befüllt.
Damit ist das Minimalbeispiel abgeschlossen und alle Quelldaten sind als Objekte und Daten in Simplex4TwIS vorhanden.