Schritt-für-Schritt: Konvertieren eines Sachattributs

Folgende Schritte sind für die Definition einer Konvertierung zu erledigen:

  1. Das Sachattribut der Konvertierung auswählen.
  2. Eine Quelltabelle (q), deren Daten für die Konvertierung benutzt werden sollen, auswählen.
  3. (optional) einen Filter definieren.
  4. Konvertierungsregeln für den Wert definieren.
  5. Zuordnung zu den Objekten definieren sowie die Breite der Klasse festlegen.
  6. Eine Aktualisierungsstrategie für die Konvertierung festlegen.
  7. Die Konvertierung möglichst genau beschreiben.
  8. Die Konvertierung durchführen und das Ergebnis kontrollieren.

Diese Schritte werden im Folgenden anhand des Beispiels durchgegangen. Am Ende des Kapitels findet sich ein Schema des Ablaufs der Konvertierung.

Voraussetzungen

  • Es muss sichergestellt sein, dass die Objekte der Klasse, die sie mit Sachattributen anreichern möchten, bereits existieren, denn es können nur bereits vorhandene Objekte mit dem Sachattribut angereichert werden. Im vorliegenden Beispiel ist das bereits passiert, wie im Tutorial zur Klassenkonvertierung beschrieben.
  • Konvertierungen von Sachattributen können als unabhängige Konvertierungen definiert werden (wie im folgenden Tutorial) oder mit einer Objektkonvertierung verbunden werden.

Start

Detailansicht der Klasse

Im vorhergegangenen Tutorial zur Definition von Sachattributen wurden für die Klasse Gemeinden bereits vier Sachattribute angelegt. Diese werden in der Detailsicht der Klasse aufgelistet:

  • Die Fläche der Gemeinde in m² (eine Fließkommazahl).
  • Die Bevölkerung der Gemeinde (eine Ganzzahl).
  • Die (bzw. eine) Postleitzahl der Gemeinde (eine Zeichenkette).
  • Der geographische Mittelpunkt der Gemeinde (eine Punktgeometrie).

Im folgenden Tutorial wird eine Konvertierung für das oberste Sachattribut ausgefüllt und durchgeführt. Die übrigen können weitgehend analog behandelt werden, sie werden an einigen Stellen kurz herangezogen, um Besonderheiten aufzuzeigen.

Übersicht der Konvertierungen der Klasse

Der Reiter zu den Konvertierungen zu dieser Klasse zeigt den Stand zum Abschluss des vorhergegangenen Tutorial zur Objektkonvertierung an: es wurde eine Objektkonvertierung definiert und durchgeführt, d.h. die Gemeindeobjekte liegen bereit, um mit weiteren Sachattributen angereichert zu werden. Für die Sachattribute wurde aber noch keine Konvertierung definiert, weder verbunden mit der Objektkonvertierung noch alleine.

Durch Auswählen des Buttons "new attribute conversion" öffnet sich ein Formular, das nun die Definition einer neuen Konvertierung eines Sachattributs ermöglicht. Diese Konvertierung ist vollständig losgelöst von der im Tutorial zur Objektkonvertierung beschriebenen Objektkonvertierung.

1. Das Sachattribut der Konvertierung auswählen

Zu allererst muss festgelegt werden, welches Sachattribut der Klasse  durch die Konvertierung befüllt werden soll. Das Feld "Attribute" bietet in einem Dropdown alle definierten Sachattribute der Klasse zur Auswahl an.

2. Eine Quelltabelle auswählen

Als nächstes muss eine Quelltabelle für die Konvertierung ausgewählt werden. Dies geschieht durch ein Dropdown-Menü im Feld "Source Table". Im Dropdown sind sämtliche in Simplex4Data verfügbaren Quelltabellen aufgelistet.

An dieser Stelle wird die Quelltabelle q_00000000900008 ausgewählt. Diese Tabelle ist die Datenlieferantin der Objektkonvertierung, d.h. aus ihr wurden die Gemeindeobjekte erzeugt. Mittels Sachattributen können alle wertvollen Informationen, die nicht in den Standardfeldern der Gemeindeobjekte untergebracht werden konnten, eingelesen werden, um die Objekte anzureichern.

3. (optional) einen Filter definieren

Wird die Konvertierung ausgeführt, wird die Quelltabelle zeilenweise eingelesen und es wird versucht, aus jeder Zeile ein Sachattribut zu erzeugen, den in "Value" (siehe unten) definierten Regeln folgend. Mittels des Feldes "Filter" können Regeln mit Bezug auf die Quelltabelle als "q" festgelegt werden, um bestimmte Zeilen zu überspringen.

