Graph-IT

Das Graph-Datenmodell

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.

Knoten, Knotenknoten und Verknüpfungen

Knoten, Knotenknoten und Verknüpfungen

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 typen/namen 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.

Attributknoten

Attributknoten und Datentypen

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.

Daten- und Aktionfunktionen

Daten- und Aktionfunktionen

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.

Graphmodule

Graphmodule

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.