Datenbanktechniken für das World Wide Web Ausarbeitung für das Seminar Weltweite Datenbanken WS 2000/01 von Torben Christian Sliwka 06.05.2001 Vorwort Die Vereinigung von Datenbanken mit den Techniken des World Wide Web stellt für beide Systeme eine Erweiterung ihrer jeweiligen Funktionalitäten über den ursprünglich intendierten Rahmen hinaus dar. Web-Oberflächen, mit HTML (HyperText Markup Language) und eingeschränkten ScriptErweiterungen, dienten der elaborierten Darstellung von mehr oder weniger statischen Informationen mittels eines einfachen Übertragungsprotokolls. Datenbanken stellten durch wohldefinierte Abfrage- und Schreibeoperationen einen sicheren, transaktionsbasierten, revertierbaren und benutzerspezifischen Zugriff auf einen Datenbestand sicher. Die Vereinigung dieser beiden Technologiebereiche verspricht eine deutlich verbesserte Erreichbarkeit von Datenbankinhalten. Die Datenbestände sind nicht räumlich beschränkt zugänglich, sondern im Idealfall global. Der Zugriff ist mit einer großen Vielfalt an Plattformen möglich, da HTTP-Clients für viele Plattformen verfügbar sind. Oberflächen für den Datenbankzugriff können mit einem fast beliebigen Freiheitgrad an individuelle Anforderungen (oder Geschmacksvorlieben) angepaßt werden. Mit dieser Synthese ist fast immer ein Abwägen von Einschränkungen auf beiden Seiten verbunden. Im Folgenden sollen verschiedene Technologien vorgestellt werden, die sich mit ihren jeweiligen Stärken für unterschiedliche Anwendungsbereiche anbieten. 2 Inhaltsverzeichnis 1 EINLEITUNG...............................................................................................................................................4 1.1 1.2 1.3 1.4 2 TECHNOLOGIEN FÜR DIE DATENBANKNUTZUNG IM WWW.....................................................8 2.1 2.2 2.3 2.4 2.5 2.6 2.7 3 DAS WWW MODELLIEREN ..................................................................................................................17 ANFRAGESPRACHEN FÜR DAS WEB ......................................................................................................18 DATENINTEGRATION............................................................................................................................20 4.1 4.2 5 GRUNDLAGEN VON CGI.........................................................................................................................8 DATENBANKZUGRIFF IM CGI-PROGRAMM ...........................................................................................10 APPLETS ...............................................................................................................................................11 EXTERNE ANWENDUNGEN UND PLUG-INS ...........................................................................................12 SERVER-SEITIGE HTML-MACROS .......................................................................................................13 WEB-SERVER MIT API .........................................................................................................................15 SERVLETS ............................................................................................................................................15 DAS WEB ALS DATENBANK .................................................................................................................17 3.1 3.2 4 DATENBANKEN UND DAS WWW ...........................................................................................................4 ALLGEMEINE STRUKTUR ........................................................................................................................5 DATENBANKEN UND HTTP....................................................................................................................6 KONSISTENZ UND ZUSTÄNDE .................................................................................................................7 KLASSIFIZIERUNG.................................................................................................................................20 AUFBAU VON DATENINTEGRATIONSSYSTEMEN....................................................................................21 ABSCHLIESSENDE ANMERKUNGEN.................................................................................................22 5.1 5.2 ZUSAMMENFASSUNG............................................................................................................................22 AUSBLICK ............................................................................................................................................23 3 1 Einleitung Ziel bei der Verbindung von Datenbanken und Web ist ein Zusammenführen der Vorteile beider Technologien. Die technischen Anforderungen an beide Klassen von Systemen unterscheiden sich allerdings, was bei der Kombination einige Probleme aufwirft, und ein Abwägen der jeweils verfügbaren Leistungsmerkmale erfordert. 1.1 Datenbanken und das WWW Die heute üblichen relationalen Datenbank-Managementsysteme (RDBMS) besitzen die Eigenschaft, umfangreiche Mengen an Information auf homogene Weise, in der Regel als eine Liste von Tupeln aus Daten-Attributen, zu speichern. Der Zugriff auf den Datenbestand erfolgt über streng definierte Schnittstellen in Form einer Anfragesprache (query language). Dies erfordert wohlgeformte Anfragekonstrukte auf Grundlage algebraischer Regeln, liefert aber auch ebenso wohlgeformte Resultate. Der gleichzeitige Zugriff mehrerer Benutzer auf die Datenbasis ist möglich; das DatenbankManagementsystem sorgt implizit dafür, daß der Zustand der abgelegten Daten zu jedem Zeitpunkt konsistent ist. Tritt ein Konflikt zwischen Eingaben verschiedener Benutzer auf, oder erfolgt eine Beendigung des Datenbankzugriffs, bevor der Anwender wieder einen konsistenten Datenzustand herstellt, also die Transaktion abschließen konnte, so ermöglicht eine Revertierungsfunktion zu jeder Zeit eine Rückkehr zum letzten konsistenten Zustand. Grundsätzliche Aufgabe des Datenbanksystems ist also die Gewährleistung von Atomarität der DB-Operationen, Konsistenz der Daten, Isolation und Dauerhaftigkeit, auch als ACIDPrinzip bekannt (Atomicity, Consistency, Isolation, Durability). Die verschiedenen Anwender eines Datenbanksystems können die für sie relevanten oder freigegebenen Daten in einer jeweils besonders angepaßten Form, einer sogenannten Sicht, dargestellt bekommen. Benutzern können Einzel- und Gruppenrechte zugeteilt werden, um den Umfang der für sie erlaubten Lese- und Schreibzugriffe auf die Daten zu differenzieren. Die Datenbank-Sitzung beginnt in diesem Fall mit einer Authentisierung über ein Paßwort oder einen Schlüssel. Schließlich geschieht all dies in einer aktuellen Datenbank mit einer hohen Performanz, die durch Cache-Verfahren, also dem Vorhalten häufig abgefragter Daten oder Operationen, und Optimierung der Datenstruktur hin auf Verkürzung der Zugriffszeit erreicht wird. Datenbanksysteme sind in Wirtschaft und Verwaltung seit Jahrzehnten im Einsatz. Die meisten in irgendeiner Form bedeutsamen Informationen aus allen Bereichen von Gesellschaft und Wirtschaft liegen in Datenbanken gespeichert vor. Das World Wide Web ist eine Menge von Rechnern, auf denen Server für HTTP laufen, und die Dokumente im HTML-Format zur Verfügung stellen. Hypertext-Referenzen (links) stellen zwischen den Dokumenten Verbindungen her. HTML stellt dabei, für sich genommen, nur die Möglichkeit dar, statische, textuelle Informationen mit einigen Formatierungen (Schriftgrößen und -typen, Absatzausrichtung, Tabellen etc.) zu versehen. Die fortlaufende Aktualisierung des Standards, und seine Erweiterung um Script-Möglichkeiten erlauben inzwischen die Gestaltung fast beliebiger statischer oder dynamischer Oberflächen für Informationsdarstellung und Interaktion mit Benutzern. 4 Clients für HTTP (Browser), die in Abhängigkeit der gegebenen Technologie HTML-Seiten mehr oder weniger getreu darstellen können, existieren für fast alle mit graphischer Ausgabemöglichkeit versehenen Geräte die Informationen verarbeiten. Eine idealtypische Web-Datenbank würde nun die Vorteile beider Systemansätze vereinen: die Oberfläche für Ein- und Ausgabemasken ist einfach wie eine Web-Seite zu gestalten, der Datenbankzugriff kann von überall auf der Welt mit einem beliebigen Web-Browser geschehen, durch die DBMS-inhärenten Sicherheitseigenschaften ist die Datenbank trotzdem vor dem Zugriff durch Unbefugte geschützt, unabhängig von der Zugriffsmethode ist die Datenkonsistenz immer gewährleistet, und schließlich: Das System ist performant wie eine „normale“ Datenbank und die einmal gewählte Technologie bleibt für wachsende Anforderungen skalierbar. Diese Anforderungen sind in ihrer Gänze nicht erfüllbar. Tatsächlich wird die Erfüllung einer Anforderung oft die einer anderen erschweren oder sogar ausschließen. Die zu wählende Technologie hängt in hohem Maße von der jeweiligen Anwendung ab; wenn sich das Anforderungsprofil nun verschiebt, und sei es auch nur durch eine größere Zahl von Anwendern, kann unter Umständen die eingesetzte Technologie systembedingt nicht mehr weiterverwendet werden. Dem Einsatz eines WWW-basierten Informationssystems muß deswegen eine sorgfältige Planung mit mittel- bis langfristigem Planungshorizont vorausgehen. 1.2 Allgemeine Struktur Aus den oben genannten Anforderungen ergeben sich einige Eigenschaften, welche eine Webbasierte Datenbank im allgemeinen haben wird, und welche grundlegenden Technologien zum Einsatz kommen. DBMS HTTP-Protokoll HTML-Client Web-Server Abbildung 1: Allgemeine Struktur von Web-Datenbanken Web-Server Das System basiert auf Dokumentformaten und Übertragungsprotokollen des WWW. Voraussetzung für Verwaltung und Übertragung von HTML-Dokumenten, Scripten, Dienstprogrammen und Konfigurationsdaten ist ein Web-Server. Der Server reagiert auf Anfragen eines Client und stellt diesem über das HTT-Protokoll das jeweils von ihm geforderte Dokument zur Verfügung. Beim angeforderten Dokument kann es sich um eine 5 Datei, in der Regel im HTML-Format, mit möglicherweise eingebundenen Graphiken oder Animationen, aber auch um einen Programmaufruf handeln. Für den Client ist es gleichbedeutend, ob er ein Dokument erhält welches aus einer Datei stammt, oder ob es die Ausgabe eines Server-seitigen Programms ist. Wenn aus einer Client-Anfrage hervorgeht, daß ein Datenbankzugriff erforderlich ist, geschieht dies ebenfalls durch Server-seitige Programme. Die Ergebnisse von Anfragen werden in Form von Hypertext-Dokumenten an den Client übertragen. Der Web-Server ist also das verbindende Element zwischen Anwender und DBMS. Web-Client Der HTTP-Client in Form eines Browsers gibt dem Anwender eine Schnittstelle, um Daten mit dem System auszutauschen. Die Darstellung der Resultate von Datenbankanfragen erfolgt mittels der vom Server geschickten Dokumente. Die Anfrage selbst gestaltet sich etwas komplizierter: sie kann als Parameter für ein Programm auf dem Server, oder auch als im HTML-Code genestete Server-Befehle formuliert werden (siehe 1.4). Um die Interaktion mit der Datenbank vom Benutzer zu kapseln, erfolgt die Eingabe der Daten z.B. in einem Textfeld oder durch Anklicken einer Hypertext-Komponente; Elemente, die leicht über HTML und Scriptfunktionen realisiert werden können. Bei der Ausgabe von Daten müssen diese wiederum als HTML-Text formatiert werden, um sie im Browser des Anwenders richtig darzustellen. Datenbanksystem Das Datenbanksystem erhält Anfragen vom Web-Server und liefert die Resultate dorthin zurück. Die Programme auf dem Web-Server eröffnen eine Datenbankverbindung, starten eine Sitzung und führen Zugriffe auf den Datenbestand in der vom DBMS (DatenbankManagementsystem) unterstützten Anfragesprache durch. Somit ist es für das Datenbanksystem gleichbedeutend, ob es sich um eine Anfrage des Web-Servers oder z.B. einer Datenbank-Applikation aus dem Firmennetz handelt. Beim oben vorgestellten allgemeinen Ablauf eines Datenbankzugriffs wäre der authentifizierte Benutzer also ein zum Web-Server gehöriger Prozeß (wie z.B. ein CGIScript), nicht aber der eigentlich entscheidende Benutzer des Web-Client. Für der Öffentlichkeit allgemein zugängliche Informationsbestände stellt dies natürlich kein Problem dar, wohl aber wenn man den Benutzerkreis einschränken muß. In 2.1 werden hierzu unterschiedliche Lösungsansätze vorgestellt. 1.3 Datenbanken und http HTTP (HyperText Transfer Protocol) wurde, wie es der Name nahelegt, zum Austausch (statischer) Hypertext-Dokumente eingeführt. Natürlich ist auch das Versenden andersartiger Dateien möglich, an eine Übermittlung von dynamischen Inhalten oder Datenbankzugriffen wurde zum Zeitpunkt der Konzeption aber nicht gedacht. Das HTT-Protokoll kennt keinen Zustandsspeicher oder ähnliche Mechanismen, um Verbindungsdaten über mehrere HTTPAnfragen an einen Server hinweg zu erhalten. Für den Server ist es prinzipiell gleich, ob eine weitere Anfrage vom gleichen Client stammt wie eine zuvor eingegangene, oder ob es sich um einen neu hinzugekommenen Client handelt. 6 Datenbanken hingegen basieren auf dem Konzept, das verschiedene Zustände der Daten zwischengespeichert werden, um die Integrität der Daten erhalten bzw. wieder herstellen zu können. Eine Sitzung ist in diesem Zusammenhang eine Folge von Zugriffen auf den Datenbestand, welche einem eindeutig zu identifizierenden Benutzer zugeordnet ist. Lesende Zugriffe können dabei ignoriert werden; für ändernde Zugriffe in Form von Transaktionen muß aber sichergestellt sein, daß stets der letzte konsistente Zustand der Daten zwischengespeichert wurde, um die Transaktion abbrechen oder nachträglich revertieren zu können. Die Zustände der Daten und die Erhaltung ihrer Konsistenz stellen in diesem Zusammenhang kein Problem dar, da natürlich auch das Serverprogramm für den Datenbankzugriff nur atomare Transaktionsoperationen auf den Daten durchführen kann. Das Konzept einer dem jeweiligen Benutzer zuordbaren Sitzung ist über HTTP ohne weiteres aber nicht einsetzbar. 1.4 Konsistenz und Zustände Zur Lösung des Problems der Zustandslosigkeit [EKR97] existiert natürlich die Möglichkeit, das bestehende Protokoll behutsam zu erweitern, bzw. ein Zustand-stützendes Protokoll einzuführen, allerdings lassen der Zeitaufwand für die Standardisierung und zu erwartende Inkompatibilitäten diesen Ansatz wenig versprechend erscheinen. Für den praktischen Einsatz benötigt man also einen Weg das Problem zu umgehen. Zustände in Cookies speichern: Es gibt bereits ein weit verbreitetes Mittel um Informationen, die von einem Server übertragen wurden, dauerhaft auf dem Client-Rechner abzulegen: Cookies sind einfache Texdateien mit Informationen über eine besuchte Seite und den besuchenden Client. Beispiel: Ein Cookie mycookie general www.somesite.com/ 0 3429005568 29398667 2748658336 29397259 * //Bezeichner //Klassifizierung, oft alphanumerische Zeichenfolge //Ursprung //Datenblock //Abschluß Der Zugriff auf die in Cookies abgelegten Informationen ist nur dem Ursprungs-Server gestattet. Er kann durch sie feststellen, ob der jeweilige Client gerade eine aktive Datenbankverbindung unterhält, und führt sie gegebenenfalls weiter anstatt eine neue zu starten. Allerdings sind Cookies nicht für alle Anwender akzeptierbar, da sie auch zur Profilierung von einzelnen Benutzern verwendet werden können. Den URL um Zustandsinformationen erweitern: Eine Weitere Möglichkeit ist es, das an einen Client zu versendende Hypertext-Dokument bei der dynamischen Erstellung oder Script-basierten Bearbeitung (siehe 2.5) mit einer Kennung zu versehen. Bei Benutzeranfragen über dieses Dokument (z.B. über Eingabemaske) werden 7 nicht nur die explizit eingegebenen Daten als Parameter am Ende des URL (Uniformer Ressourcen-Lokator) zurück an den Server übermittelt, sondern auch Informationen zur Sitzung. Das Serverprogramm vergleicht die Kennung einer Datenbank-Anfrage mit der Liste von Kennungen aktuell offener Sitzungen; ist eine entsprechende Sitzung bereits aktiv, so wird diese weiterverwendet. Eine Datenbankverbindung bleibt so über mehrere Zugriffe hinweg erhalten. Beide oben vorgestellten Verfahren benötigen allerdings eine Möglichkeit zur impliziten Beendung einer Sitzung, da der Anwender immer die Verbindung Client-seitig beenden kann, ohne die Sitzung formell zu schließen. In der Regel bedient man sich hier einer Zeitgrenze, bei deren Überschreitung ohne erneuten Datenbankzugriff durch den Benutzer, das Serverseitige Programm die Sitzung selbsttätig beendet und eventuell offene Transaktionen revertiert. Somit wird die Konsistenz der Daten sichergestellt und die Belastung des WebServers und der Datenbank in Grenzen gehalten. 2 Technologien für die Datenbanknutzung im WWW Da WWW-Seiten im klassischen Sinne etwas sehr statisches sind, sind offenbar Techniken nötig, um sie mit Funktionalität auszustatten und für den Anwender interaktiv zu machen. Die grundlegende Möglichkeit dafür ist seit geraumer Zeit das CGI-Konzept. In den vergangenen Jahren sind jedoch einige neue Konzepte, sowohl auf Seiten des WWW-Clients als auch des Web-Servers hinzugekommen. 2.1 Grundlagen von CGI Bei CGI-Scripten handelt es sich in aller Regel um normale Programme, oder eben Interpreter-abhängige Scripte, welche auch ohne Web-Server lauffähig oder sinnvoll sein können. Sie ermöglichen es, auf eine Anfrage von außen (vom Client) her vielseitige Funktionalitäten zur Verfügung zu stellen, die vom eigentlich verwendeten Web-Server unabhängig sind. Prinzipiell ist es egal, für welche Implementierungssprache man sich entscheidet; Voraussetzung ist, daß sie auf dem Server-System lauffähig ist. Will man Beispielsweise eine einfache dynamische Funktionalität als Interpreter-Script implementieren, so muß nur gewährleistet sein, daß das jeweilige Programm (z.B. CShell oder (G)Awk) installiert ist. Viel häufiger trifft man in diesem Zusammenhang jedoch auf Perl-Scripte oder C-Programme. Bei CGI (Common Gateway Interface) selbst handelt es sich erst einmal nur um einen Standard der festlegt, wie ein Programm gestartet wird, wie ihm Daten (z.B. Parameter) zugeführt werden und wie die Ergebnisdaten des Programms zu Weiterverarbeitung „abgegriffen“ werden können. 8 DBMS HTML-Client Ergebnis HTTP Anfrage Web-Server HTML -Seite ruft a uf select Name from Personen CGI-Programm Abbildung 2: CGI-Programme liefern DB-Inhalte an einen Web-Server Welches Programm ausgeführt werden soll, wird in der Regel über eine Hypertext-Referenz festgelegt: die zugehörige Adresse umfaßt den Ort (in der Verzeichnisstruktur auf ServerSeite), an dem die Programmdatei zu finden ist, so wie normalerweise einige Parameter für das Programm. Beispiel: http://134.106.1.33/cgi-bin/createindex.cgi?02022000Meldungen verwendetes Protokoll und ServerAdresse Programmdatei in der ServerVerzeichnisstruktur Eingabedaten für das Programm, z.B. aus Eingabemaske Abbildung 3: Exemplarischer URL für CGI-Anwendungen Die Kommunikation mit dem CGI-Programm erfolgt über Datenströme, also stdin und stdout. Während der Abarbeitung liest das Programm Zeichenketten aus dem Puffer des Eingabedatenstroms, führt auf diesen Daten Operationen aus und schreibt die Ergebnisdaten als Zeichenketten in den Ausgabepuffer. Dabei muß das keinesfalls in „einem Rutsch“ geschehen: da es sich um Puffer handelt, können Daten zu den jeweiligen Verarbeitungsschritten sequentiell eingelesen/geschrieben werden; schon bereitgestellte Daten können unter Umständen vor Abschluß des Programms durch den Server verschickt werden. 9 Beispiel: Arbeiten mit Datenströmen #include <iostream> int main() { //keine Parameter char *inputStreamData; cin >> inputStreamData; //einlesen cout << “content-type: text/html \n\n“; //HTML-formatierte Ausgabe cout << “<body>\n“; cout << “<h3>“); cout << “Sie sagten: <ul>“ << inputStreamData << “</ul>“; cout << “</h3>\n“; cout << “</body>“; return(0); } 2.2 Datenbankzugriff im CGI-Programm Stellt die für die CGI-Funktionalität gewählte Programmiersprache Schnittstellen für den Datenbankzugriff zur Verfügung, und die meisten tun dies, so kann man auf diese Weise wohl am einfachsten einen Datenbankzugriff implementieren [HeSa00]. Problematisch ist in diesem Kontext jedoch die Authentifizierung der Benutzer. Man kann natürlich die Daten undifferenziert der Allgemeinheit zugänglich machen. Eine Möglichkeit besteht darin, die Benutzerinformationen dem Programm über seine Parameterliste mitzuteilen, welche z.B. aus einem Eintrag in einer Login-Maske erzeugt werden kann. Beispiel: Mit eingebetteten SQL-Anweisungen Daten auslesen char *getUserData(char const cuId[12]) { BEGIN DECLARE SECTION char id[12], name[30], fName[30], currentUserId[12]; int nOrders; END DECLARE SECTION CurrentUserId=cuId EXEC SQL CONNECT "dba" IDENTIFIED BY "sql"; EXEC SQL select KundenNr, Name, Vorname, AnzahlBestellungen INTO :id, :name, :fName, :nOrders FROM Kunden WHERE id = :currentUserId; EXEC SQL COMMIT WORK; EXEC SQL DISCONNECT; return(“%s %s\n(Kunden-Nr %s) hat bisher %n Bestellungen aufgegeben“, fName, Name, id, nOrders); } Die Anweisungen innerhalb des DECLARE-Blocks und hinter EXEC SQL Anweisungen werden durch einen Präcompiler ausgewertet, und der Quelltext statisch an die Programmierschnittstelle des Datenbanksystems gebunden. Diese unkomplizierte Vorgehensweise bietet sich vielleicht für personalisierbare Web-Seiten nach dem Muster Mycommercial-website.com an, ist aber für Daten die eines wirklichen Schutzes bedürfen inakzeptabel; hier sollte auf jeden Fall auf die sicheren Authentifikationsverfahren der verwendeten Datenbank zurückgegriffen werden. Es ergeben sich noch einige weitere Probleme. Für jede Benutzeranfrage auf die Funktion eines CGI-Programmes wird eine neue Instanz dessen erzeugt. Diese belegt zusätzlich noch 10 einmal den gesamten für das Programm nötigen Arbeitsspeicher und, was schlimmer ist, erhöht die Anzahl der durch das System zu verwaltenden Prozesse. Weiterhin muß das Programm nach seinem Start eine Datenbanksitzung (Session) beginnen und diese auch vor dem Beenden wieder schließen; längerfristige (klassische) Sitzungen des Anwenders, welche z.B. auch das Neuladen einer Seite oder eine kurzfristige Verbindungsunterbrechung überstehen könnten, sind mit den bisher vorgestellten Verfahren nicht möglich. Datenbankinteraktion die sich über mehrere Zugriffe erstreckt, zieht also immer einen überflüssigen Überhang an Verbindungsaufbau- und VerbindungsabbauOperationen mit sich, welcher die Datenbearbeitung verlangsamt. 2.3 Applets In den vergangenen Jahren hat sich Java für immer mehr Client-seitige Web-Applikationen durchgesetzt. Inzwischen besitzt jeder verbreitete Web-Browser eine Laufzeitumgebung für Java, was es ermöglicht, die Datenbank-Funktionalität aus den HTML-Dokumenten herauszunehmen und in Java-Applets zu kapseln. Das Applet selbst ist ein kleines Programm, das vom Server übermittelt und Client-seitig ausgeführt wird. Aus Sicherheitsgründen unterliegt das Applet einigen Einschränkungen: der Zugriff auf das lokale System ist klar begrenzt (Ausführung im „Sandkasten“), eine Verbindungsaufnahme ist nur zu dem Server erlaubt, von dem das Applet selbst geladen wurde. Java bringt eigene Mechanismen (JDBC, SQLJ) für den Zugriff auf (entfernte) Datenbanken mit sich. Die Verbindung kommt dabei nicht über HTTP, sondern über ein eigenes Protokoll an einem anderen Port zustande, die klassische Datenbank-Sitzungen ermöglichen. Das Applet wird außerdem in der Regel die Eingaben einer Vorprüfung unterziehen, um eindeutige Falscheingaben auszufiltern, und die Datenbank zu entlasten. JDBC / J SQL Applet DB-Teil -?Aufruf Web-Teil HTTP Server HTML-Client Abbildung 4: Kapselung der DB-Zugriffe in einem Applet Applets verlassen aber den Pfad einer vollständigen Web-Integration: das Applet kann nicht Eingaben aus HTML-Masken übernehmen oder Resultate in HTML-Text einfügen. Zwar ist es möglich, mittels in das Dokument eingebetteter JavaScript-Anweisungen Daten aus dem Dokument an das Applet zu übergeben, und mehrere Dokumente über die gleiche Verbindung 11 zu bedienen, allerdings müssen Applet und HTML-Code bei jeder Anpassung eng aufeinander und auf den jeweiligen Browser abgestimmt werden. Die Übertragung der Applet-Daten zurück ins Dokument ist im allgemeinen nicht möglich, und kann bei Einsatz einer einzigen Version des Dokuments für alle Browser nicht verwendet werden. Auf Grund der oben schon genannten Sicherheitseinschränkungen, muß der Datenbank-Server für die Applets auf dem physisch gleichen System laufen wie der Web-Server der das Applet verschickte, was Leistungsprobleme aufwerfen kann (gleicher Prozeßraum, geteilter Hauptspeicher und daraus folgende Ressourcenknappheit). 2.4 Externe Anwendungen und Plug-Ins Der nächste Schritt bei der Verselbständigung der Datenbank-Schnittstelle wäre die Verwendung einer von Web-Browser und HTML-Einbindung unabhängigen DatenbankAnwendung. Bei der Entwicklung wären Programmiersprache, Architektur und verwendetes Protokoll frei wählbar, und die Eigenschaften der jeweils verwendeten Datenbank voll ausnutzbar. Im Vergleich dazu steht bei Java-Applets nur eine Untermenge der JDBCFunktionalität mit allgemeinem Charakter zur Verfügung. Das Datenbanksystem kann in diesem Fall vom Web-Server physisch vollkommen getrennt sein, was die Performanz der beiden Systeme steigert, und sie voneinander unabhängig skalierbar macht (z.B. muß bei erhöhtem Zugriff auf die Web-Präsenz nicht unbedingt das Datenbanksystem auf eine leistungsfähigere Plattform umgestellt werden). Datenbank-Server DB-”Betrachter” Aufruf HTTP Web-Server HTML-Client Abbildung 5: DB-Zugriffe mit eigenständiger Anwendung Um das Programm bei einem gewünschten Datenbank-Zugriff aus dem Browser heraus starten zu können, sendet der Server bei einer entsprechenden Anfrage ein MIME-codiertes Dokument. MIME (Multi-purpose Internet Mail Extension) ist eine Dokumentkennung die festlegt, welchen Typs der Inhalt eines Dokumentes ist. Um auf das empfangene Dokument richtig reagieren zu können, muß der entsprechende MIME-Typ auf dem Client-System registriert worden sein. Stößt der Browser nun auf eine Extension wie z.B. application/corpdbaccess, und ist in der Liste der MIME-Typen zu dieser Extension eine 12 lokale Anwendung eingetragen, so wird sie vom Browser gestartet und beginnt die eigentliche Datenbank-Verbindung. Obwohl es sich um einen leistungsfähigen und sicheren Ansatz für entfernte DatenbankZugriffe handelt, wurde das Ziel der Web-Integration mit vielen seiner Vorteile praktisch aufgegeben. Das System ist nicht mehr plattformunabhängig, sondern nur auf den bei der Entwicklung berücksichtigten Plattformen lauffähig. Die Anwendung hat keine WebOberfläche, damit werden oft Gestaltungsmöglichkeiten eingeschränkt, da Oberflächen für klassische Anwendungen gegenüber dem Web weniger Möglichkeiten bei der graphischen Darstellung bieten. Des weiteren erfordert eine Neugestaltung oft auch eine Neuprogrammierung. Plug-Ins funktionieren nach dem gleichen Prinzip, sind aber noch enger an den jeweiligen Browser gebunden und erscheinen im selben Fenster wie die HTML-Darstellung. Beide Ansätze haben das große Problem, daß vor einer Verwendung ein Prozeß des Herunterladens und Installierens der Applikation steht. Eine solche Lösung bietet sich nur an, falls ein enger, überschaubarer Personenkreis für die Verwendung der Datenbank vorgesehen ist, und der Betreiber (z.B. der Arbeitgeber oder ein marktführender Anbieter) die zu verwendenden Client-Systeme vorgeben kann. Anderenfalls ist bereits ein gewisses Vertrauensverhältnis zwischen Anwender und Betreiber vorauszusetzen, da die Applikation über die Systemressourcen des Anwenders verfügen kann. 2.5 Server-seitige HTML-Macros Eine weitere Möglichkeit, dynamische Web-Seiten zu gestalten, sind HTML-MacroErweiterungen. Die Dokumente enthalten Script-Anweisungen, welche durch den Web-Server vor dem Versenden ausgeführt werden. Die Rückgabewerte der Script-Funktionen (z.B. Datenbankzugriffe) werden anschließend in das Dokument eingefügt, und ersetzen die ScriptMacros; dabei können natürlich auch Client-seitig auszuführende Scripte (JavaScript) dynamisch eingebaut werden. HT TP HTML-Client HT TP Dateizugriff Web-Server Abbildung 6: Der Server interpretiert Macro-Anweisungen 13 Die Syntax dieser Macros ist abhängig vom verwendeten Web-Server. Der NIS von Netscape verwendet ein System namens LiveWire, der IIS von Microsoft verwendet sogenannte Active Server Pages, die eingebettete Anweisungen in VBScript oder JavaScript enthalten [ASP96]. Beispiel: Einbettung von ASP-Anweisungen <% //Anfang des Macros if Time>=#12:00:00 AM# and Time<#12:00:00 PM# then greeting=“Guten Morgen!“ else greeting=“Hallo!“ end if %> //Wertzuweisung //Ende des Macros ... <font color=green> <%=greeting%> </font> //HTML-Anweisungen //Ergebnis einfügen Dieses Verfahren hat wie CGI den Nachteil, daß längerfristige Datenbankverbindungen nicht direkt unterstützt werden. Die Verbindung zur Datenbank besteht nur während des Parsens der Datei durch den Server-eigenen Macro-Interpreter, wird anschließend beendet, und die erhaltenen Ergebnisse werden formatiert und eingefügt. Microsoft und Netscape unterstützen dabei mit ihren Technologien die bedeutenden, kommerziellen Datenbanksysteme. Die Eigenschaften bezüglich Transaktionssteuerung und Authentifizierung entsprechen den von CGI bekannten. Vorteilhaft gegenüber dem CGI-Konzept ist die schnelle und leichte Programmierung der Macros, die normalerweise keine Programme darstellen, sondern als kompakte Anweisungen über das Dokument verteilt sind. Der Entwicklungsprozeß ist damit gegenüber CGI stark vereinfacht; es besteht aber auf Grund der konzeptionellen Einschränkungen nicht die Möglichkeit komplexe Anwendungen zu implementieren. Ein möglicher Leistungsvorteil ergibt sich durch die Auslagerung der Datenbankzugriffe auf den Server, allerdings hängt dies von der Qualität der jeweiligen Implementierung ab. Offensichtliches Problem ist die Plattformabhängigkeit der Systeme: ein Austausch des verwendeten Web-Servers ist nur mit gleichzeitiger Neuprogrammierung der dynamischen Dokumentbestände möglich. Die Abhängigkeit besteht dabei vom verwendeten Server, dem Datenbanksystem und möglicherweise dem Betriebssystem. Eine neuere Entwicklung auf diesem Gebiet sind die Java Server Pages (JSP), die von Sun Microsystems als eine Erweiterung des Servlet-Konzepts (siehe 2.7) eingeführt wurden [JSP01]. Dabei werden Java-Anweisungen, in der Form, wie sie auch in einer JavaAnwendung vorkommen, in den HTML-Quelltext eingebettet. Vorteilhaft dabei ist die Möglichkeit, weitergehende Programmierparadigmen wie die objektorientierte Programmierschnittstelle zu ignorieren. Auch hier ist die Implementierung komplexer Anwendungsfunktionalität nicht ohne weiteres möglich. Trotz der plattformübergreifenden Natur des Konzepts ist es auf bisher auf einige Server-System-Kombinationen beschränkt, da es sich um eine neue Technik handelt. Die sonstigen Eigenschaften dieses Ansatzes entsprechen im wesentlichen denen von Servlets. 14 2.6 Web-Server mit API Eine Server-eigene Programmier-Schnittstelle (API, Application Programming Interface) dient zur Erweiterung des Server-seitigen Programmierkonzeptes, wie es aus der CGIProgrammierung bekannt ist. Wie schon erwähnt, besitzt das CGI-Konzept einige Schwächen wie die hohe Anzahl von Prozessen und das Fehlen persistenter Datenbankverbindungen, was ständigen Verbindungsaufbau und -abbau mit entsprechendem Überhang bedingt. Diese Probleme können bei Verwendung einer Server-API gelöst werden, indem Teile der benutzerspezifischen Funktionalität an den Server delegiert werden. Eine Datenbankverbindung wird nun durch den Server gestartet und behandelt; sie dient dann für die Datenbankanbindung über mehrere Zugriffe hinweg. Die hohe Prozeßlast wird dadurch reduziert, daß nicht für jedes Server-Programm ein eigener Prozeß läuft, sondern der Server ihre Funktionalität in einer geringeren Anzahl von Prozessen zusammenfaßt. HTML-Client HT fe fru u I-A AP TP DLL DB Web-Server -An fra ge n DBMS Abbildung 7: Ein Programmierbarer Web-Server Um Anwenderprogramme innerhalb des Server-Prozeßraums und -Speichers laufen zu lassen, muß das jeweilige Programm zum Compilierungszeitpunkt statisch an die jeweilige API gebunden werden. Der Programmstart erfolgt anschließend über den Web-Server, der die gewünschte Funktion (Server-eigene oder selbstprogrammiert) mit dem URL mitgeteilt bekommt. Die zwei verbreiteten APIs sind ISAPI von Microsoft und NSAPI von Netscape. Da sie nur für die jeweiligen WWW-Server verfügbar sind, ist man mit den einmal programmierten ServerFunktionen also auf einen Anbieter festgelegt. Ein weiterer Nachteil ist, daß sich die Entwickler sich erst auf die Eigenheiten der verwendeten Schnittstelle einstellen müssen. Weiter muß ein Verfahren gefunden werden, um Datenbanksitzungen implizit beenden zu können, da sich bei längerfristigen Sitzungen über HTTP der Client einfach die Verbindung einseitig unterbrechen kann [BeGr98]. 2.7 Servlets Auch das Konzept der Servlets beruht auf einer Server-Programmierschnittstelle. Es stellt eine Erweiterung der Programmiersprache Java dar und wurde von Sun Microsystems als Alternative für die oben genannten APIs eingebracht. Die Programmierung erfolgt wie bei einer normalen (Client-seitigen) Java-Anwendung. Wie die Kern-API von Java sind auch die Server-Erweiterungen (javax.*) objektorientiert. Eine Java-Klasse wird dadurch an den Server gebunden, indem sie die Schnittstelle javax.servlet.Servlet implementiert, und die zugehörigen 15 Methoden überschreibt. Für die Erweiterung eines WWW-Servers ist normalerweise die abgeleitete Klasse HttpServlet zu implementieren [Mar97]. Servlet HttpServletRequest * service() init() getServletConfig() destroy() getServletInfo() getParameter() getQueryString() ... HttpServletResponse HttpServlet 1 doPost() doGet() ... sendError() * getOutputStream() setCOntentType() setContentLength() ... Abbildung 8: Grobe Übersicht der Servlet-Klassen und -Methoden Vorteilhaft an diesem Konzept ist die Plattformunabhängigkeit, da die eigenen Servlets potentiell auf allen Systemen verwendet werden können, auf welche die JavaLaufzeitumgebung portiert wurde. Für die Entwicklung stehen alle bereits bestehenden JavaKomponenten und erweiterungen (z.B. Beans) zur Verfügung. Der konzeptionelle Unterschied zur Programmierung herkömmlicher Java-Applikationen oder -Applets ist minimal. Die Servlet-Klassen werden nur jeweils einmal instantiiert und behandeln anschließend alle zugehörigen Funktionen, wie Ein- und Ausgabe und Datenbankzugriffe in der Java-eigenen multi-Thread-Laufzeitumgebung. Dadurch wird auch hier gegenüber klassischer CGI-Programmierung eine Leistungssteigerung auf dem Server-Rechner und beim Datenbanksystem erreicht. Beispiel: Eine Implementierung für HttpServlet.doPost() //doPost() wird wird automatisch durch service() aufgerufen. doGet() //unterscheidet sich nur dadurch, daß Parameter im URL codiert wären protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException { String query=req.getParameter(“Eingabe“); //Formular “Eingabe“ einlesen StringBuffer buffer=new StringBuffer(); buffer.append(“<html>\n“); //HTML-Quelle erzeugen buffer.append(“<body>\n“); buffer.append(“<h1>Ihre Eingabe war:</h1>\n“); buffer.append(“<blockquote>“); buffer.append(query); buffer.append(“</blockquote>\n“); buffer.append(“</body>\n“); buffer.append(“</html>“); resp.setContentType(“text/html“); //MIME-Typ festlegen resp.setContentLength(buffer.length()); //Länge festlegen resp.getOutputStream().print(buffer.toString()); //versenden } 16 Das Ganze muß in ein HTML-Formular eingebunden werden: <form: action=“http://localhost:8080/servlets/echo-ausgabe“ method=“POST“> <input name=“Eingabe“> <input type=“SUBMIT“> </form> Der Entwickler muß bei der Implementierung der Methoden doGet() und doPost() selbst dafür sorgen, daß Formulardaten ausgewertet, und Ausgaben schon im Servlet als HTML-Daten formatiert werden. Dabei können aber unter Umständen schon verfügbare Komponenten eingebunden werden, um den Programmieraufwand zu reduzieren. Trotz der Erweiterungen an der Java-API handelt es sich bei Servlets im Grunde um eine Standardisierungsbemühung. Die tatsächliche Implementierung der API-Funktionen hängt von den jeweils verwendeten Web-Servern ab, wodurch das Versprechen von Plattformunabhängigkeit nur bedingt eingelöst werden kann. Allerdings sind die Erweiterungen inzwischen für Netscape-NIS, Microsoft-IIS, Apache u.a. verfügbar, was eine recht breite Basis verwendbarer Systeme darstellt. 3 Das Web als Datenbank Große Datenbestände finden sich nicht nur in normalen Datenbanksystemen, wie sie seit langer Zeit im Einsatz sind, sondern natürlich auch im WWW. Während die Suche nach Informationen in Datenbanken seit jeher durch standardisierte Anfrageverfahren und wohlgeordnete Datenbestände erleichtert wird, gilt keine dieser Voraussetzungen für die Daten im WWW. Die Daten Im Web unterliegen keiner übergeordneten Strukturierung und liegen in der Regel nicht geordnet vor. 3.1 Das WWW modellieren Ein erster Ansatz könnte nun darin bestehen, daß man, wenn schon die Daten nicht zu ordnen sind, doch wenigstens die sie enthaltenden Dokumente einer Ordnung unterwirft. Die Hypertext-Dokumente im Web sind in der Regel durch Referenzen (Links) miteinander verbunden. Möchte man dies modellieren, so stellen die Links gerichtete Kanten dar, welche Knoten Verbinden, als welche man die zugehörigen Dokumente begreifen kann. Dokument 2 Dokument 1 “Mitarbeiter” “meine Firma” “Seite eines Bekannten” Dokument 3 Dokument 4 Abbildung 9: Das Web ist ungeordnet 17 Allerdings ist man immer noch nicht in der Lage auf Grund dieser formalen Beschreibung als Graph eine Suche auf den Dokumenten Durchzuführen: man weiß weder wo man anfangen soll, noch mit was für einer Reichweite (Tiefe) zu suchen ist. Beachten wir diese Voraussetzungen, so ergibt sich als zugehörige Graph-Normalform natürlicherweise eine baumartige Struktur. Wurzel 2. 1. 1. 2. 2. 2. 2. 3. 3. 3. 3. 3. 3. 3. HTML-Dokument Hypertext-Referenz Abbildung 10: Hypertext-Dokumente in einer Baumstruktur Ausgehend von einem festgelegten Startknoten, mit einer vorgegebenen Suchtiefe und mit Angabe von Link- und Dokumenteigenschaften, lassen sich aus einer solchen Baumstruktur gezielt Dokumente mit den gewünschten Eigenschaften heraussuchen [EKR97]. Der Einsatz solcher Verfahren bietet sich zum Beispiel für eine Suchmaschine an: durch Einbeziehung der Link-Struktur ließe sich über die Anzahl von Verknüpfungen aus themenrelevanten Seiten heraus auf ein einzelnes Dokument, dessen Bedeutung für das Thema einschätzen. 3.2 Anfragesprachen für das Web Um eine einfache Benutzung der Suchalgorithmen in baumartigen Dokumentstrukturen zu ermöglichen, versuchte man für die Beschreibung der Suchaufgabe Sprachen zu definieren, die den schon bekannten Anfragesprachen für herkömmliche Datenbanken ähnelten. Bei unterschiedlichen Forschungsgruppen entstanden unter anderem W3QL [KS95] und WebSQL [MMM97]. Wie es der Name nahelegt, ist WebSQL an Konzept und Syntax der Anfragesprache SQL angelehnt. Das Web wird hier als eine virtuelle relationale Datenbank mit zwei Relationen Dokument und Anker (=Link) aufgefaßt. Für jedes HTML-Dokument existiert in der Dokument-Relation ein Tupel, und für jeden in den Dokumenten enthaltenen Link gibt es ein Tupel in der Anker-Relation. Da es sich nur um virtuelle Relationen handelt, basiert die Semantik von WebSQL auf ihrer portionsweisen Materialisierung. Die Materialisierung erfolgt durch das verfolgen von Referenzen aus bekannten Dokumenten heraus, und wird in der from-Klausel festgelegt. 18 Beispiel: Eine Anfrage mit WebSQL select lokalesDokument.url, entferntesDokument.url, link.label from Document lokalesDokument such that “www.startseite.de“ ->* lokalesDokument, Document entferntesDokument such that lokalesDokument => entferntesDokument, Anchor link such that link.base = lokalesDokument.url where link.href = entferntesDokument.url Es werden Tripel aus je zwei Dokument-Adressen und einer Link-Beschriftung ausgewählt, wobei das erste Dokument lokal vorliegt und in beliebig vielen Schritten von der Startseite aus zu erreichen ist, und das zweite Dokument vom ersten aus nach einem Schritt erreichbar ist. Solche Web-Suchsprachen der ersten Generation sind also in der Lage Dokumente und Links bezüglich ihrer Eigenschaften anzufragen und zurückzuliefern. Auch wenn sie eine Textmuster-Suche innerhalb der jeweiligen Dokumente unterstützen, betrachten sie Hypertext-Dokumente als atomare Einheiten und bieten keinen Zugriff auf die einzelnen HTML-Elemente. Web-Anfragesprachen der zweiten Generation erlauben den Zugriff auf die inneren Strukturen der Web-Objekte die sie manipulieren; sie werden auch als Web-Datenmanipulationssprachen bezeichnet. HTML-Dokumente müssen hier bei der Bearbeitung einem Parser unterworfen werden, der die ermittelten Dokumentbestandteile in einer baumartigen Datenstruktur verwaltet. Da auch die Dokumentobjekte selbst in einer solchen Struktur gehalten werden, wird das vorher eingeführte theoretische Konzept erweitert: interne Kanten stellen Beziehungen zwischen Dokument-Bestandteilen und externe Kanten Beziehungen zwischen den Dokumenten selbst (Links) dar. Ein solches Konzept bietet sich für die Verwaltung einer größeren Anzahl von Dokumenten an, wie sie z.B. in Redaktionssystemen nötig ist. In den ausgewählten Dokumenten können Daten nicht nur ausgelesen, sondern auch aktualisiert werden. Beispiel für eine solche Manipulationssprache ist StruQL [FFLS97], das sogar explizit Bestandteil eines Web-Seiten-Redaktionssystems ist. Diese Sprachen basieren in ihrer Syntax ebenfalls (vage) auf bekannten SQL-Klauseln, sind aber auf Grund der mit dem Anwendungsbereich verbundenen Erstellung und Veränderung von Hypertext-Dokumenten im Wesentlichen funktionale Sprachen. Beide vorgestellten Sprachklassen sind Ergebnis neuerer wissenschaftlicher Forschung und noch nicht Gegenstand von praktischem (kommerziellem) Einsatz und Standardisierungsbemühungen. Die heute für diese Aufgabenstellung bei Suchmaschinen und Redaktionssystemen im Einsatz befindlichen Architekturen und Algorithmen in sind in ihrer Mehrzahl proprietär, nicht offengelegt, und stellen nicht selten die Existenzgrundlage eines Unternehmens dar. 19 4 Datenintegration Das WWW enthält eine ständig wachsende Zahl an Informationsquellen verschiedenster Art. Wie oben erwähnt, finden sich solche Daten-„Tupel“ oft als Bestandteile eines HTMLDokuments; sie können aber auch, hinter einer Benutzeroberfläche verborgen, in einer herkömmlichen Datenbank gespeichert sein. Datenintegration hat es zum Ziel, verteilte Datenquellen verschiedenster Art über eine einheitliche Schnittstelle zugänglich zu machen. 4.1 Klassifizierung Es stellt sich die Frage, ob es im realen Einsatz möglich ist, für jede Anfrage die zugehörige Verarbeitung, Weiterleitung, Beantwortung und Ausgabeformatierung abzuwarten. Da über die Leistungsfähigkeit und Zuverlässigkeit der verwendeten Quellen keine allgemeinen Feststellungen zu treffen sind, würde dies auch für das Integrationssystem an sich gelten. Es gibt im Wesentlichen zwei Klassen von Daten-Integrationssystemen: Data Warehouses Die klassischen Datenintegrationssysteme sind sogenannte Data Warehouses (in der deutschen Literatur manchmal auch Daten-Warenhäuser, [Krc97]). Die Daten werden wie bereits erläutert aus den verschiedenen Quellen geladen. Allerdings geschieht dies nicht zum Zeitpunkt der Benutzeranfrage, sondern unabhängig davon, in einer bestimmten Regelmäßigkeit. Offensichtlicher Vorteil dieser Idee ist, daß das System auf Benutzeranfragen performanter reagieren kann, da die angefragten Daten schon lokal oder auf einem gut erreichbaren, eigenen Datenbanksystem vorliegen. Der offensichtliche Nachteil des Konzepts liegt darin, daß nicht garantiert werden kann, ob die lokal vorgehaltenen Daten mit denen in der eigentlichen Quelle zu jedem Zeitpunkt identisch sind, da sich zwischen dem Importieren der Daten ins Warenhaus und dem Benutzerzugriff der Inhalt der eigentlichen Datenquelle geändert haben kann. Virtuelle Datenintegration Der Ansatz bei virtuellen Datenintegrationssystemen besteht darin, daß die Quelldaten nicht immer lokal vorliegen, sondern zur Laufzeit aus den entfernten Datenquellen geladen werden. Wie schon angemerkt, wirft dieses Vorgehen Fragen zur Leistungsfähigkeit des Systems auf. Im Unterschied zum Data Warehousing müssen hier also die Komponenten zur AnfrageAuswertung, Ablaufoptimierung, und Ausführungssteuerung (in Abbildung 11 die umrandeten Bereiche) deutlich höher entwickelt sein, um den Anwendern unverantwortlich lange Reaktionszeiten zu ersparen. Aus diesem Grund richtet sich in letzter Zeit der Großteil an Forschung im Bereich Datenintegration auf diese Systeme. Trotz der Optimierungsstrategien werden Anfragen auf die lokal gespiegelten Daten im Durchschnitt schneller ausgeführt werden können als auf die ursprünglichen Datenquellen. Die Entscheidung für einen der beiden Ansätze hängt also von der Art verwendeter Quellen ab: ob sie häufig wechselnden Inhalts sind, wie zuverlässig sie erreichbar sind, wie sie in ihrer Priorität zu bewerten sind und wie umfangreich die jeweiligen Datenbestände sind. Ein weiteres Kriterium für den Import in ein Integrationssystem ist die Fragestellung, inwieweit die Datenquellen überhaupt ohne eine spezielle Client-seitige Software verwendbar sind. 20 Sollte das nicht der Fall sein, bietet sich ein zentralisierter Zugriff über ein Datenintegrationssystem an, um aufwendige Änderungen an allen betroffenen Clients zu vermeiden. Benutzungsoberfläche Globale Sichtdefinition Resultate (WWW-basiert) Anfrage QuellenBeschreibungen Relevanzprüfung Plan- Inhalte & Fähigkeiten Logik-Planer Generator Ausführungs-Planer Ausführungsplan AusführungsLogik Selektion, Projektion, Verbund ... Schnittstellen-Programm Schnittstellen-Programm Schnittstellen-Programm Schnittstellen-Programm ,,INTERNET’’ #Mitarbeiter Meyer Maier Müller Kunz Strukturierte Dateien Name Tel.. Adr. Hypertext-Formulare Relationale Datenbank Objektorientierte Datenbank Abbildung 11: Beispiel für die Architektur eines Datenintegrationssystems (nach [FLM98]) 4.2 Aufbau von Datenintegrationssystemen Aufgabe eines Web-basierten Datenintegrationssystems ist es, die Informationen aus verschiedensten WWW-Quellen auf Anfrage zu extrahieren und so darzustellen, als würden die verwendeten Quellen Datentupel anstatt liefern, anstelle von Daten, die keiner festen Ordnung unterliegen. Kriterium für das Ermitteln einer Ordnung über den Daten ist in diesem Fall deren Anordnung innerhalb eines Dokuments, nicht die (Hyperlink-)Struktur zwischen Dokumenten. Um dies zu ermöglichen bedient man sich einer Reihe von besonders auf die zu verwendenden Quellen maßgeschneiderter Zugriffsfilter (Wrappers). Dabei handelt es sich um (Teil-)Programme des Systems, die Anfragen, formuliert für die jeweiligen Schemata einer Datenquelle, in tatsächliche Zugriffe auf diese umwandeln. Ist die Quelle keine Datenbank, so ist dieses Schema nur virtuell. Bei den verwendeten Datenquellen muß es sich dabei nicht um eine Hypertext-FormularOberfläche handeln, auch algorithmisch verwertbare (wohlstrukturierte) Dateien sowie direkt zugängliche Datenbanksysteme kommen in Frage. Der Zugriff auf Datenbanksysteme kommt dabei ohne Dokumentanalyse-Algorithmen aus, allerdings ist sicherzustellen, daß nach der Umsetzung der Anfragen in das Schema der einzubindenden Datenbank auch die Semantik erhalten bleibt. Für den Zugriff auf strukturierte Dateien benötigt man eine Logik, welche die 21 benötigten Informationen ausliest, und als Anfrage-Resultat des zugehörigen virtuellen Schemas formuliert. Am Schwierigsten ist der Zugriff auf Hypertext-Dokumente: es wird ein HTML-Parser benötigt, der Datenwörter aus Dokumenten extrahiert, und eine Logik, welche die Daten in das verwendete Schema bringt. Problematisch dabei ist, daß sich die Struktur von Web-Dokumenten, und damit auch die Semantik der extrahierten Daten, relativ häufig ändern, während einmal eingeführte Dateiformate oder Datenbankschemata nur selten und ungern gewechselt werden. Ein offensichtliches Problem beim Anbinden solcher Datenquellen über das Internet (bzw. Intranet) sind Einschränkungen bei den jeweils zulässigen Anfragen (z.B. Sicherheitsgründe, Implementierung der Web-Formulare), und Randbedingungen, welche bezüglich der vorliegenden Daten zu berücksichtigen sind (z.B. Vollständigkeit, Fehlerfreiheit). Der eigentliche Kern des Integrationssystems hat also die Aufgabe, Anfragen, die für ein intermediäres Vermittlerschema formuliert wurden, an die Schnittstellenprogramme weiterzureichen. Hierzu muß die Anfrage analysiert werden, um die relevanten Datenquellen zu ermitteln. Nötig dafür ist eine Quellenbeschreibung und eine Definition der jeweiligen Sichten auf die Daten. Es wird ein Plan zur Abfrage der ermittelten Datenquelle(n) erstellt, und die jeweiligen Anfrageklauseln werden formuliert. Die Resultate der Anfrage können wie normale Datenbankergebnisse mit einer (Web-) Oberfläche an den Benutzer weitergeleitet werden. 5 Abschließende Anmerkungen Wie eingangs erwähnt, stellt die Verbindung von Datenbank- und Web-Technologien die Entwickler vor einige Probleme. Es existiert allerdings auch eine Reihe von Lösungsansätzen. Diese besitzen unterschiedliche Schwerpunkte bezüglich ihrer Zielsetzung, und sind jeweils Ergebnis eines Abwägens von Anforderungen und technisch bedingten Einschränkungen. 5.1 Zusammenfassung Trotz seines Alters ist die CGI-Programmierung immer noch die am weitesten verbreitete Methode zur dynamischen Generierung von Web-Seiten. Grund dafür ist die weite Verbreitung der zugehörigen Programmierkenntnisse; jede andere Technologie braucht einige Jahre, bis sich eine vergleichbare Entwicklergemeinde herausgebildet hat. Weitere Vorteile sind die Flexibilität und der plattformübergreifende Charakter von CGI. Die erweiterten Server-API-Konzepte haben den Nachteil, daß sie die Freiheit bei der Wahl der Scriptsprache einschränken, und ein Erlernen der API-Syntax erforderlich wird. Größere Chancen ergeben sich für dynamische Web-Seiten auf Basis eingebetteter Script-Kommandos; die Entwicklung ist leicht zu erlernen, da kaum höhere höhere Programmierkonzepte oder Schnittstellen zu beachten sind, und Anweisungen direkt an die passende Stelle im HTMLCode eingefügt werden. Trotz der Vorteile bei Sicherheit und Transaktionssteuerung werden die Client-seitigen Erweiterungen wie Plug-Ins oder dedizierte, nicht voll Web-integrierte Applets für den allgemeinen Datenbankzugriff nicht von großer Bedeutung sein, wohl aber sind sie Mittel der Wahl, wenn der Zugriff Beschränkungen unterliegen soll. Es zeigt sich wieder, daß 22 allgemeine Empfehlungen in diesem Bereich nicht sinnvoll sind, sondern die passende Technologie in höchstem Maße vom Einsatzzweck abhängt. Allgemein entwickelt sich jedoch der Trend von proprietären Lösungen weg, da sich sowohl Server- als auch Client-Systemarchitekturen zunehmend diversifizieren, und eine Interoperabilität der verschiedenen Systembestandteile eine berechtigte Kundenforderung ist. 5.2 Ausblick Die Verbindung WWW-Datenbanken wird in Zukunft weiter an Bedeutung gewinnen, da sowohl die Verwendung von Web-Oberflächen in allen Anwendungsbereichen zunimmt, als auch die Menge zu handhabender Daten. Datenbanksysteme befinden sich auf dem Vormarsch und verdrängen immer mehr die vorher oft firmentypische und zueinander inkompatible dateiorientierte Datenverwaltung. Zusammen mit dem offenen DokumentAustauschformat XML (eXtensible Markup Language) sorgen sie auch in diesem Bereich für eine Zurückdrängung proprietärer Standards. Es bleibt der Wunsch nach einer quasi „natürlichen“ Hypertext-Anbindung von Datenbanksystemen; also eine nahtlose Einbettung von echten Datenbanksitzungen, mit all ihren Vorteilen. Ein interessanter Ansatz in dieser Richtung ist die Entwicklung von XMLbasierten Anfragesprachen. Auch auf absehbare Zeit wird damit der Bereich WWW-Datenbank-Kopplung Gegenstand von wissenschaftlicher Forschung und Standardisierungsbemühungen sein. 23 Literatur: [ASP96] Was ist Active Server Pages? Microsoft Corporation 1996; http://www.altmuehlnet.de/~schneider-m/asp [BeGr98] Zugriff auf Datenbanken über das World Wide Web Wolfgang Benn, Ingo Gringer; Informatik-Spektrum 21 (S. 1-8), Springer 1998 [EKR97] Connecting Databases to the Web: A Taxonomy of Gateways Gerald Ehmayer, Gerti Kappel, Siegfried Reich; Johannes Kepler Universität Linz 1997 [FFLS97] A Query Language for a Web-Site Management System Mary Fernandez, Daniela Florescu, Alon Levy, Dan Suciu; SIGMOD Records 26-3, 1997 [FLM98] Database Techniques for the World Wide Web: A Survey Daniela Florescu, Alon Levy, Alberto Mendelzon; SIGMOD Records 27-3, 1998 [HeSa00] Datenbanken: Konzepte und Sprachen Andreas Heuer, Gunter Saake; MITP-Verlag 2000 [JSP01] Java Server Pages: Dynamically Generated Web Content Sun Microsystems Inc. 2001; http://www.javasoft.com/products/jsp/index.html [Krc97] Informationsmanagement Helmut Krcmar; Springer Verlag 1997 [KS95] W3QS: A Query System for the World Wide Web David Konopnicki, Oded Shmueli; Proceedings of the International Conference on Very Large Data Bases, Zürich 1995 [Mar97] Dynamic WebPages in Java: Servlet Benoît Marchal 1997; http://www.javacats.com/US/articles/servlet.html [MMM97] Querying The World Wide Web A. Mendelzon, G. Mihaila, T. Milo; International Journal on Digital Libraries, April 1997 Entstanden im Rahmen des Seminars „Weltweite Datenbanken“ der Abteilung Informationssysteme im Fachbereich Informatik, Universität Oldenburg im Wintersemester 2000/01 24