Hier wird derselbe Filter verwendet, der auch für die Objektkonvertierung benutzt wurde, denn:

  • Diese Konvertierung nutzt dieselbe Quelltabelle.
  • Die Sachattribute zu den Objekten befinden sich in denselben Zeilen wie die in der Objektkonvertierung als Standardfelder ausgelesenen Daten.
  • Diese Konvertierung kann nur die durch die Objektkonvertierung erzeugten Objekte mit Daten anreichern.
  • Es gibt keine problematischen Ergebnisse in der für "Value" definierten Regel, die aussortiert werden müssen (z.B. symbolische Werte mit Sonderbedeutungen, z.B. 99999 für "unbekannter Wert").

4. Konvertierungsregeln für den Wert definieren

Nun kommt der Punkt, um den Wert des Sachattributs selbst zu definieren: Welcher Wert genau ist "Fläche der Gemeinde in m²"? Das muss im Feld "Value" als Regel formuliert werden; es stehen alle Spalten der Quelltabelle "q" zur Verfügung.

Häufig kann einfach eine Spalte ausgewählt werden, deren Wert dann 1:1 übernommen wird, hier z.B. für das Sachattribut "Bevölkerung":

Manchmal sind aber auch komplexe Operationen nötig, die mehrere Felder regelgeleitet zusammenfügen, wie im Tutorial zur Objektkonvertierung für das Standardfeld "ndx" gesehen. Ebenso ist es für das Sachattribut "Mittelpunkt der Gemeinde". Da hier eine Geometrie (komplexer Datentyp) aus mehreren Spalten der Quelltabelle mit Fließkommazahlen zusammengefügt wird:

Für das als durchgängiges Beispiel verwendete Sachattribut "Fläche der Gemeinde in m²" kann eine einzelne Spalte der Quelltabelle ausgewählt werden.

Das Zahnrad rechts eröffnet drei zusätzliche Optionen für die Konvertierungsregel:

  • "trim": Sollen Leerzeichen am Anfang und Ende des Werts ignoriert werden? (Nur für Spalten der Quelltabelle mit den Typen "text" oder "varchar" relevant.)
  • "nullifempty": Sollen leere Werte in der Quelltabelle als Nullwerte interpretiert werden? (Notwendig, wenn es leeren Werte in der Quelltabelle gibt.)
  • "forcetype": Soll der Datentyp des Sachattributs explizit gecastet werden? (Notwendig, wenn der Typ der Quelltabelle nicht dem des Sachattributs entspricht und die in "Value" Definierte Regel kein explizites Casting enthält)

-> Für das Beispiel wurden folgende Festlegungen getroffen:

  • trim = OFF (Für das Beispiel nicht nötig bzw. möglich, da die Spalte "q.flaeche_km2" der Quelltabelle Typ "integer" ist)
  • nullifempty = ON (Für einige Sonderfälle (z.B. unbewohnte Gebiete, Meersabschnitte) gibt es keinen Wert in der Spalte "q.flaeche_km2" der Quelltabelle)
  • forcetype = OFF (Für das Beispiel nicht nötig, da die Spalte "q.flaeche_km2" der Quelltabelle schon Typ "integer" ist.)

5. Zuordnung zu den Objekten definieren sowie die Breite der Klasse festlegen

Ein wichtiger Schritt ist die Zuordnung der Zeilen der Quelltabelle zu den Objekten der Klasse. Zu welcher Gemeinde gehört welche Flächenangabe? Das wird mit dem Feld "Join Condition" beschrieben. Es entspricht den Feldern "fromJoin" und "toJoin" der Verbindungskonvertierungen und definiert die Zuordnung über eine Regel.

Es stehen die Quelltabelle "q" und die Objekttabelle "obj" zur Verfügung, um diese Regel zu definieren. Um die Objekte eindeutig zu bestimmen (jede Gemeinde soll genau ihren einen Wert erhalten), sollte diese Regel wenn möglich auf das Standardfeld "ndx" des Objekts bezogen sein.

-> In diesem Beispiel geschieht dies auch, es kann direkt die Regel der Bildung des Standardfelds "ndx" aus der Objektkonvertierung übernommen werden.

