Der Graph ist ein Datenbank-System, in dem Inhalte in Knoten mit Attributen und Verknüpfungen organisiert werden.
Er ist selbstbeschreibend: Jeder Graph enthält eine Menge von Knoten-Typen, deren Instanzen definieren, welche Knoten-, Attribut- und Kanten-Typen in diesem Graphen existieren.
Neben der Struktur wird auch das Verhalten eines Graphen in ihm selbst beschrieben. Datenfunktionen definieren, wie Attribute aus den Verknüpfungen und Attributen einer Knoten-Instanz und ihrer Nachbarn berechnet werden, und Aktionfunktionen definieren komplexeres Verhalten, das auch das Anlegen, Löschen, Ver- und Entknüpfen von Knoten-Instanzen umfassen kann.
Instanzen des Knoten-Typs knoten
geben an, welche Knoten-Typen es in
diesem Graphen gibt.
Jeder Graph enthält dabei die selbstbeschreibenden Knoten-Typen wie z.B.
knoten
. knotenknoten
, verknuepfung
und gruppe
.
Darüber hinaus enthalten Graphen knoten
-Instanzen für die Konzepte der
jeweiligen Anwendungs-Domänen wie z.B. rechnung
, kunde
oder
buchungsmonat
.
Instanzen zweier verschiedener Knoten-Typen können verknüpft werden, wenn
es eine Instanz des Knoten-Typs knotenknoten
gibt, die mit beiden
Knoten-Typen verknüpft ist.
Jede knotenknoten
-Instanz ist mit genau zwei knoten
-Instanzen verknüpft
und ihr typ
/name
ist durch die typ
en/name
n dieser beiden
knoten
-Instanzen in lexikographischer Reihenfolge verbunden mit _
gegeben.
Der verknuepfungstyp
ist 11
, 1n
, n1
oder nn
und gibt an, ob in
eine oder beide Richtungen jeweils nur maximal eine Instanz des anderen
Knoten-Typen verknüpft werden kann (zu 1).
Für jede knotenknoten
-Instanz werden automatisch zwei
verknuepfung
-Instanzen erzeugt, die die beiden Richtungen repräsentieren,
in die eine Verknüpfung navigiert werden kann.
Verknüpfungen zwischen Instanzen des gleichen Knoten-Typs sind im Graphen ebenso wenig möglich wie mehrere Knotenknoten-Typen zwischen den gleichen Knoten-Typen. Solche Strukturen können aber durch das Definieren entsprechender Zwischen-Knoten-Typen modelliert werden.
Knotenknoten, die vom gleichen Quell-Knoten-Typ aus zu 1 sind, können zu
Gruppen zusammengefasst werden.
Dies bedeutet, dass für jede Instanz des Quell-Knoten-Typs nur für einen
dieser Knotenknoten-Typen eine Instanz verknüpft werden kann.
Zum Beispiel könnte an einem Knoten-Typen buchungssatz
die Gruppe
buchungsbeleg
definiert werden, die sicherstellt, dass nur entweder
maximal eine eingangsrechnung
oder maximal eine ausgangsrechnung
, aber
nicht beide verknüpft sind.
Instanzen des Knoten-Typs attributknoten
ermöglichen es, Datenwerte an
Instanzen anzugeben.
Eine attributknoten
-Instanz ist dabei mit genau einem Knoten und genau
einem Attribut verknüpft.
Das Attribut gibt nicht nur den typ
, also die Bezeichnung, sondern auch
den Datentyp an.
Mögliche Datentypen sind weitgehend fest durch die von der unterliegenden
Datenbank zur Verfügung gestellten vorgegeben, wobei zusätzlich Dateien im
Dateisystem als Datentyp möglich sind.
Diese Unterscheidung wird durch zwei unterschiedliche
speicherort
-Instanzen für die Datenbank und das Dateisystem modelliert.
Optional können, vor allem für Text- und Datei-Attribute,
mimetype
-Instanzen verknüpft werden, um den MIME-/Datei-Typen des Inhalts
zu definieren.
Vor allem für numerische Attribute können einheit
-Instanzen verknüpft
werden, die die Einheit der Attribut-Werte angeben.
Attributknoten können als eindeutig
definiert werden, was bedeutet, dass
kein Attribut-Wert doppelt an zwei verschiedenen Instanzen im gleichen
Graphen vorkommen darf.
Genau einer der eindeutigen Attributknoten wird als primaer
definiert.
Dieser ist dafür vorgesehen, als übliche Identifikation für Instanzen
dieses Knoten-Typs verwendet zu werden.
Das Verhalten eines Graphen wird durch Daten- und Aktionfunktionen definiert.
Eine datenfunktion
berechnet den Wert eines Attributknotens für eine
Instanz aus anderen Werten an der gleichen oder direkt verknüpften
Instanzen.
Die Implementierung des Graphen stellt dabei sicher, dass eine
Neuberechnung angestoßen wird, wenn sich einer der eingehenden Werte
ändert.
Hierzu werden durch Analyse des Codes der Datenfunktion automatisch
benutztattributknoten
-Instanzen zwischen einer Datenfunktion und von ihr
ausgelesenen Attributknoten erzeugt und verknüpft.
Außerdem werden Knotenknoten, deren Instanzen die Berechnung beeinflussen
können mit den jeweiligen Datenfunktionen verknüpft.
Datenfunktionen sind in der erlaubten Funktionalität erheblich eingeschränkt. Sie dürfen keine Seiteneffekte haben und nur zu direkt verknüpften Instanzen, aber nicht darüber hinaus navigieren.
Instanzen von aktionfunktion
können für weniger eingeschränkte
Funktionalität verwendet werden.
Sie können beliebig weit durch den Graphen navigieren, Instanzen ver- und
entknüpfen, Attributknoten-Werte setzen und auch Funktionalität mit
Seiteneffekten außerhalb des Graphen aufrufen oder Daten von dort abfragen.
Sie können mit Attributknoten als Trigger verknüpft sein, was bedeutet, dass eine Wert-Änderung dieses Attributknotens eine Ausführung der Aktionfunktion auf der gleichen Instanz auslöst.
Alle Konzepte des Graphen werden durch Instanzen des Knoten-Typs
graphmodul
organisiert.
Alle bisherigen Konzepte müssen zu einem Graphmodul gehören, wobei Knoten
und ihre Knoten- und Attributknoten nicht unbedingt im gleichen Graphmodul
liegen müssen.
Graphmodule können weitere Strukturen zu bestehenden Knoten-Typen anderer
Graphmodule hinzufügen.
Jedes Graphmodul hat neben seinem Namen ein ebenfalls eindeutiges, aus zwei
Zeichen bestehendes prefix
.
Alle Knoten-Typen dieses Graphmoduls sollen mit diesem Präfix beginnen.
Wenn ein Graphmodul lokal
ist, sollen keine Instanzen von Knoten-Typen in
diesem Graphmodul zu anderen Graphen übertragbar sein.
Die Eigenschaft lokal
zu sein, kann auch für einzelne Knoten- und
Attributknotentypen gesetzt werden.
Ein Graphmodul soll in genau einem Graphen seine Quelle haben.
In diesem Graphen ist für dieses Graphmodul dann quelle
auf true
gesetzt, in allen anderen Graphen auf false
.
Änderungen an Instanzen dieses Graphmoduls müssen in diesem Graphen
vorgenommen und zu den anderen Graphen, die dieses Graphmodul verwenden,
dann nur noch im Paket verteilt werden.
Ein Graphmodul kann als singulaer
definiert sein.
In diesem Fall ist nicht nur quelle
gesetzt, sondern es gibt keine
anderen Graphen, die dieses Graphmodul auch verwenden.
Diese Eigenschaft wird zusätzlich dadurch markiert, dass das Präfix an
zweiter Stelle eine Ziffer hat.
Die Konzepte des grundlegenden Datenmodells befinden sich alle im
Graphmodul graph
mit dem Präfix gr
.
(Die bisherigen Konzepte müssen also eigentlich grKnoten
,
grKnotenknoten
, grDatenfunktion
, usw. heißen.)
Außerdem können Graphmodule graphmodulservice
- und
sessionvariable
-Instanzen enthalten.
Diese Konzepte ermöglichen die Interaktion mit der Welt außerhalb des
Graphen.
Services können beliebig komplexe Implementierungen, auch unter Benutzung
externer Bibliotheken, zum Aufruf aus Aktionfunktionen zur Verfügung
stellen, während Session-Variablen dazu verwendet werden können, Werte,
deren Bedeutung nicht innerhalb des Graphen liegt, wie beispielsweise den
aktuellen Standort, in einer Graph-Session zu speichern und auszulesen.