User Tools

Site Tools


de:doc:rfc_onion

This is an old revision of the document!


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 sind ziemlich gleich zu dem was in C einen Struktur ist oder ein Datensatz in Pascal: 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 as 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 ";
}

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, müssen folgende 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 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 das 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. Es 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 diese Datei ö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 base Type x lowest value of the allowed range. For comboboxes, this field contains the possible selections, seperated by |. For strings this field might include a RegEx, which describes the allowed result
upRange base type x highest value of the allowed range
step base type x step rate in which the value can be changed (e.g. for slider boxes)

PAGE

The PAGE struct is used to request the UI to create a “landing surface” to place some visualizers onto.

Name Type opt. Meaning
owner ID Id of the sending Module
name String title of the requested page

PAGEDONE

The PAGEDONE struct is used to tell the UI that the placement of the visualizers is done.

Name Type opt. Meaning
owner ID Id of the sending Module

UPDATE

The UPDATE struct tells the owner of a visualizer that the user has requested an update by e.g. pressing a button or do a double click on an value

Name Type opt. Meaning
vis ID Id of the sending visualizer
to ID name of the owner of the visualizer
actValue String actual shown value
updType int type of the update (like request came from user or it is a periodic update)
optid String X optional ID as add. identification, if needed

UPDEVENT

The UPDEVENT tells the visualizer which events are allowed to send an update request. If not set, the visualizer sends only an update request on manual user request. UPDEVENT is a set of events, which are seperated by |

Event Meaning
UPDATE the update request is send when the user request a global list update
TIMER the update request is send in an interval if the global timer is active

VISUALIZE

The VISUALIZE struct is used to request the UI to create a visualizer. It then up to the implementation of this visualizer to add that visualization to an already existing visualizer (in a listview for example) or to create a new object (as for a button)

Name Type opt. Meaning
owner ID Id of the sending Module
name String name of the requested visualizer
type String type of the requested visualizer
theme String x name of the theme to be used, if different from default theme
canvas String name of the canvas, on which that visualizer should appear
value VALUE initial value
tooltip String some additional text which might gives some information about this value
updevent UPDEVENT x allowed update events of this visualizer
optid String x optional ID as add. identification, if needed
This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies
de/doc/rfc_onion.1411847414.txt.gz · Last modified: 2014/09/27 21:50 by wsauer