Das Feld "Join Views" regelt, ob die Sachattribute der Objekttabelle für die Konvertierung herangezogen werden sollen, oder nicht. Es entspricht dem Feld "joinViews" der Verbindungskonvertierungen, mit nur einer beteiligten Objekttabelle.

  • Werden nur die Standardfelder der Objekte benötigt, um "Filter" und "Join Condition" zu beschreiben, kann der Wert "no" gewählt werden, was die Ausführung der Konvertierung u. U. etwas schneller macht.
  • Werden Sachattribute der Objekte benötigt, um "Filter" und "Join Condition" zu beschreiben (z.B. bei geometrischen Operationen), muss der Wert "yes" sein.
  • Im Zweifel schadet der Wert "yes" nicht.

-> Da im Beispiel das Standardfeld "ndx" ausreicht, kann der Wert auf "no" gesetzt werden.

6. Eine Aktualisierungsstrategie für die Konvertierung festlegen

Unter "Updatemode" muss eine Aktualisierungsstrategie ausgewählt werden, die für die zukünftige Verwaltung der Daten relevant ist, siehe dazu den Artikel zum Datenmodell, in dem die Aktualisierungsstrategien beschrieben und erklärt werden.

Der initiale Wert "archive" passt in den meisten Fällen und kann i.d.R. einfach übernommen werden.

Für dieses Beispiel gelten dieselben Überlegungen wie sie für die Objektkonversion beschrieben wurden.

7. Die Konvertierung möglichst genau beschreiben

Nun ist die Konvertierung aus technischer Sicht vollständig definiert. Was noch fehlt, ist eine sinnvolle Beschreibung. Es stehen die Felder "Name" und "Comment" zur Verfügung, um die Konvertierung zu beschreiben. Um langfristig den Überblick zu behalten, lohnt sich eine aussagekräftige Beschreibung.

  • Das Feld "Name" ist u.a. in der Übersicht aller Konvertierungen zu einem Objekt (vgl. unten) zu sehen.
  • Das Feld "Comment" kann beliebig viel Text fassen, hier können detaillierte Beschreibungen stehen (z.B. warum bestimmte Felder so und nicht anders definiert wurden).

Gerade wenn mehrere Konvertierungen definiert werden (was aus verschiedenen Gründen sinnvoll ist und häufig passiert), sind diese beiden Felder wertvoll, um die Konvertierungen auseinander halten zu können.

8. Die Konvertierung durchführen und das Ergebnis kontrollieren.

8.1. Durchführen, Prozessergebnis der Konversion

Im Ergebnis ist das Konvertierungsformular nun folgendermaßen befüllt:

Durch den Button "Submit" wird die Konvertierung abgespeichert. Sie  taucht nun als unabhängige Sachattributskonvertierung in der Liste der Konvertierungen der Klasse auf. Mittels des Kopfes "Convert" kann die Konvertierung ausgeführt werden.

Das Interface leitet auf eine neue Seite um, die das Ergebnis der durchgeführten Konvertierung anzeigt:

Die Angaben haben folgende Bedeutung:

  • source count: So viele Zeilen hat die Quelltabelle.
  • target count: So viele Zeilen hat die Sachattributstabelle, nachdem die Konversion gelaufen ist, d.h. so viele Werte für "Fläche der Gemeinde in m²" konnten gewonnen werden und bereichern nun Gemeindeobjekte.
  • converted objects: So viele Elemente der Zielstruktur (d.h. der Sachattributstabelle) wurden in dieser Konvertierung neu eingelesen ("insert") bzw. aktualisiert oder neu eingelesen ("upsert"), durch Aktualisierungen überschrieben und als altes ergebnis archiviert ("archive") // stimmen diese Beschreibungen??

Daraus lassen sich u.a. folgende Sachverhalte ablesen:

  • Der source count entspricht extakt demjenigen aus dem vorherigen Tutorial zur Objektkonvertierung. Da dieselbe Quelltabelle mit demselben Filter verwendet wurde, war dies zu erwarten.
  • Es wurden 0 existierende Werte für "Fläche der Gemeinde in m²" archiviert, was nicht überrascht, da es bisher keine Einträge gab.
  • Der target count entspricht mit 10997 exakt dem target count der Objektkonvertierung. Da jedes Objekt jedes Sachattribut nur einen gültigen wert pro Sachattribut hat und laut "converted Objects" keine Werte archiviert wurden, bedeutet das, dass jedem existierenden Gemeindeobjekt exakt ein Wert zugeorndet werden konnte. Alle Gemeinden haben nun einen "Fläche der Gemeinde in m²".

Eine tiefergreifende Qualitätsanalyse kann von diesen Ergebnissen ausgehen und sie weiter vertiefen.

7.2 angereicherte Gemeindeobjekte

// TODO