Table of Contents
Die Zwiebel Datenstruktur
Um alle verschiedenen Typen von Datenflüssen in einem Programm zusammenzuführen, wurde ein generischer Datentyp definiert. Es ist in eine verschachtelte Feldstruktur, die sogenannte Zwiebel.
Diese Seite führt die verschiedenen Schlüssel und Ihre Bedeutungen zusammen.
Das Prinzip
Eine “Zwiebel” ist eine Ansammlung von Pfaden und deren Werten. Alle diese Pfade beginnen bei der “Zwiebelwurzel”, was bedeutet das relative Pfadbezeichnungen nicht erlaubt sind. Diese Pfade werden aus einer Liste von Namen der verschiedenen Ebenen zusammengestellt und durch ein “/” aufgeteilt. Dies bedeutet, es sieht dem Verzeichnispfad sehr ähnlich:
dies/ist/ein/möglicher/Pfad
Im Gegensatz zu einem gültigen Verzeichnispfad, darf die “Zwiebelstruktur” nicht mit einem führenden “/” beginnen.
Jeder Pfad beinhaltet einen Wert.
Dieser Wert kann entweder ein Basistyp wie eine Zeichenfolge, ein Integer, boolscher Wert oder eine Fließkommazahl, eine Ansammlung von “Zwiebeln” oder einer (Sub)-“Zwiebelstruktur” sein. Eine “Zwiebelklasse” unterstützt Methoden um die Werte zu erhalten, zu setzen und zu löschen.
Weil der Wert dieses Pfads eine “Zwiebel” sein kann, kann der Pfad aufgeteilt werden in einen nach links zeigenden Pfad, welcher eine (Sub)-“Zwiebelstruktur” als Wert zurückgibt, wobei diese (Sub)-“Zwiebelstruktur” dann den verbleibenden (rechten) Teil des Pfades enthält.
Das bedeutet wenn man z. Bsp. “Dies/ist” von dem Pfad “Dies/ist/ein/möglicher/Pfad” wegnimmt, gibt dies eine “Zwiebelstruktur” zurück, welche selbst den Inhalt von “ein/Möglicher/Pfad” enthält. Dies wird benutzt, um sehr einfach Unterteile in eine “zwiebelstruktur” einzubinden oder aus Ihr auszulagern.
Die Namenskonvention
Ein Teil eines solchen Pfades, besteht aus den folgenden Zeichen [a-zA-Z0-9_-] und muss mit einem Buchstaben starten. Normale Teile werden in Kleinschreibweise geschrieben, Wurzelbereiche in Großschreibweise (siehe unten) geschrieben. Sammlungen die intern als Schlüssel/Wert eines Hasharrays dargestellt werden, sind indiziert mit einem führenden “_”, gefolgt von einem kontinuierlich erhöhten Integerwert welcher mit 0 startet. Die Anzahl der eingebundenen Elemente ist ein Integerwert, indiziert mit “_nr”
Die Wurzelnamen
Wie es ihre Absicht ist, vermögen “Zwiebeln” eine breite Palette von möglichen Datensätzen darzustellen. Diese Datensätze ähneln dem was in C einen Struktur oder ein Datensatz in Pascal ist: Eine Struktur von verschiedenen statischen Daten, welche auch andere Sub-Strukturen enthalten können.
Um nun die Handhabung einfacher zu machen, muss folgende Konvention beachtet werden:
Der Name dieser Struktur wird als Wurzelteil des Pfades benutzt, in Großbuchstaben geschrieben. Als ein Beispiel, wie wir die Datenstruktur nutzen, betrachten wir zunächst die Implementation in C:
struct date{ year : integer = 2010; month : integer = 1 ; day : integer = 11 ; dayofweek : string = "Monday "; }
Dies würde in der “Zwiebel” Syntax folgendermassen geschrieben werden
DATE/year = 2010 DATE/month = 1 DATE/day = 1 DATE/dayofweek = "Monday"
Die verschiedenen Wurzeln (Datentypen)
Um eine nahtlose Zusammenarbeit, zwischen all den verschiedenen internen Programmmodulen zu garantieren, muß folgenden Datenstrukturdefinitionen gefolgt werden:
ID
Die ID Struktur umfasst alle Daten, um ein Modul in einem System zu identifizieren.
Details die definiert werden müssen
Name | Typ | opt. | Bedeutung |
---|---|---|---|
name | Zeichenkette | Id des Moduls |
CONFIG
Die CONFIG Struktur wird benutzt, um den Kern in die Lage zu versetzen, den Nutzer etwas konfigurieren zu lassen
Name | Typ | opt. | Bedeutung |
---|---|---|---|
Eigentümer | ID | Id des sendenden Moduls | |
Parameter | Kollektion von Parametern | setzen von Parametern |
PARAMSET
Die PARAMSET Struktur wird benutzt, um dem Modul mitzuteilen, ein Set von gegebenen Parametern zu nutzen. Dies kann zum einen, daß Ergebnis einer CONFIG Anfrage oder einer Startkonfiguration sein, welche durch den Kern aus den Einstellungen gelesen wird und zu den Modulen während der Hochlaufphase gesendet wird.
Name | Typ | opt. | Bedeutung |
---|---|---|---|
Eigentümer | ID | ||
Parameter | Kollektion von Parametern | setzen von Parametern |
PARAM
Die PARAM Struktur wird benutzt, um Konfigurationsdaten zu transferieren. Die optionellen Daten helfen die Nutzerschnittstelle für das Konfigurationsfenster zu definieren. Sie wird nicht gebraucht, wenn einige Konfigurationsdaten zu einem Modul gesendet werden.
Name | Typ | opt. | Bedeutung |
---|---|---|---|
name | Zeichenkette | Name dieses Parameters | |
typ | Zeichenkette | x | f=Fließkommazahl, i = Integer , s = Zeichenkette , sf = Dateiname , c = Combobox , radiobutton = Wie eine Combobox, aber mit einer anderen Präsentation, cm = Combobox mit Mehrfachauswahl, b = Boolscher Wert (checkbox), a = Alarm |
actValue | base type | Repräsentation des aktuellen Werte(s), unterteilt durch ; im Fall eines Mehrfachauswahlelements | |
loRange | base Type | x | niedrigster Wert eines erlaubten Bereiches. Für Comboboxen, enthält dieses Feld die mögliche Auswahl, getrennt durch |. Für Zeichenketten kann dieses einen RegEx enthalten, welcher das erlaubte Ergebis beschreibt. Für Alarme, kann dies die Texte der Antwortknöpfe enthalten, getrennt durch |. |
upRange | Basistyp | x | höchster Wert eines erlaubten Bereiches |
tooltip | Zeichenkette | x | zusätzlicher Text welcher dem Nutzer einen Hinweis oder Hilfe für diesen Parameter gibt |
fileexist | Boolscher Wert | x | Im Fall das typ=fn für FileSelectDialogs: Die Datei muss schon existieren, um sie öffnen zu können |
VALUE
Die VALUE Struktur enthält einen Anzeigewert
Name | Typ | opt. | Bedeutung |
---|---|---|---|
Sender | ID | Sender dieses Wertes | |
to | ID | Empfänger dieses Wertes | |
typ | Zeichenkette | f=Fließkommazahl, i = Integer , s = Zeichenkette , c = Combobox , Radiobutton = wie eine Combobox, aber mit einer anderen Präsentation, cm = Combobox mit einer Mehrfachauswahl, b = Boolscher Wert (Checkbox) | |
rawValue | Basistyp | Repräsentation der(s) aktuellen Werte(s), unterteilt durch ; Im Fall eines Mehrfachauswahlelements | |
Unit | Zeichenkette | Einheit des Wertes | |
ValueString | Zeichenkette | Zeichenkettendarstellung des Wertes + Einheit | |
loRange | Basistyp | x | Niedrigster Wert eines erlaubten Bereiches. Für Comboboxen, enthält dieses Feld die Auswahlmöglichkeiten, getrennt mit |. Für Zeichenketten kann dieses einen RegEx enthalten, welcher das erlaubte Ergebis beschreibt |
upRange | Basistyp | x | Höchster Wert eines erlaubten Bereiches |
step | Basistyp | x | Schrittweite in der der Wert geändert werden kann (z.Bsp. für Boxen mit Schieber) |
PAGE
Die PAGE Struktur wird benutzt, um vom UI (Userinterface) eine “Landefläche” zu erzeugen, auf der dann die Visualisierer plaziert werden.
Name | Typ | opt. | Bedeutung |
---|---|---|---|
Eigentümer | ID | Id des sendenden Moduls | |
name | Zeichenkette | Titel der angeforderten Seite (Landefäche) |
PAGEDONE
Die PAGEDONE Struktur wird benutzt, um dem UI mitzuteilen, daß das Plazieren der Visualisierer abgeschlossen ist.
Name | Typ | opt. | Bedeutung |
---|---|---|---|
Eigentümer | ID | Id des sendenden Moduls |
UPDATE
Die UPDATE Struktur teilt dem Eigentümer eines Visualisierers mit, daß der Nutzer eine Aktualisierung angefragt hat, z. Bsp. mit dem Drücken eines Knopfes oder dem Doppelklick auf einen Wert
Name | Typ | opt. | Bedeutung |
---|---|---|---|
vis | ID | Id des sendenden Visualisierers | |
to | ID | Name vom Eigentümer des Visualisierers | |
actValue | Zeichenkette | aktuell angezeigter Wert | |
updType | int | Aktualisierungstyp (wie eine Anforderung die vom Nutzer kam oder eine periodische Aktualisierung) | |
optid | Zeichenkette | X | optionale ID als zusätzliche Identifikation, falls benötigt |
UPDEVENT
Die UPDEVENT Struktur teilt dem Visualisierer mit, welchen Ereignissen es erlaubt ist, eine Aktualisierung auszulösen. Falls es nicht gesetzt ist, erfährt der Visualisierer nur eine Aktualisierung, wenn dies durch den Nutzer manuell initiert wurde. UPDEVENT ist ein Set von Ereignissen, welche unterteilt sind durch |
Ereignis | Bedeutung |
---|---|
UPDATE | Die Aktualisierungsanfrage wird ausgelöst, wenn der Nutzer eine globale Listenaktualisierung anfragt |
TIMER | Die Aktualisierungsanfrage wird in einem Intervall ausgelöst, in dem der globale Zeitgeber aktiv ist |
VISUALIZE
Die VISUALIZE Struktur wird benutzt, um vom UI das Erzeugen eines Visualisierers zu initiieren. Es ist dann von der Imlementierung abhängig, einen bereits existierenden Visualisierer (Listenansicht) hinzuzufügen oder ein neues Objekt( z.Bsp ein Knopf) zu erzeugen
Name | Typ | opt. | Bedeutung |
---|---|---|---|
Eigentümer | ID | Id des sendenden Moduls | |
name | Zeichenkette | Name des angeforderten Visualisierers | |
type | Zeichenkette | Typ des angeforderten Visualisierers | |
theme | Zeichenkette | x | Name des Motivs welches benutzt werden soll, falls es nicht mit dem Standartmotiv übereinstimmt |
canvas | Zeichenkette | Name der Flächen auf denen der Visualisierer erscheinen sollte | |
value | VALUE | Startwert | |
tooltip | Zeichenkette | zusätzlicher Text, der eine Information über diesen Wert transportiert | |
updevent | UPDEVENT | x | erlaubte Aktualisierungsereignisse für den Visualisierer |
optid | Zeichenkette | x | optionale ID als zusätzliche Identifikation, falls benötigt |