Spec: Namenssystem
Diese Seite spezifiziert das Namenssystem, das in der Textengine v0.3 implementiert ist.
Lexik
Ein Bezeichner ist eine Reihe von Unicode-Zeichen, die aus einem Wort oder aus mehreren Wörtern besteht. Ein Wort besteht aus alphabetischen oder numerischen Zeichen. Wörter werden innerhalb eines Bezeichners mit Leerraum getrennt. Leerraum ist jedes Vorkommen von einem oder mehreren aufeinanderfolgenden Leer-, Tabulator- oder Zeilenumbruchzeichen.
Ein Name besteht in einer geordneten Reihe von Bezeichnern.
Semantik
Jede Instanz der Textengine hat genau einen Namensraum.
Jede Texteinheit hat entweder keinen oder einen Bezeichner. Eine Texteinheit hat genau dann Namen, wenn sie einen Bezeichner hat. Der Name setzt sich aus ihrem Bezeichner und den Bezeichnern ihrer als Elternteil übergeordneten Texteinheiten zusammen. Eine Texteinheit hat dann mehrere Namen, wenn sie mehrere Elternteile hat.
Ein Namensraum besteht aus Namen und ihrer Zuordnung zu Texteinheiten. Jeder Name entspricht genau einer Texteinheit.
Die Namen in einem Namensraum sind hierarchisch angeordnet. Die Namenshierarchie ist die Hierarchie der Bezeichner. Sie entspricht einer Untermenge der Hierarchie der Texteinheiten, die das Referenzgenus Elternteil
definiert, nämlich der Untermenge aller Texteinheiten, die einen Bezeichner haben.
Zwei Namen sind gleich, wenn sie aus gleichen Bezeichnern in derselben Reihenfolge bestehen. Zwei Bezeichner sind gleich, wenn sie aus gleichen Wörtern in derselben Reihenfolge bestehen. Zwei Wörter sind gleich, wenn sie aus gleichen Zeichen in derselben Reihenfolge bestehen.
Namensauflösung
Die Namensauflösung ist der Prozess, in einem Namensraum ausgehend von einem Namen zu derjenigen Texteinheit zu kommen, die einen passenden Namen hat.
Die Auflösung eines Namens findet immer in einem bestimmten Kontext statt. Der Namenskontext besteht in einer geordneten Reihe von Namen. Der Namenskontext wird teils explizit durch den Nutzer, teils implizit durch den Auflösungsalgorithmus bestimmt.
Wenn der aufzulösende Name einem Namen im Namensraum gleicht, so ist das der passende Name im Namensraum.
Wenn ein Name, der sich als Verkettung von einem Namen im Namenskontext und dem aufzulösenden Namen, einem Namen im Namensraum gleicht, so ist das der passende Name im Namensraum.
Die Namen aus dem Namenskontext werden in umgekehrter Reihenfolge geprüft, so dass der letzte passende in der Reihe als Treffer gilt.
Konfiguration
Die Namen können unterschiedlich dargestellt werden, das gilt für das Parsen wie für das Formatieren. Konfigurieren lässt sich folgendes:
- Separator: Zeichen, das zwischen den Bezeichnern steht.
- Big-/Little-Endian: In welcher Reihenfolge die Bezeichner innerhalb eines Namens dargestellt werden (übergeordnete Ebene zuerst bzw. am Ende).
- Vollqualifizierte Namen: Ob immer alle Bezeichner eines Namens ausgegeben werden, oder nur die unbedingt nötigen für die Auflösung im Kontext.
Beispiele:
Separator „.
”, Little-Endian: www.philosophisches-lesen.de
Separator „/
”, Big-Endian: /home/francesc/textengine.sym
Kontext-abhängige Namen: ~name { ~char #chars.a; };
Vollqualifizierte Namen: ~name { ~system.char #system.chars.a; };