Institut für Informatik Arbeitsgruppe Softwaretechnik Warburgerstr. 100 33098 Paderborn Entwurfsunterstützung Web-basierter Schnittstellen auf Basis der UML Diplomarbeit für den integrierten Studiengang Informatik im Rahmen des Hauptstudiums II von Martin Luther Modjo Kamneng Stemberg 9, 33106 Paderborn E-mail: [email protected] Matr. Nr.: 3275448 vorgelegt bei Prof. Dr. Wilhelm Schäfer und Prof. Dr. Gregor Engels Paderborn, im April 2003 i Danksagung Als erstes möchte ich mich bei meinen Eltern bedanken, die mir die notwendigen Grundlagen des Lebens beigebracht und die nötige Erziehung gegeben haben. Besonders bedanke ich mich bei Frau Rachel Dzukou und Frau Maria Notz, deren Unterstützung mir dieses Studium ermöglicht hat. Weiterer Dank gebührt auch meiner Frau Muriel Peggy, die mir die Abende und Nächte verziehen hat, die ich mit dem Rechner verbracht habe. Ich danke auch meinem Betreuer Jörg Wadsack für seine wertvollen Ratschläge sowie Herrn Prof. Dr. Wilhelm Schäfer für die Erstkorrektur und Herrn Prof. Dr. Engels für die Zweitkorrektur der Arbeit. Außerdem danke ich allen Mitarbeitern der AG-Schäfer für die gute Zusammenarbeit und die angenehme Atmosphäre. Eidesstattliche Erklärung Ich versichere, dass ich die Arbeit ohne fremde Hilfe und ohne Benutzung anderer als der angegebenen Quellen angefertigt habe, und dass die Arbeit in gleicher oder ähnlicher Form noch keiner anderen Prüfungsbehörde vorgelegen hat und von dieser als Teil einer Prüfungsleistung angenommen worden ist. Alle Ausführungen, die wörtlich oder sinngemäß übernommen worden sind, sind als solche gekennzeichnet. Paderborn, 15. April 2003 ________________________ (Martin L. Modjo Kamneng) ii Inhaltsverzeichnis 1. EINLEITUNG ......................................................................................................1 1.1 Motivation..................................................................................................................1 1.2 Ziel der Arbeit ...........................................................................................................2 1.3 Gliederung der Arbeit ..............................................................................................3 2. GRUNDLAGEN ..................................................................................................5 2.1 Web-Applikation.......................................................................................................5 2.1.1 Definition einer Web-Applikation.......................................................................5 2.1.2 Architektur einer Web-Applikation.....................................................................7 2.2 Textauszeichnungssprachen...................................................................................10 2.2.1 HTML................................................................................................................10 2.2.2 XML ..................................................................................................................13 2.2.3 XHTML.............................................................................................................15 2.2.3 XML-Schema ....................................................................................................16 2.3 Serverskripte ...........................................................................................................17 2.3.1 CGI Programme ................................................................................................18 2.3.2 Java-Servlets......................................................................................................18 2.3.3 Java Server Pages ..............................................................................................22 2.3.4 PHP....................................................................................................................24 2.3.5 ASP....................................................................................................................25 2.4 HTML Template .....................................................................................................26 2.5 Unified Modeling Language (UML) ......................................................................27 2.6 Das Werkzeug Fujaba ............................................................................................29 2.6.1 Fujaba UML-Klassendiagramme ......................................................................29 2.6.2 Fujaba Interaktions-Diagramme........................................................................30 3. VERWANDTE ANSÄTZE .................................................................................34 3.1 Das Cocoon Projekt ................................................................................................34 iii 3.2 UML Erweiterung für den Entwurf von Web-Applikationen............................35 3.2.1 Modellierung von Web-Applikationen mit UML .............................................36 3.2.2 Eine UML Erweiterung für den Entwurf von Web-Sites..................................36 3.2.3 Modulare Modellierung von dynamischen Web-Seiten mit UML ..............37 4. MODELLIERUNG VON DYNAMISCHEN WEB-SEITEN MIT UML .................40 4.1 Konzept ....................................................................................................................40 4.1.1 Template Mechanismus.....................................................................................40 4.1.2 Layout-Elemente ...............................................................................................42 4.1.3 DB-Zugriffsschicht............................................................................................44 4.1.4 Die Web-Schnittstelle........................................................................................45 4.2 Technische Umsetzung ...........................................................................................47 4.2.1 UML-Modell für HTML-Elemente...................................................................47 4.2.2 Java-Servlets in Fujaba......................................................................................55 4.2.3 Realisierung der Web-Schnittstelle in Fujaba ...................................................57 4.2.4 Codegenerierung ...............................................................................................63 5. PROTOTYP ......................................................................................................66 5.1 Erstellung der Wissensbank...................................................................................66 5.2 Template Bibliothek................................................................................................67 5.3 Architektur des Diagnosesystems ..........................................................................68 6. ZUSAMMENFASSUNG UND AUSBLICK........................................................77 LITERATURVERZEICHNIS..................................................................................79 ANHANG ..............................................................................................................83 iv Abbildungsverzeichnis Abbildung 1: Beispiel einer Web-Applikation – Das Autogeschäft AutoScout24 ...............1 Abbildung 2: Beispielgraph für ein medizinisches Diagnosesystem [46, S. 16]...................3 Abbildung 3: Basic Web Applikation Architektur ................................................................6 Abbildung 4: Dynamische Web-Seite Architektur................................................................6 Abbildung 5: Architektur einer Web-Applikation.................................................................7 Abbildung 6: Grundgerüst eines HTML- Dokumentes .......................................................12 Abbildung 7: Beziehung zwischen XML-Dokumente, XML-Schema und ihre Validierung .....................................................................................................................................17 Abbildung 8: Grundsätzliche Arbeitsweise von Servlets ....................................................19 Abbildung 9: Request-Response-Muster für Servlet-Engine ..............................................20 Abbildung 10: Kommunikation zwischen Servlet Engine und Servlet ...............................21 Abbildung 11: Übersicht der Servlet-API ...........................................................................22 Abbildung 12: Beispiel eines HTML Templates – test.templ .............................................26 Abbildung 13: Beispielprogramm für die Validierung von test.tmpl..................................27 Abbildung 14: Der Software-Entwicklungsprozess als Wasserfall-Modell ........................28 Abbildung 15: Beispiel für einen UML Klassendiagramm aus dem Diagnosesystem........30 Abbildung 16: Beispiel eines Aktivitätsdiagramms ............................................................31 Abbildung 17: Beispielaktivität ...........................................................................................33 Abbildung 18: Funktionsprinzip von Cocoon .....................................................................35 Abbildung 19: Abstraktes Model der Web Applikation......................................................38 Abbildung 20: Metamodel für den Aufbau des Klassendiagramms....................................39 Abbildung 21: Ablauf der Modellierung und Generierung von dynamischen Web-Seiten 41 Abbildung 22: UML-Zuordnung der zu realisierenden Komponente. ................................42 Abbildung 23: Überführung des XML Schemas in einem UML-Modell ...........................43 Abbildung 24: Ablauf des Transformationsprozesses .........................................................44 Abbildung 25: Überführung der Datenbank in Fujaba ........................................................45 Abbildung 26: Konzept der Web-Schnittstelle....................................................................46 Abbildung 27: UML-Klassendiagramm - Struktur der HTML-Tabelle..............................49 Abbildung 28: Einlesen des Templates und Aufbau des ASG ............................................50 v Abbildung 29: Methoden einer HTML-Tabelle ..................................................................50 Abbildung 30: Struktur von HTML-Elementen nach dem Kompositum-Muster ...............51 Abbildung 31: typische Struktur des ASGs einer HTML-Tabelle (vgl. Abbildung 27) .....51 Abbildung 32: addToChildren - Methode für HTML-Tabelle ............................................52 Abbildung 33: generateHtmlCode – Methode für HTML-Tabelle .....................................53 Abbildung 34: Darstellung des ASGs eines Templates.......................................................54 Abbildung 35: Dialog zur Erzeugung einer UML Klasse in Fujaba ...................................55 Abbildung 36: Erzeugung der Servlet doPost Methode in Fujaba ......................................56 Abbildung 37: Implementierung der doGet-Methoden der AnmeldeServlet – Klasse .......56 Abbildung 38: Kommunikation zwischen der Web-Schnittstelle und HTML-Elementen..57 Abbildung 39: Beispielstruktur einer Web-Applikation......................................................58 Abbildung 40: Anmeldeformular des medizinischen Diagnosesystems .............................59 Abbildung 41: Klassendiagramm – Ausschnitt aus dem Diagnosesystem..........................60 Abbildung 42: Modellierung der doGet Methode ...............................................................60 Abbildung 43: Modellierung der buildServerPage Methode ................................61 Abbildung 44: Modellierung der patientSelection Methode...................................62 Abbildung 45: Antwortseite auf die Anmeldeanfrage aus Abbildung 40 ...........................62 Abbildung 46: Aufbau und Codegenerierung eines ASGs..................................................64 Abbildung 47: Codegenerierung in Fujaba..........................................................................64 Abbildung 48: Quelltext einer Servlet-Klasse .....................................................................65 Abbildung 49: Ausschnitt aus dem SQL-Diagramm des DB-Schemas ..............................67 Abbildung 50: Template-Bibliothek des Diagnosesystems.................................................67 Abbildung 51: Beschreibung der Servlet-Klassen des Diagnosesystems............................68 Abbildung 52: Design des Diagnosesystem - Servlet-Klassen und HTML-Elemente........69 Abbildung 53: Design der Kommunikation zwischen Servlet- und Datenbankklassen......70 Abbildung 54: Indexseite des Diagnosesystems – diagnosesystem.html ............................71 Abbildung 55: doGet Methode von der Klasse MDSServlet ........................................71 Abbildung 56: init Methode der Klasse MDSServlet..................................................72 Abbildung 57: Patientenformular zur Erstellung einer neuen Behandlung .........................73 Abbildung 58: buildServerPage-Methode der Patient-Servlet-Klasse.......................74 Abbildung 59: Ausschnitt des Templates – diagnose.html..................................................74 vi Abbildung 60: fillKrankheiten-Methode der Diagnosis-Klasse ..........................................75 Abbildung 61: Diagnoseformular eines Patienten ...............................................................76 Abbildung 62: Klassendiagramm - HTML Elemente..........................................................83 Abbildung 63: SQLDiagramm aus der eingelesenen Datenbank des Diagnosesystems .....84 Abbildung 64: Architektur des Diagnosesystems................................................................85 1 1. Einleitung 1.1 Motivation Die rasanten Entwicklungen und Anforderungen des Internets in den letzten Jahren haben zur Standardisierung von Browsern als Benutzeroberfläche geführt. Mit der zunehmenden Beliebtheit des Internets gewinnen Anwendungen wie Web-Applikationen, die auf der Infrastruktur des WWW (Word Wide Web) basieren, an großer Bedeutung. Grundlegende Komponenten einer solchen Web-Applikation erweisen sich als das zugehörige graphische Design und die Geschäftslogik der Anwendung. Es geht bei ihrer Entwicklung nicht mehr nur darum, statische HTML-Seiten zu erstellen und diese in dem Word Wide Web verfügbar zu machen, sondern auch um die Realisierung von komplexen Geschäften mit Datenbankzugriffen wie z.B. AutoScout24 [2] (vgl. Abbildung 1). Abbildung 1: Beispiel einer Web-Applikation – Das Autogeschäft AutoScout24 2 Die Entwicklung von Web-Applikationen geschieht in der Regel mit Hilfe von Technologien bzw. Skripten wie CGI (Common Gateway Interface [6] [7]), PHP (Hypertext Preprozessor [25] [26]), ASP (Microsoft’s Active Server Pages [1]), JSP (Java Server Page [19]) oder Java Servlets [29] [30] [31]. Ihre Benutzung weist allgemein auf folgende Einschränkungen hin: • • • Fehlende CASE-Tools für ihren Ansatz Manuelle Implementierung der Interaktionen. Mischung von Logik und Layout-Elemente. Einer der Hauptgründe dieser Einschränkungen liegt bei den fehlenden Entwicklungsprozessen für ihre Realisierung. Der fehlende Entwicklungsprozess führt in der Regel zu einer schlechten Portierbarkeit und geringeren Wiederverwendbarkeit der meist entwickelten Web-Applikationen. Außerdem weisen die so entwickelte WebApplikationen auf eine schlechte Anpassungs-, Verbesserungsund Erweiterungsmöglichkeiten an neuen Anforderungen hin. 1.2 Ziel der Arbeit In dieser Arbeit wird das Case-Tool Fujaba (From UML to Java and back again [10]) um die Fähigkeit erweitert, dynamische Web-Seiten modellieren zu können. Diese Erweiterung soll zuerst eine objektorientierte Zugriffsschicht auf die Layout-Elemente realisieren. Mit Hilfe einer vorliegenden Zugriffsschicht auf die Datenbank soll dann eine Kommunikationsschicht zwischen Layout-Elementen und Datenbanktabellen ermöglicht werden, mit deren Unterstützung die manuelle Implementierung der Interaktionen von der Web-Applikation erhoben werden soll. Dabei wird ein Mechanismus für die Modellierung von dynamischen Web-Seiten mit UML realisiert, das Layout-Elemente und Geschäftslogik interagieren lässt. Das CASE-Tool Fujaba dient als Basis der Implementierung. Sie verwendet bei der Codegenerierung dessen UML Meta-Schema. Ohne diese Arbeit verfügt Fujaba über keine Modellierungsmöglichkeit von Web-Applikationen. Als Beispielanwendung zur Erläuterung des Zieles dieser Diplomarbeit verwende ich ein einfaches Expertensystem zur Unterstützung der Diagnosefindung in einer Arztpraxis. In dem System sollen einerseits Behandlungen von Patienten durch Ärzte einer Praxis protokolliert werden können; andererseits soll das System eine Wissensbank zur Verfügung stellen, in der die Zusammenhänge von Krankheiten, Symptomen und Ursachen sowie geeigneten Untersuchungsmethoden, Diagnose- und Behandlungsmöglichkeiten für Krankheiten enthalten sind. Das System soll dem Arzt bei der Diagnose und Behandlung unterstützen, indem es, ausgehend von bereits festgestellten Symptomen, wahrscheinliche 3 Krankheiten ermittelt und weitere Untersuchungen zur genaueren Eingrenzung der Krankheit vorschlägt. Konnte eine Krankheit diagnostiziert werden, soll das System Behandlungsmöglichkeiten vorschlagen, beziehungsweise auf bekannte Kontraindikationen für Behandlungen, wie etwa eine Allergie gegen bestimmte Medikamente, hinweisen (vgl. Abbildung 2). Abbildung 2: Beispielgraph für ein medizinisches Diagnosesystem [46, S. 16] 1.3 Gliederung der Arbeit Die vorliegende Arbeit gliedert sich in 6 Kapitel. Das Kapitel 2 gibt einen Überblick über die in dieser Arbeit verwendeten Grundlagen. Der Abschnitt 2.1 definiert WebApplikationen, stellt die Architektur und die zugehörigen Komponenten vor. Der Abschnitt 2.2 thematisiert die Auszeichnungssprachen wie HTML (HyperText Markup Language [15] [16] [17]), XHTML (Extensible HyperText Markup Language [47]), XML (Extensible Markup Language [43]) und XML-Schema [44], während in Abschnitt 2.3 eine Einführung in die Technologien für die Entwicklung von Web-Applikationen gegeben 4 wird. Der Abschnitt 2.4 präsentiert das Konzept von HTML Templates, und die Abschnitte 2.5 und 2.6 schließen Kapitel 2 mit einer Übersicht über die UML (Unified modeling language [38] [39]), sowie das Projekt Fujaba ab. Weiterhin werden im Kapitel 3 die mit dieser Arbeit verwandten Ansätze vorgestellt. Im Abschnitt 3.1 wird das Cocoon Projekt erläutert. Es ist ein Java geschriebenes Framework, das XML/XSL Dokumente für Client in beliebigen Formaten darstellen kann. Die folgenden Absätze im Abschnitt 3.2 thematisieren das Konzept einer UML-Erweiterung für den Entwurf von Web-Applikationen. Das 4. Kapitel befasst sich im Abschnitt 4.1 mit einem allgemeinen Konzept zur Modellierung von dynamischen Web-Seiten mit UML und der Abschnitt 4.2 mit der technischen Umsetzung. Anschließend wird im Kapitel 5 ein Prototyp als Beispielsitzung für die in dieser Arbeit erarbeiteten Lösungsansätze vorgestellt. Es ist ein Expertensystem zur Unterstützung der Diagnosefindung in einer Arztpraxis. Das Kapitel 6 beschäftigt sich abschließend mit den Ergebnissen dieser Diplomarbeit in Form einer Zusammenfassung und mit möglichen Vorschlägen, die zu späteren Arbeiten beitragen können. 5 2. Grundlagen 2.1 Web-Applikation 2.1.1 Definition einer Web-Applikation In dieser Arbeit betrachten wir eine Web-Applikation als die Aktualisierung der Geschäftslogik durch Benutzereingabe. Das Wesentliche ist die Interaktion zwischen Benutzer und Geschäftslogik, die hinter der Applikation steckt. Ohne Geschäftslogik hinter der Applikation, gibt es keine Web-Applikation. Deswegen werden Systeme, die Interaktionen zwischen Benutzer (durch den Browser) und Geschäftslogik auf dem Server ermöglichen, als Web-Applikationen bezeichnet. Viele Web-Applikationsbenutzer navigieren nicht nur durch Links, sondern interagieren mit dem Server durch Dateneingabe. Diese Daten können einfache Texte, Checkbox Listen, binäre oder File Informationen sein. Interaktionen der Web-Applikation werden dem Benutzer in einem Browser dargestellt. Der Browser bezeichnet eine Applikation, die auf der Clientmaschine abläuft. Er ist mit dem Server im Netzwerk verbunden und kann Informationen über eine Web-Seite anfordern. Nachdem die Seite mit Informationen aktualisiert wird, wird die Verbindung mit dem Server getrennt. Der Browser weiß, wie er mit dem Web-Server kommuniziert und wie er Informationen aus der Anfrage darstellt. Mehrere Web-Seiten-Informationen bestehen aus Links zu anderen Web-Seiten, die durch die Benutzeranfrage leicht erreichbar sind. Benutzer navigieren innerhalb der Applikation über Links und Anfragen, die neue Web-Seiten vom Server generieren. Eine Web-Applikation beinhaltet drei Hauptkomponenten: • • • Web Server Netzwerk Verbindung Browser Abbildung 3 stellt die Basic-Architektur einer Web-Applikation dar. Eine Anfrage vom Browser wird über die Netzwerkverbindung, die durch einen HTTP (Hyper Transfer Text Protokoll [14]) definiert ist, an den Web-Server weitergegeben. Der Web-Server bearbeitet die Anfrage und generiert eine Web-Seite als Antwort, die dem Browser zurückgegeben wird. 6 Abbildung 3: Basic Web Applikation Architektur Setzen sich Inhalte der Antwortseite bei der Laufzeit aus Informationen in einer Datenbank zusammen, spricht man von einer dynamischen Web-Seite. Abbildung 4 präsentiert die Architektur von dynamischen Web-Seiten. Die Generierung der Antwortseite wird in diesem Fall durch einen Filter mit Zugriff auf die Datenbank realisiert. Abbildung 4: Dynamische Web-Seite Architektur Dynamische Web-Seiten bieten einige Vorteile für Web-Designer. Sie ermöglichen die automatische Aktualisierung der Web-Inhalte und ihre Synchronisation mit Daten aus der Datenbank. Eine dynamische Web-Seite beinhaltet Code, der auf dem Web-Server bei einer Anfrage ausgeführt wird. Sie kann also als ein Textfile mit Skripten, die auf dem Web-Server interpretiert werden oder eine kompilierte binäre File, die auf dem WebServer ausgeführt wird, gespeichert werden. In beiden Fällen benutzt der Code der WebSeite Server-Ressourcen wie Datenbankzugriff, Mail Service, File Service, etc. 7 2.1.2 Architektur einer Web-Applikation Die Abbildung 5 stellt eine Zusammenfassung der Architektur von Web-Applikationen dar. Alle Aktionen von Web-Applikationen basieren auf Web-Seiten. Web-Seiten können vom Server durch Browser Anfrage entstehen oder vom Web-Server zum Browser durch einen Filter verteilt werden. Es wird zwischen Client-Seiten und Server-Seiten unterschieden. Server-Seiten können die Client-Seiten wiederum generieren. Clientanfragen werden von Client-Seiten durch Formulare, die aus Elementen wie Inputfelder, mehrzellige Textfelder, Listen- und Buttonelemente bestehen, an den ServerSeiten für ihre Bearbeitung weitergegeben. Client-Seiten können auch aus Frames bestehen, die durch Links (Target) andere Client-Seiten erreichen. Für statische Seiten sind Client-Seiten einfache Kopien von Server-Seiten. Im Fall von dynamischen Web-Seiten werden Client-Seiten von dem auf dem Web-Server ausgeführten Skript generiert. Diese Skripte werden meistens mit Sprachen wie PHP, ASP, JSP oder Java-Servlets geschrieben. Da statische Seiten als spezielle Fälle von dynamischen Seiten betrachtet werden können, lässt sich die Realisierung von Web-Applikationen allgemein nur noch über die Verwirklichung dynamischer Web-Seiten zusammenfassen. Abbildung 5: Architektur einer Web-Applikation 8 Client Ein Client ist ein Rechner, der die Dienste eines anderen als Server oder Host bezeichneten Rechners nutzt. Wenn jemand mit seinem PC Daten aus dem WWW (World Wide Web) abruft, ist der PC ein Client des Web-Servers, mit dem er verbunden ist. Web-Seiten können mit spezifizierten Komponenten ausgestattet sein, die auf der Clientmaschine ausgeführt werden. Die Häufigsten sind Java Applets, ActiveX Controlls und einige, die kompilierte Komponenten beinhalten. Sie werden bei Anfragen im Browser ausgeführt. Abhängig vom Browser und der Konfiguration dieser Komponenten werden auf Ressourcen des Browsers und der Clientmaschine zugegriffen. Server Ein Server bezeichnet einen Rechner, der anderen Rechnern im Netz einen Dienst zur Verfügung stellt. In großen Netzwerken können auch mehrere Server mit teilweise verschiedenen Funktionen vorkommen. Client/Server Die Client/Server Bezeichnung bezieht sich auf eine Struktur, die für die Verbindung von Computersystemen in einem Netzwerk zuständig ist. Hierbei ist der Client in der Regel der Desktop-PC oder eine Workstation. Der Server ist in der Regel ein größerer Rechner, auf dem große Mengen von Daten gespeichert und wichtige Anwendungen (Computerprogramme) ausgeführt werden. Web-Applikationen basieren auf das Client/Server-Prinzip. Bei Clientanfrage wird die Geschäftslogik vom Skript innerhalb der Web-Seite auf dem Server interpretiert. Web-Seiten Die grundlegenden Komponenten der Web-Applikation sind Web-Seiten. Browser können Web-Seiten vom Web-Server anfragen. Web-Server verteilen Web-Seiten zum Browser. Die Realisierung und die Organisation von Web-Seiten ist die Aufgabe der Benutzerschnittstelle der Applikation. Bei Web-Applikationen agiert der Browser als Container für die Benutzerschnittstelle mit spezifischen Schnittstellen, die den Inhalt der Web-Seite bestimmt. Eine Web-Seite setzt sich innerhalb von Serverskripten, die für ihre Generierung eingesetzt werden, als eine Kombination aus statischer und dynamischer Seite zusammen. Als dynamische Seite beinhaltet sie einen Code, der auf dem Web-Server ausgeführt wird. Daraus wird mit Hilfe von Server-Ressourcen eine neue Seite generiert und dem Browser zurückgeschickt. 9 Serverskripte Bei einer Clientanfrage existiert die Verbindung zwischen Benutzer und Server solange, bis die Antwortseite generiert ist. Alle Aktivitäten auf dem Server finden während dieser Verbindung statt. Die Geschäftslogik, die auf dem Server liegt, wird bei der Ausführung des Skripts der angefragten Web-Seite aktiviert. Abhängig von der Skript-Engine (Abstraktion eines Berechnungsprozesses mit zeitlicher Beschränkung), die den Berechnungsprozess des Skripts bestimmt, kann die dynamische Seite benutzerdefinierte Variablen oder Funktionen enthalten. Einige Skript-Engines ermöglichen es sogar Objekte zu definieren, die durch Interaktionen der Applikation angesprochen werden. Als Ergebnis bei der Ausführung des Skripts wird die Geschäftslogik aktualisiert und als Antwort auf die Clientanfrage eine Web-Seite generiert. Clientskripte Der Server ist nicht die einzige Komponente der Web-Applikation, in der Skripte ausgeführt werden. Der Browser kann selber einen Skriptcode auf der Web-Seite ausführen. Diese Ausführung hat allgemein keine Zugriffe auf Server-Ressourcen. Unter Clientskripte sind nicht Clientkomponenten wie Java Applets oder ActiveXcontrols gemeint, die eine andere Struktur innerhalb der Web-Applikation haben, sondern solche wie Java-Skripte oder VB-Skripte, die im Code der Web-Seiten eingebettet sind. Dieser Code wird im Browser beim Laden eines Dokuments oder bei einem Knopfdruck ausgeführt. Die dynamische HTML-Spezifikation (DHTML, Dynamic HyperText Markup Language) ermöglicht sogar bei Clientskripten einen besseren Zugriff und eine bessere Kontrolle über jeden Aspekt des Web-Seiten-Inhalts. Wenn eine Web-Seite im Browser dargestellt wird, wird sie zuerst eingeparst und in verschiedenen Elementen verteilt. Jedes dieser Elemente kann durch einen Namen oder ID-Attribute identifiziert werden. Diese Namen oder ID-Attribute können auch auf einem Clientskript referenziert werden. Genauso wie bei Serverskripten können benutzerdefinierte Variablen und Funktionen bei Clientskripten definiert werden. Formulare Jede Web-Applikation wird mehr als navigierbare Inputfelderdaten akzeptiert. Auch Texte, selektierbare und boolesche Informationen werden verarbeitet. Das HTML-Formular ist der am meisten verbreitete Mechanismus, um Benutzerinformationen zu sammeln. Seine grundlegenden Elemente sind Inputfelder, mehrzellige Eingabefelder, Checkboxen, Radiobutton und Selektionslisten. Diese Elemente werden durch einen Namen oder IDAttribute identifiziert. Das Formular wird mit einer dynamischen Seite assoziiert, die durch den beinhalteten Skriptcode Clientanfragen bearbeitet. Wenn ein Formular ausgefüllt ist, wird es durch einen Knopfdruck an den Server geschickt. Der Web-Server findet die mit dem Formular assoziierte Seite und führt den beinhalteten Skriptcode aus. Der Skriptcode ermöglicht die Zugänglichkeit der durch das Formular zugeschickten Informationen. 10 Frames HTML-Frames unterstützen die gleichzeitige Offenhaltung mehrerer Web-Seiten. Der Browser teilt sein Fenster in verschiedene Unterfenster auf, auf dem verschiedene Seiten dargestellt werden können. 2.2 Textauszeichnungssprachen Im Abschnitt 2.1 wurde die Architektur der Web-Applikation vorgestellt. Durch die Interaktionen zwischen Client und Server werden Informationen ausgetauscht. Daten werden somit von dem Client in bestimmten Datenbanken abgespeichert oder dem Client von der Datenbank zur Verfügung gestellt. Je nach Fähigkeit des Browsers müssen diese Daten aufgrund ihrer Darstellung bei dem Client in passenden Formaten geschrieben werden. In den folgenden Abschnitten werden nun die Auszeichnungssprachen (Markup Languages) HTML, XML und XHTML erläutert. Diese Sprachen werden benutzt, um Web-Inhalte darzustellen. 2.2.1 HTML HTML bezeichnet die Sprache, mit der Web-Seiten definiert werden können. HTML steht für HyperText Markup Language, was im Deutschen mit Hypertext Auszeichnungssprache übersetzt werden kann. Es ist eine Sprache, die die Struktur, den Inhalt und das Verhalten eines Web-Dokuments beschreibt. HTML basiert auf SGML (Standard Generalized Markup Language [33]), eine ISO-Norm, mit der die Syntax von Auszeichnungssprachen definiert wird. Eine solche Auszeichnungssprache ist nötig, um Dokumente auf verschiedenen Rechnersystemen einheitlich darstellen zu können. Im Gegensatz zu Dokumenten, die mit einem bestimmten Anwendungsprogramm erzeugt und dann in einem speziellen Dateiformat mit integrierten Sonder- und Schlüsselzeichen gespeichert werden (z.B. MS- Word-Dokumente) und somit nur mit dem Programm mit dem sie erzeugt wurden, dargestellt und weiterbearbeitet werden können, werden HTMLDokumente im ASCII- Format gespeichert. Dies bedeutet, dass HTML-Dokumente nur aus fortlaufenden Texten ohne Sonder- und Steuerzeichen bestehen, und somit mit jedem beliebigen Editor erzeugt werden können. Da außerdem jedes Rechnersystem das ASCII-Format versteht, lassen sich HTMLDokumente problemlos von einem Computer auf einen anderen übertragen. Ein HTMLDokument besteht aus zwei verschiedenen Textarten. Erstens dem eigentlichen Inhalt, also die Informationen (Text, Graphik etc.), die auf dem Bildschirm angezeigt werden sollen und zweitens der Markierung (Markup), den so genannten Tags (also dem Text, der die Art 11 und Weise festlegt, wie die Informationen dargestellt werden sollen). Diese Markierungen werden vom Browser (das ist der Client, der das HTML-Dokument auf den Bildschirm bringt) verstanden und interpretiert. Um nun saubere Dokumente schreiben zu können, darf die Deklaration der Version bzw. der Art des Dokuments/Dokumenttyps nicht fehlen. Sie sagt über das betreffende Dokument aus: "Dieses Dokument ist konform mit den Regeln in der HTML DTD [xxx] ", wobei xxx für die Version der HTML steht. Alle HTML-Tags werden von den spitzen Klammern "<" und ">" (auch bekannt als "kleiner als" bzw. "größer als" Zeichen) eingeschlossen. Innerhalb dieser spitzen Klammern steht der Name des verwendeten Tags. Dabei ist es prinzipiell gleichgültig, ob ein Tag groß oder klein geschrieben wird. Wegen der besseren Übersichtlichkeit empfiehlt es sich diesen groß zu schreiben. Nach der öffnenden spitzen Klammer sollte kein Leerzeichen folgen, ebenso wie nach dem TagNamen. Hält man sich nicht daran, kann es passieren, dass der Browser den Tag nicht richtig interpretiert. Eine Auszeichnung, die mit einem Tag eingeschaltet wird, bleibt für den gesamten folgenden Text gültig, bis sie wieder ausgeschaltet wird. Sie wird einfach ausgeschaltet, indem derselbe Tag, mit dem man die Auszeichnung eingeschaltet hat, am Ende wieder verwendet wird: diesmal allerdings mit einem Schrägstrich vor dem Namen des Tags. Bei vielen Tags kann bzw. muss man weitere Informationen, so genannte Attribute, angeben, die die Ausführung des Tags steuern. Diese Attribute werden hinter den Tag-Namen innerhalb der spitzen Klammern eingegeben. Zwischen dem Tag-Namen und den einzelnen Attributen muss ein Leerzeichen vorhanden sein, und die meisten Attribute bekommen außerdem mit einem "="-Zeichen einen Wert zugewiesen. Bei diesen Werten, die üblicherweise in Anführungszeichen eingeschlossen sind, kann es sich um eine Zahl, einen Dateinamen, eine URL oder ein festgelegtes Token (d.h. den symbolischen Wert eines Attributs) handeln. Bei Sonderzeichen ist Vorsicht geboten. Da z.B. die spitzen Klammern für die Einbettung der HTML-Tags reserviert sind, sollten sie nicht innerhalb des normalen Textes verwendet werden. Genauso verhält es sich mit Anführungszeichen bei Attributen, denn sie kennzeichnen Anfang und Ende der Werteangabe. Dennoch ist es möglich, diese Zeichen als Text auszugeben. Bei HTML gibt es nämlich einen Mechanismus zur Angabe solcher Sonderzeichen. Diese Symbolkürzel heißen Entities. Ein Entity hat folgende Syntax: &Zeichen; wobei solche Zeichen einem bestimmten Zeichenkürzel wie beispielsweise &copy; für das Copyzeichen © entsprechen. Bei den Kürzeln ist die Groß- und Kleinschreibung relevant, und das Semikolon am Ende des Entities darf auch nicht vergessen werden. Jede HTML Seite verfügt über dieselbe Struktur. Abbildung 6 stellt die allgemeine Struktur eines HTML-Dokumentes dar. Die erste Zeile definiert dem nachfolgenden Text gemäß der SGML Spezifikation als HTML-Dokument nach dem in der Version 4.0 definierten Standard. Der Tag <! DOCTYPE> bezeichnet also den Standard, mit dem das folgende Dokument beschrieben wird. Dieser Tag wird 12 noch nicht von allen Browsern unterstützt, sollte aber dennoch immer verwendet werden. Das Attribut HTML besagt, dass es sich um ein HTML-Dokument handelt. Hinter dem Attribut PUBLIC steht im Anführungszeichen, um welche DTD (Document Type Definition [48]) es sich handelt. Der Tag <HTML> beschreibt die Zusammensetzung eines HTML-Dokuments mit der üblichen Aufteilung: erst Kopfteil <HEAD>, dann Körperteil <BODY>. 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 2 <HTML> 3 <HEAD> 4 <TITLE>Hier Steht der Titel der Seite… </TITLE> 5 </HEAD> 6 <BODY > 7 Hier steht der eigentliche Inhalt der Seite 8 </BODY> 9 </HTML> Abbildung 6: Grundgerüst eines HTML- Dokumentes In dem Kopfteil, dessen Definition mit dem <HEAD>- Tag beginnt und mit dem </HEAD>- Tag aufhört, stehen die Informationen über das Dokument. Dazu gehört der Dokumententitel, der innerhalb der Tags <TITLE> und </TITLE> stehen muss. Im Kopfteil des Dokuments wird aber nicht nur der Titel festgelegt, sondern auch noch weitere Informationen oder Scripte, die z.B. durch die Tags <META>, <LINK>, <BASE> und <SCRIPT> untergebracht werden. Der eigentliche Inhalt eines HTML-Dokuments wird zwischen den Tags <BODY> und </BODY> eingebaut. Mit der Version 3.0 von HTML wurden die von Netscape eingeführten Attribute zur Einbettung einer Hintergrundgrafik sowie zur Steuerung der Hintergrundfarbe und vieles mehr übernommen. Mit dem </BODY>- Tag wird die Definition des Seiteninhalts abgeschlossen, das Dokument ist hier zu Ende. Den krönenden Abschluss des Dokuments bildet dann nur noch der Ende-Tag-</HTML>. Mit HTML können aber nicht nur Texte dargestellt und beschrieben werden. Man kann mit einfachen Befehlen auch andere Ressourcen wie Musik, Graphik, oder sonstige Multimediadaten in einem Dokument verbinden. Dazu muss der Browser in der Lage sein, gegebenenfalls andere Programm-Module einzubinden (so genannte Plug-Ins) oder andere Anwendungen aufzurufen, wenn er diese Fähigkeiten nicht von Hause aus hat. Kodierte Daten muss er an entsprechende Anwendungsprogramme weitergeben können, damit beispielsweise Audiodateien auch von einem Audioplayer weitergegeben werden können. Der Browser ist für die eigentliche Darstellung eines HTML-Dokuments auf dem Bildschirm zuständig. Darin befindet sich die Antwort auf die Frage, warum ein und dasselbe HTML-Dokument von verschiedenen Browsern bzw. auf verschiedenen Rechnersystemen nicht hundertprozentig gleich dargestellt wird. Der Grund liegt in den unterschiedlichen Rechnerausstattungen. Zwar verfügen einerseits manche Computer nicht über dieselben Schriftarten zur Textdarstellung. Andererseits können sie nicht beliebige 13 Farben präsentieren. Außerdem gibt es viele Browser, die nicht alle HTML-Kommandos (korrekt) umsetzen können. Andere Computer und Browser sind nicht einmal grafikfähig. Solche Gesichtspunkte müssen bei der Seitenerstellung beachtet werden. HTML bietet durch die in der HTML-DTD definierten Elemente die Möglichkeit zur Beschreibung der Struktur, des Layouts und des Verhaltens eines Web-Dokuments. Die Flexibilität und die einfache Erlernbarkeit und Handhabung der Sprache führen dazu, dass sich HTML als Auszeichnungssprache für das WWW durchgesetzt hat und sich somit als grundlegender Mechanismus zur Darstellung von Information auf dem WWW erweist. Im Übrigen liefert HTML auch den Mechanismus für die Einbindung anderer Internet Protokolle und Dienste, die über das WWW verfügbar sind (FTP, Gopher, Usenet, E-Mail etc.). HTML wird in mehreren Versionen und in mehreren Arten definiert angefangen bei der ersten Version von HTML bis hin zur aktuellen Version HTML 4.01. Die neuste Version 4.0 hat einige Verbesserungen und Neuigkeiten mit sich gebracht. Neue HTML-Tags bzw. neue HTML-Attribute werden von den alten Browsern nicht unterstützt. Dies führt aber nicht zu einer Fehlermeldung im Browser, da der Standard vorsieht, dass ein Browser ein HTML-Tag, welches er nicht kennt, einfach ignoriert. Jede Version und Art wird dabei in einer DTD (Document Type Definition) definiert. Diese DTD sagt aus, welche Elemente es gibt, welche Attribute welches Element enthalten darf, welche Werte diese Attribute erhalten dürfen und welches Element welche (weiteren) Elemente enthalten kann bzw. wie diese angeordnet sein müssen. Im Grunde wird somit der gesamte Aufbau eines HTMLDokumentes beschrieben und festgelegt. Diese DTD legt also fest, was in HTML erlaubt ist und was nicht. Der Nachfolger von HTML 4.0 (XHTML, vgl. 2.2.3) ist seit kurzem von W3C (W3 Konsortium [41]) verabschiedet worden. 2.2.2 XML XML (eXtensible Markup Language) bezeichnet eine neue Markup Sprache, die vom W3Konsortium entwickelt wurde, um strukturierte Dokumente bzw. Daten im Web zu benutzen. XML ist eine Metasprache, d.h. mit XML lassen sich neue Markup Sprachen definieren, mit denen dann Dokumente erzeugt werden. Das große Plus von XML besteht darin, dass es keinen festgelegten Satz von Markup Befehlen gibt. Man kann die Befehle beliebig selbst definieren. Aussagekräftige Namen können für die Markups verwendet werden, anhand derer man die Bedeutung des Inhaltes schon erkennt. XML stellt eine Beschreibungssprache dar, in welcher dann eine Spezifizierung vorgenommen werden muss. Der Nutzer hat die Möglichkeit und Aufgabe eine eigene DTD mitzuliefern, um eine Typendefinition für sein Dokument vorzunehmen. Damit das Dokument entsprechend den Vorstellungen des Nutzers präsentiert wird, ist das so genannte XSLT (Extensible Stylesheet Language [49]) notwendig. XML bietet die 14 Möglichkeit, Daten so zu strukturieren, dass sie Regeln entsprechen, die man selbst festlegen darf. Auf diese Weise bezeichnen wir strukturierte Daten als Dokumente. Diese Regelhaftigkeit führt bei XML jedoch nicht zwangsweise zu starren immer gleich aufgebauten Dokumenten. Ein Dokumenttyp kann mit Varianzen definiert werden. Ein XML Dokument baut sich aus so genannten Elementen auf. Diese Elemente tragen Namen, die bei der Dokumententwicklung vergeben werden können. Ein Beispiel ist das Element <beruf> Schneiderin </beruf>. Wird bei der Vergabe der Namen darauf geachtet, dass diese aussagekräftig sind, kann behauptet werden, dass ein solches Dokument selbstbeschreibend ist. Die Elementnamen können als Beschreibungsdaten sowohl direkt von Menschen gelesen und verstanden werden, als auch von Suchmaschinen indiziert werden. Damit wird eine potentielle bessere Qualität bei der Suche nach Inhalten im Internet möglich gemacht. Es wird nicht mehr nach Zeichenketten gesucht, die sich irgendwo in irgendeinem Dokument befinden, sondern beispielsweise nach einer Zeichenfolge, die in einem Element mit dem Namen "beruf" vorkommt. Dennoch bewirkt das XML Format von Dokumenten allein noch nicht viel. Es sind eher die in XML notierten Formate, die einen wirklichen Gewinn aus diesem Format ziehen können. Ein anschauliches Beispiel hierfür ist das SVG (Grafikformat Scalable Vector Graphics [32]). Ein Textelement, das als grafisch anspruchsvolles Objekt als Banner einer Web-Seite dienen soll, bietet die Vorteile beider Welten. Es umfasst gleichzeitig Grafik und Text. Der Textteil ist nicht binär abgelegt, sondern bleibt als Text inhaltlich recherchierbar. Der grundlegende Mechanismus bei allen XML basierten Formaten kennzeichnet sich dadurch, dass eine Quellinformation umgewandelt in eine anwendungsorientierte Form wie beispielsweise Grafik, HTML, PDF wird. Ein möglicher Produktivitätsgewinn durch Nutzung von XML Formaten liegt nun in der oben beschriebenen Regelhaltigkeit von XML Dokumenten. Dient ein Regelwerk, ein Dokument Typ Definition als Schablone für künftige eintreffende Inhalte, können bereits vor der wirklichen Verfügbarkeit dieser Inhalte alle weiteren Verarbeitungsschritte realisiert werden; Wie z.B. die Umwandlung in Grafik oder HTML oder eine Kombination von HTML mit eingebetteter Grafik. Wichtig dabei ist die Verwendung von Standardwerkzeugen bei der Realisierung weiterer Verarbeitungsschritte, die das Auslesen, das Durchsuchen und das Sortieren von XML Dokumenten übernehmen. Es besteht dadurch für Anwendungsprogrammierer keine Notwendigkeit mehr, die Position von Elementen in der Datenquelle exakt zu kennen. Es genügt in vielen Fällen, zu wissen, welche Elemente namentlich angefordert werden sollen, und dies den Standardwerkzeugen anschließend aufzutragen. Man kann also sagen, dass der Effekt von XML eigentlich auf einer generellen Übereinkunft über den Aufbau und die Benutzung von Schnittstellen beruht. In diesem Sinn steht XML lediglich für eine bedeutende Basistechnologie. 15 2.2.3 XHTML XHTML (Extensible HyperText Markup Language) ist eine Familie gegenwärtiger und in der Zukunft noch zu entwickelnder Dokumenttypen und Module, die HTML 4 abbilden und erweitern. XHTML 1.0, die erste Version von XHTML, definiert die bisherigen drei auf SGML basierenden DTDs für HTML 4 als XML Anwendung. XHTML wurde somit entwickelt, um HTML 4.0 mit den Vorzügen von XML als Modellierungssprache für Dokumente und Datenstrukturen zu kombinieren. Ziel ist es, den gesamten Sprachumfang von HTML 4.0 durch XML-DTDs so abzubilden, dass bestehende HTML-Dokumente weiterhin verwendet werden und gleichzeitig die hinter XML stehenden Konzepte adaptiert werden können. XHTML-Dokumente sind somit XML-konform und können mit normalen XML Werkzeugen verarbeitet, betrachtet, bearbeitet und validiert werden. XHTML-Dokumente können so geschrieben werden, dass sie genauso gut oder besser in existierenden HTML 4.0 konformen wie in neuen XHTML 1.0 konformen Anwendungen funktionieren. XHTML ist erweiterbar. Bei HTML war es nötig, die ganze Sprachdefinition zu ändern, um neue Elemente hinzuzufügen. Bei XML basierenden Dokumenttypen ist das nicht nötig. XHTML erweist sich als klarer und strenger als HTML. Geräte die nicht die Kapazitäten eines PCs haben, können XHTML daher wesentlich leichter und besser darstellen als HTML-Dokumente. Dies bringt konkret folgende Vorteile: • • • • Erweiterbarkeit von XHTML Aufteilung von XHTML in verschiedene Module Erleichtertes „Parsing“ aufgrund der XML Syntax-Vorschriften Transformation in andere Formate mit XLST Die XHTML-Familie ist der nächste Schritt in der Evolution des Internet. Wenn die Entwickler von Inhalten heute auf XHTML umsteigen, können sie in die XML-Welt mit allen dort gebotenen Vorteilen vordringen und dennoch darauf vertrauen, dass ihr Inhalt vorwärts- und rückwärtskompatibel gewährleistet wird. Mit XHTML sollen auch vorhandene Kompatibilitätsprobleme bei der Interpretation von HTML 4.0 Code von den diversen User-Agents der unterschiedlichen Hersteller vermieden werden. Insbesondere die Entwicklung eigener, bisher meist proprietärer Sprachelemente soll durch XHTML organisiert werden. Neueste Überlegungen zu XHTML beschäftigen sich mit der Modularisierung der Sprache und führten vor kurzem zu einem neuen „Working Draft“ durch das W3C [41], welches XHTML 1.1 spezifiziert. 16 2.2.3 XML-Schema Eine der Entwicklungen im Bereich XML beruhte darauf, dass es nicht nur als Auszeichnungssprache für textorientierte Dokumente wie Web-Seiten, sondern auch als Format für große Mengen extrem strukturierter Daten (z.B. tabellenartige Datensätze) und ihren Austausch begeistert angenommen wurde. Um solche Daten vollständig modellieren zu können, fehlte es in den Anfangszeiten von XML an einer geeigneten Beschreibungssprache. Diese Lücke hat das W3C mit der Spezifikation XML Schema im Mai 2001 geschlossen. XML-Schema gibt einen neuen Ansatz zur Definition von Dokument Typen und damit zur Spezifikation von XML Sprachen. Mit der Erhebung der eXtensible Markup Language zum Industriestandard 1998 hatte sich zunächst die von der Standardized Generalized Markup Language übernommene Document Type Definition als Format zur Beschreibung konkreter XML Sprachen etabliert. Doch durch die starke Verbreitung von XML in der Praxis machten sich zunehmend die Grenzen und Nachteile der DTDs bemerkbar. Insbesondere die Dokumentenzentrierte Sichtweise der DTDs unter Vernachlässigung von Datentypen erweist sich in Zeiten der Annäherung der Programmiersprachen an die Datenmodellierung als problematisch. So lassen sich zwar mittels dem XMI-Format (XML Metadata Interchange [42]) auch jetzt schon aus objektorientierten Datenmodellen, beschrieben etwa durch die Unified Modeling Language, oder auch direkt aus z.B. einer Javaklasse, passende XML Sprachen automatisch generieren, doch lassen DTDs weder die Beschreibung bestimmter semantischer Bedingungen noch die Festlegung von Wertebereichen zu. Gerade die zunehmende Verbreitung verteilter Anwendungen erfordert eine Möglichkeit, Daten in einem einheitlichen und vor allem in einem flexiblen und leicht modifizierbaren Format, welches sich zudem leicht auswerten (parsen) lässt, zu transportieren. Der bisher unvermeidbare Bruch zwischen applikationsinterner Datenhaltung und abgeleiteter XML-Sprache soll nun durch das XML-Schema als Nachfolger der DTDs überwunden werden. Die XML-Schema-Sprache stellt dabei eine Obermenge der DTDSprache dar. Genau wie eine DTD stellt ein XML-Schema Regeln zur Verfügung, nach denen ein XML-Dokument auf seine Gültigkeit überprüft bzw. validiert wird. Da jedes XML-Schema auch ein XML-Dokument ist, lässt es sich selbst auch durch ein Schema oder eine DTD beschreiben. Wie in der Abbildung 7 dargestellt, werden XML-Dokumente mit Hilfe von DTD oder XML-Schema validiert. 17 Abbildung 7: Beziehung zwischen XML-Dokumente, XML-Schema und ihre Validierung 2.3 Serverskripte Server Side Scripting (vgl. Serverskripte - 2.1.2) kennzeichnet einen Sammelbegriff für viele Arten von serverseitigen Web-Anwendungen, d.h. unabhängig von der verwendeten Skriptsprache werden die Programme, die auf dem Server ausgeführt werden, entsprechend bezeichnet. Dies umfasst neben unterschiedlichen Sprachen auch unterschiedliche Konzepte, mit allerdings ähnlichen Zielen. Die Skripte liegen meist im Quelltext auf dem Server vor, und werden zur Laufzeit von einem Interpreter analysiert und ausgeführt. Der Server generiert nun ggf. eine Antwort, die an den Client geschickt wird. Aufgrund der Eigenschaft, dass sie nicht auf dem Client gestartet werden, benötigen sie im Gegensatz zu Client Side Scripting (vgl. Clientskript 2.1.2) keine lokalen Ressourcen. Dies hat zur Folge, dass die Performance ausschließlich serverabhängig ist, was bei einer großen Anzahl von Clients zu dem Nachteil einer hohen Last auf dem Server führt. Diese Skripte stellen sich - da sie größtenteils nicht kompiliert werden - meist als plattformübergreifend heraus, und haben deshalb einen hohen Verbreitungsgrad, was zu dem großen Vorteil der Portierbarkeit führt. Obwohl diese Skripte sehr verbreitet sind, werden sie oft nicht weiter beachtet, da sie im Gegensatz zu z.B. JavaScript nur im Hintergrund arbeiten, ohne direkt zum Vorschein zu kommen. Der größte Nutzen besteht in den Interaktionsmöglichkeiten mit dem User, d.h., die Web-Seite kann sich auf jeden Nutzer individuell einstellen und anpassen. Dies eröffnet ein weites Spektrum an Einsatzmöglichkeiten. 18 2.3.1 CGI Programme Das Common Gateway Interface (CGI) kann als eine Art Schnittstelle zwischen dem WebServer und den dort abgelegten Programmen angesehen werden. So ist es beispielsweise notwendig, dass die Datenübertragung eines Formulars in einer Datenbank mit einem serverseitigen Programm vollzogen werden muss, und genau hier kommt CGI zum Einsatz. CGI regelt den Aufruf und die Parameterversorgung von externen Programmen, den so genannten CGI-Skripten. Die Parameterübergabe erfolgt in Abhängigkeit von der HTTPMethode, welche beim Aufruf des CGI-Programms gewählt wurde. Daraufhin kommunizieren das CGI-Programm und der HTTP-Server über eine Reihe festgelegter Umgebungsvariablen. Bei diesem Datenaustausch werden Informationen über den Server und der vom Client erzeugten Anfrage ausgetauscht. Der Vorteil gegenüber Java und JavaScript liegt darin, dass das CGI-Programm nicht voraussetzt, auf dem Rechner des Besuchers geladen zu werden, sondern arbeitet an Ort und Stelle. Meist werden CGI-Anwendungen mit der Programmiersprache Perl (Practical Extraction and Report Language [7]) erstellt. Perl ist eine Symbiose aus der Programmiersprache “C” und einigen UNIX-Befehlen. Die in Perl programmierten Scripte werden als reine ASCII-Files abgelegt, also als reine Textdateien, die erst bei der Ausführung kompiliert werden. So gilt zum einen ein rasches und unkompliziertes Verändern der Programme, zum anderen werden diese sehr schnell ausgeführt, was bei rechenintensiveren Anwendungen wie Suchmechanismen oder Datenbankanbindungen sehr von Vorteil ist. 2.3.2 Java-Servlets Servlets [30] [31] bezeichnen Protokolle und plattformunabhängige Java-Programme, die die Funktionalität eines Web-Servers erweitern. Servlets bedeuten für den Server JavaProgramme, die dynamisch geladen werden und die Funktionalität des Host erweitern. Die grundsätzliche Arbeitsweise von Servlets wird in Abbildung 8 dargestellt, sie kann so beschrieben werden, dass ein Client-Programm, welches ein Web-Browser sein kann, auf einen Web-Server zugreift und eine Anfrage (Request) stellt. Diese Anfrage wird von der Servlet-Engine bearbeitet und an das entsprechende Servlet weitergereicht. Das Servlet seinerseits sendet eine Antwort, aus der die Servlet-Engine die eigentliche Antwort (Response) an den Client sendet. 19 Abbildung 8: Grundsätzliche Arbeitsweise von Servlets Servlets interagieren mit einem auf dem Web Server laufenden Servlet-Engine über Requests und Responses. In ihrer Funktionalität liegen Servlets zwischen CGIProgrammen und kommerziellen Server Erweiterungen. Im Gegensatz zu CGIProgrammen müssen Servlets weder für eine spezifische Plattform noch für einen bestimmten Server modifiziert werden. Vorteile von Java-Servlets Java-Servlets sind leistungsfähiger, einflussreicher, übertragbarer und einfacher zu verwenden als ein traditionelles CGI und viele alternative vergleichbare Techniken. Als Vorteile von Servlets zählt man: • • • • Effizienz: sie sind effizienter und schneller als CGI Skripte, weil sie ein anderes Prozess-Model benutzen. Praxis und Leistungsfähigkeit: Servlets bieten die Vorteile der leichten Entwicklung, der Plattformunabhängigkeit und der Annehmlichkeit, eine Sprache zu benutzen, die eine umfassende Infrastruktur bereithält, z.B. für das automatische Parsen und Decoding von HTML-Formular-Daten, lesen und schreiben von HTTPHeadern, die Handhabung von Cookies, Session Tracking und vielen weiteren. Darüber hinaus haben sie Zugriff auf den großen Satz der verfügbaren Java APIs und natürlich auf die gesamte verfügbare Leistungsfähigkeit der Standard Java APIs. Übertragbarkeit: Servlets werden in Java geschrieben und befolgen die Semantik und Syntax der Standard API. Daher können Servlets auf verschiedenen Servern betrieben werden. Servlets werden direkt oder über ein Plugin von nahezu jedem wichtigen Web-Server, insbesondere Apache [50], unterstützt. Freie Verfügbarkeit: Für fast alle Web-Server ist eine Aufrüstung zur Servlet Unterstützung im Allgemeinen frei oder kostengünstig. Nachteile von Java-Servlets Neben den vielen Vorteilen, die Java-Servlets bieten, haben sie natürlich auch Nachteile: 20 • • Verfügbarkeit: Viele Provider bieten zurzeit noch keine kostengünstige ServletUmgebung. Anforderungen: Eine laufende JVM (Java Virtual Maschine) benötigt zum Betrieb ca. 10-mal so viele Ressourcen auf dem gleichen PC wie z.B. eine GNU bash. Anwendungsbeispiele Typische Anwendungen für Java-Servlets sind: • • • • • • Datenverarbeitung und/oder Speicherung von Daten, die von HTML-Formularen übermittelt wurden. Bereitstellung von dynamischen Inhalten, zum Beispiel die Ergebnisse einer Datenbankabfrage. Session Tracking Vernetzung von Servern Zusammenarbeit zwischen Benutzern Etc. … Servlet-Engine Eine Servlet-Engine ist eine Server-Applikation, die Servlets ausführt, Clientanfragen an ein angefragtes Servlet weiterleitet und die Servlet-Antwort an den Client zurücksendet. In Netzwerken und insbesondere im Internet kommunizieren User-Agents und Web-Server durch Anfragen (Requests) und Antworten (Responses). Diese Requests und Responses basieren i.d.R. auf dem Hypertext Transfer Protocol (HTTP). Die laufende Servlet-Engine interagiert ebenfalls mit einem oder mehreren Web-Servern durch Anfragen (Requests) und Antworten (Responses) miteinander, allerdings nicht mit dem HTTP-Protokoll, sondern mit einem vom System abhängigen Protokoll. So verwendet z.B. eine TomcatEngine [36] oder JServ-Engine zur Kommunikation mit einem Apache Web-Server das Apache Jserv-Protocol (AJP), welches ebenfalls bei dem Request-Response-Muster aufsetzt (vgl. Abbildung 9). Bei einem Apache Web-Server handelt es sich um das Modul „mod_jserv“. Seine Hauptaufgabe besteht darin, einen HTTP Request an eine ServletEngine im AJP Protokoll weiterzureichen, und die Antworten im HTTP Protokoll an den Client zu senden. Abbildung 9: Request-Response-Muster für Servlet-Engine 21 Die Servlet-Engine übersetzt den AJP-Request in ein ServletRequest-Objekt und kreiert ein ServletResponse-Objekt, um auf die Anfrage zu antworten. Abbildung 10 verdeutlicht diese Zusammenhänge. Abbildung 10: Kommunikation zwischen Servlet Engine und Servlet Während und bis zum Ende der Ausführung werden alle an das ServletResponseObjekt übergebenen Daten in einen AJP-Response konvertiert und zurück an den WebServer gesendet. Dieser übersetzt die AJP-Response in einen HTTP-Response und sendet ihn schließlich an den Client. Die grundlegende Servlet Architektur Das Servlet-API setzt sich aus zwei Paketen zusammen, aus javax.servlet und javax.servlet.http. Das erste Paket ist allgemeiner: es setzt nur einen grundlegenden Client-Server-Rahmen mit einem zustandlosen Request-ResponseProtokoll voraus. Das zweite Paket ist auf HTTP spezialisiert. Es kennt Sachverhalte wie HTTP-Methoden und HTTP-Header. Eine Übersicht über die wichtigsten Klassen und Interfaces wird in Abbildung 11 dargestellt. Das Paket javax.servlet enthält eine GenericServlet-Klasse, die eine service()Methode implementiert, um einen Request-Response-Zyklus zu verarbeiten. Das Paket javax-servlet.http beinhaltet eine HttpServlet-Klasse, die eine Reihe von doXXX()-Methoden implementiert, um einen Request-Response-Zyklus zu verarbeiten; wobei XXX verschiedene HTTP-Methoden (Post, Get, etc.) entspricht. Zu den wichtigsten Elementen in javax.servlet werden die folgenden vier Interfaces gezählt: Servlet, ServletConfig, ServletRequest und ServletResponse. Servlet ist das grundlegende Interface, das die Methoden für den Lebenszyklus vereinbart. ServletConfig vereinbart die Methoden, die zur Initialisierung benötigt werden. ServletRequest und ServletResponse vereinbaren all die Methoden, die gebraucht werden, um einen Request und eine Response verarbeiten zu können. Das Paket 22 javax.servlet enthält die GenericServlet-Klasse, die Implementierung der Servlet- und ServletConfig-Interfaces bereitstellt. die Default- Die HttpServlet-Klasse gehört, zusammen mit den Interfaces HttpServletRequest und HttpServletResponse, zu den wichtigsten Elementen von javax.servlet.http. Diese erweitern systematisch die entsprechenden Elemente aus javax.servlet. Eine Servlet-Klasse weitet i.d.R die HttpServlet-Klasse aus, die wiederum GernericServlet erweitert. Abbildung 11 gibt eine Übersicht über diese Zusammenhänge. Abbildung 11: Übersicht der Servlet-API 2.3.3 Java Server Pages JSP steht für JavaServer Pages ([12] [37]). JSP sind von Sun-Microsystems entwickelt worden und bezeichnen eine neue erweiterte Servlet-Technologie für vereinfachte serverseitige Anwendungen, welche die Trennung von Business Logik und Präsentation möglich macht. Die JSPs haben Zugriff auf das Java-API (Application Programming Interface) und können objektorientiert programmiert werden. Bestandteile der JSP bestehen aus einem statischen HTML-Code für die Oberflächengestaltung (Layout der Web-Seite) und einem dynamischen Java-Code für den 23 Programmteil (Anwendungslogik). Kurz beschrieben erweist sich JSP als eine dynamisch generierte Web-Seite, die auf fast allen Web-Servern ausgeführt werden kann. Speziell für JSP entwickelte die Apache-Gruppe den JSP-Server Tomcat, ein OpenSource-Projekt. Tomcat kennzeichnet einen vollständigen HTTP-Server, der HTML, Servlets und JSP unterstützt. Um die Wirkung und Arbeitsweise einer JSP zu verdeutlichen, wird einem reinen Servlet eine sehr verbreitete Web basierende Technologie gegenüber gestellt. Im Grunde besteht kein großer Unterschied zwischen einer JSP und einem Servlet. Jedoch gibt es bei Servlets einen Nachteil in der Ausgabe von HTML-Code. Dies wird nur über Java-println-Anweisungen ermöglicht, die zahlreich vorkommen können. Einfacher ist es mit JSP, die das Design von der Logik so trennt, dass diese umfangreichen Ausgaben über den statischen HTML-Teil der JSP geregelt werden. SunMicrosystems beschreibt die Vorteile von JSPs mit folgenden Eigenschaften: Plattformunabhängigkeit, einfache Administration, Trennung von Logik und Design, stärkere Performance, Erweiterbarkeit. JSP eignet sich besonders, wenn serverseitige Entscheidungen oder Aktionen notwendig sind und deshalb bei Datenbankabfragen der Clients oder bei der Prüfung der Zugangsberechtigung sehr verbreitet sind. Auf eCommerce Seiten stellt es sich in Warenkorbsystemen als sehr nützlich heraus. Ziel dieser Technologie ist es, auf die speziellen Anforderungen und Wünsche des Benutzers einzugehen, und dynamisch eine passende bzw. richtige Antwort mit Hilfe statischen HTML als Design zu geben. Somit werden die Bedürfnisse der Benutzer durch JSP befriedigt. JSP -Dateien (.jsp Endungen) werden auf Webservern gespeichert. Obwohl sie formal wie HTML-Dateien aussehen, werden sie intern anders behandelt. Der JSP-Code wird dabei von den Tags <% eingeleitet und durch %> beendet. Eine JSP -Datei wird vom Server in ein Servlet konvertiert, indem der Quell-Code aus der JSP –Datei (Skripte) in ein Servlet übertragen wird. Dabei wird das statische HTML einfach als Ausgabe (Output-Stream) behandelt. Anschließend wird das Servlet übersetzt. Dies geschieht entweder beim Installieren der Datei oder bei der ersten Anforderung der Seite. Bei jedem Aufruf der JSP leitet sie die Anfrage an das entsprechende Servlet, das daraufhin die Ausgabe an den Client sendet. Falls die JSP geändert worden ist, wird ein neues Servlet erstellt, übersetzt und ausgeführt. Aus diesem Grund überprüft das Servlet immer, ob die JSP erneuert worden ist. Darüber hinaus wird ein spezieller Web-Server mit einem JSP-Engine (standalone container) bzw. einem Web-Server wie Apache, Netscape Enterprise Server, Microsoft Personal Web Server oder Internet Information Server mit aufgesetzter Engine (add-on) benötigt, um JavaServer Pages verwenden zu können. Zu den populärsten JSPEngine zählen: Resin von Caucho [3], Tomcat von Apache [36] und JRun von Macromedia/Allaire [20]. JSPs weisen auch gewisse Nachteile auf. Zum einen sind die JSPs von der Sicherheit her von Außen leicht angreifbar. Um dieses Problem zu lösen, bietet Sun die Erweiterung JSSE (Java Secure Socket Extension) an. Falls Basisklassen geändert werden, 24 die auch von JSPs genutzt werden, müssen die bisher generierten auf dem Server befindlichen JSPs gelöscht werden. Das hat zur Folge, dass die JSPs bei jeder Anfrage neu übersetzt werden müssen. Wenn mehrere JSPs in einer HTML-Seite angefordert werden, kann dies zu „langen Wartezeiten und hoher Serverbelastung“ führen. 2.3.4 PHP PHP bedeutet Hypertext Preprocessor([25] [26]) und bezieht sich auf sich selbst. Es ist eine eigenständige Skriptsprache, d.h., sie besitzt eine eigene Syntax und eine sehr große Funktionsvielfalt. Wie fast alle dieser Skriptsprachen ist auch PHP in HTML eingebettet und verwendet normalerweise keine eigenständigen Dateien. Allein der Dateiname ändert sich von ".htm" / ".html" zu ".php". Dies hat den großen Vorteil, dass die Ausgabe der PHP-Skripte an der entsprechenden Stelle direkt in die HTML-Seite eingebunden und ausgegeben werden kann. PHP wird oft in Verbindung mit HTML-Formularen eingesetzt, weil die Daten, die sie verschicken, auf besonders einfache Weise mit Hilfe von PHP ausgewertet und weiterverarbeitet werden können. Seine eigentlichen Stärken spielt PHP dann dabei aus, wenn es im Zusammenspiel mit einer Datenbank genutzt wird. PHP unterstützt eine große Anzahl von Datenbanken; u.a. Adabas D, dBase, FilePro, Interbase, mSQL, MySQL, Informix, ODBC, Oracle, Sybase, Solid, Velocis, Unix dbm, PostgreSQL. Insgesamt 19 verschiedene Typen können über PHP angesprochen und verwendet werden. Dabei stehen alle benötigten Funktionen für die Datenbankoperationen direkt zur Verfügung und müssen nicht erst implementiert werden. Eine weitere wichtige Eigenschaft von PHP liegt in der Kommunikationsmöglichkeit über eine Vielzahl von Protokollen, u.a. IMAP, SNMP, NNTP, POP3 oder auch HTTP. Somit ist es z.B. möglich, direkt in PHP eine Mail zu erstellen und zu versenden. Falls ein benötigtes Protokoll nicht unterstützt werden sollte, so bleibt noch die Möglichkeit, direkt über Netzwerk-Sockets zu kommunizieren. Letzendlich fehlt noch die Integration in einen Webserver wie z.B. den weit verbreiteten Apache-Server, ohne den, PHP-HTML-Seiten, die von Clients wie Browsern angefragt werden, nicht vor der Auslieferung modifizieren kann. Insgesamt ergibt sich nun aus der Summe dieser Teile die Möglichkeit, dynamisch generierte Web-Seiten zu erzeugen. Die Skriptsprache PHP unterstützt eine objektorientierte Programmierung, zwingt aber nicht zu ihrer Verwendung. Es sind also Klassen und Objekte in PHP realisierbar, aber im Gegensatz zu z.B. Java kann man auf deren Verwendung auch komplett verzichten. 25 2.3.5 ASP ASP steht für Active Server Pages [1] und sollte nicht mit "Application Service Provider" verwechselt werden, welches auch mit ASP abgekürzt wird. ASP ist keine eigenständige Skriptsprache. Vielmehr bildet es eine Hülle für schon vorhandene Sprachen wie VBScript, JScript oder Perl und besitzt aus diesem Grund auch keine eigene Syntax. Da es auf anderen Skriptsprachen basiert, kann man sich je nach Fähigkeiten und Neigungen die geeignete aussuchen und in ASP verwenden. Vom IIS (Internet Information Server), der vermutlich der meistgenutzte Server im Zusammenhang mit ASP ist, werden direkt nur VBScript und JScript unterstützt. Um weitere Sprachen einzubinden, müssen entsprechende Interpreten installiert werden. Auch ASP wird in HTML eingebunden, wobei in diesem Fall die Datei mit ".asp" endet. Da ASP über keine eigenen Funktionen für Datenbank- oder Dateisystemzugriffe verfügt, müssen diese über Kommunikationsobjekte ergänzt werden. Die Möglichkeiten von ASP hängen immer von den zur Verfügung stehenden Komponenten ab. Für Standardprogrammierelemente wie Schleifen und Bedingungen wird die Syntax der verwendeten Skriptsprache übernommen. Obwohl verschiedene Projekte mit dem Ziel, ASP auf unterschiedlichen Betriebssystemen zu ermöglichen, existieren, bleibt ein Grossteil der ASP-Seiten auf dem Server mit den Betriebssystemen der Windows-Familie und dem Internet Information Server beschränkt, so dass nicht von der gleichen Plattformunabhängigkeit wie bei PHP gesprochen werden kann. PHP versus ASP Während PHP eine große Sprachenpalette aufweist, so dass eine Erweiterung nur selten nötig ist, setzt man bei ASP auf einen sehr geringen Rahmen, der sich leicht erweitern lässt und auch ohne Ergänzungen nur für sehr einfache Aufgaben ausreicht. PHP ist eher ein komplettes Rundumpaket, während ASP allein nur einen kleinen Teil einer WebAnwendung darstellen kann. Da der Quellcode des PHP-Interpreters frei verfügbar ist, kann man PHP auch auf unterschiedliche Server-Betriebssysteme verwenden, während sich ASP meistens auf die Windows-Systeme begrenzt und der Quellcode des Interpreters nicht veröffentlicht wird. Eine abschließende Entscheidung für PHP oder ASP fällt schwer. Es hängt stark von der Umgebung und Situation ab. In einer Firma mit ausschließlich Windows-Servern spricht vieles für ASP, während im privaten Bereich wohl eher PHP aufgrund der Kostenfrage bevorzugt wird. Eine pauschale Empfehlung ist jedoch nicht möglich, zumal viele Faktoren eine Rolle bei der Entscheidung spielen. 26 2.4 HTML Template Templates sind Layout/Design-Vorlagen, die meistens aus HTML-Code bestehen. Der Hauptvorteil von Templates besteht in der strikten Trennung von Code und HTML. Somit wird eine Web-Seite nicht nur übersichtlicher, auch die Arbeit an der Web-Seite kann besser zwischen Entwickler/Programmierer und Designer aufgeteilt werden. Der Designer kann in Ruhe ein HTML-Dokument erstellen. An den Stellen, wo später der dynamische Inhalt eingesetzt werden soll, fügt er Variable/Platzhalter ein. Der Programmierer setzt für diese Variablen Werte ein, und muss sich somit nicht um das Design kümmern. Wenn sich in der HTML-Datei etwas ändert, muss das Script nicht geändert werden und umgekehrt. Das HTML-Template ermöglicht somit den Einsatz von vorgefertigten HTML-Seiten innerhalb der Web-Applikation-Umgebung. Statisch erstellte Seiten, die mit Hilfe eines HTML-Editors entwickelt wurden, werden somit mit dynamischen Komponenten, wie z.B. einer Datenbank Abfrage, erweitert. Als Beispiel zur Erläuterung stellen wir ein Modul für die HTML-Templates (HTML.Template.java [18]) vor, die mit Javacode validiert werden. Das Modul beinhaltet folgende Tags bzw. Variablen: <tmpl_var>, <tmpl_if>, <tmpl_unless>, <tmpl_loop> und <tmpl_include>. Die if, unless und loop sind Blocktags und müssen mit entsprechenden </tmpl_if>-, </tmpl_unless>- und </tmpl_loop>-Tags abgeschlossen werden. Zusätzlich können die <tmpl_if>- und <tmpl_unless>-Tags optional ein <templ_else> beinhalten. Der <tmpl_include>-Tag wird validiert, wenn das HTML-Template erzeugt wird. Alle anderen Tags werden erst bei der Ausgabe des Templates ausgeführt. Der <tmpl_var>-Tag ist das Einfachste und kann an jeder Stelle innerhalb des Templates eingesetzt werden. Der <tmpl_loop> Tag ist ein wenig komplizierter als die anderen. Er ermöglicht es Listelemente in einer HTML-Blockstruktur zu generieren. Jedes Element der Liste wird mit Hilfe des <tmpl_var>-Tags erzeugt. Das Modul stellt außerdem Methoden durch Bibliothekklassen zur Verfügung, mit deren Hilfe Werte zu diesen Variablen zugewiesen werden. Abbildung 12 stellt eine HTM- Template (test.templ) dar. In ein Java-Programm wird das Template mit Hilfe von Bibliothek-Methoden eingelesen. Die Variablen „home“ (Abbildung 12 Zeile 4) und „cwd“ (Abbildung 12 Zeile 6) sind Platzbehälter, die mit dynamischen Inhalten von dem Java-Programm initialisiert werden. 1 2 3 4 5 6 7 8 <html> <head><title>Test Template</title></head> <body> My Home Directory is <tmpl_var home> <p> My current working directory is set to <tmpl_var cwd> </body> </html> Abbildung 12: Beispiel eines HTML Templates – test.templ 27 Das Java-Programm aus Abbildung 13 bearbeitet das Template test.tmpl. Durch die Zugriffsmethode setParam (variable, wert) wird die in das Template definierte Variable mit dem entsprechenden Wert initialisiert (vgl. Abbildung 13, Zeilen 9 und 10). Das Template wird dann schließlich durch ein Output-Stream ausgegeben (vgl. Abbildung 13, Zeile 12). 1 import HTML.Template; 2 public class Test { 3 public static void main(String [] args) { 4 try { 5 // Create the Template object 6 Template t = new Template("test.tmpl"); 7 8 // Set some parameters 9 t.setParam("home", System.getProperty("user.home")); 10 t.setParam("cwd", System.getProperty("user.dir")); 11 12 System.out.print(t.output()); 13 } catch(Exception e) { 14 } 15 } 16 } Abbildung 13: Beispielprogramm für die Validierung von test.tmpl 2.5 Unified Modeling Language (UML) Um Software von hoher Qualität zu angemessenen Kosten zu erstellen, ist ein ingenieurmäßiges Vorgehen bei der Software-Entwicklung Voraussetzung. Dazu gehören ein Vorgehensmodell, die Auswahl standardisierter Sprachen und das Management aller Ressourcen. Generell wird das Vorgehensmodell bei der Entwicklung einer Applikation, also einer Software, als Software-Entwicklungsprozess bezeichnet. Der SoftwareEntwicklungsprozess besteht aus einer Folge von kleinen Entwicklungsschritten, die durch Lebenszyklusmodelle beschrieben werden. Abbildung 14 stellt als Beispiel das WasserfallModell dar, das aus Folgen von Phasen besteht. Das Resultat einer Phase ist die Eingabe für die nächste Phase. Der Prozess umfasst alle notwendigen Arbeitsschritte, von der Analyse bis zur Wartung. 28 Abbildung 14: Der Software-Entwicklungsprozess als Wasserfall-Modell Die UML kennzeichnet eine standardisierte graphische Notation für objektorientierte Modelle. Sie besteht aus einer Anzahl unterschiedlicher Diagramme, die spezielle Aufgaben bei der Entwicklung eines Software-Systems übernehmen. Die einzelnen UMLDiagramme lassen sich in drei Modellgruppen aufteilen: • • • Analyse-Modell: Die Modellkategorie unterstützt die Analysephase des SoftwareEntwicklungsprozesses. Der Entwickler verschafft sich einen Überblick über die Anforderungen des Systems. Danach kann er die Funktionalität und den Aufwand des Systems ermitteln bzw. abschätzen. Zu dieser Kategorie zählt das Use-CaseDiagramm. Statisches Modell: Hier wird die Struktur des Systems entworfen. Auf dem Klassen-Diagramm wird das Konzept des Systems erstellt. Das Package-Diagramm sorgt für die logische Struktur. Dynamisches Modell: Diese Modellart geht auf die Objekt-Zustände und die Interaktion zwischen den Objekten ein. Die einzelnen Diagramme bieten graphische Notationen an, um die Lebensdauer und die Aktivität von Objekten anzuzeigen. Die Diagramme bieten auch die Möglichkeit, den Nachrichtenaustausch, das Zusammenspiel und die parallelen Abläufe zwischen den Objekten darzustellen. Zu dieser Modellart zählen das Sequenz -, das Kollaborations-, das Zustands- sowie das Aktivitäts-Diagramm. Eine Einordnung der reinen UML in den Software-Entwicklungsprozess beschränkt sich auf die Punkte 1 und 2. Die Software-Entwicklung mittels UML wird heutzutage durch CASE-Tools wie Rational Rose [27] [38], Together J [35] oder Fujaba [10] unterstützt. Diese Programme erlauben aus dem UML-Design entsprechenden Code eine 29 Programmiersprache zu generieren. Der Einsatz von UML mit Hilfe von CASE-Tools wirkt sich auf die Punkte 1 bis 4 des Software-Entwicklungsprozesses aus. 2.6 Das Werkzeug Fujaba Fujaba (From UML to Java and back again) ist eine Entwicklungsumgebung, die in der AG Softwaretechnik an der Universität Paderborn [10] entwickelt wurde. Fujaba ermöglicht es, aus UML- Spezifikationen Java-Code zu generieren. Weiterhin ist es möglich, aus bestehendem Quellcode durch geeignete Heuristiken die entsprechenden UML-Spezifikationen wieder zurückzugewinnen (Reengineering), um diese auf einer höheren Abstraktionsebene zu modifizieren. Dadurch wird einerseits die übersichtliche Handhabung auch größerer Projekte ermöglicht, und andererseits deren Entwicklungszeit verkürzt. Durch entsprechende Konsistenzprüfungen werden fehlerhafte Programme vermieden. Im Folgenden wird eine kleine Einführung über die in Fujaba definierten UML Klassen-, Aktivitäts- und Storydiagramme gegeben. 2.6.1 Fujaba UML-Klassendiagramme Fujaba schafft dem Benutzer Voraussetzungen für die Erstellung und Visualisierung von Klassendiagrammen nach UML. Daraus besteht die Möglichkeit, Java-Quelltexte zu generieren, die die modellierten Eigenschaften der Klassendiagramme widerspiegeln. Klassendiagramme werden verwendet, um statische Eigenschaften eines Systems zu modellieren. Unter Eigenschaften versteht man in diesem Zusammenhang die Struktur von Klassen beziehungsweise Datentypen (durch Variablen), sowie ihre Beziehungen (durch Methoden) zueinander. Bei der Spezifikation von Variablen und Methoden werden die UML-Sichtbarkeitsbereiche (private, public, etc) angegeben. Bei Variablen können noch Initialisierungen definiert werden. Man hat auch die Möglichkeit, Vererbungsbeziehungen und Assoziationen zwischen Klassen zu spezifizieren. Dabei werden Kardinalität, Rollenname, Art und Name der Assoziation modelliert. Bei der Quelltexterzeugung werden Klassen und Interfaces auf Java-Klassen und JavaInterfaces abgebildet. Klassen-Variablen werden als private Java-Attribute mit entsprechenden Zugriffsmethoden, deren Sichtbarkeit der der Klassen-Variablen entspricht, in Java modelliert. Für die Klassenmethoden werden, wenn kein Rumpf in Fujaba spezifiert wurde, leere Java-Methoden erzeugt. Assoziationen werden auf Paare von Referenzen in den beteiligten Klassen abgebildet. Dabei werden für die Referenzen Zugriffsmethoden generiert, die sich gegenseitig aufrufen. Dadurch wird der Konsistenzzustand von Referenzen sichergestellt. 30 Assoziationen mit Kardinalitäten größer als eins werden durch Container-Klassen dargestellt. Auch hier wird durch die Zugriffsmethoden die Konsistenz der Assoziationen garantiert. Mittels Klassendiagrammen werden statische Eigenschaften eines Systems modelliert. Abbildung 15 stellt als Beispiel ein Klassendiagramm dar. Abbildung 15: Beispiel für einen UML Klassendiagramm aus dem Diagnosesystem Die Erläuterung zu den Elementen von Klassendiagrammen wird in [11, Seiten 13-21] beschrieben. 2.6.2 Fujaba Interaktions-Diagramme Mit einem Klassendiagramm werden statische Eigenschaften eines Software-Systems spezifiziert. Programmabläufe werden dadurch nicht beschrieben. Die dynamische Spezifikation einer Methode oder des Software-Systems kann durch den Einsatz von Diagrammen des dynamischen Modells realisiert werden. Methoden in Fujaba werden durch Blöcke unterteilt, die durch Bedingungen zum Kontrollfuß der Methode zusammengesetzt werden. Außerdem erweitert Fujaba die dynamische Modellierung durch eine neue Diagrammart: Storydiagramm. 31 2.6.2.1 Fujaba UML-Aktivitätsdiagramme Ein Aktivitätsdiagramm ist eine Variante eines Statchart-Diagramms [11, Seiten 26-28] in dem Aktivitäten anstelle von Zuständen verwendet werden. Eine Aktivität repräsentiert die Ausführung von Operationen sowie Transitionen, die durch die abgeschlossene Ausführung der Operationen feuern. Dieser Diagrammtyp soll die Arbeitsweise einer Methode veranschaulichen. Mittels Aktivitätsdiagrammen werden Methoden einer Klasse implementiert. Abbildung 16 stellt als Beispiel die Implementierung der Methode patientSelection () der Klasse Anmelde aus dem Klassendiagramm in der Abbildung 15 dar. Abbildung 16: Beispiel eines Aktivitätsdiagramms Ein Aktivitätsdiagramm (vgl. Abbildung 16) wird mit einer Klassenmethode assoziiert. Der Name wird in der Form Klasse::Methode über dem Diagramm angegeben. Eine normale Aktivität besitzt mindestens eine ausgehende Transition, die nach Beendigung der internen Aktion, die Aktivität feuert. Aktivitäten werden durch ein Rechteck mit konvex gekrümmter linker und rechter Seite dargestellt. Der Ausdruck der Aktion wird innerhalb des Rechteckes aufgeführt. Die Aktion kann durch eine natürliche Sprache, Pseudocode oder in einer Programmiersprache dargestellt werden, wobei Attribute des zugehörigen Objektes verwendet werden können. Jedes Diagramm muss zwangsläufig genau einen 32 Startzustand besitzen. Neben Startzuständen können noch beliebig viele Stoppzustände verwendet werden. Die Erreichbarkeit der Stoppzustände wird in Fujaba nicht verifiziert. Eine ausführliche Beschreibung ist in [11, Seiten 28-29] zu entnehmen. 2.6.2.2 Fujaba UML-Storydiagramme Storydiagramme bestehen aus erweiterten UML-Aktivitätsdiagrammen, wobei die Aktivitäten entweder Java-Quellecode oder Story-Pattern ([11, Seiten 42-52] [45]) enthalten. Story Patterns sind Graphersetzungsregeln, die das dynamische Verhalten eines Systems beschreiben. Sie spezifizieren die Modifikationen an Objekten und deren Beziehungen und damit die Objektstruktur des Systems, die sich von der Laufzeitobjektstruktur oder dem Wirtsgraphen beschreiben lässt. Ein Story Pattern wird durch ein modifiziertes Kollaborationsdiagramm dargestellt. Dieses Diagramm besteht aus Variablen (oder Objekten) und Links, die die Variablen miteinander verbinden. Die Modifizierungen, die nach der Ausführung des Story Patterns im Wirtsgraphen stattfinden sollen, werden von den Elementen, die mit «create» oder «delete» markiert sind, modelliert. Ferner ist es möglich, mit Attributzuweisungen die Attributwerte von Objekten zu verändern oder mit Attributbedingungen Bedingungen über Attributwerte zu setzten. Diese Eigenschaften eines Story Patterns beschreiben dessen grundlegende Semantik. Die Darstellungsform von Story-Diagrammen ähnelt also der der UML-KollaborationsDiagrammen. Rechtecke repräsentieren Objekte und es wird zwischen gebundenen und ungebundenen Objekten unterschieden. Ein gebundenes Objekt ist dem Story-Pattern bereits bekannt, während ein ungebundenes noch erzeugt werden muss. Die Objekte werden durch ihren Namen und die Angabe ihres Typs im Diagramm beschrieben. Linien zwischen Objekten sind „Links“ und repräsentieren Ausprägungen von Assoziationen, die im Klassendiagramm spezifiziert sind. Objekte und „Links“ können durch „Modifier“ wie «create» (Objekt oder Link wird bei der Ausführung des Story-Pattern neu im Speicher angelegt), «delete» (Objekt oder Link wird bei der Ausführung des StoryPattern gelöscht) etc. zugeordnet werden. Objekte und Links ohne Modifier gehören zu dem Ausgangsgraph, der in der Objektwelt existieren muss, bevor das Story-Pattern ausgeführt wird. Man kann auch Story-Pattern-Bedingungen mit dem Zustand der Objekte im Ausgangsgraph verknüpfen. Wird ein Ausgangsgraph gefunden, so werden zugehörige Objekte und Links erzeugt bzw. gelöscht, um den gewünschte Zielgraph zu erreichen. Auch beim Erzeugen von Objekten können Operationen angegeben werden (z.B. Variablenzuweisungen), die die Zustände neu erzeugter Objekte verändern. Mittels Story-Diagrammen werden Methoden einer Klasse implementiert. Abbildung 17 stellt als Beispiel eine Aktivität der Methode patientSelection der Klasse Anmelde aus dem Klassendiagramm der Abbildung 15 dar. 33 Abbildung 17: Beispielaktivität 34 3. Verwandte Ansätze Im Bezug auf Web-Applikationen gibt es Tools, Technologien und Skriptsprachen, die für ihre Entwicklung zuständig sind. Diese Tools sind allgemein für die Pflege von Datenbanken geeignet. Will man jedoch komplexe Geschäfte realisieren, fehlt es an Werkzeugen zu ihrer Modellierung. Diese erweist sich für solche Applikationen als wichtig, um einerseits die bei der Motivation genannten Nachteile zu beheben und andererseits ihre Komplexität in den Griff zu bekommen. In Abschnitt 3.1 wird das Coocon Projekt [8] als ein geeignetes Tool für den Transport von Daten vorgestellt. Abschnitt 3.2 thematisiert die UML-Methodiken für die Modellierung von Web-Applikationen. Abschnitt 3.2.1 präsentiert eine UML Erweiterung für das Design von Web-Sites [4] [5]. In Abschnitt 3.2.2 wird eine UML Erweiterung für den Entwurf von Web-Sites [21] [22] [23] beschrieben. Eine modulare Modellierung von dynamischen Web-Seiten mit UML [24] [51] wird in Abschnitt 3.2.3 vorgestellt. Jeder Abschnitt dieses Kapitels wird mit einem Fazit abgeschlossen, das die Einschränkungen der vorgestellten Ansätze in Bezug auf die Ziele dieser Arbeit beschreibt. 3.1 Das Cocoon Projekt Das Cocoon-Projekt ist ein in Java geschriebenes Framework für Web-Inhalte, das im Rahmen des Apache XMLProjects Cocoon entwickelt wird. Cocoon ermöglicht die XMLFähigkeit in den Server zu übertragen. Mit Cocoon werden XML/XSL-Dokumente derartig aufbereitet, dass ein beliebiger Client sie darstellen kann, wobei der Client nicht immer ein Browser sein muss, sondern etwa auch ein WAP Handy. So können durch Definition verschiedener Stylesheets für dieselben Inhalte unterschiedliche Ausgaben am Client erzielt werden - sei es, um die Darstellung für unterschiedliche Browser zu optimieren oder überhaupt um den Inhalt in einem anderen Format zu präsentieren (XHMTL, HTML, XML, WML, PDF, etc.). Wenn in Zukunft die Browser selbst XML/XSL unterstützen, fallen keine Umstellungen an, so können die Daten direkt ohne den heute noch notwendigen Zwischenschritt der Transformation in HTML dargestellt werden. Ein weiterer Vorteil besteht darin, dass ein und dieselben Daten in verschiedenen Formaten dargestellt werden können. Ohne XML/XSL wäre dies mit erheblichem Wartungsaufwand verbunden. Durch die Trennung von Inhalt (in XML Dokumenten hinterlegt), der Geschäftslogik (in eXtensible Server Pages) und dem Layout (der Präsentation am Client) wird es möglich, umfangreichere Web-Projekte zu entwickeln und entsprechend zu warten. Die drei 35 Teilbereiche können von unterschiedlichen Personen betreut werden, ohne jeweils die anderen beiden Bereiche zu beeinflussen, sofern man sich an die vereinbarten Schnittstellen hält. Das XML-Dokument wird mit Hilfe eines XML-Parsers, dem im XML-Apache-Project entwickelter Apache Xerces, in eine interne Baumstruktur, dem Document Object Model (DOM), überführt. Auf diese Datenstruktur kann dann einer der zahlreichen Prozessoren (XSP Processor, SQL Processor, LDAP Processor, DCP Processor, etc) angesetzt werden, der die Daten entsprechend der gewünschten Programmlogik bearbeitet und verändert. Anschließend wird mit dem XSLT-Processor Apache Xalan eine Ausgabe für den jeweiligen Client erzeugt. Abbildung 18: Funktionsprinzip von Cocoon Zusammenfassend ist Cocoon ein leistungsfähiges Framework für die Manipulation von XML-Dokumenten. Cocoon eignet sich besonders zur Schaffung von Portalen, die viele unterschiedliche Endgeräte mit einer Datenbasis bedienen möchten. Dabei ist die flexible Anpassung an die verschiedenen Formate von großem Vorteil. Abbildung 18 stellt das Funktionsprinzip von Cocoon dar. Das Erzeugen von XML-Daten geschieht mit JSP und wird bei der Realisierung von Web-Anwendungen auf Basis von Cocoon manuell implementiert. 3.2 UML Erweiterung für den Entwurf von WebApplikationen Die Entwicklung von Web-Applikationen wird von verschiedenen Teams (Designer, Entwickler) realisiert. Für eine bessere Verständigung und Integration ihrer Arbeit ist eine gemeinsame Sprache notwendig, die ihre Arbeit auf dem gleichen Abstraktionsniveau beschreibt. Die UML wird hierfür eingesetzt, da sie die Rolle der verschiedenen Entwicklungsteams unterstützt. 36 3.2.1 Modellierung von Web-Applikationen mit UML Dieser Ansatz stammt von Conallen [4] [5] und bezieht sich auf das Layoutmodell von Web-Applikationen. Er spricht Designer von Web Applikationen an. Mit der Annahme, dass Web Applikationen sich nicht von dynamischen Web-Seiten unterscheiden, geht es bei dem Ansatz von Conallen darum, ein Design-Modell für Web-Seiten mit UML zu modellieren. Die Formatierung der Seite ist an dieser Stelle irrelevant und hat auch keinen Einfluss auf die Geschäftslogik des Systems, die eher von einer Skriptsprache gesteuert wird. UML ermöglicht eine Web-Seite als UML-Objekt auszudrücken. Auch die Eigenschaften der Web-Seite können mit UML ausgedrückt werden. Offen bleibt die Frage, wie die Skripte, die die Interaktionen innerhalb der Seite realisieren, einzuordnen sind. Man kann leicht Variablen und Funktionen, die innerhalb des Skripts definiert sind als Attribute bzw. Methoden des UML-Objekts einordnen. Da diese Skripte beim Client oder Server ausgeführt werden können, sollten ihre zugehörigen Attribute und Methoden unterschieden werden, um ihren Ablauf besser steuern zu können. Conallen benutzt eine UMLErweiterung, die auf dem Stereotypenprinzip aufbaut, um ein Design-Modell für WebApplikation zu modellieren. Web-Komponenten werden stereotypisiert, um einerseits Seiten mit Client- bzw. Server- basierten Skripten unterscheiden zu können und andererseits, um die zugehörigen Komponenten bzw. Attribute und Methoden dieser Skripte modellieren zu können. Der Ansatz umfasst die Layoutmodellierung und Implementierungsaspekte. Web-SeitenElemente wie Form, Frameset, Target und Web-Applikation Komponenten wie Serverpage und Clientpage werden durch eine UML-Erweiterung von Conallen definiert. Will man allerdings Abläufe der Applikation mit UML modellieren, fehlen bei diesem Ansatz nicht nur eine Zugriffsschicht auf die Geschäftslogik und auf die Datenbank, sondern auch eine geeignete Schnittstelle, die ihre Zuordnung realisiert, um dadurch die Modellierung der Interaktionen der Applikation ermöglichen zu können. 3.2.2 Eine UML Erweiterung für den Entwurf von Web-Sites Die hier vorgestellte Erweiterung ([21] [22] [23]) ist mit einer Methodik für HypermediaDesign verbunden, die ausgehend von einem Use-Case Modell der Anwendung aus den folgenden grundlegenden Schritten besteht: Erstellung eines konzeptionellen Modells, ein Navigationsentwurf und eine Präsentationsmodellierung. Bei der Erstellung des konzeptionellen Modells werden die in den Use-Cases beschriebenen Anforderungen berücksichtigt. Dabei werden traditionelle objektorientierte 37 Vorgehensweisen zur Erstellung von Klassendiagrammen verwendet. Als Ergebnis wird ein konzeptionelles Modell als Grundlage für den Navigationsentwurf erstellt. Beim Navigationsentwurf wird zunächst ein Modell des Navigationsraums entworfen, das darüber Auskunft gibt, welche Objekte durch Navigationen innerhalb der HypermediaAnwendung besucht werden können. Aus dem konzeptionellen Modell werden sozusagen navigierbare Objekte festgelegt. Als Ergebnis wird ein Navigationsraum-Model erstellt. Danach wird beschrieben, wie auf diese Objekte zugegriffen werden kann. Eine Erweiterung der UML zur Modellierung von Zugriffselementen wie Indizes, GuidedTours, Queries und Menus wird realisiert. Das Ergebnis erfolgt als NavigationsstrukturModel. Bei der Präsentationsmodellierung wird in einem „abstract Interface Design“ beschrieben, wie dem Benutzer die einzelnen Objekte des Navigationsraums und ihre Zugriffselemente präsentiert werden. Aus diesem Vorgang kommt ein Präsentationsmodell als strukturelle Organisation der Präsentation heraus, jedoch nicht das konkrete physische Erscheinungsbild der Informationen. Die meisten Schritte der vorgestellten Methodik können automatisch durchgeführt werden und bilden daher eine geeignete Grundlage für die Entwicklung von Werkzeugen zur Generierung von Web-Seiten. Der Ansatz modelliert Web-Seiten und ihre Zuordnung innerhalb der Applikation. Serverskripte und ihre Zuordnung zu Layout-Elementen, Geschäftslogik und Datenbankzugriff werden bei diesem Ansatz nicht berücksichtigt. Sie sind allerdings notwendig, um mit UML die Client/Server-Interaktionen modellieren zu können. 3.2.3 Modulare Modellierung von dynamischen Web-Seiten mit UML Der Ansatz von Lohmann & Schattkowsky [24] ermöglicht den Entwurf von WebApplikation in Modulen. Er basiert auf UML und ist für kleine und mittelmäßige WebApplikationen geeignet. Spezifische Use-Case Diagramme, Aktivitätsdiagramme und Klassendiagramme werden eingesetzt, um die strukturellen und verhaltensgemäßen Aspekte der Applikation festlegen zu können. Diese Aspekte ermöglichen Sichten, die von verschiedenen Arbeitsteams modelliert werden. Eine Web-Seite wird als Komposition von wiederverwendbaren Modulen betrachtet. Man unterscheidet ein Modul der Logik und ein Design-Modul, das einer Menge von wiederverwendbarem Design Template entspricht. Beide Module haben eine Darstellung sowohl auf der Clientebene (Client Seite Modul) als auch auf der Serverebene (Server Seite Modul) (vgl. Abbildung 19). 38 Client ClientPageModule consists of LogicInterface Server ClientPage DesignElement Serv erPage generates 0..n 1 0..n 0..n BusinessLogic «use» Hyperlink DesignTemplate «use» Abbildung 19: Abstraktes Model der Web Applikation Auf der Clientebene existieren Layout-Elemente, die ein verwendbares Design-Modul und eine Logikschnittstelle darstellen. Weil die Generierung der Clientseiten die Aufgabe des Logikmoduls in diesem Model enthält, und Logik und Design vermischt, wird das Logikmodul in kleinere Module (Renderer-Modul, Processor-Modul) unterteilt. Ziel dabei ist die Trennung und die Verkapselung der Logik und das Design bei der Modellierung der Applikation und eine konsistente Integration ihrer Ergebnisse. Auf diese Weise wird die Trennung von Geschäftslogik und Design der generierten Seite vollbracht. Verschiedene Use-Cases des Logikmoduls werden als Worksflows, bestehend aus Elementen des Logikmoduls, beschrieben. Die Logikschnittstelle, die auf der Clientebene das Logikmodul darstellt, wird von dem Renderer Modul generiert. Seine Aufgabe besteht in der Generierung des Client-SeiteModuls mit Hilfe von Daten, die aus dem Processor Modul stammen. Die Berechnung dieser Daten findet in dem Processor-Modul statt, und benutzt Angabedaten aus der Clientanfrage oder aus Datenbanken. Falls keine Daten existieren, generiert das Renderer Modul immer das gleiche Client-Seite-Modul und kann so mit dem entsprechenden Design-Modul ersetzt werden. Um das Erfassen und die Präsentation der Systemanforderungen zu ermöglichen, wird das Use-Case-Diagramm eingesetzt. Es beschreibt den funktionellen Aspekt des Systems aus der Sicht des Users. Das Use-CaseDiagramm wird danach mit Hilfe weiterer Use-Cases und schließlich Aktivitätsdiagrammen verfeinert. Abläufe der Use-Cases werden somit beschrieben und auf diese Weise zu Client/Server-Interaktionen. Um Web-Seiten aus dem Server-Seiten Modul generieren zu können, muss die Struktur der Applikation entsprechend modelliert werden. Instanzen des Metamodels werden dafür benutzt, um die entsprechende Spezifikation zu erreichen. Struktur und Komposition von Transienten und persistenten Daten der Web Applikation werden mit Hilfe von UMLStereotypen und Elementen aus dem Metamodel (vgl. Abbildung 20) realisiert. Die Methodik von Lohmann & Schattkowsky verwendet Use-Case-, Aktivitäts- und Klassen-Diagramme, um Struktur und Verhalten der Web-Applikation zu verwirklichen. Dadurch wird die Entwicklung der Applikation in verschiedene Module verteilt, so dass verschiedene Entwicklungsteams unabhängig arbeiten können. Der Ansatz von Lohmann und Schattkowsky ermöglicht eine Trennung von Design und Logik bei der Entwicklung 39 von Web-Applikationen. Dynamische Inhalte werden von Skript-Templates durch den Entwickler der Applikation realisiert und den vom Designer zu erstellenden Web-Seiten hinzugefügt. Die Formatierung der dynamischen Inhalte und das Einfügen in der richtigen Web-Seite werden manuell implementiert. Der Ansatz bietet keine UML-Zugriffsschicht auf die Layout-Elemente und auf die Datenbank, die eine UML-Modellierung von dynamischen Web-Seiten ermöglichen kann. contains Serv erPage 1..n Serv erPageModule 1..n contains Link DesignModule LogicModule 1..n Alternativ e BeginUseCase 1..n UseCase 1 LogicElement next uses 1..n 1..n 1..n UserDecision allows Abbildung 20: Metamodel für den Aufbau des Klassendiagramms 40 4. Modellierung von dynamischen Web-Seiten mit UML Dieses Kapitel beschäftigt sich mit der Konzeption und der Realisierung eines Mechanismus, der die Modellierung und Generierung von dynamischen Web-Seiten mittels UML ermöglicht. Durch diesen Mechanismus soll die Kommunikation zwischen Layout-Elementen, Geschäftslogik und Datenbank zustande kommen. Mit Hilfe der Kommunikation werden die dynamischen Web-Seiten modelliert. Das Fujaba CASE-Tool wird eingesetzt, um die Interaktionen der Web-Applikation bzw. die dynamischen WebSeiten zu realisieren. 4.1 Konzept Die Modellierung einer Web-Applikation lässt sich allgemein auf die Realisierung von dynamischen Web-Seiten zurückführen. Bei der Ausführung des durch eine Clientanfrage angesprochenen Serverskripts wird die dynamische Web-Seite generiert. Die Ausführung des Serverskripts besteht allgemein aus folgenden Schritten: die Aktualisierung der Geschäftslogik und die Generierung einer dynamischen Seite als Antwort auf die Clientanfrage. Das Serverskript, das die dynamische Seite generiert, wird meistens manuell Implementiert. Es gilt allgemein als eine Mischung von Logikcode und Layout-Elementen, die die generierten dynamischen Inhalte für die Präsentation an den Client formatiert. In diesem Abschnitt möchten wir einen Mechanismus konzipieren, der die Generierung und das Layout von dynamischen Inhalten mit UML modelliert. 4.1.1 Template Mechanismus Die Modellierung und Generierung von dynamischen Web-Seiten wird mit Hilfe des Templates-Mechanismus realisiert. Bei diesem Mechanismus ist das Template eine Schablone, welche das Layout der fertigen Antwortseite beinhaltet. An bestimmten Stellen beinhaltet das Template jedoch leere Layout-Elemente. Diese leeren Layout-Elemente werden erst durch Aufruf und Abarbeitung des Serverskripts mit dynamischem Inhalt ausgefüllt. 41 Für die Modellierung der Web-Applikation wird dem Entwickler vom Designer eine Template-Bibliothek zur Verfügung gestellt. Für jede Clientanfrage genügt allgemein mindestens ein Template. Bei der Modellierung der Antwortseite wird das Template eingelesen und mit dynamischem Inhalt ausgefüllt. Abbildung 21 stellt den Ablauf für die Generierung einer dynamischen Web-Seite dar. Das Layout-Schema stellt die Layout-Elemente dar. Die Web-Schnittstelle definiert eine Zugriffsschicht auf das Layout-Schema und die Geschäftslogik. Templates werden von der Web-Schnittstelle eingelesen. Für jede Anfrage wird das entsprechende eingelesene Template mit Hilfe der Zugriffe auf das Layout-Schema und die Geschäftslogik mit dynamischem Inhalt erweitert. Die Web-Schnittstelle wird eingesetzt, um die Geschäftslogikaktualisierung und die Generierung von dynamischen Web-Seiten zu modellieren. Bei der Modellierung der dynamischen Web-Seiten werden dynamische Inhalte erzeugt, formatiert und in passenden leeren Layout-Elementen des eingelesenen Templates eingefügt. Nach der Ausarbeitung aller leeren Layout-Elemente wird die Antwortseite zurückgeneriert. Die Zugriffe auf die Layout-Elemente des Templates werden durch geeignete Methoden von der Web-Schnittstelle zur Verfügung gestellt. Abbildung 21: Ablauf der Modellierung und Generierung von dynamischen Web-Seiten Für die Verwirklichung der Abläufe aus Abbildung 21 müssen das Layout-Schema, die Web-Schnittstelle, die Geschäftslogik und das DB-Schema auf das gleiche Abstraktionsniveau beschrieben werden. Mit UML werden das Layout- und das DBSchema in Klassendiagrammen abgebildet. Dadurch definieren wir eine objektorientierte Zugriffsschicht, die der Web-Schnittstelle ermöglicht, die Zugriffe auf die LayoutElemente und auf die Datenbank zu realisieren. Außerdem definiert die Web-Schnittstelle Methoden anhand der Zugriffsschicht auf das Layout-Schema, die das Zugreifen auf die Layout-Elemente ermöglichen. 42 Abbildung 22 stellt die Zuordnung der zu realisierenden Komponente aus Abbildung 21 in UML-Modellen dar. Die Modellierung der Struktur und des Verhaltens einer WebApplikation wird durch die zu realisierenden Modelle verwirklicht. Das Layout-Schema, das die Struktur von Layout-Elemente und ihre Beziehung miteinander definiert, wird in einem UML-Klassendiagramm überführt. Auch das DB-Schema wird eingelesen und im Klassendiagramm abgebildet. Die Web-Schnittstelle wird durch eine UML-Klasse definiert und realisiert die Zuordnungen zur Geschäftslogik und zu den Layout-Elementen. Somit wird die Meta-Struktur für die Realisierung von Web-Applikationen im Klassendiagramm erstellt und das Verhalten des Systems anschließend im UMLAktivitätsdiagramm modelliert. Die Abbildung des Layout-Schemas im UMLKlassendiagramm wird im Abschnitt 4.1.2 beschrieben. Die objektorientierte Zugriffsschicht auf die Datenbank [40] ist nicht Teil dieser Arbeit gewesen und wurde in einer früheren Diplomarbeit realisiert. Abbildung 22: UML-Zuordnung der zu realisierenden Komponente. 4.1.2 Layout-Elemente Um eine Flexibilität bei der Auswahl der einzusetzenden Layout-Elemente zu gewährleisten, wird die Überführung des Layout-Schemas in ein UML-Klassendiagramm mit der Unterstützung der immer beliebter werdenden Sprache XML realisiert. XML wird nicht nur von vielen Browsern unterstützt, sondern wird auch für die Entwicklung von vielen UML-Tools eingesetzt. Die Struktur der einzusetzenden Layout-Elemente wird durch ein XML-Schema beschrieben. Layout-Elemente und ihre Zuordnungen miteinander werden durch das Schema festgelegt. Ziel in diesem Abschnitt ist die Überführung des XML-Schemas in ein UML-Klassendiagramm. Es soll außerdem aus dem UML- 43 Klassendiagramm des Layout-Schemas möglich sein, das XML-Schema zurückzugewinnen. Dieses Austauschen zwischen XML-Schema und UMLKlassendiagramm soll eine gewisse Flexibilität bei der Modellierung von WebApplikationen garantieren. Damit wird jede Änderung bzw. Erweiterung des XMLSchemas leicht in ein UML-Klassendiagramm zu aktualisieren sein und umgekehrt. Für die Modellierung der Web-Applikation wird das XML-Schema in einen UMLKlassendiagramm eingelesen. Durch diese objektorientierte Zugriffsschicht auf die Layout-Elemente möchten wir nicht nur die Überführung von Templates als Instanz des XML-Schema in einer Baumstruktur für ihre Modellierung (vgl. Abbildung 23) erreichen, sondern auch das Layout bzw. die Formatierung der zu generierenden dynamischen Inhalte und ihr Einfügen in ASG ermöglichen. Diese Zugriffsschicht unterstützt bei der Modellierung der Applikation die Einhaltung der in der XML-Schema-DTD vorgeschriebenen Regel bezüglich die Layout-Elemente. Abbildung 23: Überführung des XML Schemas in einem UML-Modell Das XML-Schema soll nach der Modellierung einer Applikation weiterhin zur Verfügung gestellt werden, um weitere modellieren zu können. Ein Konzept, das das Austauchen beide Formate unterstützt, ist dafür notwendig. Zu diesem Zweck wird XMI (XML Metadata Interchange [42]) eingesetzt. XMI definiert ein XML-basiertes Austauschformat für UML Metadaten. Anhand XSLT [49], die so genante eXtensible Stylesheet Language Transformation, wird der gewünschte Austausch erreicht. Das XML-Schema wird eingelesen und durch Transformationen in einem UML-Klassendiagramm abgebildet. Fujaba bietet bereits einen Mechanismus für den Austausch von Daten. Dadurch ist es möglich, Fujaba-Projekte in einem GXL - (Graph eXchange Language, [34]) oder XMIFormat zu importieren oder zu exportieren. GXL kennzeichnet ein XML-Format für den Austausch zwischen Software-Entwicklungsumgebungen. Bei der Transformation werden XSLT-Stysheets und DTD des Zielschemas eingesetzt. Das Einlesenkonzept des XML-Schemas in Fujaba wird sich auf den existierende Import/Exportmechanismus stützen. Abbildung 24 stellt den Transformationsablauf dar. Fujaba-Projekte können als FPR-Format gespeichert werden. Das FPR-Format kann mittels eines FPR-XML-Parsers in ein Fujaba-XML-Format überführt werden, das 44 wiederum durch XSLT in ein GXL- oder XMI-Format abgespeichert werden kann. Die erzeugten XMI-, GXL-, Fujaba-XML- und FPR-Formate lassen sich wiederum durch entsprechende Transformationen in einem Klassendiagramm abbilden. Es reicht für das XML-Schema, eine Transformation nach GXL zu realisieren, um das gewünschte UMLModell für Layout-Elemente durch die existierenden Transformationen zu erreichen. Abbildung 24: Ablauf des Transformationsprozesses 4.1.3 DB-Zugriffsschicht Die Überführung des DB-Schemas in einem UML Modell ist in dieser Arbeit in Form einer Diplomarbeit [40] vorausgesetzt. Die „Entwicklung eines Generators für eine objektorientierte Zugriffsschicht auf einer relationalen Datenbank“ erweitert das Projekt Fujaba um die Fähigkeit, eine Verbindung zu einer relationalen Datenbank aufzubauen, die Struktur der Datenbank auszulesen und als logisches Schema in Form eines EER Diagramms anzuzeigen. 45 Aus dem erhaltenen Schema kann ein initiales konzeptionelles Schema in Form des Fujaba UML-Klassendiagramms (vgl. Abbildung 25) erzeugt werden. Der in [40] vorgestellte Generator erzeugt eine objektorientierte Zugriffsschicht auf Datenbanken. Die Zugriffsschicht unterstützt das aus der Datenbankwelt bekannte ACID – Transaktionskonzept bei der Änderung von Daten. Die öffentliche Schnittstelle zu der Zugriffsschicht ist vollkommen datenbankunabhängig. Die datenbankabhängigen Einstellungen sind intern in eigenen Paketen für jede Datenbank gekapselt und prinzipiell austauschbar. Abbildung 25: Überführung der Datenbank in Fujaba 4.1.4 Die Web-Schnittstelle Die Web-Schnittstelle erweist sich als wichtigste Komponente für die Modellierung und Generierung der dynamischen Web-Seiten. Sie wird durch eine UML-Klasse realisiert und modelliert mit Hilfe von UML-Assoziationen die Kommunikation zu Layout-Elementen und zu Geschäftslogikklassen. Abbildung 26 stellt das Konzept der Web-Schnittstelle dar. Sie wird von der WebProviderKlasse repräsentiert. Zwischen den HTMLElement- und WebProvider-Klassen wird eine UML-Assoziation mit dem Namen „hasElement“ definiert. Mit weiteren Eigenschaften einer Assoziation wird zusätzlich an dem jeweiligen Ende die Kardinalität festgelegt. Die „hasElement“-Assoziation drückt aus, dass eine WebProvider-Klasse beliebig vielen HTML-Elementen zugeordnet werden kann und jedes HTML-Element eindeutig einer WebProvider-Klasse gehört. Dadurch wird die Kommunikation zwischen LayoutElementen und der Schnittstelle verwirklicht. Damit lassen sich Layout-Elemente, die von einer Template-Seite eingelesen oder bei der Modellierung von dynamischen Inhalten neu erzeugt werden, mit dem WebProvider-Klasse verbinden. Die Bekanntgabe von LayoutElementen in die Schnittstelle ermöglicht nicht nur ihre Manipulation durch das 46 Serverskript bei der Modellierung von dynamischen Seiten, sondern auch die Generierung von neu erstellten Seiten, die bei Clientanfragen zurückgeschickt werden. Die Web-Schnittstelle muss außerdem mit der Datenbank (in manchen Fällen via Geschäftslogik wie in Abbildung 26 dargestellt) kommunizieren. Durch die „hasLogikClas_i“-Assoziationen werden Logikklassen von der Web-Schnittstelle erreicht. Die Logikklassen sprechen wiederum die Datenbanktabellen durch die „knowDBTable_i“Assoziationen an. Dadurch werden beispielsweise dynamische Inhalte von den Logikklassen mit Hilfe des Datenbankzugriffs erzeugt, und anhand Layout-Elemente, die durch die Kommunikation zwischen Logikklassen und WebProvider-Klasse erreicht werden können, formatiert. Die formatierten Inhalte können dann von dem Serverskript, erreicht werden und in die Template-Seite eingefügt werden. Somit wird die Erreichbarkeit von Datenbanktabellen, von Geschäftslogikklassen und von Layout-Elementen bei der Modellierung von dynamischen Web-Seiten mit dem Serverskript realisiert. Abbildung 26: Konzept der Web-Schnittstelle 47 Die Modellierung von dynamischen Web-Seiten mit UML lässt sich in folgenden Punkten zusammenfassen: • • • • Realisierung einer objektorientierten Zugriffsschicht auf die Layout-Elemente (vgl. 4.1.2). Realisierung einer objektorientierten Zugriffsschicht auf die Datenbank (vgl. 4.1.3). Realisierung einer UML Web-basierten Schnittstelle mit Zugriff auf DesignElemente, Geschäftslogikklassen und Datenbank(vgl. 4.1.4). Modellierung und Generierung von dynamischen Web-Seiten mit dem TemplateMechanismus (vgl. 4.1.1). In den folgenden Abschnitten wird durch die Festlegung eines Serverskripts (für die Modellierung von dynamischen Inhalten) und eines Layout-Schemas (für die Darstellung von Clientseiten) das vorher erwähnte Konzept umgesetzt. 4.2 Technische Umsetzung Das UML-Case Tool Fujaba wird in dieser Arbeit für die Erstellung der UML Diagramme genutzt. Klassen-, Aktivitäten- und Storydiagramme lassen sich bereits durch Fujaba unterstützen. Diese Diagrammarten werden unverändert verwendet. Für sie besteht die Möglichkeit, mittels Forward-Engineering Java-Quelltexte zu generieren. Die Konzepte zur Quelltextgenerierung werden für Klassen-, Aktivitäts- und Storydiagramme in [11, Seiten 137-213] beschrieben. Fujaba bietet außerdem die Möglichkeit, nicht nur neue Diagrammarten zu definieren, sondern auch einer Klasse mit zusätzlichen Eigenschaften durch benutzerdefinierte Stereotypen zu versehen. Die Modellierung der Web-Applikation verwendet die HTML-Sprache für das Layout von Web-Seiten. Mit einem HTML-Diagramm als neues Objekt-Diagramm im Fujaba wird die Möglichkeit gegeben, Templates darzustellen. Für die Modellierung dynamischer WebSeiten werden Java-Servlets als Serverskript eingesetzt. Um Servlets-Klassen zu definieren, wird in Fujaba eine UML-Erweiterung mit Hilfe Stereotypen durchgeführt. Die Modellierung der Geschäftslogik erfolgt durch die in Fujaba definierten Diagramme. Eine objektorientierte Zugriffsschicht auf die Datenbank wird bereits zur Verfügung gestellt (vgl. 4.1.3). 4.2.1 UML-Modell für HTML-Elemente Ziel in diesem Abschnitt ist der Aufbau eines UML-Modells, das eine objektorientierte Zugriffsschicht auf HTML-Elemente ermöglichen soll. Im Rahmen dieser Arbeit ist die 48 HTML 4 eingesetzt worden. Mit Hilfe des Import/Exportmechanismus aus dem Abschnitt 4.1.2 bieten sich für die Realisierung des Modells zwei verschiedene Möglichkeiten an: 1. Überführung der HTML-DTD in ein XML-Schema: Die HTML-DTD kennzeichnet alle HTML-Elemente und Attribute, die in einem HTML-Dokument enthalten sind, sowie die Beziehungen, die zwischen diesen Komponenten bestehen. Sie spezifizieren also einen Satz von Regeln für die Struktur eines HTML-Dokuments. Aus der HTML-DTD kann ein XML-Schema erzeugt werden, das aus einem XMLSchema-DTD validiert wird. Folgende Gleichung beschreibt den Transformationsablauf: HTML-DTD + XML-Schema-DTD = XML-Schema. Das erhaltene XML-Schema kann letztendlich mit dem Mechanismus aus dem Abschnitt 4.1.2 in ein Klassendiagramm in Fujaba importiert werden. 2. Aufbau des Modells in Fujaba: die zweite Möglichkeit besteht darin, mit Hilfe der Beschreibung aus dem HTML-DTD das Klassendiagramm in Fujaba aufzubauen. Das entstehende Diagramm lässt sich wiederum mit Hilfe des Mechanismus aus dem Abschnitt 4.1.2 in ein XML-Schema exportieren, das bei Bedarf für die Modellierung anderer Anwendungen importiert (vgl. 4.1.2, Import/Exportmechanismus) werden kann. Das entstehende UML-Klassendiagramm stellt die globale Struktur von HTML-Elementen dar. HTML-Elemente bzw. -Tags, zugehörige Attribute und ihre Beziehung zueinander werden in einem Klassendiagramm, wie in [11, Seiten 13-20] beschrieben, dargestellt. Abbildung 27 stellt einen Ausschnitt aus dem UML-Modell für HTML-Elemente dar. Eine HTML-Tabelle (TableTag) ist ein HTML-Element (HTMLElement) und kann mehrere Zeilen (TrTag) beinhalten. Jede Zeile kann mehrere Spalten (TdTag) enthalten. TrTag und TdTag erben von der HTMLElement-Klasse und drücken somit ihre Zugehörigkeit zu HTML-Elementen aus. Attribute von HTML-Elementen werden entsprechend als UMLAttribute dargestellt. Durch die Attributswerte kann die Formatierung der HTML-Tabelle definiert werden. Das vollständige Klassendiagramm für HTML-Elemente wird im Anhang A1 dargestellt. 4.2.1.1 Aufbau von ASG’s Das UML-Modell für HTML-Elemente wird sowohl zum Einlesen des Templates als auch zu seiner Modellierung angewendet. Dieses Template wird durch einen Parser in eine Baumstruktur bzw. ASG (Abstract Syntax Graph) als Instanz des UML Models transportiert. Dabei werden alle enthaltenen Elemente des Templates und ihre Zuordnung in einer Datenstruktur gespeichert. 49 Abbildung 27: UML-Klassendiagramm - Struktur der HTML-Tabelle Für die Realisierung des ASG wurde eine JavaCC-Grammatik [13] verwendet. Sie benutzt kein DTD und speichert jedes HTML-Dokument in einer geordneten Liste als Baum. Das Hauptziel bei der Transformation ist die Validierung, die Formatierung, das Anzeigen oder die Analyse des erstellten Baumes für eigene Zwecke. Der Parser, der bei dieser Grammatik definiert und für die Transformation zuständig ist, wird mit einer VisitorDesign-Pattern-Struktur aufgebaut [9]. Dadurch bietet er eine geeignete Möglichkeit durch die Erstellung eigener Visitor-Klassen, den erstellten Baum zu manipulieren. Instanzen des UML-Modells für HTML-Elemente werden auf diese Art mit passenden Visitor-Klassen verwirklicht. Die Baumstruktur aus dem JavaCC-Parser wird somit analysiert und neu übersetzt, um den gewünschten Abstract Syntax Graph zu generieren. Die Ablaufgenerierung des ASG ist in Abbildung 28 dargestellt. Jedes Template wird durch den JavaCC-HTML-Parser in eine einfache Baumstruktur übersetzt. Der erstellte Baum wird von einem weiteren HTML-Parser eingelesen und mit Hilfe des UML-Modells neu validiert. Daraus wird ein ASG als Instanz des UML-Modells generiert. Der generierte ASG wird bei der Modellierung von dynamischen Web-Seiten mit Hilfe des UML-Modells erweitert. Dafür ist ein Mechanismus notwendig, der es erlaubt, neue erzeugte HTMLElemente an den richtigen Stellen in den Baum einzufügen. Der Mechanismus wird im Abschnitt. 4.2.3 erläutert. Nicht nur die Überführung von Templates in einer Baumstruktur für ihre Modellierung soll ermöglicht werden, sondern die Möglichkeit muss bestehen, aus den modellierten ASG den HTML-Code generieren zu können. Um diese Codegenerierung Zustande zubringen, werden HTML-Elemente um die Methoden addTochildren und generateHtmlCode (vgl. Abbildung 29) erweitert. 50 Abbildung 28: Einlesen des Templates und Aufbau des ASG Bei dem Aufbau des ASGs durch den HTML-Parser werden alle Elemente der Templates besucht. Der ASG wird in einer am Anfang leeren Liste gespeichert. Für jedes besuchte Element des Templates wird das entsprechende Objekt des UML-Modells kreiert, mit Attributswerten, falls vorhanden, initialisiert und in den ASG hinzugefügt. Jedes Objekt des ASGs wird nach der richtigen Zuordnung im Baum als das aktuelle Objekt gesetzt. Das erste besuchte Element (<HTML>) wird als Wurzel des ASGs platziert. Jedes neu erzeugte Objekt wird an die addToChildren-Methode des zuletzt in den Baum eingefügten Objekts für die richtige Zuordnung im ASG übergeben. Alle Objekte im Baum kennen ihren Vaterknoten und jeder Vaterknoten kann mehrere Kinderknoten beinhalten. Abbildung 29 präsentiert die Methoden der HTML-Tabelle. Für die Attribute der Tabellen werden Zugriffsmethoden generiert, die bei der Modellierung einer Seite für die Formatierung der Tabelle initialisiert werden können. Die addToChildren- und generateHtmlCode-Methoden bezeichnen Erweiterungen, die im UML-Modell für HTMLElemente durchgeführt wurden, um die Zuordnung innerhalb des ASGs und die Codegenerierung nach der Modellierung einer Template-Seite zu ermöglichen. Abbildung 29: Methoden einer HTML-Tabelle 51 In den folgenden Abbildung 30 wird die Struktur von HTML-Elementen nach einem Kompositum-Muster [9] skizziert. Diese Struktur entspricht den in der HTML-DTD definierten Regeln. Alle HTML-Elemente lassen sich als Inline-Elemente oder BlockElemente zuordnen. HTMLElement, InlineElement und BlockElement sind abstrakte Klassen, die die HTML-Elemente (Tabellen, Inputfelder, HTML-Formulare, etc.) durch eine Vererbungshierarchie strukturieren. Abbildung 30: Struktur von HTML-Elementen nach dem Kompositum-Muster Abbildung 31 stellt die Struktur einer HTML-Tabelle dar. Es ist die typische ASG-Struktur einer erstellten HTML-Tabelle. Die Nummerierung legt fest, in welche Reihenfolge die Tabelle aufgebaut wird. Diese Struktur wird von der generateHtmlCode-Methode benutzt, um den HTML-Code aus dem ASG wieder zu generieren. Abbildung 31: typische Struktur des ASGs einer HTML-Tabelle (vgl. Abbildung 27) 52 Abbildung 32 stellt den Quelltext der addToChildren-Methode von der HTML-TabelleKlasse dar. Sie sorgt bei der Erzeugung von Tabellen für die richtige Zuordnung der Zeilen-Elementen (TrTag). Die Methode bekommt das in den Baum einzufügende Element durch einen Parameter. Ist das neue Element ein TrTag-Element, wird es in die Liste der Tabellenzeilen angefügt, es sei denn, es gibt seinem Vater das Element weiter. Auf diese Art werden alle HTML-Elemente des Templates in eine Baumstruktur angelegt (vgl. Abbildung 31). 1 public void addToChildren (HTMLElement child) 2 { 3 if (child instanceof TrTag) 4 { 5 this.addToTrTag ((TrTag) child); 6 } 7 8 //delegate to the parent 9 else 10 { 11 if (this.getBodyTag () != null) 12 { 13 this.getBodyTag ().addToChildren (child); 14 } 15 else if (this.getDivTag () != null) 16 { 17 this.getDivTag ().addToChildren (child); 18 } 19 else if (this.getTdTag () != null) 20 { 21 this.getTdTag ().addToChildren (child); 22 } 23 else if (this.getLiTag () != null) 24 { 25 this.getLiTag ().addToChildren (child); 26 } 27 else if (this.getFormTag () != null) 28 { 29 this.getFormTag ().addToChildren (child); 30 } 31 else 32 { 33 System.out.println ("Fehler bei addToChildren in the 34 TableTag Class: " + this.getName () + " has no 35 parent!"); 36 } 37 } 38 } Abbildung 32: addToChildren - Methode für HTML-Tabelle Abbildung 33 stellt den Quelltext der generateHtmlCode-Methode von der HTMLTabelle-Klasse dar. Die Methode generiert den entsprechenden Stückcode des erzeugten Element „TableTag“ (HTML-Tabelle) und ruft die gleiche Methode auf allen Kinderknoten (vgl. Abbildung 33, Zeile 46-50). Somit wird der gesamte HTML-Code einer erzeugten HTML-Tabelle generiert. Bei der Codegenerierung wird die Methode auf dem Wurzelknoten des ASGs aufgerufen. Dabei generiert sie für jedes Element des ASGs den entsprechenden Stückcode und rekursiv die von seinen Kinderknoten. 53 1 public String generateHtmlCode () 2 { 3 StringBuffer s = new StringBuffer (); 4 s.append ("\n<"); 5 s.append (this.getTagName ()); 6 7 if (getAlign () != null && !getAlign().equals ("")) 8 { 9 s.append (" "); 10 s.append ("align=" + getAlign ()); 11 } 12 if (getWidth () != null && !getWidth().equals ("")) 13 { 14 s.append (" "); 15 s.append ("width=" + getWidth ()); 16 } 17 if (getBorder () != null && !getBorder().equals ("")) 18 { 19 s.append (" "); 20 s.append ("border=" + getBorder()); 21 } 22 if (getBgColor () != null && !getBgColor().equals ("")) 23 { 24 s.append (" "); 25 s.append ("bgColor=" + getBgColor ()); 26 } 27 if (getCellPadding () != null && 28 !getCellPadding ().equals ("")) 29 { 30 s.append (" "); 31 s.append ("cellPadding=" + getCellPadding ()); 32 } 33 if (getCellSpacing () != null && 34 !getCellSpacing ().equals ("")) 35 { 36 s.append (" "); 37 s.append ("cellSpacing=" + getCellSpacing ()); 38 } 39 if (getId () != null && !getId().equals ("")) 40 { 41 s.append (" "); 42 s.append ("id=" + getId ()); 43 } 44 s.append (">"); 45 46 Iterator iter = this.iteratorOfTrTag (); 47 while (iter.hasNext ()) 48 { 49 s.append (((TrTag) iter.next ()).generateHtmlCode()); 50 } 51 s.append ("\n</" + this.getTagName() + ">"); 52 53 return s.toString (); 54 } Abbildung 33: generateHtmlCode – Methode für HTML-Tabelle 4.2.1.2 Das HTML-Diagramm Fujaba wird im Rahmen dieser Arbeit um ein HTML-Diagramm erweitert. Das HTMLDiagramm bezeichnet ein UML-Objektdiagramm, welches Instanzen von HTML- 54 Elementen darstellen kann. Die durch den ASG erstellte Baumstruktur wird damit repräsentiert. Das Diagramm soll dem Entwickler eine Zugriffsicht auf die Elemente des ASG ermöglichen. Diese Zugriffssicht hilft dem Entwickler der Applikation bei der Auswahl von leeren HTML-Elementen, die aus dem ASG geholt und mit dynamischen Inhalten aktualisiert werden müssen. Das HTML-Diagramm ist ein Hilfsmittel für den Entwickler. Die zu verarbeitenden Objekte sind meistens durch Attributswerte, die innerhalb des ASGs eindeutig identifizierbar sein müssen, festgelegt. Objekte des ASGs werden im HTML-Diagram als Rechtecke dargestellt, die den Namen des HTML-Elementes kleingeschrieben beinhalten. Bei gleichnamigen Objekten werden sie durchnumeriert. Ein weiteres Feld im Rechteck beinhaltet Namen und Werte ihrer Attribute. Dieser Repräsentation entsprechen die in Fujaba definierten UML-Objekte [11, Seiten 24-25]. Abbildung 34 stellt in der ersten Spalte eine HTML-Template-Seite und in der zweite Spalte die entsprechende Baumstruktur. Die Inputfelder mit den Namen „mdslogin“ und „mdspassword“ des Templates entsprechen den Objekten input1 und input2 in dem ASG. Soll beispielsweise bei der Modellierung des Templates das Inputfeld mit NAME = „mdslogin“ mit dem Wert VALUE=“login“ initialisiert werden, muss der Entwickler auf das richtige Objekt input1 zugreifen können. Das Objektdiagramm ermöglicht es in diesem Zusammenhang dem Entwickler eine Zugriffssicht auf das zu modellierende Template, um dann durch geeignete Zugriffsmethoden von der Web-Schnittstelle (s. Abschnitt 4.2.3) die entsprechenden Objekte ansprechen zu können. Template ASG <HTML> <HEAD> <TITLE> Diagnose system </TITLE> </HEAD> <BODY> <DIV> <FORM METHOD="POST" ACTION="MDSServlet?call=anmeldeservlet"> <INPUT TYPE="hidden" NAME="mdslogin"> <INPUT TYPE="hidden" NAME="mdspassword"> </FORM> </DIV> </BODY> </HTML> Abbildung 34: Darstellung des ASGs eines Templates 55 4.2.2 Java-Servlets in Fujaba Die Realisierung der dynamischen Seiten geschieht durch die Serverskripte. In dieser Arbeit werden Java-Servlets für ihre Modellierung angewendet. Es muss daher die Möglichkeit gegeben werden, Servlets-Klassen in Fujaba zu definieren und damit die Interaktionen der Web-Applikation modellieren zu können. Das UML-Case Tool Fujaba bietet die Möglichkeit zusätzliche Eigenschaften einer Klasse, mit benutzerdefinierten Stereotypen zu versehen. Der in Fujaba definierte Editor zur Erzeugung einer Klasse wird durch den Stereotyp <<servlet>> um die Fähigkeit erweitert, Servlet-Klassen zu erzeugen. Diese Erweiterung ermöglicht es nicht nur bei der JavaCode-Generierung das Importieren von richtigen Servlets-Containern, sondern erzeugt auch automatisch Servlet-Klasse-Methoden durch geeignete Fujaba-Aktionen. Abbildung 35 zeigt die Erzeugung einer UML-Klasse mit dem Fujaba-Class-Editor. Unter den Inputfeld „ClassName“ muss der Klassenname (AnmeldeServlet) angegeben werden. Durch die Auswahl der User-Stereotyp „servlet“ wird festgelegt, dass die zu definierende AnmeldeServlet-Klasse eine Servlet-Klasse ist. Abbildung 35: Dialog zur Erzeugung einer UML Klasse in Fujaba In der folgenden Abbildung wird die in die Abbildung 35 definierte AnmeldeServletKlasse präsentiert. Bei der Ausführung der Aktionen für die Erzeugung von ServletKlasse-Methoden, wird die ausgewählte Methode in der definierten Servlet-Klasse mit den richtigen Parametern angelegt. In Abbildung 36 ist die doGet-Methode der AnmeldeServlet-Klasse zu erkennen. Durch die ausgeführte Aktion wird automatisch ein 56 Aktivitätsdiagramm für die definierte Methode angelegt. Dieses Diagramm muss mit Story-Pattern erweitern werden, um dadurch die vollständige Implementierung der Methode (vgl. Abbildung 37) zu erreichen. Abbildung 36: Erzeugung der Servlet doPost Methode in Fujaba Das angelegte Aktivitätsdiagramm der doGet-Methode von der Servlet-Klasse AnmeldeServlet wird in der folgenden Abbildung präsentiert. Die Modellierung der Methode soll Clientanfragen realisieren, die an die AnmeldeServlet-Klasse gerichtet werden. Dadurch werden die Client/Server-Interaktionen der Web-Applikation modelliert. Abbildung 37: Implementierung der doGet-Methoden der AnmeldeServlet – Klasse 57 4.2.3 Realisierung der Web-Schnittstelle in Fujaba Die Web-Schnittstelle soll die Kommunikation zwischen HTML-Elementen, Geschäftslogikklassen und Datenbank mit Hilfe der definierten objektorientierten Zugriffsschichten zustande bringen. Durch diese Kommunikation wird die Struktur der Web-Applikation, deren Implementierung im Aktivitätsdiagramm erfolgen muss, modelliert. Die Modellierung der Geschäftslogik ist von der zu realisierenden Applikation abhängig. Bei kleineren Applikationen bzw. bei der Pflege von Datenbanken kann die Geschäftslogik auch durch die Servlet-Klassen modelliert werden. Die Web-Schnittstelle wird durch die UML-Klasse (WebProvider) zum Einsatz gebracht. Wie im Abschnitt 4.1.4 beschrieben, stellt Abbildung 38 die Kommunikation zwischen der Web-Provider-Klasse und der HTMLElement-Klasse dar. HTML-Elemente, die aus dem Einparsen von Templates entstehen, werden durch die Verbindung zu der WebProviderKlasse für ihre Modellierung bekannt gegeben. Servlet-Klassen werden dann durch eine Verbindung zu der WebProvider-Klasse auf HTML-Elemente zugreifen können, sei es für die Modellierung des eingelesenen Templates oder für die Generierung der erstellten Clientseite. Abbildung 38: Kommunikation zwischen der Web-Schnittstelle und HTML-Elementen Die Modellierung der Template-Seite läuft allgemein über einige Objekte des ASG. Es ist nicht notwendig, für den Zugriff auf diese Objekte den vollständigen Baum mit der WebProvider-Klasse zu verbinden. Ein Mechanismus ist jedoch nötig, der aus dem ASG die zu modellierenden HTML-Elemente zur Verfügung stellt. Durch ihn werden nur die zu bearbeitenden Objekte des ASGs an die Schnittstelle bekannt gegeben. Erst nach der vollständigen Abarbeitung aller Objekte werden die übrigen für die Code-Generierung mit der WebProvider-Klasse verbunden. Unnötige Kanten zwischen HTMLElement- und 58 WebProvider-Klassen werden dadurch erspart. Dadurch wird eine optimale Suche der zu bearbeitenden Objekte bei der Modellierung des ASGs gewährleistet. Der Aufbau des ASGs wird durch die unparse(File template)-Methode in einer Liste in der WebProvider-Klasse (htmlTree – vgl. Abbildung 38) gespeichert. Die zu verarbeitenden Objekte werden mit Hilfe der in der Schnittstelle definierten parse- und checkHTMLElement(id:String)-Methoden mit der WebProvider-Klasse verbunden. Die parse()-Methode verbindet die WebProvider-Klasse mit allen Form-Controll-Objekten wie Inputfelder, mehrzellige Textfelder und Selektionslisten aus dem ASG. Mit der checkHTMLElement(id:String)-Methode wird im ASG nach dem Objekt mit dem Attributsnamen „id“ und dem Attributswert „id“ gesucht und mit der WebProviderKlasse in Verbindung gebracht. Die WebProvider-Klasse bietet außerdem weitere Methoden an, die andere Objekte wie HTML-Tabellen aus dem ASG zur Verfügung stellen. Somit werden vor der Modellierung der dynamischen Seite die zu verarbeitenden Objekte bekannt gegeben. Nach der Bearbeitung aller leeren HTML-Elemente des ASGs werden die übrigen Objekte durch die process()-Methode mit der WebProvider-Klasse verbunden. Die Bekanntmachung des vollständigen Baumes bei der WebProvider-Klasse ist notwendig, um den HTML-Code der modellierten Seite generieren zu können. Es stellt sich heraus, dass die Kommunikation zwischen WebProvider- und HTMLElement-Klasse nicht die einzige Maßnahme zu der Modellierung der dynamischen Inhalte ist. Die Interaktion zwischen der Schnittstelle und den Geschäftslogikklassen trägt auch dazu bei (vgl. Abbildung 26). Abbildung 39 stellt als Beispiel die Struktur einer Web-Applikation dar. Durch die Klassen ServletA und ServletB werden Abläufe der Applikation modelliert. Die LogikKlasseA und LogikKlasseB beschreiben die Geschäftslogik der Applikation und die DBKlasse, DBKlasseA und DBKlasseB die UML-Zugriffsschicht eines eingelesenen DB-Schemas. Abbildung 39: Beispielstruktur einer Web-Applikation In Folgenden wird anhand von Beispielen gezeigt, wie die Modellierung und die Generierung von dynamischen Web-Seiten realisiert werden. Abbildung 40 stellt das Anmeldeformular des medizinischen Diagnosesystems dar. Zur Anmeldung im System müssen die Inputfelder „Login“ und „Password“ ausgefüllt werden. Durch den „ANMELDEN“-Button wird die Anfrage an eine Servlet-Klasse für ihre Bearbeitung 59 weitergeleitet. Die Servlet-Klasse überprüft die Anmeldedaten und generiert eine Fehlerseite, falls die Daten falsch angegeben wurden; sonst generiert sie eine Antwortseite mit einer Liste der zugehörigen Praxispatienten falls vorhanden. Für die Überprüfung der Anmeldedaten und die Generierung der Praxispatienten werden Datenbanktabellen aus der generierten DB-Zugriffsschicht angesprochen. Abbildung 40: Anmeldeformular des medizinischen Diagnosesystems Die Struktur der Applikation, die das Formular aus Abbildung 40 modelliert, wird in der Abbildung 41 präsentiert. Die DiagnoseSystem-Klasse ist eine Oberklasse von ServletKlassen, die von der WebProvider-Klasse erbt und dadurch die Erreichbarkeit von HTMLElementen realisiert. Durch die Verbindung zu den Patienten- und Doktoren-Klassen werden alle dargestellten Datenbanktabellen (Praxis, Personen, Patienten, Doctoren) erreicht. Durch die definierten Methoden der DiagnoseSystem- und Anmelde-Klasse wird die Geschäftslogik realisiert. Die Anmeldeanfragen werden durch seine Unter-Klasse Anmelde verwirklicht. So wird durch den „ANMELDE“-Button aus der Abbildung 40 die Anfrage an die Anmelde-Klasse weitergeleitet. Die Servlet-Klasse Anmelde ist für alle Anmeldeanfragen im Diagnosesystem zuständig. 60 Abbildung 41: Klassendiagramm – Ausschnitt aus dem Diagnosesystem Eine Arztanfrage zur Anmeldung im Diagnosesystem wird von der in Abbildung 42 dargestellten DoGet-Methode modelliert. Nach der Ausführung der builServerPageMethode wird die Antwortseite in die nächste Aktivität, die mittels einer Transition erreicht wird, zurückgeneriert. In dieser Aktivität kennt die Servlet-Klasse den Baum der modellierten Seite. Für ihre Generierung wird auf die Wurzel des Baumes die generateHtmlCode-Methode angewandt. Abbildung 42: Modellierung der doGet Methode 61 Die Abbildung 43 präsentiert die Modellierung der buildServerPage-Methode, die die Anmeldedaten überprüft und die zu generierende Antwortseite modelliert. Es wird zuerst durch die CheckAnmeldung-Methode alle aus der Doctoren-Klasse eingetragenen Ärzte geholt und mit den Anmeldedaten (login und password, vgl. Abbildung 40) verglichen. Im Erfolgsfall wird das Template „patientauswaehlen.html“ als Schablone der Antwortseite eingelesen und durch die patientSelection-Methode modelliert. Vorher werden alle zu bearbeitenden Objekte des ASGs durch die parse()-Methode bekannt gegeben. Abbildung 43: Modellierung der buildServerPage Methode Die patientSelection-Methode (vgl. Abbildung 44) greift durch die Patienten-DBKlasse alle eingetragenen Patienten aus der Datenbank. Für jeden Patienten wird ein HTMLElement „OptionTag“ erzeugt, das mit dem Patientenname und Patientennummer initialisiert wird. Der erzeugte Listeneintrag wird in dem HTML-Listenelement „select“, das aus dem eingelesenen „patientauswählen.html“-Template geholt wird, hinzugefügt. Auf diese Art werden alle Praxispatienten aus der Datenbank in die Schablone der Antwortseite eingetragen. Jede Anfrage wird also durch die buildServerPage-Methode (vgl. Abbildung 42) der entsprechenden Servlet-Klasse bearbeitet. Dabei werden nach der Bearbeitung alle leeren HTML-Elemente, die übrigen Objekte des Baumes durch die process-Methode mit der Anmelde-Klasse verbunden. Die Codegenerierung der Antwortseite wird schließlich durch den modellierten ASG ausgeführt und ausgegeben. Dafür wird die generateHtmlCodeMethode auf dem Wurzelknoten des ASGs ausgeführt. Die Methode generiert den entsprechenden Stückcode auf das Element und ruft die gleiche Methode auf alle Kinderknoten auf. Das gleiche Verfahren findet bei allen Elementen des ASG statt und generiert rekursiv (d.h. von dem Wurzelknoten bis zu den Blättern des Baumes) den entsprechenden HTML-Code als Antwortseite. 62 Abbildung 44: Modellierung der patientSelection Methode Abbildung 45 stellt die generierte Antwortseite aus der Anmeldeanfrage von Abbildung 40 dar. Abbildung 45: Antwortseite auf die Anmeldeanfrage aus Abbildung 40 63 Zusammenfassend wird bei der Modellierung einer Web-Applikation ein HTML-Schema in Form eines XML- oder GXL-Formats in Fujaba importiert. Das Importieren des Schemas stellt HTML-Elemente und ihre Beziehung miteinander, wie in die HTML-DTD beschrieben, in einem UML-Klassendiagrammn dar. Im nächsten Schritt muss das einzusetzende Datenbank-Schema eingelesen und in ein weiteres UML-Klassendiagramm abgebildet werden. Dann wird die Kommunikation zwischen HTML-Elementen und der Web-Schnittstelle, die durch die WebProvider-Klasse realisiert wurde, mittels einer UMLAssoziation erzeugt. Die Schnittstelle stellt außerdem eine Reihe von Methoden, die auf der Instanzebene das Zugreifen auf in die Schnittstelle hinzugefügte HTML-Elemente ermöglicht, zur Verfügung. Mit den definierten objektorientierten Zugriffsschichten und mit Hilfe von Servlet-Klassen kann dann das Design der Web-Applikation erstellt werden. Schließlich modelliert man die Interaktionen der Applikation bzw. die dynamischen WebSeiten in die Aktivitätsdiagramme nach dem Template-Mechanismusablauf (vgl. 4.1.1). Das realisierte HTML-Schema lässt sich für die Entwicklung weiterer Applikationen wieder verwenden. Bei verteilten Datenbanken können auch für die Realisierung der Applikation mehrere Datenbank-Schemas eingelesen werden. Die Web-Schnittstelle kann außerdem für eigene Bedürfnisse erweitert werden. 4.2.4 Codegenerierung Die Codegenerierung findet in dieser Arbeit auf zwei verschiedenen Ebenen statt. Für die modellierte Web-Applikation werden Java-Quelltexte generiert, kompiliert und dann für den Betrieb auf einem Web-Server vorbereitet. Andererseits lassen sich die dynamischen Web-Seiten, die mit der Erweiterung von den Template-Seiten bei der Modellierung der Web-Applikation realisiert worden sind, automatisch generieren. Die automatische Generierung von HTML-Seiten wurde durch die Erweiterung des UML-Modells für HTML-Elemente realisiert. HTML-Elemente wurden zu diesem Zweck um die generateHtmlCode-Methode erweitert, die nicht nur den entsprechenden Code des Elements ausgibt, sondern auch den der möglichen enthaltenden Elemente. Abbildung 46 verdeutlicht diese Codegenerierung. Aus dem Template (links im Bild), das von einem Editor erstellt wird, wird der entsprechende ASG (in der Mitte des Bildes) erstellt. Die Aktion „Edit Html Code“ führt die generateHtmlCode-Methode auf dem Wurzelknoten „html“ des ASGs aus und generiert daraus den HTML-Code (rechts im Bild) zurück. Die Methode läuft über alle Knoten des ASGs von dem Wurzelknoten bis zu den Blättern. So wird der HTML-Code aus dem eingelesenen und modellierten Template zurück generiert. 64 Abbildung 46: Aufbau und Codegenerierung eines ASGs Für die Generierung von Java-Quelltexten stellt Fujaba dafür eine Reihe von Aktionen zur Verfügung. Durch die Ausführung der Aktionen aus der Import/Export-Menüleiste (vgl. Abbildung 47) können entsprechende Code generiert werden. Die „Export All Classess To Java“-Aktion generiert beispielsweise alle Quelltexte von dem aktuellen Fuaja-Projekt. Das Konzept der Codegenerierung wird in [11, Seite 137-165 und S. 167-213] beschrieben. Abbildung 47: Codegenerierung in Fujaba 65 Abbildung 48 präsentiert als Beispiel den Java-Quelltext einer angelegten Servlet-Klasse. Für alle Servlet-Klassen in Fujaba werden bei der Codegenerierung die Servlet-Container (javax.servlet und javax.servlet.http) importiert. In Abbildung 48 ist auch der Rumpf der noch nicht implementierten doGet-Methode in den Code generiert. Abbildung 48: Quelltext einer Servlet-Klasse Bei der Codegenerierung können die generierten Java-Quelltexte in einer Verzeichnisbaumstruktur (Package name) gespeichert werden. Der Verzeichnisbaum ist bei der Erzeugung einer UML Klasse in Fujaba festzulegen (vgl. Class Editor Abbildung 35). Die generierten Java-Quelltexte werden dann kompiliert und anschließend für Ihre Ausführung an den Web-Server als neue Applikation in ein Basisverzeichnis angelegt. Bei dem Tomcat Web-Server müssen die Servlet-Klassen in einem „WEB-INF“Verzeichnis liegen. Das Verzeichnis beinhaltet ein XML-Dokument (web.xml), welches die neue angelegte Applikation beschreibt. Eine ausführliche Beschreibung für das Anlegen und die Konfigurationen von Web-Applikationen im Tomcat-Web-Server kann in [36] nachgelesen werden. Die Web-Applikation ist dann betriebsbereit nach der vollständigen Konfiguration und kann in jedem Web-Browser abgerufen werden. 66 5. Prototyp In den folgenden Abschnitten wird die Verwendung der in dieser Arbeit realisierten WebSchnittstelle für die Modellierung von Web Applikationen anhand eines Beispieles vorgestellt. Das Beispiel ist ein einfaches Expertensystem zur Unterstützung der Diagnosefindung in einer Arztpraxis (vgl. 1.3). Im Abschnitt 5.1 wird aus der textuellen Beschreibung des zu realisierenden Expertensystems eine Wissensbank in Form einer Datenbank erstellt. In diesem Zusammenhang wird durch das Einlesen des Datenbankschemas und die Überführung in ein Klassendiagramm eine UML-Zugriffsschicht erstellt. Dadurch werden automatisch die Zugriffsmethoden im UML Aktivitätsdiagramm generiert. Im darauf folgenden Abschnitt 5.2 wird eine Template-Bibliothek der zu realisierenden Applikation festgelegt. Das Einlesen und die Modellierung der Template wird durch das UML-Modell, das eine UML-Zugriffsschicht auf HTML-Elemente verschafft, erreicht. Schließlich wird im Abschnitt 5.3 mit Hilfe der Servlets-Klassen, der objektorientierten Zugriffsschichten auf die HTML-Elemente und die Datenbank, die Struktur des Diagnosesystems modelliert, dessen Implementierung die Template-Bibliothek benutzt. Um das Beispiel einfach zu halten, wird die Geschäftslogik mit den Servlets-Klassen modelliert. 5.1 Erstellung der Wissensbank Aus der Beschreibung des Diagnosesystems ist eine Sybase-Datenbank erstellt worden. Für die Modellierung des Prototyps wird in Fujaba das DB-Schema eingelesen und in einem SQL-Diagramm dargestellt. Aus dem erstellten Diagramm wird durch einen Generator das gewünschte UML-Klassendiagramm abgebildet. Dabei werden Zugriffsmethoden für die Manipulation von Daten im Aktivitätsdiagramm generiert. Abbildung 49 stellt einen Ausschnitt des erstellten SQL-Diagramms dar. Das Diagramm besteht aus einer Praxis- und Personen-Tabelle. Personen werden wiederum Doctoren-Tabelle oder Patienten-Tabelle zugeordnet. Patientenbehandlungen, die von einem Praxisdoktor durchgeführt werden müssen, werden unter der BehandlungenTabelle gespeichert. Dabei müssen die Patientennummer (PATNr) und die behandelte Doktorennummer (ANGNr) gespeichert werden. Jeder Behandlung werden eine Diagnose-Tabelle und ein Rezept-Tabelle zugewiesen, die durch die Tabellen BD und BR eindeutig identifizierbar sind. 67 Abbildung 49: Ausschnitt aus dem SQL-Diagramm des DB-Schemas 5.2 Template Bibliothek Aus der Beschreibung des Diagnosesystems (vgl. Abschnitt 1.3) wird eine TemplateBibliothek erstellt. Die Templates werden als Schablone bei der Modellierung der dynamischen Web-Seiten benutzt. Die Anzahl der zu erstellenden Templates werden abhängig von den zu realisierenden Anfragen festgelegt. Zu jeder Anfrage ist eine feste Anzahl von Templates zugeordnet. Aus der Anmeldeanfrage des Diagnosesystems werden beispielsweise für ihre Modellierung zwei Templates zugeordnet: ein Fehler-Template für eine fehlgeschlagene Anmeldung und ein Erfolg-Template als Schablone der Antwortseite bei einer erfolgreichen Anmeldung. Für die Realisierung des Diagnosesystems sind die Templates aus Abbildung 49 eingesetzt worden. Template Name Beschreibung Diagnosesystem.html Index-Seite, Anmeldeformular für das Diagnosesystem Patientauswaehlen.html Vorlage für eine erfolgreiche Anmeldung Anmeldungsfehler.html Vorlage für eine fehlgeschlagene Anmeldung Newpatient.html Formular für das Erzeugen eines neuen Praxispatienten Newpatientfehler.html Patient.html Vorlage für einen fehlgeschlagenen Patientenantrag in der Datenbank Vorlage bei der Patientenauswahl für eine neue Behandlung Diagnose.html Vorlage für die Erstellung der Diagnose Rezept.html Vorlage für die Erstellung des Rezepts Abmeldung.html Vorlage für die Abmeldung vom Diagnosesystem Abbildung 50: Template-Bibliothek des Diagnosesystems 68 5.3 Architektur des Diagnosesystems Das Design des Diagnosesystems wird ebenfalls aus der Beschreibung des Diagnosesystems (vgl. Abschnitt 1.3) erstellt. Da die Geschäftslogik mit Servlet-Klassen realisiert wird, geht es um die Festlegung der Struktur des zu realisierenden Diagnosesystems. Die traditionelle objektorientierte Vorgehensweise zur Erstellung von Klassendiagrammen kann dafür eingesetzt werden. Als Ergebnis werden folgende Klassen und Methoden festgelegt. Abbildung 51 schafft eine Übersicht über die Servlet-Klassen und Methoden, die dabei die Geschäftslogik modellieren. Servlet-Klassen Anmelde checkAnmeldung (HttpServletRequest) patientSelection () Patient checkAllData () checkPatient (String) checkPatientFormData (HttpServletRequest) createNewPatient (HttpServletRequest) getLastDiagnosis (Patienten) Diagnosis checkBK (String) checkSK (String) fillKrankheiten () Rezept checkKM (String) fillMedikamente () createNewBehandlung (HttpServletRequest) createNewRezept (HttpServletRequest) DiagnoseSystem buildServerPage (HttpServletRequest, HttpServletResponse) checkMaxID (String) MDSServlet init (String) Aufgabebeschreibungen Zuständig für die Anmeldung im System. Überprüft die Anmeldedaten und modelliert die Template patientauswaehlen.html und anmeldungsfehler.html Holt die letzten Behandlungsdaten des zu behandelten Patienten oder erzeugt neue Patientendaten falls noch nicht im System. Dabei wird ein neues Behandlungsformular erzeugt. Modelliert die Template patient.html, newpatient.html und newpatientfehler.html Erstellt eine neue Diagnose. Modelliert das Template diagnose.html Erstellt ein neues Rezept und schließt eine neue Behandlung ab. Modelliert die Template rezept.html und abmelden.html realisiert die gemeinsamen Eigenschaften aller Servlet-Klassen in einer Vererbungshierarchie. Die Hauptservlet-Klasse des Diagnosesystems. Delegiert mit Hilfe der init-Methode Clientanfrage an die richtige Servlet-Klasse weiter. Abbildung 51: Beschreibung der Servlet-Klassen des Diagnosesystems Abbildung 52 stellt die Struktur des Diagnosesystems dar. Die gemeinsamen Eigenschaften der Servlet-Klassen Anmelde, Diagnosis, Patient und Rezept werden in einer Vererbungshierarchie durch die DiagnoseSystem-Klasse realisiert. Die DiagnoseSystem–Klasse erbt von der WebProvider–Klasse und realisiert dadurch die Erreichbarkeit der HTML-Elemente von den Servlet-Klassen. Das Design der Servlet- 69 Klassen ist mittels des „STRATEGY“-Design-Patterns [9, Siete.315] realisiert. Alle Anfragen aus dem Diagnosesystem werden von der Servlet-Klasse MDSServlet verwaltet. Durch eine Parameterübergabe identifiziert die MDSServlet-Klasse die für die Bearbeitung der Anfrage zuständige Servlet-Klasse und leitet die Anfrage an sie weiter. Clientanfragen werden von der doGet-Methode der MSDServlet-Klasse modelliert und dann an die gleiche Methode der entsprechenden DiagnoseSystem-Klasse weitergeleitet, die durch die buildServerPage-Methode die Geschäftslogik aktualisiert und eine Antwortseite zurückgeneriert. Abbildung 52: Design des Diagnosesystem - Servlet-Klassen und HTML-Elemente Um das Design des Diagnosesystems zu vervollständigen, müssen die möglichen Zugriffe auf die Datenbanktabelle modelliert werden. Diese Zugriffe ermöglichen den Datenaustausch zwischen Servlet-Klassen und Datenbank. Aus technischen Gründen sind für die Modellierung diese Zugriffe nur reference Klassen für die Datenbanktabelle eingesetzt worden. Das liegt daran, dass das Projekt ReddMoM [28], das die Datenbankzugriffsschicht ermöglicht, im Zeitpunkt der Realisierung dieser Arbeit noch nicht vollständig im Fujaba integriert war. Somit wurden als Ersatzlösung Java-Code aus der Datenbankzugriffsschicht in ReddMom generiert, kompiliert und für die Ausführung der Applikation zur Verfügung gestellt. Für die Modellierung des Prototyps wurden dann reference Klassen für die Datenbankzugriffsschicht erzeugt. 70 In der folgenden Abbildung wird die Modellierung der Zugriffe auf die Datenbanktabellen präsentiert. Damit ist die Struktur des Diagnosesystems vollständig modelliert. Das Verhalten des Systems wird dann in das Aktivitätsdiagramm implementiert. Abbildung 53: Design der Kommunikation zwischen Servlet- und Datenbankklassen Die realisierte Struktur modelliert das Diagnosesystem zur Diagnosefindung in einer Praxis. Zur Anmeldung im System wird nach einem Login und Passwort verlangt. Abbildung 40 präsentiert in einem Browser das Anmeldeformular, dessen HTML-Code in der Abbildung 54 präsentiert wird. Mit dem „ANMELDEN“-Button (vgl. Abbildung 54 Zeile 15) wird die Anfrage an die doGet-Methode der MDSServlet-Klasse weitergeleitet. Abbildung 54 stellt die Index-Seite des Diagnosesystems dar. Wie alle Template-Seiten der Applikation beinhaltet sie ein Formular-Element, welches durch den Wert des Attributs „ACTION“ (Zeile 15), die anzusprechende Servlet-Klasse für die Bearbeitung der Anfrage angegeben wird. 71 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 <HTML> <HEAD> <TITLE> Diagnosesystem </TITLE> </HEAD> <BODY bgcolor="#FFFFFF" text="#000000" link="#123456"> <DIV align="center"> <TABLE border="0"> <TR><TD><IMG src="images/tomcat.gif"></TD> <TD><H1>Medizinisches Diagnosesystem</H1> <P>Es ist eine Beispielanwendung für die Realisierung von Web Applikationen auf Basis der UML und dient zur Unterstützung der Diagnosefindung in einer Praxis. </P> </TD> <TR> </TABLE> <BR> <FORM METHOD="POST" ACTION="mds/MDSServlet?call=anmeldeservlet"> zur Anmeldung, geben Sie Ihre Login und Password an! <BR><BR> Login :< INPUT TYPE="text" NAME="mdslogin" size=10> Password :< INPUT TYPE="password" NAME="mdspassword" size="10"> <BR><BR> <INPUT TYPE="SUBMIT" VALUE="ANMELDEN"> </FORM> </DIV> </BODY> </HTML> Abbildung 54: Indexseite des Diagnosesystems – diagnosesystem.html Alle Abläufe des Diagnosesystems werden nach dem folgenden Schema modelliert und ausgeführt. Die doGet-Methode der MDSServlet-Klasse leitet alle Arztanfragen an die doGet-Methode der anzusprechenden Servlet-Klasse weiter. Jede dieser Servlet-Klassen modelliert durch die buildServerPage-Methode die Anfrage. Dabei wird die Geschäftslogik aktualisiert, die Antwortseite modelliert und schließlich zurückgeneriert (vgl. Abbildung 42). Für das Formular aus der Abbildung 54 identifiziert die MDSServlet-Klasse durch den von der Formular übergebenen „call“-Parameter (vgl. Abbildung 54, Zeile 15: call=anmeldeservlet) die anzusprechende Servlet-Klasse und leitet die Anfrage an sie weiter. Abbildung 55: doGet Methode von der Klasse MDSServlet 72 Die Identifikation der richtigen Klasse erfolgt über die Ausführung der init-Methode (vgl. Abbildung 56). Die Methode erzeugt anhand des übergebenen Parameters eine Instanz der anzusprechenden Servlet-Klasse. Für das Formular aus der Abbildung 54 wird nach dem Aufruf der init („anmeldeservlet“)-Methode eine Instanz der ServletKlasse Anmelde erzeugt, die mit der MSDServlet-Klasse verbunden wird. Die Bearbeitung der Anfrage wird in diesem Fall an die erzeugte Anmelde-Klasse übergeben. Die Modellierung der Anfrage, die die Anmeldedaten überprüft und die Antwortseite modellieren, wurde im Abschnitt 4.2.3 vorgeführt. Abbildung 56: init Methode der Klasse MDSServlet Für eine neue Behandlung muss der Patient aus einer Liste ausgewählt werden (vgl. Abbildung 45). Durch den „ABSENDEN“-Button bekommt der Arzt als Antwort auf die Anfrage ein neues Behandlungsformular. Die Seite präsentiert in der ersten Reihe die Daten des ausgewählten Patienten. In der zweiten Reihe werden die letzten Behandlungsdaten, falls vorhanden, dargestellt. Die letzte Reihe stellt eine Auswahlmöglichkeit für Symptome und Untersuchungen vor, die aus der Datenbank stammen. Für die Behandlung müssen Symptome ausgewählt werden oder Untersuchungen durchgeführt werden. Die Symptome und Befunde, die aus den ausgewählten Untersuchungen festgestellt werden können, weisen in kausalen Zusammenhängen auf Krankheiten hin, die in der Wissensbank der realisierten Datenbank des Diagnosesystems gespeichert sind. 73 Ist der zu behandelnde Patient noch nicht in der Praxis angemeldet, kann durch den „NEWPatient“-Button (vgl. Abbildung 45) ein Formular abgerufen werden, das vor der neuen Behandlung die Patientendaten in die Datenbank abspeichert. Abbildung 57 präsentiert das Behandlungsformular, das bei der Auswahl des Patienten für eine neue Behandlung generiert wird. Für die Behandlung des gewählten Patienten mit dem Namen „Wadsack“ wird der Arzt nach der Auswahl von Symptomen und Befunden aus den durchgeführten Untersuchungen, eine neue Anfrage mit dem „Diagnose“-Button an die Diagnose-Servlet-Klasse senden. Abbildung 57: Patientenformular zur Erstellung einer neuen Behandlung Die Bearbeitung der Anfrage aus der Abbildung 57 wird in der folgenden Abbildung präsentiert und wird durch die BuildServerPage-Methode der Diagnosis-Klasse modelliert. Die Methode liest zuerst das „diagnose.html“-Template (vgl. Abbildung 59), das die Schablone der zu modellierenden Antwortseite enthält. Mit der Ausführung der parseMethode werden die zu bearbeitenden HTML-Elemente (vgl. Abbildung 59, Zeilen 9, 17, 26, 32 und 36) mit dem Diagnosis-Klasse verbunden. Die chekSK- und checkBK-Methoden holen aus der Wissensbank die von den Symptomen und Befunden abhängigen Krankheiten. Für diese Krankheiten werden Tabelleneinträge erzeugt, die in den entsprechenden Tabellen des ASG eingefügt werden. Nach der Generierung dieser Zusammenhänge werden durch die fillKranheiten-Methode alle in der Datenbank eingetragenen Krankheiten geholt und für die Diagnose in das SelektionslistObjekt des entsprechenden ASG-Elements hinzugefügt. 74 Abbildung 58: buildServerPage-Methode der Patient-Servlet-Klasse 8 <!-- Diagnose-checkSK --> 9 <TABLE border=0 align="left" id="sk"> 10 <TR> 11 <TD width="40%"><B>Symptom</B></TD><TD width="20%"><B>Pro/Contra</B></TD><TD width="40%"><B>Krankheit</B></TD> 12 </TR> 13 </TABLE> 14 <!-- Ende Diagnose checkSK--> 15 … 16 <!-- Diagnose-checkBK --> 17 <TABLE border=0 id="bk"> 18 <TR> 19 <TD width="40%"><B>Befund</B></TD><TD width="20%"><B>Pro/Contra</B></TD><TD width="40%"><B>Krankheit</B></TD> 20 </TR> 21 </TABLE> 22 <!-- Ende Diagnose checkBK--> 23 … 24 <!-- wahrscheinlische-Krankheiten-berechnen --> 25 <TABLE> 26 <TR><TD vAlign="top"><H4>wahrscheinliche Krankheiten:</H4></TD><TD><OL id="wk"></OL></TD></TR> 27 </TR> 28 … 29 <!-- Diagnose-checkKrankheiten-Tabelle --> 30 <TABLE border=0 width="50%"> 31 <TR><TD><B>Krankheit</B></TD> 32 <TD><SELECT NAME="krankheit" size="1"><option>none</option></SELECT></TD> 33 </TR> 34 <TR vAlign="top"> 35 <TD><B>Kommentar:</B></TD> 36 <TD><TEXTAREA NAME="kommentar" ROWS="10" COLS="50"></TEXTAREA></TD> 37 </TR> 38 </TABLE> 39 … Abbildung 59: Ausschnitt des Templates – diagnose.html 75 Abbildung 59 präsentiert einen Ausschnitt des Templates für die Erzeugung von Diagnosen. Die zu verarbeitenden HTML-Elemente sind meistens durch ein ID-Attribut gekennzeichnet (vgl. Abbildung 59, Zeilen 9 [<TABLE border=0 align="left" id="sk">] und 17 [<TABLE border=0 id="bk">]) oder bei den Form-Control-Elementen durch den Namen des Elements eindeutig identifizierbar (vgl. Abbildung 59, Zeilen 32 <SELECT NAME="krankheit" size="1"> - und 36 - <TEXTAREA NAME="kommentar" ROWS="10" COLS="50">). Abbildung 60 stellt die Modellierung der fillKranheiten-Methode dar. Dabei werden die Krankheitseinträge in die Selektionsliste der Antwortseite generiert. Es wird zuerst das anzusprechende Liste-Element (SelectTag mit dem selectName=“krankheit“) geholt. Es wird dann durch die DB-Tabelle Krankheiten alle in der Datenbank gespeicherten Krankheiten identifiziert. Für jede Krankheit wird durch das HTML-Element OptionTag und TextTag einen Listeeintrag erzeugt. Der erzeugte Eintrag (OptionTag) wird indem Liste-Element (SelectTag) eingefügt. Es werden schließlich die neu erzeugten Elemente (OptionTag und TextTag) mit der Diagonis-Klasse in Verbindung gebracht. Abbildung 60: fillKrankheiten-Methode der Diagnosis-Klasse Abbildung 61 präsentiert das Diagnosisformular des Patienten „Wadsack“ in einem WebBrowser. Die generierte Clientseite ist eine Erweiterung des in der Abbildung 59 dargestellten Templates. 76 Abbildung 61: Diagnoseformular eines Patienten 77 6. Zusammenfassung und Ausblick In dieser Diplomarbeit wurde die Entwicklung von Web-Applikation betrachtet. Mit HTML als Layout-Elemente und Java-Servlets als Server-Skript wurde das Projekt Fujaba, um die Fähigkeit erweitert, dynamische Web-Seiten zu modellieren und daraus Codes zu generieren. Mit dem Stereotypkonzept wurde die Erzeugung von Servlet-Klassen in Fujaba definiert. Danach wurden den Servlet-Klassen mit Hilfe objektorientierter Zugriffsschichten in Form von Fujaba Klassendiagramm ermöglicht, mit HTML-LayoutElementen und Datenbanktabellen durch eine erstellte Schnittstelle zu kommunizieren. Für die Modellierung von dynamischen Web-Seiten wurden Templates als Schablone der Antwortseiten eingelesen und durch die HttpServlet-Methoden von den ServletKlassen realisiert. Diese UML-Modellierung erlaubte die Aktualisierung der Geschäftslogik der Web-Applikation und die Erweiterung der eingelesenen Templates mit dynamischen Inhalten, die durch die Geschäftslogik und den Datenbankzugriff erzeugt und mit HTML-Layout-Elemente formatiert wurden. Der in dieser Arbeit erarbeitete Lösungsansatz ermöglicht durch eine objektorientierte Kommunikation zwischen Layout-Elementen und Datenbanken via einer Schnittstelle die Modellierung des Informationsaustausches bei Client/Server-Interaktionen und schließt somit die Lücke der manuellen Implementierung bei der Entwicklung von WebApplikationen. Es ist ein UML-Erweiterungsansatz für die Modellierung von dynamischen Web-Seiten und soll einen Beitrag für die Vollständigkeit von Entwicklungsprozessen für die objektorientierte Modellierung von Web-Applikationen und Datenbank-Anwendungen leisten. Das Beheben von Fehlern, die Anpassung, die Verbesserung oder die Erweiterung der Applikation an neue Anforderungen werden durch diesen Ansatz leichter. Die realisierten Zugriffsschichten und Schnittstellen können weiter angesetzt und erweitert werden, um neue Web-Applikationen zu modellieren. Dadurch werden eine bessere Wartbarkeit und Widerverwendbarkeit für die modellierte Applikation erreicht. Für die weitere Zukunft könnte das HTML-Objektdiagramm um mehr Funktionalität erweitert werden. Das in dieser Arbeit realisierte Objektdiagramm ermöglicht eine Zugriffssicht auf HTML Templates. Änderung und Erweiterung des Templates auf der Objektebene, Generierung und Speicherung der geänderten Templates wären von Vorteil für die Modellierung der Web-Applikation. So wären beispielsweise neue DesignKonzepte im HTML-Diagramm direkt aktualisierbar und nicht mehr unbedingt über das File System und das neue Einlesen und Überführung des Templates im HTML- oder StoryDiagramm nötig. So ergäbe es für die Designer von Web-Applikationen eine objektorientierte Zugriffsschicht für die Manipulation von HTML-Templates. Ihrer Realisierung entspräche beispielsweise die Integration des Ansatzes von Conallen in dieser Arbeit. 78 Sollen die Web-Inhalte als XML-Dokumente dem Client zur Verfügung gestellt werden, eignet sich auch das in dieser Arbeit realisierte Konzept für ihre Erstellung bzw. Erweiterung. Der Ansatz käme z.B. für die Pflege von Datenbanken in Frage oder man würde sich damit auch in der Richtung Web-Services bewegen, wo XML als geeignetes plattformunabhängiges Format für den Transport von Daten eingesetzt wird. 79 Literaturverzeichnis [1] Shelley Powers, Developing ASP Component, 2. Edition, O’Reilly, 2001. [2] AutoScout24, Online at http://www.autoscout24.de. [3] Caucho, Online at http://www.caucho.com/. [4] J. Conallen, Modeling Web Applictions with UML. Whitepaper, March 1999. Online at http://www.conallen.com/whitepapers. [5] J. Conallen, Building Web Applications with UML. The AddisonWesley Object Technology Series, 1999. [6] S. Guelich, S. Gundavaram and G. Birznieks, CGI Programmierung mit Perl, 2. Auflage,O’Reillly Verlag, 2001. [7] L. Wall, T. Christiansen and L. Schwartz, Programmieren mit Perl, 1. Auflage, O’Reilly Verlag, 1997. [8] Apache Cocoon, Online at http://xml.apache.org/cocoon/. [9] E. Gamma, R. Helm, R. Johnson and J. Vlissides, Design Patterns, 22nd Printing, Addison-Wesley, 2001. [10] Fujaba – From Uml to Java And Back Again, Online at http://www.upb.de/cs/agschaefer/Lehre/PG/FUJABA/fujaba.html. [11] T. Fischer, J. Niere, and L. Torunski, Konzeption und Realisierung einer integrierter Entwicklungsumgebung für UML, Java und Story-Driven-Modeling. Master’s thesis, University of Paderborn, Department of Mathematics and Computer Science, Paderborn, Germany, July 1998. [12] Sun Microsystems Inc., Java Server Pages Technology. 95-01. Online at http://java.sun.com/products/jsp/. [13] JavaCC HTML Parser, Online at http://www.quiotix.com/downloads/html-parser/. 80 [14] HTTP (Hyper Transfer Text Protokol) Online at http://java.sun.com/j2ee/1.4/docs/tutorial/doc/HTTP. html. [15] HTML (HyperText Markup Language) Online at http://www.w3.org/TR/REC-html40/. [16] Stefan Münz and Wolfgang Nefzger, HTML 4.0 Handbuch, 3. Auflage, 1999. [17] Stefan Münz: SELFHTML, Online at http://selfhtml.teamone.de/. [18] HTML.Template.java, Online at http://html-tmpljava.sourceforge.net/. [19] Marty Hall, Servlets and JSP:An Overview. 1999. Online at http://www.apl.jhu.edu/~hall/java/ServletTutorial/Servlet-Tutorial-Overview.html. [20] Jrun, Online at http://www.macromedia.com/. [21] H. Baumeister, N. Koch and L. Mandel, Towards a UML extension for hypermedia design, In UML’99 - The Unified Modeling Language – Beyong the Standard, USA, October 1999, Springer Verlag. [22] R. Hennicker and N. Koch, A UML-based methodology for hypermedia design, UML’2000 - The Unified Modeling Language – Advancing the Standard, volume 1939 of Lecture Notes in Computer Science, York, England, October 2000, Springer Verlag Online at http://www.pst.informatik.uni-muenchen.de/~hennicke. [23] N. Koch, H. Baumeister, R. Hennicker and L. Mandel: Extending UML to Model Navigation and Presentation in Web Applications, In Geri Winters and Jason Winters, In Modelling Web Applications in the UML Workshop, UML’2000, York, England, October 2000. [24] T. Schattkowsky, M. Lohmann and R. Heckel: Leightweight Modeling of Dynamic Websites using UML, In Proc. ICSE 2002 Workshop on Web Engineering, Orlando, FL, Mai 2002. [25] J Krause, PHP4, Webserver-Programmierung unter Windows 81 and Linux, Hanser, München, 2000. [26] PHP (Hypertext Preprocessor), Online at http://www.php.net/. [27] Rational. Rose, the Rational Rose case tool. Online at http://www.rational.com. [28] ReddMom – Reengineering of distributed (federated) databases for multimedia oriented middleware, Online at http://www.upb.de/cs/agschaefer/Lehre/PG/REDDMOM. [29] Dustin R. Callaway, Inside Servlets, Server-Side Programming for the Java Platform, 2. Auflage, AddisonWesley, 2001. [30] P. Roßbach and H. Schreiber, Java Server und Servlet, portierbare Web-Applikationen effizient entwickeln, 1. Auflage, München, Addison-Wesley, 2000. [31] Java Servlets, Online at http://java.sun.com/products/servlet/index.html. [32] SVG, Online at http://www.xml-web.de/svg.html http://www.w3.org/Graphics/SVG/Overview.htm. [33] SGML (Standard Generalized Markup Language), Online at http://www.w3.org/TR/WD-html40970708/intro/sgmltut.html. [34] GXL, Graph Exange Language, Online at http://www.gupro.de/GXL/. [35] Object International. TogetherJ, the TogetherJ case tool. Online at http://www.togethersoft.com. [36] Tomcat, Online at http://jakarta.apache.org/tomcat/index.html. [37] Marty Hall, Tutorial on Servlets and JSP, Java Server Pages 1.0. 1999. Online at http://www.apl.jhu.edu/~hall/java/ServletTutorial/Servlet-Tutorial-JSP.html. [38] Rational Software Corporation. UML documentation version 1.3 (1999). Online at http://www.rational.com. 82 [39] UML - Unified Modeling Language, Online at http://www.omg.org/technology/documents/formal/uml.h tm. [40] Felix Wolf: Entwicklung eines Generators für eine objektorientierte Zugriffsschicht auf einer relationalen Datenbank. Master's thesis, University of Paderborn, Department of Mathematics and Computer Science, Paderborn, Germany, 2001. [41] W3C, W3-Konsortium, Online at http://www.w3c.org. [42] XMI, XML Metadata Interchange, Online at http://www.omg.org/technology/documents/formal/xmi.h tm. [43] XML, Extensible Markup Language, Online at http://www.w3.org/XML/. [44] XML Schema, Online at http://www.w3.org/XML/Schema. [45] Albert Zündorf, Rigorous Object Oriented Software Development; Habilitation Thesis, University of Paderborn, 2001. [46] Albert Zündorf, PROgrammierte GRAphErsetzungsSystem. Deutscher Universitäts Verlag ISBN 3-8244-2075-9. [47] XHTML, Extensible HyperText Markup Language, Online at http://www.w3.org/MarkUp/. [48] DTD, Dokument Type Definition, Online at http://www.w3.org/XML/1998/06/xmlspec-report19980910.htm. [49] XSLT, Extensible Stylesheet Language, Online at http://www.w3.org/Style/XSL/. [50] Apache Web-Server, Online at http://www.apache.de/. [51] T. Schattkowsky, M. Lohmann and R. Heckel: Rapid Development of Modular Dynamic Web Sites using UML, In Pra. 5th International Confrence on the Unified Modeling Language UML 2002, Dresden, Germany, September/October 2002, pp 336-350. 83 Anhang A1 HTML-Modell: Klassendiagramm Abbildung 62: Klassendiagramm - HTML Elemente 84 A2 Diagnosesystem: SQL-Diagramm Abbildung 63: SQLDiagramm aus der eingelesenen Datenbank des Diagnosesystems 85 A3 Diagnosesystem: Klassendiagramm Abbildung 64: Architektur des Diagnosesystems