Seminararbeit
von
Alexander Selzer
aus
Aspach
vorgelegt am
Lehrstuhl für Praktische Informatik IV
Prof. Dr. Effelsberg
Fakultät für Mathematik und Informatik
Universität Mannheim
Januar 1999
2. Die Verwendung von Datenbanken
3. Embedded SQL und Server Side Includes
3.1 Embedded SQL4. Weiterführende Gedanken3.1.1 VRML Syntax3.2 Server Side Includes3.2.1 Syntax
5. Vorhandene Implementierungen
Anhang A Tabelle der Fehlercodes
Als mögliche Anwendungen kann man sich die Darstellung von chemischen Molekülen oder des Belegungsplans einer Messehalle vorstellen. Diese Beispiele machen auch deutlich, daß der Datenhaltung bei der Gestaltung von komplexen dreidimensionalen Szenen eine zentrale Rolle zukommt. Deshalb werden in dieser Arbeit die Mechanismen der VRML zum Datenbankzugriff beschrieben.
Um in einer VRML-Anwendung auf eine Datenbank zugreifen zu können,
existieren zwei Vorschläge der Database Working Group: Embedded
SQL (auch SQL-Scripting genannt) und Server
Side Includes (auch ServerRedirect genannt). Beide werden in Kapitel
3 ausführlich beschrieben.
Davon ausgehend stellt sich die Frage, wie man aus den Informationen,
die in der Datenbank gespeichert sind, eine VRML-Szene generieren kann.
Dazu wird ein Vorschlag in Kapitel 4 gemacht.
Die Datenbank erfüllt in Verbindung mit VRML vor allem die drei folgenden Funktionen:
Erstens verwaltet sie die Anwendungsdaten wie dies auch in normalen Datenbankanwendungen geschieht.
Zweitens speichert sie die Bestandteile einer Szene, die nicht innerhalb der Szenenbeschreibung beschrieben werden können (z.B. Grafiken oder Audiodateien).
Drittens können mit Hilfe der Datenbank Teilszenen gespeichert
werden, die häufiger verwendet werden.
Zwei unterschiedliche Architekturen einer Datenbankanwendung sind möglich.
Bei der zweischichtigen Architektur greift der VRML-Browser direkt auf
die Datenbank zu. Diese Architektur ist vor allem für den Einsatz
in einem Intranet geeignet, wenn Sicherheitsaspekte keine so große
Rolle spielen. Bei der dreischichtigen Architektur wird über einen
Web-Server auf die Datenbank zugegriffen. Bei Internet-Anwendungen wird
dadurch der Einsatz einer Firewall ermöglicht, um die Sicherheit der
Datenbank garantieren zu können. Mit der Embedded SQL Technik, kann
sowohl eine zwei- als auch dreischichtige Architektur implementiert werden.
Der Einsatz des ServerRedirect Knotens ist nur in Verbindung mit einem
Web Server möglich, der diese Technik unterstützt.
Abbildung 1 zeigt das Modell einer dreischichtigen Datenbankanwendung.
Die oberste Schicht bildet der Browser mit VRML-PlugIn. Darauf läuft die Anwendung, mit der der Anwender auf die Datenbank zugreift.
Die zweite Schicht bildet der Web Server. Diese Schicht regelt den Zugriff auf die Datenbank.
Die unterste Schicht bildet die Datenbank. Die Anwendung kann auf die
Daten nur über die SQL-Ebene zugreifen.
Abbildung 1: Modell einer Datenbankanwendung
Script {
field SFString sql ""
eventIn SFString set_sql
eventOut SFString sql_changed
eventIn SFBool execute
eventOut SFInt32 result
eventOut SFString errorMessage
url "execsql.class"
# And any number of
field fieldType input_parameter_name initialValue
eventIn eventType input_parameter_name
eventOut eventType output_parameter_name
}
Das Feld sql enthält einen SQL Ausdruck, wie er im nächsten Abschnitt beschrieben wird.
Der SQL Script Knoten reagiert auf das Ereignis set_sql. Es wird verwendet, um den Inhalt des sql Feldes zu verändern.
Das Ereignis sql_changed wird ausgelöst, wenn sich der Inhalt des sql Feldes ändert.
Als Reaktion auf das Ereignis execute wird die zugehörige sql Anweisung ausgeführt. Der Kontrollfluß kehrt aber unmittelbar zum Browser zurück.Wenn mehrere Ereignisse gleichzeitig (mit dem gleichen Zeitstempel versehen) eingehen, wird das execute Ereignis als letztes ausgeführt.
Die Ereignisse result und errorMessage werden ausgelöst,
wenn eine SQL Anweisung beendet ist. Wenn die Anweisung erfolgreich ausgeführt
wurde, ist
result = 0 und errorMessage enthält einen leeren String, andernfalls
enthält result eine Fehlernummer und errorMessage die entsprechende
Fehlermeldung (Siehe Anhang A). Es ist sichergestellt,
daß diese beiden Ereignisse immer ausgelöst werden, wenn ein
SQL Script ausgeführt wird.
Das Feld url referenziert eine Java Klasse, die ein SQL-Script implementiert. Es kann eine Liste von mehreren Klassen angegeben werden. Der Browser lädt dann die erste Klasse, auf die er Zugriff hat.
input_parameter_name dienen als Variablen, deren Wert unmittelbar vor der Ausführung der SQL-Anweisung bestimmt wird. Der Wert kann durch ein Feld oder ein eingehendes Ereignis desselben Names definiert werden. Wenn der Parameter verwendet wird, muß dem Namen ein Doppelpunkt vorangestellt werden.
output_parameter_name dienen entsprechend den Input Parametern zur Aufnahme von Ausgabewerten des SQL-Scripts. Sie werden im INTO Teil der SQL-Anweisung verwendet.
Die folgenden VRML Datentypen können in SQL Datentypen gemappt werden:
SFBool nach BITAndere VRML Datentypen werden nicht unterstützt. Ihre Verwendung führt zu einem Fehler.
SFInt32 nach INTEGER
SFFloat nach REAL
SFString nach VARCHAR oder LONGVARCHAR
Umgekeht werden
CHAR, VARCHAR, LONGVARCHAR, BINARY, VARBINARY, LONGVARBINARY, DATE, TIME und TIMESTAMP nach MFStringgemappt.
NUMERIC, REAL, FLOAT und DOUBLE nach MFFloat
DECIMAL, BIT, TINYINT, SMALLINT, INTEGER und BIGINT nach MFInt32
CONNECT/DISCONNECT
Diese Befehle werden verwendet, um eine Verbindung zum Datenbank-Server
herzustellen bzw. aufzulösen, auf dem die SQL-Befehle ausgeführt
werden sollen.
CALL
Der Call-Befehl ermöglicht es, eine auf dem Server gespeicherte
Procedure oder Funktion auszuführen.
NEXT <n>
Dieser Befehl wird in Verbindung mit der select- und for-Anweisung
verwendet. Er wiederholt die letzte select-Anweisung und liefert die mit
<n> spezifizierte Anzahl an Reihen als Ergebnis.
SET
Mit Set können die Werte der beiden Variablen TRANSACTION und
AUTOCOMMIT gesetzt werden. Mögliche Werte für AUTOCOMMIT sind
TRUE und FALSE. Für TRANSACTION können die Werte READ_COMMITTED,
READ_UNCOMMITTED, REPEATABLE_READ, SERIALIZABLE spezifiziert werden. Zu
deren Bedeutung sei auf die einschlägige Datenbankliteratur verwiesen.
COMMIT
Mit diesem Befehl werden die Änderungen der Transaktion in der
Datenbasis festgeschrieben.
ROLLBACK
Wenn AUTOCOMMIT auf FALSE gesetzt ist, kann mit diesem Befehl eine
Transaktion rückgängig gemacht werden.
INTO
Mit INTO wird ein Output Parameter spezifiziert der das Ergebnis einer
Spalte der Anfrage aufnehmen kann.
FOR <n>
Mit <n> kann die Anzahl der Ergebnisreihen angegeben werden, die
von einer SELECT-Anweisung zurückgegeben werden sollen.
AT
Mit AT kann man eine bestimmte Datenbankverbindung auswählen,
die vorher mit CONNECT hergestellt wurde.Wenn keine AT-Klausel angegeben
wird, wird die Default-Verbindung verwendet.
{} pass-through clause
In {} eingeschlossener Text wird direkt an die Datenbank "durchgereicht".
Es findet keine Interpretation durch den SQL-Script-Mechanismus statt.
Erklärung:
name und einkommen sind die Variablen, in denen das Ergebnis der Anfrage
zur Verfügung steht. FOR ALL gibt an, daß alle Ergebnisreihen
geliefert werden sollen. NAME und EINKOMMEN sind Spaltennamen der Tabelle
ANGESTELLTE. Die url "execsql.class" gibt die Javaklasse an, die die herstellerspezifische
Anbindung der Datenbank ermöglicht. In diesem Beispiel befindet sie
sich im selben Verzeichnis wie die VRML-Datei.
PROTO ServerRedirect [
field MFString nodeName []
field MFString fieldName []
field MFString url []
field MFNode children [] ]
{ Group {
children IS children
}
}
Das Feld nodeName referenziert einen oder mehrere Knoten, die in der VRML-Datei definiert sind.
Das Feld fieldName referenziert Felder der mit nodeName spezifizierten Knoten. Die Felder werden mit dem generierten Inhalt gefüllt.
Das url Feld definiert die Sprache und die Anweisung, die ausgeführt werden soll.
Das Feld children kann jede Art von VRML Geometrie-Objekten spezifizieren.
Wenn der ServerRedirect Knoten ein children Feld definiert, dann können
nur die dort angegebenen Variablen das Ergebnis der Anfrage aufnehmen.
Erklärung:
Wenn die Datei, die obigen Code enthält, vom Server abgerufen
wird, wird die im url Feld angegebene Anfrage ausgeführt. Das Ergebnis
füllt den string des Textknoten barName. Dann wird die Datei zum Browser
übertragen und dort ausgeführt, das heißt der Text wird
ausgegeben.
Folgende Eingenschaften sollte die Klassenbibliothek mindestens aufweisen:
Die Verwendung einer Klassenbibliothek erleichtert die Entwicklung
von Anwendungen dadurch, daß sie das Arbeiten auf einem höheren
Abstraktionsniveau erlaubt. Mit den in der Bibliothek definierten Klassen
und deren Methoden können VRML-Szenen erstellt und bearbeitet werden.
Der Entwickler legt zuerst das Aussehen der Datenbanktabellen fest.
Dann schreibt er seine Anwendung unter Verwendung der Klassenbibliothek.
Dieses Kapitel ist nicht als Anleitung zur Erstellung einer Klassenbibliothek
gedacht, sondern soll nur eine Anregung geben, wie die oben beschriebenen
Mechanismen sinnvoll eingesetzt und gegebenenfalls erweitert werden können.
Code | Fehlernachricht |
---|---|
1 | A parse error occurred |
2 | Error parsing INTO clause |
3 | Error parsing AT clause |
4 | Error parsing NEXT command |
5 | Error parsing substituting parameters |
6 | A database connection is not available |
7 | An eventIn has not been received for parameter |
8 | There is no field named parameter |
9 | There is no eventOut named parameter |
10 | Field parameter is not a supported type |
11 | EventOut parameter is not a supported type |
12 | No SQL field defined |
13 | No INTO clause was specified |
14 | A SELECT statement has not been executed |
15 | Unable to convert value |
16 | Variable is not a supported variable for the SET command |
17 | Variable must be set to TRUE or FALSE |
18 | Variable is an unsupported value for TRANSACTION |
19 | Out of memory error |
VRML-Recommended Practices for SQL Database Access
Oracle Implementierungen:
Server Side IncludesBeispielanwendung mit ServerRedirect
Entwurf und Implementierung einer VRML-Bibliothek:
Risse, Thomas: Entwurf und Implementierung einer VRML-Bibliothek für
ein objektrelationales Datenbanksystem auf der Basis des VRML-2.0-Standards,
GMD-Forschungszentrum Informationstechnik GmbH 1997, ISBN: 3-88457-324-1