133
Flash Weather Ein Generator f ¨ ur Macromedia Flash zur interaktiven Visualisierung XML basierter Daten Diplomarbeit von Ralf Kunze betreut von Prof. Dr. Oliver Vornberger Prof. Dr. Horst Malchow Fachbereich Mathematik/Informatik Universit¨ at Osnabr ¨ uck 15.06.2001

Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

  • Upload
    lydiep

  • View
    218

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

Flash WeatherEin Generator fur Macromedia Flash

zur interaktiven Visualisierung XML basierter Daten

Diplomarbeitvon

Ralf Kunze

betreut vonProf. Dr. Oliver VornbergerProf. Dr. Horst Malchow

Fachbereich Mathematik/InformatikUniversitat Osnabruck

15.06.2001

Page 2: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

I

Vorwort

Diese Diplomarbeit entstand an der Universitat Osnabruck im Fachbereich Informatik.Sie ist der schriftliche Teil der Diplomprufungen fur meinen Abschluß als Diplom Sy-stemwissenschaftler.

Danksagung

An dieser Stelle mochte ich folgenden Personen fur ihre Unterstutzung bei der Erstellungdieser Diplomarbeit danken:

• Herrn Prof. Dr. Oliver Vornberger fur die sehr gute Betreuung der Arbeit, seineHinweise und Anregungen und der Beschaffung der Wetterdaten

• Herrn Prof. Dr. Horst Malchow fur die Betreuung der Arbeit seitens der System-wissenschaft

• Olaf Muller, Benjamin Stark, Stefan Rauch und Tanja Schniederberend fur kon-struktive Vorschlage und das Korrekturlesen dieser Arbeit

• Welf Sporlein, Ina Niehaus und Andreas Thyen fur das Korrekturlesen dieser Ar-beit

• Michael Dirska fur die Bereitstellung eines Computers und der benotigten Softwa-re im Fachbereich Informatik

• Meiner Mutter, die mir das Studium der Angewandten Systemwissenschaft erstermoglicht und mich die ganze Zeituber unterstutzt hat

Warenzeichen

In dieser Arbeit werden eingetragene Warenzeichen, Handelsnamen und Gebrauchsna-men verwendet. Auch wenn diese nicht als solche gekennzeichnet sind, gelten die ent-sprechenden Schutzbestimmungen. Die Verwendung des Macromedia Flash File Format(SWF) Software Development Kit (SDK) unterliegt den Bestimmungen des MacromediaFlash File Format (SWF) SDK License Agreement [Macr2001]. Apache Xerces unter-liegt den Bestimmungen der Apache Software License [Apac2001].

Page 3: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

II

Inhaltsverzeichnis

1 Einleitung 1

2 Macromedia Flash 5

2.1 Vor- und Nachteile von Macromedia Flash. . . . . . . . . . . . . . . . . 5

2.2 Der Flash Standard. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

2.3 Das Shockwave Flash (SWF) Dateiformat. . . . . . . . . . . . . . . . . 9

2.3.1 Datentypen in SWF. . . . . . . . . . . . . . . . . . . . . . . . . 12

2.3.2 Darstellung eines Flashfilmes. . . . . . . . . . . . . . . . . . . 15

2.4 SWF – SDK. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17

3 eXtensible Markup Language 21

3.1 Der Standard XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . .21

3.2 Einsatzgebiete und Anwendung von XML. . . . . . . . . . . . . . . . . 25

3.3 Die Document Type Definition – DTD. . . . . . . . . . . . . . . . . . . 26

3.3.1 Dokumentanalyse. . . . . . . . . . . . . . . . . . . . . . . . . .27

3.3.2 Die DTD-Syntax. . . . . . . . . . . . . . . . . . . . . . . . . .27

3.4 XML Parser. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31

3.4.1 XML-Parser Aplication Programming Interface. . . . . . . . . . 31

3.4.2 Welche Parser gibt es?. . . . . . . . . . . . . . . . . . . . . . . 37

4 Das Java Native Interface 39

4.1 Programmentwicklung mit JNI. . . . . . . . . . . . . . . . . . . . . . . 40

4.2 Datentypen in JNI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .45

5 Clipping 47

5.1 Grundlagen des Clipping. . . . . . . . . . . . . . . . . . . . . . . . . .47

5.2 Clipping von Punkten. . . . . . . . . . . . . . . . . . . . . . . . . . . .48

5.3 Clipping von Linien. . . . . . . . . . . . . . . . . . . . . . . . . . . . .48

5.4 Clipping von Polygonen . . . . . . . . . . . . . . . . . . . . . . . . . .49

Page 4: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

III

6 Realisierung 52

6.1 Erstellen einer Java API fur das C++ SWF-SDK. . . . . . . . . . . . . . 52

6.1.1 Verwaltung von C++ Objekten auf der Javaseite. . . . . . . . . 52

6.1.2 Konkrete Umsetzung: Entwicklung der SWF API. . . . . . . . . 55

6.1.3 Beseitigung von Fehlern in der KlasseHFPolygon . . . . . . . 58

6.2 Das Datenformat. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .60

6.2.1 Entwicklung der SKF-DTD . . . . . . . . . . . . . . . . . . . . 61

6.2.2 Konvertierung in das Schnittstellenformat. . . . . . . . . . . . . 67

6.3 Der Flash Generator. . . . . . . . . . . . . . . . . . . . . . . . . . . . .69

6.3.1 Dynamik und Flexibilitat des Generators. . . . . . . . . . . . . 69

6.3.2 Implementation. . . . . . . . . . . . . . . . . . . . . . . . . . .71

6.3.3 Einbinden von Fonts. . . . . . . . . . . . . . . . . . . . . . . . 75

6.4 Clipping von SKF-Dateien. . . . . . . . . . . . . . . . . . . . . . . . . 78

6.4.1 Clipping von primitiven Objekten. . . . . . . . . . . . . . . . . 78

6.4.2 Clipping von Polygonen mit Bezierkurven. . . . . . . . . . . . . 79

6.4.3 Clipping von Kontrolltags. . . . . . . . . . . . . . . . . . . . . 83

6.4.4 Der Clipping-Datenfluß. . . . . . . . . . . . . . . . . . . . . . 84

6.4.5 Die Clipper-Objekte. . . . . . . . . . . . . . . . . . . . . . . . 85

7 Anwendung 88

7.1 Benotigte Hard- und Software. . . . . . . . . . . . . . . . . . . . . . . 88

7.2 Anwendung der Java SWF API. . . . . . . . . . . . . . . . . . . . . . . 89

7.3 Erstellen eines Flashfilmes aus einer SKF-Datei. . . . . . . . . . . . . . 91

7.4 Clippen einer SKF-Datei. . . . . . . . . . . . . . . . . . . . . . . . . .92

7.5 Beispielfilme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .95

8 Mogliche Einsatzgebiete 98

9 Resumee 100

10 Ausblick 102

Page 5: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

IV

A Das SKF Dateiformat 105

B Die Java SWF API 113

C Flashweather-Bibliotheken 114

D Die calcQuadIntersec Methode der Klasse Polygon 116

E Inhalt der CD-Rom 120

F Literaturverzeichnis 121

Erkl arung

Page 6: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

V

Abbildungsverzeichnis

2.1 Pixel- und Vektorgrafik im Vergleich . . . . . . . . . . . . . . . . . . . . . 7

2.2 Vergroßerung einer Pixel- und einer Vektorgrafik. . . . . . . . . . . . . . . 8

2.3 Dateistruktur einer SWF-Datei. . . . . . . . . . . . . . . . . . . . . . . . 13

2.4 Snapshot eines Flashfilmes. . . . . . . . . . . . . . . . . . . . . . . . . .16

3.1 Verarbeitungsprozeß fur SGML . . . . . . . . . . . . . . . . . . . . . . . . 22

3.2 Zusammenhang zwischen SGML, XML, HTML, CSS und DSSSL. . . . . . . 24

3.3 Grafische Darstellung des zum Quellcode3.3gehorenden DOM-Trees. . . . . 33

3.4 SAX-Parser-Events beim Parsen eines XML-Dokumentes. . . . . . . . . . . 35

4.1 Javaklassen konnen mit der Java Virtual Machine auf verschiedenen Betriebs-systemen ausgefuhrt werden. . . . . . . . . . . . . . . . . . . . . . . . . .39

4.2 JNI als Schnittstelle zwischen Java und C++. . . . . . . . . . . . . . . . . . 40

4.3 Schritte der Programmentwicklung mit JNI. . . . . . . . . . . . . . . . . . 41

5.1 Mogliche Lagen einer Linie im Bezug zum Clippingrechteck [Fell1992] . . . . 48

5.2 Bereichscodes desCohen and SutherlandAlgorithmus [Fell1992] . . . . . . . 49

5.3 Polygonclipping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .49

5.4 Polygonclipping nachSutherland and Hodgman. . . . . . . . . . . . . . . . 50

6.1 Mogliche Zeiger eines C-Objektes bei Mehrfachvererbung. . . . . . . . . . . 53

6.2 Datenfluß bei der Generierung eines Flashfilmes. . . . . . . . . . . . . . . . 60

6.3 Ausmaße eines TrueTypeFont-Buchstaben. . . . . . . . . . . . . . . . . . . 75

6.4 Horizontaler Abstand zwischen zwei Buchstaben. . . . . . . . . . . . . . . . 77

6.5 Eine quadratische Bezierkurve. . . . . . . . . . . . . . . . . . . . . . . . . 80

6.6 Verschiedene Arten von Schnittpunkten mit einer Bezierkurve. . . . . . . . . 81

6.7 Alte und neue Punkte der Bezierkurve. . . . . . . . . . . . . . . . . . . . . 82

6.8 Verteilung der Datenuber denSAXMultiplexer . . . . . . . . . . . . . . 84

7.1 Ausschnitt aus einem mit der Java SWF API erstellten Flashfilm. . . . . . . . 89

7.2 Einzelne Schritte des Clippings. . . . . . . . . . . . . . . . . . . . . . . . 94

7.3 Momentaufnahme der vorhergesagten Temperaturwerte fur Afrika . . . . . . . 95

7.4 Mit dem Clipper erzeugten Ausschnitt aus der Karte7.3 . . . . . . . . . . . . 96

7.5 Prognostizierte Regenmengen fur Europa . . . . . . . . . . . . . . . . . . . 97

Page 7: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

VI

Tabellenverzeichnis

2.1 Verfugbarkeit des Macromedia Flash Players (Stand: Marz 2001) . . . . . . . 6

2.2 Die wichtigsten Datentypen im SWF-Fileformat. . . . . . . . . . . . . . . . 12

2.3 Der RECT Datentyp im SWF-Fileformat. . . . . . . . . . . . . . . . . . . 13

2.4 Dateiheader eines Flashfilmes. . . . . . . . . . . . . . . . . . . . . . . . 13

2.5 Recordheader fur Tags, die eine Gesamtlange von 63 Byte nichtuberschreiten . 14

2.6 Recordheader fur Tags, die eine Gesamtlange von 63 Byteuberschreiten . . . . 14

2.7 Struktur des DoAction-Tags . . . . . . . . . . . . . . . . . . . . . . . . . 14

2.8 Struktur des ActionGetURL-Tags. . . . . . . . . . . . . . . . . . . . . . . 15

2.9 Lowlevelklassen des SWF-SDKs. . . . . . . . . . . . . . . . . . . . . . . 18

2.10 Highlevelklassen des SWF-SDKs. . . . . . . . . . . . . . . . . . . . . . . 18

3.1 Attributtypen in XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . .29

4.1 Primitive Datentypen in JNI. . . . . . . . . . . . . . . . . . . . . . . . . .45

4.2 Komplexe Datentypen bei der Nutzung von JNI. . . . . . . . . . . . . . . . 46

4.3 Methoden zum Umgang mit String-Objekten. . . . . . . . . . . . . . . . . . 46

Page 8: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

VII

Quellcodeverzeichnis

2.1 Durch Parsen sichtbar gemachte Tags des SWF Filmes (Snapshot in Abb.7.5) . . 16

2.2 Implementation zur Erstellung eines Flashfilmes (siehe auch Abb.7.5, Seite97) 19

3.1 person.dtd: Einfache DTD zur Strukturierung von Personendaten. . . . . . . . 29

3.2 Eine mogliche Auspragung derperson.dtd. . . . . . . . . . . . . . . . . . . 30

3.3 XML Auspragung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .32

3.4 ExampleDomParser.java: Verwendung eines Xerces-J DOMParsers. . . . . . . 34

3.5 MySAXHandler.java: Handler zur Ausgabe der Ereignisse eines SAX-Parsers. . 36

4.1 HelloWorld.java: Klasse mit einernative-Methode . . . . . . . . . . . . . . . 42

4.2 HelloWorld.h: Das mitjavah -jni erzeugte Headerfile. . . . . . . . . . . 43

4.3 HelloWorld.c: Die Implementation auf der C++ Seite. . . . . . . . . . . . . . 43

6.1 Methode zur Umwandlung eines Pointers in ein Bytearray. . . . . . . . . . . 53

6.2 Methode zur Umwandlung eines Bytearrays in den entsprechenden Pointer. . . 54

6.3 HFObject Klasse, welche HFObject.cc fur Java zuganglich macht . . . . . . . 56

6.4 Die zu HFObject.java gehorigenative-Klasse f3sdkhighlevelHFObject.cc . . . 57

6.5 Methoden zur Umwandlung absoluter in relative Koordinaten. . . . . . . . . 59

6.6 Dynamische Instanziierung eines Objektes. . . . . . . . . . . . . . . . . . . 70

6.7 Methodeparse aus der KlassePpolygon zur Verarbeitung despolygon -Tags 74

6.8 Polygon.java: Die Intersec Methode fur gerade Linienstucke . . . . . . . . . . 87

7.1 Implementation zur Erstellung eines Flashfilms. . . . . . . . . . . . . . . . 90

7.2 Nutzung des SKF-Generators. . . . . . . . . . . . . . . . . . . . . . . . . 91

7.3 Nutzung des SKF-Clippers. . . . . . . . . . . . . . . . . . . . . . . . . .92

7.4 Zu clippende SKF-Datei . . . . . . . . . . . . . . . . . . . . . . . . . . .93

Page 9: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

1 Einleitung 1

1 Einleitung

Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema und je-der Frage gibt es eine Internetseite mit den entsprechenden Informationen. Wie aberkann man sich in diesem Informationsdschungel noch zurechtfinden? Es kamen ersteSuchmaschinen auf, welche versuchen, die existierenden Internetseiten zu erfassen, umsie nach Stichworten durchsuchbar zu machen. Einige Internetdienste sind z.B. Allthe-web1, Yahoo2 oder Fireball3. Die Informationssuche ist dadurch vereinfacht worden, daßman in der Lage ist, durch eine geschickte Aneinanderreihung und Verknupfung vonStichwortern das Suchergebnis soweit einzuschranken, daß lediglich eintausend odervielleicht sogar nur einhundert Resultate geliefert werden und nicht einige zehntausend.Die Informationssucheuber die Suchdienste im Internet ist aber nur der erste Schritt.Wenn eine Webseite gefunden wurde, die die gewunschte Information enthalt, mussendiese noch lange nicht gut aufbereitet sein. Es kann passieren, daß die Informationenunzulanglich visualisiert werden, wenn sieuberhaupt fur den Besucher einer Webseitegrafisch aufbereitet sind. Vor allem bei statistischen Daten ist die grafische Darstellungunerlaßlich, denn das Sprichwort

”Ein Bild sagt mehr als tausend Worte“ ist durchaus

berechtigt. Zahlenkolonnen angeordnet in Spalten oder Tabellen erschweren es dem Be-trachter die gewunschte Information aus den Daten zu erhalten. Ein gutes Beispiel hierfursind Wetterdaten.Werden die Rohdaten einer Wetterprognose betrachtet, wird man sehr wahrscheinlichnicht die gewunschte Information erhalten, z.B. welche Temperatur an einem bestimmtenTag an einem bestimmten Ort herrschen wird. Hierzu mußte erst die genaue geographi-sche Lage des Ortes bekannt sein, um in den Rohwetterdaten nach der Temperatur an denentsprechenden Koordinaten (welche gegebenenfalls noch transformiert werden mussen)zu suchen. Nicht ohne Grund sind Wettervorhersagen im Fernsehen oder in Zeitungen inBildern oder Animationen grafisch aufbereitet.Auch die Wetterinformationsdienste im Internet (z.B. Wetteronline4 oder Donnerwetter5)prasentieren ihre Prognosen auf grafische Art und Weise. Sie werden meist als Einzel-bilder oder animierte GIF6-Grafiken dargestellt. Diese pixelorientierten Grafiken sindnicht verlustfrei zu vergroßern und erlauben auch keine Interaktion mit dem Betrach-ter. Hier sollten neue Wege beschritten werden, um hochwertige Grafiken zu erzeugen,welche verlustfrei skalierbar sind und vom Betrachter manipuliert werden konnen, damitnur die gewunschten Daten zu sehen sind oder ein bestimmter Ort auf der Wetterkartenaher betrachtet werden kann. So kann jeder Betrachter individuell die Karten nach sei-nen Bedurfnissen gestalten.Besonders geeignet erscheint hierfur das Flashformat von Macromedia. Es ist ein vektor-basiertes Format, welches auch Interaktionen mit dem Benutzer ermoglicht. Der Nachteildieses Formates ist jedoch, daß es noch keine Software gibt, um Flashfilme aus vorgege-benen Daten dynamisch zu erstellen.

1www.alltheweb.com2www.yahoo.com3www.fireball.de4www.wetteronline.de5www.donnerwetter.de6Graphics Interchange Format von Compuserve

Page 10: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

1 Einleitung 2

Exemplarisch werden in dieser Diplomarbeit von Benjamin Stark [Stark2001] vektori-sierte Wetterdaten visualisiert.

Problemstellung

Seit Macromedia 1998 das Dateiformat von Shockwave Flash (SWF) offen gelegt undgleichzeitig ein Software Development Kit bereitgestellt hat, konnen Flashfilmeuber ei-ne Programmierschnittstelle erzeugt werden, ohne daß die eigentliche grafische Entwick-lungsumgebung Flash Studio zum Erstellen solcher Grafiken verwendet werden muß.Damit dies aber nicht zur Folge hat, daß jeder Flashfilm von Hand programmiert werdenmuß, sollen sie automatischuber einen Generator erstellt werden, der ein XML basiertesFormat einliest, in dem die Daten fur die Flashfilme enthalten sind.Die Aufgabenstellung dieser Diplomarbeit ist die Erstellung eines Eingabeformates undeines Generators, der aus den Eingabedaten einen Flashfilm generieren kann. Hinzukommt die Entwicklung eines JavaApplication Programming Interface(API) fur dasSoftware Development Kit und ein Werkzeug, welches es erlaubt, Flashfilme in einzelneKacheln zu zerlegen, damit ein sehr großer Film in einzelne Teile aufgeteilt werden kann.Die vorliegende Diplomarbeit beschaftigt sich exemplarisch mit der Darstellung vonWetterprognosedaten, daher auch der Titel

”Flash Weather “. Die Erkenntnisse sollen

jedoch generell auf die Visualisierung beliebiger raum- und zeitbezogener Datenuber-tragbar sein.

Aufbau der Arbeit

Diese Diplomarbeit ist in drei wesentliche Teile gegliedert. Der erste Abschnitt behandeltdie Grundlagen, im zweiten wird die Realisierung der Aufgabenstellung beschrieben undim letzten Abschnitt folgen Zusammenfassung und Ausblick.Im ersten Teil wird in Kapitel2 Macromedia Flash vorgestellt. Die Vor- und Nachtei-le werden erlautert und ein kurzer Abrißuber die Entstehungsgeschichte des Formatesgegeben. Zusatzlich wird auf das Flash Dateiformat und das zugehorige Software De-velopment Kit von Macromedia eingegangen, um den Aufbau von Flashfilmen und ihreErzeugung darzustellen.Kapitel3 befaßt sich mit den Einsatzgebieten und der Arbeitsweise derExtensible Mark-up Language(XML). Da XML die zweite Grundlage dieser Arbeit ist, wird das Themaausfuhrlich behandelt, insbesondere die Erstellung einer XML-Anwendung.In Kapitel 4 wird das Java Native Interface (JNI) vorgestellt, da es in dieser Arbeitnotwendig ist, das in C++ programmierte Software Development Kit von Macromediafur die Programmiersprache Java zuganglich zu machen. Es werden die grundlegendenSchritte erlautert, wie eine JNI Application erstellt wird.Das Clipping in Kapitel5 schließt den zweiten Teil der Arbeit ab. In diesem Kapitelwird darauf eingegangen, wie ein beliebiger rechteckiger Ausschnitt aus den Gesamtda-ten gewahlt werden kann, um daraus einen Flashfilm zu erstellen, und welche algorith-mischen und mathematischen Verfahren dafur notwendig sind.

Page 11: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

1 Einleitung 3

Im zweiten Abschnitt der Arbeit wird auf die Realisierung der Aufgabenstellung ein-gegangen. Kapitel6.1 erlautert die Erstellung einer API fur das Macromedia SoftwareDevelopment Kit und die dabei auftretenden Probleme.Kapitel 6.2 widmet sich ausfuhrlich dem Datenformat, welches als Basis fur den Gene-rator dienen. Die Implementation des Generators, der Flashfilme generieren kann, wirdin Kapitel 6.3beschrieben.Im letzten Teil werden die Ergebnisse und Erfahrungen zusammengefaßt und ein Aus-blick gegeben, wo die entwickelte Software eingesetzt und wie sie erweitert werden kann.Außerdem sind im Anhang die Klassenhierarchien der einzelnen Softwarepakete und dieDefinition des entwickelten Datenformates angefugt.

Page 12: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

4

I Grundlagen

Page 13: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

2 Macromedia Flash 5

2 Macromedia Flash

Das Softwareunternehmen Macromedia mit Sitz im kalifornischen San Francisco ist derEntwickler des Flash Formates und wurde 1992 durch den Zusammenschluß der Fir-men MacroMind und Authorware gegrundet. Im Jahre 1995 wurde Altsys, der Herstellerdes Grafikprogramms Freehand,ubernommen. Dieuber 1000 Mitarbeiter arbeiten anWebauthoring Tools und Grafikprogrammen. Sie entwickelten u.a. Dreamweaver, Fire-works, Director und Flash.Die Entwicklung von Macromedia Flash erfolgte in mehreren Schritten. Im Jahre 1995entwickelte das Unternehmen FutureWave aus San Diego, Kalifornien, das vektororien-tierte Illustrationsprogramm SmartSketch und das Plugin Future-Splash-Player, welcheses ermoglichte, SmartSketch Illustrationen im Webbrowser zu betrachten. Darauf auf-bauend entwickelte FutureWave 1996 das Animationsprogramm Cel-Animator, welchesdann im Juli 1996 in FutureSplash Animator umbenannt wurde. Ende des Jahres 1996ubernahm dann Macromedia das Unternehmen FutureWave. Anschließend wurden derFutureSplash Animator und der FutureSplash Player unter dem Namen Flash und Shock-wave Flash von Macromedia weiterentwickelt und vertrieben. 1997 erschien die VersionFlash 1 und kurz darauf Flash 2. 1998 wurde ein Java-Player fur Shockwave Filme imFlash 2 Format entwickelt. Das zugehorige Dateiformat wurde innerhalb des

”Flash Open

File Format-Programms “ veroffentlicht. Außerdem gibt es seit 1998 Flash 3, welchesVektortransparenz und Morphing unterstutzt, und den Flash Generator. Der Flash Gene-rator ermoglicht es, Flashfilme dynamisch zu generieren. Hierunter ist allerdings nichtzu verstehen, daß ein ganzer Film komplett erstellt wird, sondern es werden lediglich Va-riablen, die in einem mit dem Flash Studio vorbereiteten Film eingesetzt wurden, durchvorgegebene Objekte ersetzt. So konnen Variablenuber Scripte gesetzt und einzelne Ele-mente des Filmes verandert werden. Eine Datenbankanbindung ist ebenso moglich wiedie Darstellung statistischer Daten in Diagrammen. Flash 4 erschien 1999 und erweiter-te das Flashformat um die ScriptspracheActionScript. Flash 5 wurde im Sommer 2000veroffentlicht, wobei in erster Linie die Entwicklungsumgebung Flash Studio weiterent-wickelt wurde.Macromedia Flash ist mittlerweile nicht mehr aus dem Internet wegzudenken. Nachdemes zu Beginn nur zogerlich eingesetzt wurde, ist die Verbreitung in der letzten Zeit starkangestiegen und wird von vielen Entwicklern genutzt, um Webseiten interessanter undbedienungsfreundlicher zu gestalten.Diese hohe Akzeptanz ist aber nicht allein der Grund, warum fur die Visualisierung vonWetterdaten in dieser Diplomarbeit Macromedia Flash gewahlt wurde. Welche Vor- aberauch Nachteile das Flashformat bietet, wie das Format aufgebaut ist und welche Moglich-keiten existieren, einen Flashfilm zu erstellen, soll in den nachsten Abschnitten nahererlautert werden.

2.1 Vor- und Nachteile von Macromedia Flash

Durch geschickte Allianzen wurde das Flashplugin mit den Browsern von Netscape undMicrosoft ausgeliefert, so daß eine große Verbreitung ermoglicht wurde. Macromedia

Page 14: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

2 Macromedia Flash 6

gibt an, daß im Marz 2001 mindestens 96% aller Internetnutzer Flashinhalte betrachtenkonnen, das entspricht ca. 334 Millionen Nutzern. Das unabhangige Marktforschungsin-stitut NPD Online [NPDO2001] kam bei einer Befragung von 2000 Personen zu diesemErgebnis [Macr2001a]:

Verfugbarkeit nach Version Flash 2 Flash 3 Flash 4 Flash 5

USA 96.0% 94.7% 89.5% 54.6%Kanada 97.1% 96.0% 92.6% 59.0%Europa 96.2% 94.6% 90.9% 64.6%Asien 96.1% 93.3% 88.3% 62.6%Sudamerika 98.2% 93.3% 92.5% 66.4%

Tabelle 2.1:Verfugbarkeit des Macromedia Flash Players (Stand: Marz 2001)

Tabelle2.1zeigt deutlich, daß die 96% Verfugbarkeit des Flash Players, die Macromediaangibt, lediglich bei Filmen der Version 2 erreicht wird. Zwischen Version 2 und Ver-sion 3 gibt es erhebliche Unterschiede. So wurden bei der dritten Version Vektortrans-parenz, Morphing und Actions eingefuhrt. In der vierten Version wurde Flash um dieSkriptspracheActionScripterweitert, bietet zusatzlich Texteingabefelder zur Erstellungvon Formularen und unterstutzt das MP3 Format. Die Neuerungen von Flash 5 bestehenlediglich in der Anpassung derActionScript-Syntax an JavaScript und der Erweiterungum einen Debugger.Die Filme sind zwar bedingt abwartskompatibel, so daß ein Film der Version 5 mit ei-nem Player der Version 4 abgespielt werden kann, dies ist aber nicht immer moglich.Will man also viele Internetnutzer erreichen ist es am sinnvollsten Flash 4 einzusetzen,da so die wichtigsten Features von Macromedia Flash gut ausgenutzt werden konnen undimmerhin noch im Schnitt 90.7% aller Internetnutzer, daß entspricht ca. 315 Millionen,wenn von 348 Millionen Internetnutzern ausgegangen wird [IDC2001], diese Flashinhal-te betrachten konnen.Dieses Anwenderpotential ist ein großer Vorteil fur Macromedia. Ohne dieses Potentialwurden die Webdeveloper nicht auf Macromedia Flash zuruckgreifen, um ihre Webseitengrafisch aufzuwerten. Aber auch das Herunterladen des Players stellt kein Problem dar,da dieser lediglich ca. 200 kB groß ist. Die große Verbreitung und die leichte Verfugbar-keit sind nur zwei Vorteile, die Flash bietet. Daneben gibt es noch wesentlich mehr Vor-teile, auf die im Folgenden naher eingegangen werden soll.Das Anbieten von Animationen auf Webseiten stellte oft ein großes Problem fur denEntwickler dar. Zur Losung dieses Problems wurden meist animierte GIF Bilder einge-setzt. Mit Flash ist ein Format entwickelt worden, mit dem umfangreiche Animationenin hoher Qualitat moglich sind und das es erlaubt, mit dem Benutzer in Interaktion zutreten. Dementsprechend konnen Knopfe, bzw. sensitive Flachen oder Textfelder einge-bunden werden und die Eingaben des Benutzers lassen sich per ActionScript, eine vonMacromedia entwickelte umfangreiche Scriptsprache fur das Flashformat, validieren undauswerten. Dies sind Moglichkeiten, die ohne das Flashformat nicht vorhanden waren.Dabei stellt sich aber die Frage, inwieweit dies Auswirkungen auf die Dateigroße oderdie Darstellungsqualitat hat.Das Produkt Flash bzw. das Format Shockwave Flash (SWF; sprich:

”swiff “) ist ein

Page 15: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

2 Macromedia Flash 7

zweidimensionales Vektorgrafikformat, d.h. die Informationen werden nicht Pixel furPixel abgespeichert, sondernuber die mathematische Beschreibung von geometrischenObjekten. So wird z.B. ein Kreis lediglichuber die Koordinaten seines Mittelpunktes unddes Radius definiert oder eine Linieuber ihren Start- und Endpunkt. Hinzu kommen nochdie Angabenuber Liniendicke und -farbe sowie die gegebenenfalls notwendige Fullfar-be des Kreises. Hierdurch werden die Dateien sehr viel kleiner als Pixelgrafiken, wojedes einzelne Pixel mit seiner Farbinformation abgespeichert werden muß. Die beidenGrafikformate sind in der Abbildung2.1gegenubergestellt.

(a) Pixelgrafik (b) Vektorgrafik

Abbildung 2.1:Pixel- und Vektorgrafik im Vergleich

Als nachteilig muß hier aber erwahnt werden, daß diese Platzersparnis nicht bei foto-realistischen Bildern erreicht werden kann. Vektorgrafiken sind fur derartige Bilder un-geeignet, da fur jede kleine Flache mit einem bestimmten Farbwert ein entsprechendesObjekt angelegt werden muß, was den Speicherbedarf stark in die Hohe treibt, wennzusammenhangende Flachen gleicher Farbe auf die Große eines Pixels schrumpfen. Vek-torgrafiken sind also meist nur fur Zeichnungen geeignet.Die Platzersparnis wird bei Flash nicht nur durch das Vektorgrafikformat erreicht, son-dern auch dadurch, daß es sich um ein komprimiertes Binarformat handelt. Hierdurchwird der Platzbedarf noch zusatzlich reduziert, da die Daten bitweise gepackt werden(siehe Kapitel2.3). Eine weitere Verringerung der Dateigroße wird durch die Unter-stutzung des besonders platzsparenden MP3-Formates bei der Einbindung von Tonmate-rial erreicht.Neben der Platzersparnis gibt es noch den Vorteil der freien Skalierbarkeit der Flashfilme.Ein Betrachter kann in einen Flashfilm bis zu funf mal hineinzoomen, ohne daß ein Qua-lit atsverlust eintritt (Abbildung2.2b). Dies liegt daran, daß mathematische Koordinatenals Grundlage dienen, wodurch das Bild in einer hoheren Zoomstufe neu berechnet wer-den kann. Pixelgrafiken hingegen sind fur eine bestimmte Auflosung erstellt worden, sodaß beim Vergroßern einer solchen Grafik immer der Treppeneffekt eintritt: Es werdendie einzelnen Pixel – die kleinste auf dem Monitor darzustellende Einheit – sichtbar (sie-he Abbildung 2.2a).

Page 16: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

2 Macromedia Flash 8

(a) Pixelgrafik (b) Vektorgrafik

Abbildung 2.2:Vergroßerung einer Pixel- und einer Vektorgrafik

Bei einer Vektorgrafik, wie bei Macromedia Flash, wird die Grafik hingegen nach demHineinzoomen neu errechnet und ist daher immer von hoher Qualitat. Dadurch ist esmoglich, einen Ausschnitt einer Vektorgrafik in der bestmoglichen Qualitat auf dem Bild-schirm oder dem Drucker darzustellen.Die Wiedergabe eines Flashfilmes erfolgt, wie bereits erwahnt, durch den Flash Player.Dieser ist fur fast alle Betriebssysteme implementiert und deswegen nahezu vollig platt-formunabhangig. Ein weiterer positiver Nebeneffekt ist die identische Darstellung vonFlashfilmen in verschiedenen Browsern unter unterschiedlichen Betriebssystemen, wasmit HTML 7 praktisch nicht moglich ist. Ein Webdesigner hat die volle Kontrolleuber dieVisualisierung des Flashfilmes.Ein wichtiger Punkt fur den Einsatz im Internetbereich ist die Streambarkeit des Flash-filmes. Streaming bedeutet, daß die Datei schon verarbeitet bzw. ausgewertet werdenkann, obwohl sie noch nicht komplettubertragen wurde. Bei zu geringer Bandbreite kannso trotzdem noch ein recht flussiger Ablauf erreicht werden und der Nutzer muß nichterst abwarten, bis der komplette Film geladen ist, um etwas zu sehen. Wie die Stream-barkeit erreicht wird, ist in Kapitel2.3naher beschrieben.Dank dieser Vorteile und der geschickten Marketingpolitik konnte sich Flash im Web-bereich durchsetzen. Zunachst wurden lediglich kleine Buttons oder Navigationsmenuesmit Flash entwickelt, aber nach und nach sogar ganze Webseiten.Neben diesen Vorteilen gibt es allerdings auch einige Nachteile. Wie bereits erwahnt,werden Flashfilme erst auf der Clientseite gerendert, also fur das Ausgabemedium in Pi-xel umgerechnet, wofur Rechenleistung erforderlich ist. Ein aufwendiger Flashfilm kanneinen Rechneruberfordern, so daß die Darstellung nur mit einer geringen Bildwiederhol-rate vonstatten gehen kann, sie wird ruckeln oder Unterbrechungen aufweisen. Die Be-deutung dieses Nachteiles hat in den letzten Jahren wegen der immer weiter steigendenRechenleistung stark abgenommen und wird dies noch in Zukunft tun. Ein weiterer Nega-tivaspekt ist die fehlende Moglichkeit Urheberschutz zu gewahrleisten. Es existiert zwarein Mechanismus, welcher das nachtraglicheAndern und Importieren des Flashfilmes inFlash Studio zu verhindern versucht, dieser kann aber ohne Probleme ausgehebelt wer-den.Diese Nachteile sind aber gering gegenuber den Vorteilen die Flash bietet. Daher ist Flashvon Macromedia mittlerweile zum defacto Standard im Webdesignbereich geworden.

7Hyper Text Markup Language

Page 17: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

2 Macromedia Flash 9

2.2 Der Flash Standard

”Flash ist der Standard fur interaktive Vektorgrafiken und Animationen im Web. Web-

designer verwenden Flash zum Erstellen attraktiver, anpaßbarer und extrem kompakterNavigationsoberflachen, technischer Illustrationen, Langform-Animationen und andererfaszinierender Effekte fur ihre Site“ [Wol2000].Dieses Zitat stammt von Macromedia selbst. Auch wenn es vielleicht etwasuberheblichklingen mag, ist es dennoch nicht von der Hand zu weisen, daß Flash zum Design vonWebseiten dazugehort. Was hat es nun mit demStandardFlash auf sich?Die noch unvollstandige und teilweise fehlerhafte Dokumentation des Dateiformates losteMacromedia Anfang 2000 durch das SWF Software Development Kit (kurz SWF-SDK),das kostenlos aus dem Internet zu beziehen ist [Macr2001d]. Darin wird ausfuhrlichdas Dateiformat beschrieben und eigene SWF Dateien lassen sichuber mitgelieferteC++ Klassen erzeugen. Was Macromedia damit bezweckt ist offensichtlich: Durch dieVeroffentlichung des Dateiformates ist es nun auch anderen Anbietern moglich Importund Export Filter fur ihre Softwarepakete zu entwickeln und auch unabhangige Entwick-ler haben daraufhin Tools erstellt, mit denen es z.B. moglich ist Flashfilme in Bildschirm-schoner umzuwandeln oder Texteffekte zu erstellen. So konnte z.B. Olivier Debon einenFlashplayer fur die Linuxversion des Netscape Communicators entwickeln [Debo2001]und andere Unternehmen implementierten Ausgabefilter fur ihre Softwareprodukte, umFlashfilme abzuspeichern oder integrierten Flash Player, um Flashfilme wiederzugeben.Adobe unterstutzt das SWF-Format, indem die ProdukteLiveMotionund GoLiveFlas-hfilme exportieren konnen. Auch das Unternehmen Corel will das SWF-Format un-terstutzen. So ist fur Corel Draw 9ein SWF-Exportfilter vorgesehen und inCorel Linuxwird ein Flash Player eingebunden. Zudem hat Macromedia demonstriert, daß Flashfilmeauf Windows CE Systemen, Nokia Handys und auf der SpielekonsoleDreamcast vonSega abgespielt werden konnen [Oswf2001]. Viele weitere Unternehmen unterstutzendas SWF-Format, sowohl im Export der Filme als auch bei der Wiedergabe.Durch diese Entwicklungen und durch die Offenlegung des Dateiformates gelang es Ma-cromedia den Bekanntheitsgrad des Flashformates kontinuierlich zu steigern. Das SWF-Format wurde aber nie von einer unabhangigen Institution standardisiert und die For-matspezifikationen werden weiterhin nur von Macromedia festgelegt. Nur durch die guteMarketingpolitik wurde das SWF-Format so bekannt und popular, wodurch MacromediaeineQuasistandardisierungerreicht hat.Was macht aber den Erfolg des Dateiformates aus? Hierzu soll der interne Aufbau desFormates naher betrachtet werden, da es fur diese Arbeit von entscheidender Bedeutungist. Deshalb wird in den nachsten Kapiteln naher auf die Dateistruktur und das SWF-SDKim Besonderen eingegangen.

2.3 Das Shockwave Flash (SWF) Dateiformat

Um dem Gebrauch im World Wide Web zu genugen und eine ausreichende Funktionalitatund Designmoglichkeit zu bieten, muß das SWF-Format unterschiedliche Anforderungenerfullen.

Page 18: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

2 Macromedia Flash 10

Im wesentlichen gibt es sieben Punkte, die das SWF-Format von Macromedia entschei-dend pragen [Oswf2001]:

1. Bildschirmdarstellung Das SWF Format ist in erster Linie fur die Bildschirmdarstel-lung optimiert. Deshalb werden Antialiasing8, schnelles Rendern9 und Animatio-nen unterstutzt.

2. Erweiterbarkeit Da das SWF-Format tagbasiert ist, konnen ohne weiteres neue Tagsmit neuen Features hinzugefugt werden.

3. Netzwerkubertragung Die Dateien sollen auch bei stark limitierter oder schwanken-der Bandbreite gutubertragbar sein. Daher ist das SWF Format komprimiert unddurch den Aufbau wird die Streambarkeit der Datei gewahrleistet.

4. Einfachheit Durch die Einfachheit des SWF-Formates kann der Flash Player sehrklein gehalten und dadurch einfach auf verschiedene Betriebssysteme portiert wer-den. Zusatzlich wird so erreicht, daß der Flash Player nur wenige systemspezifischeOperationen durchfuhren muß.

5. Dateiunabhangigkeit Alle notigen Informationen werden platzsparend in der Flash-datei untergebracht, so daß keine weiteren externen Dateiabhangigkeiten entstehen.

6. Skalierungsfahigkeit Da Flashfilme auf den unterschiedlichsten Rechnern betrachtetwerden, ist es wichtig, daß verschiedene Monitorauflosungen oder Farbanzahlensowie unterschiedliche Rechnerleistung berucksichtigt werden.

7. Geschwindigkeit Das SWF Format ist so aufgebaut, daß die Filme schnell gerendertwerden konnen.

Es wurde bereits erwahnt, daß das SWF Dateiformat ein tagbasiertes Binarformat ist.Das SWF Dateiformat ist in einzelne Datenblocke eingeteilt, die Tag, bzw. Record ge-nannt werden. Tags sind einzelne Objekte, die durch Records naher spezifiziert werden.Records enthalten also alle notwendigen Attribute fur ein Tag. Tags kennt manublicher-weise von HTML oder der Extensible Markup Language (XML). Einzelne Codes leiteneinen Abschnitt mit einer bestimmten Bedeutung ein und gegebenenfalls gibt es einenCode fur das Ende eines Tags.In SWF werden zwei grundlegende Arten von Tags unterschieden. Zum einen gibt esDefinitionstags und zum anderen Kontrolltags. Definitionstags dienen der Erstellung vonObjekten, so konnen z.B. Kreise, Polygone, Sound oderahnliches angelegt werden. Mitden Kontrolltags konnen die vorher definierten Objekte manipuliert werden, z.B. konnenObjekte in ihrer Position, Große oder Farbe verandert, Sounds gesteuert oder Frame-wechsel vorgenommen werden. Hierbei ist es besonders wichtig, daß ein Control Tagsich stets auf ein vorher definiertes Objekt bezieht, da sonst die Streambarkeit nicht mehrgewahrleistet ware. Die Tagstruktur bietet außerdem den Vorteil, daß das Dateiformat oh-ne Probleme erweitert werden kann. Sollte sich herausstellen, daß ein bestimmtes Objekt

8Unter Antialiasing versteht man das Glatten von Linien durch Graustufen9Rendern ist der generelle Vorgang, Bilder als Bitmap darzustellen

Page 19: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

2 Macromedia Flash 11

oder eine neue Transformation in den Standard aufgenommen werden soll, wird einfachein neues Tag zu den bereits bestehenden hinzugefugt. Dieser Vorgang wird bei den ver-schiedenen Flash Versionen deutlich. Es wurden stets weitere Tags hinzugefugt und diealten Tags blieben bestehen, wodurch eine bedingte Abwartskompatibilitat erreicht wur-de. Ein Flash Player der Version vier kann einen Film im Flash 5 Format einlesen undwiedergeben, da unbekannte Tags einfachubersprungen werden, dies ist aber nicht im-mer erfolgreich. Werden wesentliche Filmbestandteile dabeiubersprungen, kann es imschlimmsten Fall zu einem Absturz des Flash Players kommen. Dies tritt vor allem dannein, wenn in den Film Flash 5 spezifische Script Elemente eingebunden werden und einderartiger Film mit einemalteren Flash Player betrachtet wird.Es wurde bereits erwahnt, daß das SWF Format ein komprimiertes Binarformat ist. InSWF werden im wesentlichen die folgenden sechs verschiedenen Strategien angewandt:

1. Wiederverwendung: Jedes Objekt erhalt innerhalb eines Filmes eine eindeutige 16Bit lange numerische ID, anhand derer es referenziert werden kann. So ist esmoglich, daß ein Objekt einmal definiert wird, aber mehrmals in dem Flashfilmreferenziert werden kann. Sollen in einem Film drei Quadrate erscheinen, wird nureinmal ein Quadrat definiert und die anderen zwei werden durch einen Verweis aufdas erste erstellt. Zusatzlich konnen verschiedene Farbanderungen oder Transfor-mationen angewandt werden. Dadurch erspart man sich den Speicherplatz fur dasmehrmalige Definieren eines Objektes.

2. Komprimierung: Die Inhalte der Tags sind komprimiert. Shapes10 werden mit ei-nem effizientendelta encoding scheme, bei dem nur relativeAnderungen abge-speichert werden und nicht die absoluten Werte, komprimiert. Bitmaps werden mitdem JPEG Algorithmus und Sounds mit verschiedenen Leveln derAdaptive Diffe-rential Pulse Code Modulation(ADPCM)11 Kompression verkleinert.

3. Bit Verdichtung: Wenn moglich werden Zahlen in der kleinst moglichen Anzahl vonBits abgelegt. So werden z.B. Koordinaten in Feldern variabler Lange gehalten,wobei die Lange durch wenige Bits codiert wird.

4. Standardwerte: Einige Strukturen, wie z.B. Matrizen oder Farbtransformationen, ent-halten Matrixelemente, welche haufiger benotigt werden als andere. Ein Beispiel:Betrachtet man eine Transformationsmatrix, so sind die bedeutendsten Felder dieTranslationsfelder12. Skalierungen und Rotationen sind weit seltener notig. Fallsein Skalierungs- oder Rotationsfeld nicht vorhanden ist wird davon ausgegangen,daß die Skalierung 100% und die Rotation null Grad betragt.

5. Anderungskodierung: In SWF werden lediglich die relativenAnderungen zwischeneinzelnen Bildern abgespeichert.Andert sich ein Objekt von einem Frame zumnachsten nicht, werden keine Informationen fur dieses Objekt benotigt. Nur wennsich die Lage, Farbe oder Großeandern werden entsprechende Tags in dieses Fra-meubernommen.

10Shapes sind grafische Objekte, wie z.B. Kreise, Rechtecke usw.11Hierunter fallt auch das MP3-Format12Werte zur Verschiebung eines Objektes

Page 20: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

2 Macromedia Flash 12

6. Shape-Datenstruktur: Die Datenstruktur verschiedener Shapes (Kreise, Polygone,etc.) wird sehr einheitlich gehalten, so daß fur verschiedene Shapes die gleicheDatenbasis gewahlt werden kann. Dies minimiert die Anzahl verschiedener Sha-pestrukturen, was aber keine Einschrankung bezuglich der Vielfalt der grafischenObjekte nach sich zieht, und erleichtert damit das Rendern. Zusatzlich bewirkt die-se Struktur, daß Shapes platzsparender codiert werden konnen.

Diese sechs Punkte bewirken eine starke Reduzierung der Dateigroße. Es muß aber be-achtet werden, daß keine generelle Komprimierung der gesamten Datei vorgenommenwird. Die Komprimierung bezieht sich immer nur auf einzelne Tags. Dies ermoglicht,daß der Flash Player die Datei direkt verarbeiten kann, ohne erst eine Dekomprimierungvorzunehmen, wodurch ein Geschwindigkeitsvorteil erzielt wird. Bitmaps oder Soundskonnen je nach Bedarf dekomprimiert werden.Das Dateiformat ist aber nicht nur so angelegt, daß es besonders platzsparend ist, sondernes wurde auch fur eine hochwertige Darstellungsqualitat optimiert. Das SWF Koordina-tensystem wurde so definiert, daß eine Einheit 1/1440 inch entspricht. Wenn man ein ty-pisches Wiedergabegerat mit 72dpi13 betrachtet, ware diesaquivalent zu einem zwanzig-stel Pixel. Eine derartige Einheit wird TWIP genannt. Wird ein Flashfilm in der hochstenZoomstufe wiedergegeben entspricht ein TWIP genau einem Pixel. Durch die Wahl die-ser Einheit ist es moglich eine hohe Auflosung beim Hineinzoomen zu erreichen undObjekte genau zu platzieren.

2.3.1 Datentypen in SWF

Damit Flashfilme moglichst platzsparend sind, wird fur Koordinaten-, Transformations-oder andere Werte immer der kleinstmogliche Datentyp genutzt. Die wichtigsten Daten-typen im SWF-Format sind in der Tabelle2.2aufgefuhrt.

Datentyp Erl auterungSI8 Signed 8-bit Integer WertSI16 Signed 16-bit Integer WertSI8[n] Array mit

”n “ Signed 8-bit Integer Werten

SI16[n] Array mit”n “ Signed 16-bit Integer Werten

UI8 Unsigned 8-bit Integer WertUI16 Unsigned 16-bit Integer WertUI32 Unsigned 32-bit Integer WertUI8[n] Array mit

”n “ Unsigned 8-bit Integer Werten

UI16[n] Array mit”n “ Unsigned 16-bit Integer Werten

SB[nBits] Signed Bit Wert (”n “ Bits werden genutzt)

UB[nBits] Unsigned Bit Wert (”n “ Bits werden genutzt)

Tabelle 2.2:Die wichtigsten Datentypen im SWF-Fileformat

13dpi=Dots per Inch

Page 21: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

2 Macromedia Flash 13

Aus diesen Werten werden weitere Datentypen abgeleitet, z.B. der DatentypRECT, derexemplarisch naher aufgeschlusselt werden soll. Der DatentypRECTenthalt die Koordi-naten fur ein Rechteck (Tabelle2.3) und wird unterschiedlich genutzt, z.B. als Definitionfur die Große eines Flashfilmes oder zur Definition eines Rechteckobjektes im Film.

Datenfeld Datentyp Erkl arungNBits UB[5] = nBits Anzahl Bits in den folgenden FeldernXmin SB[nBits] X-Minimum Position des RechtecksYmin SB[nBits] Y-Minimum Position des RechtecksXmax SB[nBits] X-Maximum Position des RechtecksYmax SB[nBits] Y-Maximum Position des Rechtecks

Tabelle 2.3:Der RECT Datentyp im SWF-Fileformat

In der DatenstrukturRECT ist zunachst ein Feld von funf Unsigned Bits enthalten. Indiesem Feld wird festgelegt, wieviele Bits fur die weiteren Datenfelder benotigt werden.So ist es moglich, die Bitlange fur unterschiedlich große Koordinaten variabel zu haltenohne spezielle Markierungen einzufuhren, wann der nachste Koordinatenwert beginnt.Dies wird einfachuber die vorher definierte Lange ermittelt.So wie dieRECT-Struktur werden auch weitere Strukturen definiert, auf die hier nichtnaher eingegangen werden soll, weitere Informationen sind unter [Macr2001] zu erhal-ten.Eine SWF Datei wird immer mit einem Dateiheader, der die Version des Flashfilmes, dieGesamtlange der Datei, die Bildwiederholrate, Ausmaße des Filmes und die Gesamtan-zahl der Schlusselbilder enthalt, eingeleitet (Tabelle2.4).

Inhalt Datentyp Erl auterungSignature UI8 Immer ’F’Signature UI8 Immer ’W’Signature UI8 Immer ’S’Version UI8 Flashversion (z.B. 0x04 fur SWF4)FileLength UI32 Lange der gesamten DateiFrameSize RECT Framegroße in TWIPS (siehe auch Tabelle2.3)FrameRate UI16 Bildwiederholrate: Frames pro SekundeFrameCount UI16 Anzahl der Frames im Flashfilm

Tabelle 2.4:Dateiheader eines Flashfilmes

Nach diesem Header folgen dann die weiteren Tags, die Objekte definieren oder verandern.Eine schematische Abbildung der Dateistruktur ist in der Grafik2.3zu sehen.

Dateiheader Tag Tag Tag Tag . . . EndTag

Abbildung 2.3:Dateistruktur einer SWF-Datei

Page 22: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

2 Macromedia Flash 14

Im SWF-Format wird das Ende eines Tags nicht explizit angegeben, sondern durch dieLangenangabe des Gesamttags ermittelt, die im sogenannten Recordheader codiert wird.Es werden zwei Recordheader unterschieden, welche fur unterschiedliche Recordlangenzustandig sind. Der Basis Recordheader enthalt als erstes auf einer Lange von zehn Un-signed Bits eine ID, das ist eine eindeutige Zeichenkette zur Identifikation des Objektes,und in den nachsten sechs Unsigned Bits die Gesamtlange des Tags. Dieser Header istfur Tags bestimmt, deren Gesamtlange 63 Byte nichtuberschreitet (Tabelle2.5).

Inhalt Datentyp Erl auterungTag 10 Unsigned Bit ID des TagsLange 6 Unsigned Bit Lange des ges. Tags

Tabelle 2.5:Recordheader fur Tags, die eine Gesamtlange von 63 Byte nichtuberschreiten

Sollte ein Tag langer sein, so wird zwischen der ID und der codierten Lange ein sechs-stelliger Unsigned Bit Code mit dem Wert0x3F eingefugt. Dieser signalisiert, daß diecodierte Lange in diesem Header im Wertebereich einer Unsigned Integer liegen kann(Tabelle2.6).

Inhalt Datentyp Erl auterungTag 10 UI ID des TagsKodierung fur einen langenRecordheader

6 UB immer 0x3F

Lange 6 UI Lange des gesamten Tags

Tabelle 2.6:Recordheader fur Tags, die eine Gesamtlange von 63 Byteuberschreiten

Die ID des Tags, welche im Recordheader angegeben wird, dient der Ermittlung, wel-che Art von Objekt folgen wird. Im folgenden soll gezeigt werden, wie eineActionim SWF-Dateiformat definiert ist. Als erstes wird dasDoAction-Tag in der Tabelle2.7angegeben.

Inhalt Datentyp Erl auterungHeader RECORDHEADER Tag-ID=12 (siehe auch die

Tabellen2.5und2.6)Actions ACTIONRECORD[0 oder mehr] Verschiedene Actions

ActionEndFlag UI8 immer der Wert”0 “

Tabelle 2.7:Struktur des DoAction-Tags

In der Tabelle2.8 wird der DatentypACTIONRECORD, der die eigentliche Definitionder Aktion enthalt, angegeben. Als Beispiel soll hier dasActionGetURL-Tag vorgestelltwerden, mit dem innerhalb eines Flashfilmes zu einer Webseite gesprungen werden kann.

Page 23: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

2 Macromedia Flash 15

Inhalt Datentyp Erl auterungActionCode UI18 Code der Action, hier 0x83 fur ActionGetURL

Length UI16 Lange des RecordsURLString STRING Adresse zu der gesprungen werden sollTargetString STRING Angabe wo die Adresse dargestellt werden soll

Tabelle 2.8:Struktur des ActionGetURL-Tags

Alle weiteren Definitionen konnen den Formatspezifikationen [Macr2001] entnommenwerden und sind hier nicht naher aufgefuhrt, da sie eine sehr komplexe Struktur besitzenund hier lediglich der grundlegende Aufbau von SWF-Tags dargestellt werden soll.

2.3.2 Darstellung eines Flashfilmes

Bis zur Darstellung eines Grafikobjektes laufen die folgenden Schritte ab:

1. ein Definitionstag definiert das Grafikobjekt

2. das Grafikobjekt erhalt eine eindeutige Kennung (ID)

3. die Kennung wird in einer Referenzliste gespeichert

4. ein Kontrolltag referenziert das Objektuber seine Kennung und stellt es auf demBildschirm dar

In diesen Schritten wird deutlich, warum ein Flashfilm streambar ist: Da Kontrolltagsimmer nur auf Definitionsblocke, die weiter vorne in der Datei stehen, Bezug nehmendurfen, ist es nicht notig, auf die Darstellung des Filmes zu warten bis dieser komplettheruntergeladen ist. Er kann bis zu dem Frame, bis zu dem er bereits aus dem Internetbezogen wurde, sofort dargestellt werden.Um die Struktur eines Flashfilmes noch besser zu verstehen, wird ein Flashfilm mit einemParser ausgelesen, daß heißt das Binarformat wird in fur den Menschen lesbaren Textumgewandelt. Ein solcher Parser ist unter [Oswf2001] erhaltlich.Das Parsen eines Flashfilmes wird einfach auf der Kommandozeile mit dem Kommando

swfparser Flashdatei.swf

durchgefuhrt. Ebenfalls auf der Komandozeile findet dann die Ausgabe der geparstenDatei statt. Bespielhaft soll ein Film geparst werden, welcher ein Quadrat enthalt, dasin zwei Schritten um 60 Grad gedreht wird und einen Kreis, der sich nichtandert (Ab-bildung7.5). In dem zugehorigen Quellcode2.1, das Ergebnis des Parsens, sind die imFlashfilm enthaltenen Informationen naher aufgeschlusselt. Als erstes sind die Informa-tionen des Dateiheaders angegeben. Der Film liegt in der Version 4 vor und ist insgesamt258 kB groß. Die Große des Filmes in Pixel betragt 300*300, die Framerate betragt dreiFrames pro Sekunde und insgesamt sind drei Schlusselbilder in dem Film enthalten.

Page 24: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

2 Macromedia Flash 16

Abbildung 2.4:Snapshot eines Flashfilmes

***** Dumping SWF File Information *****

----- Reading the file header -----FWSFile version 4File size 258Movie width 300Movie height 300Frame rate 3Frame count 3

----- Reading movie details -----

<----- dumping frame 0 file offset 29 ----->tagLen 54: tagDefineShape3 tagid 1tagLen 5: tagPlaceObject2 flags 2 depth 0 tag 1tagLen 91: tagDefineShape3 tagid 2tagLen 5: tagPlaceObject2 flags 2 depth 3 tag 2tagLen 0: tagShowFrame

<----- dumping frame 1 file offset 198 ----->tagLen 4: tagRemoveObject tagid 1 depth 0tagLen 19: tagPlaceObject2 flags 6 depth 1 tag 1tagLen 0: tagShowFrame

<----- dumping frame 2 file offset 227 ----->tagLen 4: tagRemoveObject tagid 1 depth 1tagLen 19: tagPlaceObject2 flags 6 depth 2 tag 1tagLen 0: tagShowFrame

<----- dumping frame 3 file offset 256 ----->tagLen 0: tagEnd

***** Finished Dumping SWF File Information *****

Quellcode 2.1:Durch Parsen sichtbar gemachte Tags des SWF Filmes (Snapshot in Abb.7.5)

Page 25: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

2 Macromedia Flash 17

Es folgen dann die Definitions- und Kontrolltags des Filmes.Im ersten Frame (Frame 0) werden die beiden Objekte definiert und im Film plaziert.Das TagtagShowFrame gibt an, daß dieses Frame vollstandig ist und dargestellt wer-den kann. In der Ausgabe des Parsers ist jedoch nicht ohne weiteres zu erkennen welchesObjekt welche ID erhalt. Bei der Betrachtung der gesamten Datei wird deutlich, daß dasQuadrat die ID1 und der Kreis die ID2 erhalt, da nur das Quadrat gedreht wird unddaher mehrfach aus dem Film entfernt und wieder eingefugt wird. In den weiteren bei-den Frames wird das Quadrat gedreht. Hierzu wird zunachst das Quadrat mit dem TagtagRemoveObjekt und der Angabe der Tagid1 entfernt, wieder neu plaziert und dasFrame wiederum dargestellt. Leider gibt der Parser nicht die Kontrolltags an, die dasQuadrat drehen. Das nachste Frame ist genauso aufgebaut wie das vorherige und im letz-ten Frame ist lediglich das TagtagEnd enthalten, welches das Ende des Filmes anzeigt.Flashfilme sind, wie bereits erwahnt, in binarcodierten und tagbasierten Dateien abge-legt. Ist es nun notwendig alle Tags und Bitcodierungen zu kennen, um eine solche Dateizu erzeugen? Macromedia hat das SWF Software Development Kit (kurz SWF-SDK)kostenlos zur Verfugung gestellt. Mit diesem SWF-SDK ist es moglich FlashfilmeuberC++ Klassen zu erzeugen. Wie dieses SDK genutzt wird, ist im nachsten Abschnitt be-schrieben.

2.4 SWF – SDK

Das”Macromedia Flash File Format (SWF) Software Development Kit (SDK) “ – so der

volle Titel – ist auf der Webseite von Macromedia kostenlos erhaltlich und enthalt nebender Dokumentation des SWF-Dateiformats den in C++ geschriebenen Quellcode, der dasErzeugen von Flashdateienuber eine Programmierschnittstelle ermoglicht.Die mitgelieferten Klassen sind mit der Einschrankung, daß sie lediglich fur die Ent-wicklung von SWF-exportierenden Programmen genutzt werden, frei zu verwenden.Macromedia verlangt, daß die unter Verwendung des SDK entwickelten Produkte Flas-hfilme im korrekten Format abspeichern. Erzeugte SWF-Dateien mussen zum einen feh-lerfrei mit einem aktuellen Flash Player abgespielt und zum anderen fehlerfrei in diegrafische Entwicklungsumgebung Flash Studio importiert werden konnen. Desweiterenubernimmt Macromedia keine Garantie fur die Korrektheit der bereitgestellten Software[Macr2001d] und wie sich im Verlauf der Arbeit herausstellte sind einige Fehler im SDKenthalten.Das zur Zeit verfugbare SWF-SDK stelltuber eine Bibliothek von C++-Klassen die kom-plette Funktionalitat bereit, die benotigt wird, um Flash 3 SWF-Dateien zu erzeugen.Die Klassen der Bibliothek werden in zwei Bereiche unterteilt: denLowlevel-Managerund denHighlevel-Manager: DieLowlevel-Klassen stellen eine sehr genaue Abbildungdes Dateiformates dar. Fur jedes Definitions- oder Kontrolltag existiert eine entsprechen-deLowlevel-Klasse im SWF-SDK, die von der KlasseFObj (Flash Objekt) abstammt.Auch alle anderen Records werden als Klassen umgesetzt. Der eigentliche Flashfilm wirdin der ContainerklasseFObjCollection erstellt, indem diese Klasse alle erzeugtenFObj Objekte sammelt und schließlich in eine Datei schreibt. Tabelle2.9 zeigt in wel-che Gruppen sich dieLowlevel-Klassen einteilen lassen.

Page 26: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

2 Macromedia Flash 18

FObjCollection - sammelt Tags (FObjs) und schreibt die DateiFObj - Basisklasse aller Tagklassen

Control Tag Classes - Kontrolltags (beginnen mit FCT)Definition Tag Classes - Definitionstags (beginnen mit FDT)

Primitive Data Classes - weitere Records wie Fullstil, Farbe, Linie, ...Helper Classes - Hilfsklassen fur Sound und Pixelgrafiken

Tabelle 2.9:Lowlevelklassen des SWF-SDKs

Die Highlevel-Klassen bieten eine benutzerfreundlichere Schnittstelle zur Erzeugung ei-nes Flashfilmes, da sie nicht alle Tags des SWF Formates abbilden, sondern, auf denLowlevelklassen basierend, die Objekte in einem Flashfilm reprasentieren, was eine we-sentlich abstraktere Sichtweise als bei denLowlevel-Klassen ist.Die Highlevel-Klassen beginnen alle mit dem Prafix

”HF “ f ur High Level Flash. Es exi-

stieren Klassen zum Erzeugen von Filmen (HFMovie ), Schlusselbildern (HFFrame),Grafikobjekten (HFCircle , HFPolygon , ...), Text (HFText , HFEditText ) und vie-le mehr. Allerdings ist die Actionscript-Unterstutzung noch sehr mangelhaft. Die Tabelle2.10gibt einenUberblickuber dieHighlevel-Klassen und deren Funktionalitat.

HFMovie - FlashfilmHFFrame - SchlusselbildHFObject - Basisklasse aller Film-Elemente

HFButton - SchaltknopfHFFont - SchriftartHFShape - Basisklasse aller Grafikobjekte

HFEditText - Editierbares TextfeldHFOval - Ellipse

HFCircle - KreisHFPolygon - PolygonHFRectangle - Rechteck

HFBitmap - Rechteck mit Pixelgrafik gefulltHFText - Text

HFSound - SoundHFAction - ActionScript-Anweisung

HFActionGetURL - Laden einer WebseiteHFActionGoToFrame - Zu einem bestimten Bild im Film springenHFActionPlay - Einen Film abspielenHFActionStop - Einen Film stoppen

Tabelle 2.10:Highlevelklassen des SWF-SDKs

Die Verwendung der Highlevelklassen soll an einem kleinen Beispiel demonstriert wer-den: Ein Kreis mit einem radialen Gradientenverlauf als Fullung und ein Rechteck miteinem linearen Gradientenverlauf werden in einem300 ∗ 300 Pixel großen Film plaziert.Das Rechteck wird dann in zwei Schritten um 60 Grad gedreht. Danach beginnt der Flas-hfilm wieder von vorne. In Abb7.5auf Seite97ist ein Snapshot des Flashfilmes zu sehenund die zugehorige Implementation ist im Quellcode2.2angefuhrt.

Page 27: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

2 Macromedia Flash 19

#include <HF3SDK.h>int main() {

// erzeuge einen neuen Flash-FilmHFMovie movie = HFMovie();

// setze die groesse auf 300*300 Pixel// Angaben in TWIPS=>6000*6000movie.SetSize( 6000, 6000 );// drei Bilder pro Sekundemovie.SetFrameRate( 3 );

// ein Rechteck (FPIXEL = 20, Umrechnung Pixel nach TWIPS)HFRectangle* rect =new HFRectangle( 20*FPIXEL,20*FPIXEL, 120*FPIXEL,120*FPIXEL );

// ein KreisHFCircle* circle =new HFCircle( 80*FPIXEL,50*FPIXEL,40*FPIXEL );

// setze die Fuellfarbenrect->SetLinearFill( Blue_RGBA, Black_RGBA );circle->SetRadialFill( Yellow_RGBA, Violet_RGBA );

// platziere Objekte uebereinanderrect->SetDepth( 1 ); circle->SetDepth( 2 );

// fuege Objekte zu erstem Schluesselbild hinzumovie.Frame( 0 )->AddObject( rect );movie.Frame( 0 )->AddObject( circle );

// rect dreht sich um den eigenen Mittelpunktmovie.Frame( 1 )->RemoveObject( rect );rect->Rotate( FloatToFixed( 30.0 ) );movie.Frame( 1 )->AddObject( rect );movie.Frame( 2 )->RemoveObject( rect );rect->Rotate( FloatToFixed( 60.0 ) );movie.Frame( 2 )->AddObject( rect );

// schreibe die SWF-Datei und beende das Programmmovie.WriteMovie("HFExample.swf");delete rect; delete circle;return( 0 );

}

Quellcode 2.2:Implementation zur Erstellung eines Flashfilmes (siehe auch Abb.7.5, Seite97)

Page 28: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

2 Macromedia Flash 20

Durch das SWF-SDK ist es nun moglich, Flashfilme zu programmieren, vollig losgelostvom Flash Studio, mit dem im allgemeinen Flashfilme erstellt werden. Allerdings istdiese Art der Flashfilmerstellung recht aufwendig, wenn man z.B. bedenkt, daß fur eineWetterprognose taglich ein Film erstellt werden soll. Jeder Film muß einzeln program-miert werden. Falls sich also in einem Film lediglich die Farbe eines Objektesandern soll,muß der Quellcode des Programms geandert und neu kompiliert werden. Dies ist keinesehr effektive Vorgehensweise, vor allem wenn man bedenkt, daß bei der Entwicklungeines Flashfilmes haufigAnderungen vorgenommen werden, da z.B. die Große oder Far-be eines Objektes noch nicht ganz genau den Vorstellungen des Entwicklers entspricht.Damit die Erstellung eines Flashfilmes auf Basis des SWF-SDKs komfortabler vonstat-ten geht, ware es denkbar eine Art Generator14 zu implementieren, der ein Datenformateinliest und dann zu einem Flashfilm umwandelt. Sollten sich dannAnderungen ergeben,sind diese nur in der Datei durchzufuhren und es ist kein Neukompilieren mehr notwen-dig. Wie ein derartiger Generator aufgebaut sein kann, wird in Kapitel6.3beschrieben.Da das von Macromedia zur Verfugung gestellte SDK in C++ entwickelt wurde, mußauch der Generator in C++ entwickelt werden, oder gibt es andere Moglichkeiten?Wenn ein Entwickler das SDK nutzen mochte, aber nicht in der ProgrammierspracheC++ programmieren will, ist dies auf den ersten Blick nicht moglich. Dies ist aber viel-leicht wunschenswert, da andere Programmiersprachen fur die zu entwickelnde Anwen-dung besser geeignet sind, so z.B. die Entwicklung in Java, weil Java eine plattformun-abhangige, leicht zu erlernende Programmiersprache ist, das Java Development Kit zurfreien Verfugung steht oder dem Entwickler Java personlich lieber ist als die Entwicklungin C++. Es ware also erstrebenswert das SWF-SDK fur Java zuganglich zu machen, wasmit dem Java Native Interface moglich ist. Dies ist ein Bestandteil dieser Diplomarbeitund wird in den Kapiteln4 und6.1beschrieben.

14damit ist nicht der Flashgenerator von Macromedia gemeint

Page 29: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

3 eXtensible Markup Language 21

3 eXtensible Markup Language

In dieser Arbeit ist das Hauptziel Daten mit Macromedia Flash zu visualisieren. Konkretsoll es sich dabei um zeit- und raumbezogene Daten handeln. Das Ausgabeformat Ma-cromedia Flash ist somit vorgegeben, das Format der Eingabedaten hingegen nicht.Es ist nicht vorgesehen verschiedene Importfilter zu entwickeln, welche unterschiedlicheDaten einlesen und so aufbereiten, daß sie fur diese Arbeit von Nutzen sind. Vielmehrsoll ein Schnittstellenformat entwickelt werden, aus dem ein Flashfilm generiert werdenkann und in das beliebige Daten konvertiert werden konnen. Damit die Umwandlungin das Flashformat zugig und einfach vonstatten gehen kann soll dieses Datenformatstark an das Flashformat angelehnt sein und dementsprechend die Tagstruktur und dieErweiterbarkeit des Flashformates wiederspiegeln. Wenn nun zusatzlich noch das FlashSDK von Macromedia berucksichtigt wird, auf welchem der Generator aufsetzt, erweistes sich als noch sinnvoller, die Struktur des SDKs und dessen Objekte in dieses Dateifor-mat zuubernehmen. Ein derartiges Format sollte zudem textbasiert sein, damit es nichtaufwendig konvertiert werden muß und somit einfach zu erstellen ist. Außerdem ist esdadurch moglich derartige Dateien direkt per Hand zu schreiben und erstellte Dateienbereits beim Durchlesen zu verstehen. Eine Datei in diesem Eingabeformat wird dannvon dem Generator eingelesen, welcher anschließend daraus einen Flashfilm erstellt.Hierdurch sind einige grundlegende Voraussetzungen an das Format gestellt worden, sodaß ein eigenes Schnittstellenformat entwickelt werden kann. Fur dieses Schnittstellen-format ist es dann notwendig eigene Lese- und Schreibmodule zu implementieren.Ein Standard, welcher gewisse Grundregeln bietet, wie z.B. strukturierte Daten in einerDatei abzulegen sind, ist XML. Was XML bedeutet, welche Ideen mit diesem Standardverfolgt werden, warum die Implementation eigener Schreib- und Lesemodule bei XMLbasierten Daten nicht mehr erforderlich ist und weshalb eine Syntaxprufung einer solchenDatei denkbar einfach ist, soll in den nachsten Abschnitten erlautert werden.

3.1 Der Standard XML

XML ist die Abkurzung fur eXtensible Markup Language. Das W3C15 stellt XML fol-gendermaßen dar:

”Die Extensible Markup Language (XML) ist das universelle Format

fur strukturierte Dokumente und Informationen fur das Web. “ [W3C2001a]In diesem Zitat wird besonders hervorgehoben, daß XML im Internet genutzt werdensoll. Dies resultiert daraus, daß der HTML Standard sich als unzureichend herausgestellthat und die Entwicklung von XML dieses Defizit beheben sollte. XML ist aber weit mehrals ein Nachfolger fur HTML, wie im folgenden dargelegt werden soll.

Im Jahre 1996 wurde mit der Entwicklung von XML begonnen und wurde vom W3Cim Jahre 1998 standardisiert. Aber die eigentlichen Wurzeln von XML beginnen schonwesentlich fruher. Vor der Entwicklung von XML gab es bereits dieStandard Generali-zed Markup Language(SGML), die in den fruhen achtziger Jahren entwickelt und 1986

15World Wide Web Consortium http://www.w3c.org

Page 30: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

3 eXtensible Markup Language 22

zum ISO16 Standard 8879 wurde [ISO2001]. Außerdem startete 1990 die Entwicklungvon HTML. Was haben aber SGML und HTML mit XML gemeinsam?SGML ist eine Metasprache zur Definition, Identifikaion und Benutzung der Strukturund des Inhalts von Dokumenten. In SGML ist man vollig unabhangig vom Ausgabe-medium, da keine Formatierungsanweisungen gespeichert sind, also eine vollige Tren-nung von Form und Inhalt. Erst durch eine nachtragliche Ausgabeaufbereitung kann manein und dasselbe Dokument auf Papier ausdrucken oder auf dem Bildschirm darstellen.Dies geschieht mit derDocument Style Semantics and Specif ication Language(kurz:DSSSL), die 1996 als ISO/IEC-Standard 10179 verabschiedet wurde [BeMi2000]. DieseSprache wurde entworfen, um SGML-Dokumente zu verarbeiten und zu formatieren. Siebesteht im wesentlichen aus zwei Komponenten: Der Transformationssprache (transfor-mation language) und der Stilsprache (style language). Die erstere transformiert beliebigeSGML-Dokumente in ein einheitliches Format und die zweite legt fest wie das Doku-ment spater aussehen soll. Problematisch ist jedoch die Komplexitat von SGML, die dieEntwicklung von SGML-Anwendungen kostenintensiv und aufwendig macht und einerweiten Verbreitung entgegenstand. Wieviele Schritte notwendig sind, um ein SGML-Dokument in ein Ausgabeformat zu transformieren wird in Abbildung3.1deutlich.

Parsing

SGML−

instanzDokument−

ExterneDokumentteile,

z.B. Grafiken

Stil−

Spezifikation

Trans−

formations−

prozeß

SGML−Dokument

Formatierungs−

Prozeß

...RTF PostScript PDF

SGML−

Deklaration

und DTDs

formations−

Spezifikation

Trans−

Abbildung 3.1:Verarbeitungsprozeß fur SGML

16ISO ist die International Standard Organsation

Page 31: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

3 eXtensible Markup Language 23

Die Hypertext Markup Language(HTML) ist eine Auszeichnungssprache, die 1989 vonTim Berners-Lee [Lee2000] am Forschungszentrum der Europaischen Organisation furKernforschung (CERN) entwickelt wurde, um wissenschaftliche Dokumente, mit derMoglichkeit auf andere Dokumente zu verweisen, im Internet zu verschicken [BeMi2000].HTML ist eine einfache Sprache, mit der Informationen im Internet prasentiert werdenkonnen. Allerdings wurde der HTML-Standard im Laufe der Zeit durch zunehmendeKomerzialisierung des Internets immer weiter verwassert. HTML wird nicht mehr nur zurPrasentation wissenschaftlicher Arbeiten genutzt, sondern dient als Basis-Technologiefur E-Commerce, Computer based Trainings und vieles mehr. Dies hatte zur Folge, daßimmer mehr Gestaltungsmoglichkeiten geschaffen werden mußten, die das Tagset vonHTML stark erweiterten, und dennoch reichten die Moglichkeiten immer noch nicht aus.So wurden 1996 dieCascading Style Sheets(kurz: CSS) eingefuhrt. Damit ist es moglich,das Basisdokument und die Art wie es formatiert werden soll, voneinander getrennt zuhalten. Außerdem erlauben CSS Web-Autoren, ein Style Sheet fur mehrere HTML Sei-ten zu nutzen und so fur ein einheitliches Aussehen der Webseiten (Corporate Identity)zu sorgen.Ein weiterer wesentlicher Punkt ist der

”Browserkrieg “ von Microsoft und Netscape.

Sowohl Netscape als auch Microsoft haben eigene HTML-Tags, die nicht zum Standardzahlen, in ihre Browser integriert. Hierdurch sollte erreicht werden, daß Webseiten spe-ziell fur einen bestimmten Browser optimiert werden und sich der potentielle Betrachterdieser Seite dann fur diesen Browser entscheiden wird, damit der eigene Marktanteilsteigt. Dies fuhrte aber letztendlich nur dazu, daß der HTML Standard immer weiter un-terlaufen wurde und nicht zu einer Steigerung des Marktanteils. Die Webseitenentwicklergingen namlich dazuuber, die Seiten fur beide Browser zu optimieren, wodurch sich kei-nes der zusatzlichen Tagsets von Netscape bzw. Microsoft durchsetzen konnte, sondernnebeneinander eine Koexistenz fuhrten. Dieser Kampf um die Marktanteile zog noch einweiteres Problem nach sich.Da die Webseiten haufig fehlerhaft geschrieben wurden (fehlende schließende Tags, kei-ne streng geschachtelte Ordnung der Tags), versuchten Netscape und Microsoft ihreBrowser moglichst resistent gegenuber Fehlern zu machen und korrigierten schlechteFormulierungen im HTML Code. So war es dann nicht mehr notwendig, sich bei derEntwicklung einer Webseite an strenge Vorgaben zu halten.SGML-Anwendungen sind also in ihrer Entwicklung viel zu komplex und zu kostenin-tensiv und HTML ist bezuglich der Gestaltungsmoglichkeiten, der Erweiterbarkeit undder Verwasserung des Standards nicht mehr ausreichend.Eine Losung dieses Dilemmas konnte die Extensible Markup Language sein. XML isteine Teilmenge von SGML und kann mit DSSSL, CSS Level 217 oder aber mit dereX-tensible Stylesheet Language(XSL) in ein beliebiges Ausgabeformat umgesetzt werden.Der Zusammenhang zwischen SGML, XML, HTML und deren Styleformaten ist in Ab-bildung3.2auf Seite24dargestellt.Bei der Entwicklung von XML wurden die besten Teile von SGML, gepaart mit der Er-fahrung mit HTML, genommen. Es wurde ein Standard geschaffen, der ebenso machtigist wie SGML, aber wensentlich restriktiver und einfacher in der Handhabung.

17Eine Erweiterung von CSS aus dem Jahre 1998, die zusatzlich systemspezifische Vorlagen, aus demInternet zu ladende Fonts und Positionierungsmoglichkeiten bietet.

Page 32: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

3 eXtensible Markup Language 24

SGML

DSSSL

XML

HTML

CSS

XSL

Teil vonTeilmenge von

Teilmenge von

Abbildung 3.2:Zusammenhang zwischen SGML, XML, HTML, CSS und DSSSL

Um ein Gefuhl dafur zu bekommen, was man unter XML versteht, sollen die wichtigstenPunkte aufgezahlt werden, die XML pragen:

Mit XML werden strukturierte Daten in ein Textfile geschrieben: Oft werden struk-turierte Daten erzeugt, z.B. Adressbucher, Konfigurationsparameter, Programm-ausgaben, technische Zeichnungen, usw.. Diese Daten konnen sowohl binar alsauch in lesbarem Code abgelegt werden. Letzteres bietet den Vorteil, daß ohne daserforderliche Programm die Datei angeschaut werden kann. XML bietet eine An-zahl von Regeln oder auch Konventionen, um solche Daten in strukturierter Formtextuell abzulegen. Dies geschieht in einer Weise, die es Programmen erlaubt, sol-che Dateien einfach zu generieren und zu lesen. Die Regeln sind eindeutig undverhindern verschiedene Probleme, wie z.B. mangelnde Erweiterbarkeit oder Platt-formabhangigkeit.

Der Entwurf von XML muß formal und pr azise sein:Eine XML-Anwendung soll ge-nau vorschreiben, welche Elemente an welcher Stelle stehen durfen. Hierbei darf eskeine Ausnahme geben. Dadurch ist eine XML-Anwendung, die einer bestimmtenDefinition entspricht, immer auf die gleiche Weise zu verarbeiten.

XML-Dokumente sollen leicht zu verarbeiten sein: Da XML-Anwendungen sehr re-striktiv sind, ist es moglich standardisierte Schreib- und Lesemodule zu entwickeln.So mussen keine Module fur das aufwendige Parsen eines Dokumentes entwickeltwerden.

XML ist tagbasiert: Wie auch bei HTML werden in XML sogenannte Tags mit Attribu-ten genutzt. Ein Tag ist ein durch< und> eingeklammertes Wort. Unter Attributenversteht man die Zuordnungname = wert. In HTML werden die Tags genutzt,um anzugeben, wie der Text zwischen den Tags im Browser formatiert werdensoll. In XML dienen die Tags nur dazu, den Text zu strukturieren und in kleineAbschnitte einzuteilen. Die Interpretation der einzelnen Tags wird dann anderenAnwendungenuberlassen. Ein weiterer Unterschied ist, daß XML wesentlich mehrreglementiert ist als HTML. In HTML ist es moglich, daß die Attributwerte nichtin Anfuhrungsstriche gesetzt sind. Dies ist in XML nicht zulassig. XML ist alsowesentlich reiner und sauberer als HTML.

Page 33: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

3 eXtensible Markup Language 25

3.2 Einsatzgebiete und Anwendung von XML

Eine XML basierte Auszeichnungssprache wird als XML Anwendung bezeichnet, diesist eine Anwendung von XML auf ein spezielles Fachgebiet, wie z.B. Mathematik, Che-mie, Literatur oder Multimedia. XML-Anwendungen werden in vielen Bereichen einge-setzt [Beck2000]:

• XML kann alsBasisformat verwendet werden, aus dem sich die fur die verschie-denen Zwecke und Ausgabemedien passenden Darstellungen einfach generierenlassen (etwa als Online-Hypertext oder als Papierversion).

• Mittels XML konnen jegliche strukturierte Daten in eine textuelle Form gebrachtwerden, wodurch proprietare Formate ersetzt werden konnten und so derAus-tausch zwischen verschiedenen Anwendungenerleichtert wird. Allerdings wirddadurch der eigentliche Inhalt durch das Einfugen von Tags stark aufgeblaht.

• XML erleichtert dieEinf uhrung neuer Dokumentversionen, indem es die Ver-waltung von abwartskompatiblen Daten ermoglicht, d.h. von neueren Programmenerzeugte Dateien konnen auch vonalteren Programmen verarbeitet werden.

Eine der ersten XML-Anwendungen ist dieChemical Markup Language(CML) vonPeter Murray-Rust [Har2000]. CML wurde ursprunglich als SGML-Anwendung ent-wickelt und dann in XMLubertragen. Mit CML werden komplexe chemische Molekulein einfacher Form beschrieben. So ist sie fur die Darstellung von Molekulstrukturen, Kri-stallographie, Veroffentlichungen, chemische Datenbanken und vieles mehr verwendbar.Der Vorteil von CML gegenuber den traditionellen Verfahren ist die einfache Suche inden Dokumenten und der Versendung der Datenuber das Internet, da CML als XML-Anwendung plattformunabhangig ist.Eine weitere Anwendung ist dieMathematical Markup Language(MathML), die es er-laubt mathematische Gleichungen im Internet verfugbar zu machen. Sicherlich war diesauch vorher moglich, indem Formeln in Grafiken umgesetzt wurden, aber eine Weiterver-arbeitung konnte dann nicht mehr vorgenommen werden. Mit MathML bleibt die Formelals solche erhalten.Weitere XML-Anwendungen sind z.B.:

XHTML XHTML k onnte HTML in seiner bisherigen Form ablosen. XHTML ist eineNachbildung und Erweiterung von HTML 4 auf XML-Basis [W3C2001b].

Channel Definition Format (CDF) Eine von Microsoft entwickelte XML-Anwendungzur Definition von Channels, welche genutzt werden, um Informationen an Leserdirekt zuubermitteln, die eine Webseite abonniert haben. Dieser Vorgang wird auchWebcastinggenannt.

Synchronized Multimedia Integration Language (SMIL) Eine vom W3C empfohle-ne XML-Anwendung [W3C2001d] f ur die Entwicklung

”TV-ahnlicher “ multime-

dialer Prasentationen fur das Internet.

Page 34: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

3 eXtensible Markup Language 26

Scalable Vector Graphics (SVG)Unter der Leitung des W3C entwickeltes Vektorgra-fikformat [W3C2001e] mit umfangreichen Filtereffekten und Interaktionsmoglich-keiten.

MusicML Von der Connection Factory entwickelte XML-Anwendung fur die Noten-schrift.

Es gibt noch wesentlich mehr etablierte XML-Anwendungen und weitere werden hin-zukommen. Dies sollte lediglich einen kurzenUberblick geben, in wievielen BereichenXML-Anwendungen bereits eingesetzt werden.

3.3 Die Document Type Definition – DTD

XML ist eine Meta-Auszeichnungssprache, d.h. eine Sprache mit der eine Auszeich-nungssprache beschrieben werden kann. Eine solche Auszeichnungssprache (auch Tagsetgenannt) wird mittels einerDocument Type Def initionbeschrieben. Es wird eine Listeder Elemente, Attribute, Notationen und Entities, die in einem Dokument enthalten seindurfen, sowie deren Beziehung zueinander definiert. Somit wird ein Verfahren bereitge-stellt, mit dem es moglich ist, sich auf bestimmte Auszeichnungsstandards zu einigen,wodurch eine gemeinsame Basis zum Datenaustausch vorhanden ist.Eine DTD kann zum einen in eine Datei, welche das Dokument enthalt, eingebettet oderaberuber eine externe URL18 mit dem Dokument verknupft werden. Eine solche DTDist dann von mehreren Dokumenten gemeinsam nutzbar. In jedem Falle ist es notwendigdie DTD in einem Dokument durch eine Dokumenttyp Deklaration einzubinden. Diesgeschieht in dem Prolog eines Dokumentes nach der XML Deklaration, aber noch vordem Root-Tag. Eine XML-Datei kann zum einen die URL der DTD enthalten, die DTDselbst oder gar beides. Im letzteren Fall besteht die Dokumenttyp Definition aus zweiTeilen: den internen und den externen Untermengen.Die DTD ist, wie bereits erwahnt, eine Definition einer Auszeichnungssprache. Von die-ser DTD darf nicht abgewichen werden. Dadurch ist sichergestellt, daß keine zusatzlichenElemente in einer XML-Anwendung auftreten durfen. Auch die Reihenfolge der Elemen-te wird festgeschrieben. Mit diesen vorgegebenen Regeln ist nun eine Validierung einerXML-Anwendung moglich. Hierbei werden verschiedene Validierungsarten unterschie-den. Eine Moglicheit ist die Validierung der Wohlgeformtheit einer XML-Anwendung,d.h. es wird lediglich die grundlegende Syntax gepruft, also z.B. daß die einzelnen Tagsimmer geschlossen oder daß Attributwerte stets in Anfuhrungsstriche gesetzt werden. Ei-ne Validierung anhand einer DTD ist aber ebenso moglich. Hierbei wird dannuberpruft,ob die Anordnung und Schachtelung der einzelnen Tags der DTD entspricht.Wie eine DTD erstellt wird und welche Elemente dem Entwickler zur Verfugung stehenwird in den nachsten Abschnitten naher erlautert.

18Uniform Resource Locator

Page 35: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

3 eXtensible Markup Language 27

3.3.1 Dokumentanalyse

Der erste Schritt bei der Erstellung einer DTD sollte die Analyse der vorhandenen Da-ten sein. In einigen Fallen ist die Information in den Daten gut strukturiert und formalerfaßbar. In anderen jedoch sind sie eher form- und strukturlos, wie z.B. bei literarischenTexten. In beiden Fallen muß eine Einteilung der Daten gefunden werden, die sie in einestrukturierte Form bringt. Ein literarischer Text kann z.B. in einzelne Abschnitte oderUberschriften eingeteilt werden.Ziel der Analyse der Daten ist, die wesentlichen Elemente und ihre Attribute heraus-zufinden. Ein wesentliches Element konnte z.B. eine Person sein, welche als Attributeeinen Namen, Adresse und Geburtsdatum besitzt. Hierbei stellt sich immer die Frage,was ein Attribut ist und was ein eigenstandiges Element. So kann die Adresse durchausein Element sein, wenn sie nicht nur bei der Person eingesetzt wird, sondern auch beieinem Gebaude oder bei anderen Elementen Verwendung findet wird. Daher ist es oftnicht eindeutig derartige Elemente und Attribute zu finden, die einerseits die Wirklich-keit gut abbilden, aber dennoch wohlstrukturiert sind. Dieser Vorgang ist sehr gut mitder Entwicklung einer relationalen Datenbank zu vergleichen, da auch hier Entitaten undderen Attribute ermittelt werden mussen.Da eine XML-Anwendung stets hierarchisch aufgebaut ist, ist es auch sinnvoll die DTDSchritt fur Schritt von außen nach innen aufzubauen. Zunachst stellt sich die Frage, wel-ches Wurzelelement gewahlt werden soll und welche Elemente innerhalb dieses Wurzel-elementes auftreten durfen. Das Wurzelelement umschließt das gesamte Dokument undsollte vom Namen her die XML-Anwendung moglichst gut charakterisieren. Nur bei un-strukturierten Daten wird es meist mit ANY oder anderen allgemeinen Bezeichnungenbezeichnet.Es ist auch wichtig, sich immer nur die zu strukturierenden Daten vor Augen zu haltenund sich nicht von der zu entwickelnden Software leiten zu lassen, da sonst meist einewenig restriktive XML-Anwendung zustande kommen wird und dadurch die eigentlicheStruktur der Daten nicht wiedergegeben wird.Diese Punkte bewirken, daß die Analyse des Dokumentes haufig wiederholt werden mußund erst nach mehreren Iterationen die Anordnung der Elemente und Attribute eine guteStrukturierung der Daten darstellen. Wie aber werden nun diese Elemente und Attribu-te in einer DTD beschrieben, wie werden Regeln definiert und in welcher Anordnungdurfen diese auftreten? Dies wird im nachsten Abschnitt naher erlautert.

3.3.2 Die DTD-Syntax

Eine DTD definiert Regeln fur eine XML-Anwendung. Jede DTD wird mit einer Anwei-sung eingeleitet, in der die XML Version festgelegt wird und enthalt außerdem immerden DTD-Namen:

<?xml version="1.0"?><!DOCTYPE DTD-Name [

Dokumentdefinition]>

Page 36: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

3 eXtensible Markup Language 28

Innerhalb der eckigen Klammern wird dann die eigentliche Definition der Dokumentsyn-tax angegeben.Der grundlegendste Bestandteil einer XML-Anwendung ist das Element. Es darf weitereoder keine Elemente enthalten. Ein leeres Element wird wie folgt definiert:

<!ELEMENT element_name EMPTY>

Wichtig dabei ist, daß auf die Groß- und Kleinschreibung geachtet wird. So mussen dieSchlusselworter ELEMENTund EMPTYgroß geschrieben werden. Der Name des Ele-mentes kann frei definiert werden, allerdings muß beachtet werden, daß in der XML-Anwendung der Name genauso geschrieben werden muß wie er definiert wurde. Sollein Element weitere Elemente enthalten, wird die Liste der erlaubten Tags anstelle desSchlusselwortesEMPTYin runden Klammern eingefugt:

<!ELEMENT element_name (sub_elem)>

In diesem Fall muß das Elementsub element genau einmal inelement name ent-halten sein. Dies kann aber auch variiert werden. Wird z.B. nach der Angabe des Un-terelementes nach der schließenden Klammer ein

”?“ eingefugt, ist dieses Element op-

tional, es kann also genau einmal oder gar nicht vorkommen. Wenn es gewunscht ist,daß dieses Element entweder gar nicht oder beliebig oft vorkommen darf, wird anstelledes

”?“ ein

”* “ eingefugt und fallssub elem mindestens einmal im Element vorkom-

men soll, wird ein”+“ eingefugt.

Soll ein Element mehrere Subelemente enthalten wird dies folgendermaßen definiert:

<!ELEMENT element_name (sub_elem1,sub_elem2,sub_elem3)>

Hierbei mussen die Subelemente in der angegebenen Reihenfolge in dem Element ent-halten sein. Auch hier kann das

”?“, das

”+“ oder das

”* “ genutzt werden, wobei es sich

dann auf alle Subelemente bezieht. Bei einem”* “ k onnen die drei Subelemente keinmal,

einmal oder beliebig haufig auftreten, allerdings gilt dies immer fur alle drei Elementein ihrer Gesamtheit. Die Trennung der einzelnen Subelemente durch ein

”, “ gibt also

die Reihenfolge der Elemente vor und es mussen alle genutzt werden. Soll jedoch eineWahlmoglichkeit der einzelnen Subelemente bestehen, wird das

”, “ durch ein

”| “ aus-

getauscht. Das Ganze sieht dann folgendermaßen aus:

<!ELEMENT element_name (sub_elem1|sub_elem2|sub_elem3)>

Hier kann also eines der drei Subelemente ausgewahlt werden. Auch hier konnen dieZeichen

”?“,

”+“,

”* “ eingesetzt werden, um die Haufigkeit der Subelemente angeben zu

konnen. Die angegebenen Moglichkeiten konnen in beliebiger Form kombiniert werden:

<!ELEMENT element_name (sub_elem1?,(sub_elem2|sub_elem3)*)>

In diesem Beispiel enthalt das Elementelement name zunachst ein- oder keinmal dasSubelementsub elem1 und danach entweder das zweite oder das dritte Subelement,welche keinmal oder beliebig haufig auftreten durfen.Nun fehlen noch die zu einem Element gehorigen Attribute. Attribute werden in derfolgenden Form deklariert:

<!ATTLIST element_name attribut_name typ default_wert>

Page 37: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

3 eXtensible Markup Language 29

element name ist der Name des Elementes, zu dem das Attributattribut namegehort. typ ist der Datentyp des Attributs. Die wichtigsten von XML vorgegebenen Ty-pen sind in Tabelle3.1 zusammengefaßt.default wert ist der Standardwert des At-tributes, der angenommen wird, wenn das Attribut in der XML-Auspragung weggelassenwird.

Typ Bedeutung#CDATA Character Data: Beliebige Zeichendaten#PCDATA Parsed Character Data: Zeichendaten ohne Zeichen der XML-SyntaxEnumerated Eine Liste von moglichen WertenID Ein im Dokument eindeutiger NameIDREF Der Wert einer vorher definiertenIDIDREFS MehrereID s, durch Leerzeichen getrennt

Tabelle 3.1:Attributtypen in XML

Anstatt einen Standardwert fur ein Attribut vorzugeben, gibt es auch die MoglichkeitAttribute zu erzwingen oder wegzulassen. Hierfur gibt es zwei Schlusselworte, die ein-gesetzt werden, wenn kein Standardwert vorgegeben werden kann.#REQUIREDwirdgenutzt, wenn ein Attribut zwingend erforderlich ist und#IMPLIED wird eingesetzt,wenn dieses Attribut auch weggelassen werden kann.Im Quellcode3.1 ist als Beispiel eine DTD fur die Strukturierung von Personendatenangegeben und eine mogliche Auspragung wird im Quellcode3.2dargestellt.

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE PersListe [<!ELEMENT PersListe (PERSON)+><!ELEMENT PERSON ((VORNAME+), NACHNAME, ADRESSE)><!ATTLIST PERSON geschlecht ("m"|"w") #REQUIRED>

<!ELEMENT VORNAME #PCDATA><!ELEMENT NACHNAME #PCDATA>

<!ELEMENT ADRESSE (STRASSE, HAUSNUMMER, PLZ, ORT)><!ELEMENT STRASSE #PCDATA><!ELEMENT HAUSNUMMER #PCDATA><!ELEMENT PLZ #PCDATA><!ELEMENT ORT #PCDATA>

]>

Quellcode 3.1:person.dtd: Einfache DTD zur Strukturierung von Personendaten

Page 38: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

3 eXtensible Markup Language 30

<?xml version=’1.0’ encoding=’UTF-8’?><!DOCTYPE PersListe SYSTEM ’person.dtd’>

<PersListe>

<PERSON geschlecht="m"><VORNAME>Hans</VORNAME><VORNAME>Peter></VORNAME><VORNAME>Egon</VORNAME><NACHNAME>Mustermann</NACHNAME><ADRESSE>

<STRASSE>Mustergasse</STRASSE><HAUSNUMMER>1</HAUSNUMMER><PLZ>0815</PLZ><ORT>Musterstadt</ORT>

</ADRESSE></PERSON>

<PERSON geschlecht="w"><VORNAME>Erika</VORNAME><NACHNAME>Mustermann</NACHNAME><ADRESSE>

<STRASSE>Mustergasse</STRASSE><HAUSNUMMER>1</HAUSNUMMER><PLZ>0815</PLZ><ORT>Musterstadt</ORT>

</ADRESSE></PERSON>

<PERSON geschlecht="w"><VORNAME>Bettina</VORNAME><VORNAME>Petra</VORNAME><NACHNAME>Mustermann</NACHNAME><ADRESSE>

<STRASSE>Mustergasse</STRASSE><HAUSNUMMER>1</HAUSNUMMER><PLZ>0815</PLZ><ORT>Musterstadt</ORT>

</ADRESSE></PERSON>

</PersListe>

Quellcode 3.2:Eine mogliche Auspragung derperson.dtd

Page 39: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

3 eXtensible Markup Language 31

3.4 XML Parser

Der große Vorteil bei der Nutzung von XML-Anwendungen sind die vorhandenen undauch standardisierten Parser. Diese Parser sind meist frei verfugbar und werden in un-terschiedlichen Programmiersprachen angeboten. Einige Parser werden in Kapitel3.4.2vorgestellt.Ein Parser ist ein Programm, das ein Dokument abarbeitet und die enthaltenen Informa-tionen daruberliegenden Schichten der Anwendung in irgendeiner Form zur Verfugungstellt. Genau dies macht auch ein XML-Parser. Er arbeitet das XML-Dokument durch undstellt die Informationen (also Elemente, Attribute, usw.) der Applikation zur Verfugung.XML-Parser lassen sich nach zwei Kriterien unterscheiden: Zum einen ob sie validierenoder nicht, zum anderen welche Schnittstelle sie zum Zugriff auf das XML-Dokumentanbieten (SAX oder DOM). Validierung eines XML Dokumentes bedeutet die Prufungeines Dokumentes auf Wohlgeformtheit oder Gultigkeit. Ein Dokument ist wohlgeformt(well-formed), wenn es die grundlegenden XML Bedingungen erfullt, das sind im ein-zelnen [Beck2000]:

• Alle Elemente mussen wieder geschlossen werden, d.h. zu jedemoffnenden Tagmuß das zugehorige schließende Tag explizit hingeschrieben werden.

• Leere Elemente (z.B.<BR> in HTML) weden durch einen Slash (/ ) vor der ab-schließenden spitzen Klammer gekennzeichnet (<BR/> in XML).

• Alle Attributwerte mussen in Anfuhrungszeichen eingeschlossen werden.

Ein Dokument ist gultig (valid), wenn es wohlgeformt ist und sich der Aufbau des Do-kumentes zusatzlich an die in der DTD vorgegebenen Regeln halt. Da die Validierungeines Dokumentes sehr zeitaufwendig ist, sollte genau gepruft werden, ob eine Validie-rung sinnvoll ist oder nicht. Wenn das zu parsende Dokument maschinell erstellt wurde,kann davon ausgegangen werden, daß es ein gultiges XML-Dokument ist. In diesem Fallesollte von einer weiteren Validierung abgesehen werden. Auf den Unterschied zwischenDOM und SAX Parsern wird in Kapitel3.4.1eingegangen.

3.4.1 XML-Parser Aplication Programming Interface

Die einzelnen Parser unterscheiden sich nicht wesentlich in ihrer Anwendung, da siemeist den vom W3C vorgegebenen Standard XML 1.0 [W3C2001c] implementieren. Eskann aber sein, daß einige Parser zusatzliche Methoden anbieten oder noch in einem Sta-dium sind, in dem noch nicht der gesamte vorgegebene Standard implementiert ist. DerUnterschied zwischen den einzelnen Parsern liegt vielmehr in ihrer Performance. DieXML-Parser der unterschiedlichen Unternehmen sind bei verschiendenen Aufgaben un-terschiedlich schnell. So ist der eine Parser speziell fur den Einsatz mit dem DokumentObjekt Model entwickelt worden, wohingegen ein anderer Parser sehr schnell validierenkann. Dementsprechend muß die anstehende Aufgabe dahingehend untersucht werden,

Page 40: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

3 eXtensible Markup Language 32

welche Arten des Parsens besonders haufig vorkommen und welche vernachlassigbarsind, um auf diese Art und Weise den richtigen XML-Parser zu finden.DasApplication Programming Interface(API) der XML-Parser ist eine vom W3C stan-dardisierte Schnittstelle [W3C2001a]. Es werden bei einem SAX-Parser immer dieselbenMethoden bei einem Ereignis aufgerufen oder ein DOM wird immer auf dieselbe Artund Weise manipuliert. Dies hat zur Folge, daß die Parser einfach ausgetauscht werdenkonnen, sofern sich dies als vorteilhaft erweist. Da die Parser bei verschiedenen Aufga-ben unterschiedlich schnell sind, ist es somit moglich verschiedene Parser zu testen, umden schnellsten herauszufinden oder aber weiterentwickelte und fehlerbereinigte Parserin die eigene Applikation aufzunehmen.Lediglich bei einigen Punkten ist ein derartiger Austausch des Parsers nicht moglich.Bei einigen Parsern werden proprietare Methoden eingebaut, um die Funktionalitat zuerweitern oder die Benutzung des Parsers komfortabler zu gestalten. Werden diese in ei-ner Applikation genutzt, ist man an diesen Parser gebunden. Deshalb ist davon abzuratenderartige Methoden zu nutzen.Es gibt zwei verschiedene Schnittstellenuber die der Zugriff auf ein XML Dokumenterfolgt. Zum Einen dasDocument Object Model(DOM) und zum Anderen dieSimpleAPI for XML (SAX).

Document Object Model

Beim Parsen des XML-Dokumentes mit einem DOM-Parser wird ein Baum aufgebaut,der sogenannte DOM-Tree, wobei das Root-Element des XML-Dokumentes die Wurzeldes DOM-Trees wird. Dieser Baum ist dann im Speicher verfugbar und stellt ein Abbilddes XML-Dokumentes dar. Der zum Quelltext3.3 gehorende DOM-Tree ist in der Ab-bildung3.3dargestellt.

<artikel>

<titel> Flashweather </titel>

<autor><vorname> Ralf </vorname><nachname> Kunze </nachname>

</autor>

<inhalt>text

</inhalt>

</artikel>

Quellcode 3.3:XML Auspragung

Page 41: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

3 eXtensible Markup Language 33

autor

nachname

artikel

titel inhalt

vorname text

Ralf Kunze

Flashweather

Abbildung 3.3:Grafische Darstellung des zum Quellcode3.3gehorenden DOM-Trees

Die DOM-API bietet Werkzeuge zum Zugriff auf den Baum und zum Verandern des Bau-mes und ist daher ideal fur interaktive Anwendungen geeignet. Allerdings ist ein DOMrecht langsam und speicherintensiv, da alle Elemente und Attribute als eigene in einemBaum organisierte Objekte im Speicher abgelegt werden.Wie man einen DOM-Parser verwendet, wird anhand desApache Xerces-J[Apac2001b]gezeigt. Nach dem Import der Parser-Klasseorg.apache.xerces.parsers.DOM-Parser und dem Dokument-Interfaceorg.w3c.dom.Document , das die Wurzeldes DOM-Trees reprasentiert, wird ein XML-Dokument mit den folgenden Zeilen Quell-code in ein DOMuberfuhrt:

DOMParser parser = new DOMParser();parser.parse( XMLDocument_Filename );Document doc = parser.getDocument();

Von der Dokument-Wurzeldoc ausgehend kann nun der Baum traversiert und jedes Ele-ment ausgelesen, manipuliert oder die Baumstruktur verandert werden.Voreingestellt pruft der Xerces-J DOMParser ein XML-Dokument nur auf Wohlgeformt-heit. Wenn die Gultigkeit eines Dokumentesuberpruft werden soll, muß das entsprechen-de Feature vor dem Parsen gesetzt werden:

parser.setFeature("http://xml.org/sax/"+"features/validation",true);

Werden bei derUberprufung des Dokumentes Fehler gefunden, wird standardmaßig kei-ne Meldung daruber ausgegeben. Ist dies erwunscht kann einErrorHandler implemen-tiert werden, der dem Parser folgendermaßen mitgeteilt wird:

parser.setErrorHandler(myErrorHandler);

Im Interfaceorg.xml.sax.ErrorHandler werden die Methodenkopfe vereinbart,die ein ErrorHandler implementieren muß:

void warning(SAXParseException ex) //warningvoid error(SAXParseException ex) //recoverable-errorvoid fatalError(SAXParseException ex) //non-recoverable

Page 42: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

3 eXtensible Markup Language 34

Es fallt auf, daß der ErrorHandler fur den DOM-Parser aus dem Packetorg.xml.saxstammt. Dies liegt daran, daß ein DOM-Parser auf einem SAX-Parser basiert. Das XML-Dokument wird von einem SAX-Parser sequenziell verarbeitet und daraus wird dann,durch die Ereignisse des Parsers gesteuert, ein DOM-Tree aufgebaut. Die Methoden desErrorHandlers werden also durch einen verborgenen SAX-Parser aufgerufen.In Quellcode3.4wird die Zusammenarbeit der genannten Klassen und Methoden darge-stellt.

import java.io.IOException;import org.xml.sax.SAXException;import org.xml.sax.SAXParseException;import org.w3c.dom.Document;import org.apache.xerces.parsers.DOMParser;

public class ExampleDomParser {/** Erstellung eines DOM-Trees mit dem Xerces-J-DOMParser */public static void main(String args[]) throws IOException,

SAXException {DOMParser parser = new DOMParser();parser.setFeature("http://xml.org/sax/"

+"features/validation",true);

//Eigener ErrorHandler als innere Klasse zur Fehlerausgabeparser.setErrorHandler(

new org.xml.sax.ErrorHandler() {public void fatalError(SAXParseException err) {

System.out.println("Fatal Error: "+err.getMessage()+"line "+err.getLineNumber() );

}public void error (SAXParseException err) {

System.out.println("Error: "+ err.getMessage()+"line "+err.getLineNumber() );

}public void warning (SAXParseException err) {

System.out.println("Warning: "+err.getMessage()+"line "+err.getLineNumber() );

}}

);parser.parse(args[0]);Document root = parser.getDocument();//Verarbeitung des Dokumentes

}}

Quellcode 3.4:ExampleDomParser.java: Verwendung eines Xerces-J DOMParsers

Page 43: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

3 eXtensible Markup Language 35

Simple API fur XML – SAX

Die Simple API fur XML (SAX) wurde von Mitgliedern der XML-DEV Mailing List[Gopr2000] entwickelt. Mit SAX wird ein Dokument eventgesteuert geparst, d.h. es wirdbeim Lesen eines Tags ein Ereignis ausgelost, ebenso bei Fehlern oder Warnungen. DieseEreignisse konnen vom Entwickler individuell behandelt werden, indem einEventhand-ler implementiert und beim Parser registriert wird. Innerhalb desEventhandlerswird furdie einzelnen Ereignisse eine Methode implementiert,uber die man dann auf das Ereig-nis reagieren kann. Nach der Verarbeitung eines Ereignisses sind alle Informationen dazuverloren, sofern diese nicht explizit zwischengespeichert wurden. In der Abbildung3.4ist der Zusammenhang zwischen einem XML-Dokument und den zugehorigen Ereignis-sen dargestellt.

<?xml version="1.0"?>

<artikel>

<para>

HelloWorld!

</para>

</artikel> endElement: artikel

endElement: para

characters: HelloWorld!

startElement: artikel

processingInstruction

startDocument

endDocument

startElement: para

XML−Datei Ereignisse

Abbildung 3.4:SAX-Parser-Events beim Parsen eines XML-Dokumentes

Wie man einen SAX-Parser verwendet, wird anhand desApache-Xerces-JParsers erklart.Zunachst muß die Klasseorg.apache.xerces.parsers.SAXParser importiertwerden, um mit

SAXParser parser = new SAXParser();

einen neuen SAX-Parser zu instanziieren. Damit die durch das Parsen entstehenden Er-eignisse verarbeitet werden konnen, muß dem Parser ein Handler, der fur die Ereignisseentsprechende Methoden enthalt, ubergeben werden. Dieser Handler muß von der Klas-seorg.xml.sax.helpers.DefaultHandler abstammen. Indem die Methodendes DefaultHandlers fur die einzelnen Ereignisseuberschrieben werden, kann man dieEreignisse individuell verarbeiten. Ein einfacher Handler, der lediglich die Ereignisseauf die Kommandozeile ausgibt, ist in Quellcode3.5zu sehen.

Page 44: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

3 eXtensible Markup Language 36

import org.xml.sax.helpers.DefaultHandler;

public class MySAXHandler extends DefaultHandler {// DocumentHandler methods

/** Processing instruction. */public void processingInstruction(String target,

String data) {System.out.println("Processing Instruction:"

+"<?"+target+data+"?>");}

/** Start document. */public void startDocument() {

System.out.println("Start Dokument:");}

/** Start element. */public void startElement(String uri, String localName,

String qName, Attributes attrs) {System.out.println("Start Element: <"+qName+">");

}

/** Characters. */public void characters(char ch[],

int start,int length) {

System.out.println("Characters: "+new String(ch, start, length));

}

/** Ignorable whitespace. */public void ignorableWhitespace(char ch[],

int start,int length) {

characters(ch, start, length);}

/** End element. */public void endElement(String name) {

System.out.println("End Element: </"+name+">");}

/** End document. */public void endDocument() {

System.out.println("End of Document");}

}

Quellcode 3.5:MySAXHandler.java: Handler zur Ausgabe der Ereignisse eines SAX-Parsers

Page 45: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

3 eXtensible Markup Language 37

Dieser Handler wird dann folgendermaßen dem SAX-Parser mitgeteilt:

parser.setContentHandler(myHandler);

Die Erstellung eines Errorhandlers, das Einstellen der Features und das Initiieren desParsens sind identisch zu dem DOM-Parser und werden deshalb hier nicht nochmalserlautert.

Vergleich: DOM vs. SAX

SAX ist sehr schnell und auch recht einfach, allerdings kann nach dem Parsen eines Er-eignisses nicht mehr darauf zuruckgegriffen werden, was bei einigen Anwendungen not-wendig ist. Dies ist naturlich bei einem DOM moglich. Da der DOM-Tree im Arbeitsspei-cher vorliegt, kann jederzeit auf beliebige Knoten zugegriffen werden. Der DOM-Parserist somit ideal fur Anwendungen, die es erforderlich machen, auf das XML Dokumentinteraktiv zuzugreifen. Allerdings ist das DOM auch wesentlich langsamer und speicher-intensiver [Har2001].Ein weiterer Unterschied liegt in der Validierung eines XML-Dokumentes. Sollten beider Validierung mit SAX Fehler im Dokument auffallen, kann es im schlimmsten Fallesein, daß fast das gesamte Dokument verarbeitet wurde. Eventuell durchgefuhrte Aktio-nen mussen dann wieder ruckgangig gemacht werden. Des weiteren kann bereits unnotigviel Rechenzeit vergangen sein, da die einzelnen Ereignisse eine komplexe Verarbeitungnach sich ziehen konnen. Beim DOM wird im Falle einer Validierung erst das gesamteDokument gepruft und es ist daher zu Beginn der eigentlichen Verarbeitung sicher feh-lerfrei.Bei der Wahl der Schnittstelle ist also zu prufen, welche Anforderungen gestellt werden.Wenn sehr komplexe Dokumente schnell geparst werden und diese Dokumente maschi-nell erstellt wurden, so daß sie wahrscheinlich fehlerfrei sind, ist ein SAX Parser aufjeden Fall angebracht, bei umfangreichen Manipulationen am Dokument eher ein DOMParser.

3.4.2 Welche Parser gibt es?

Da XML-Anwendungen momentan sehr gefragt sind, gibt es auch eine Vielzahl vonXML-Parsern, die in der Regel gratis zur Verfugung gestellt werden. Sie unterscheidensich in einzelnen Features, der Performance oder in den Standards, die sie implemen-tieren. Um einen kurzenUberblick uber die momentan erhaltlichen Parser zu geben,sollen im folgenden die gangigsten XML-Parser und ihre Features vorgestellt werden[Fine2001]:

Oracle Parser von der Oracle Corporation [Orac2001] Der Parser unterstutzt sowohlvalidierendes als auch nichtvalidierendes Parsen und entspricht der W3C XML 1.0Recommendation19. Der Parser bietet eine DOM Level 1 und eine SAX 1.0 API.

19Festgeschriebener Standard des W3C

Page 46: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

3 eXtensible Markup Language 38

Es konnen Dokumente in den Kodierungen20 UTF-8, UTF-16, ISO-10646-UCS-2,ISO-10646-UCS-4, US-ASCII, ENDIC-CP-US, ISO-8859 und ShiftSJIS geparstwerden.

Ælfred von Microstar [ OpTe2001] Ælfred ist ein in Java entwickelter Parser und be-sticht durch eine sehr geringe Dateigroße von lediglich 26 kB und benotigt nursehr wenig Arbeitsspeicher. Er ist daher besonders fur Java Applets geeignet. Al-lerdings bietet er lediglich einen SAX 1.0 Parser und keine DOM Implementation.An Kodierungen werden UTF-8, UTF-16, ISO-10646-UCS-2, ISO-10646-UCS-4und ISO-8859-1 unterstutzt.

Xerces von Apache [Apac2001b] Der von Apache entwickelte Parser implementiert dieXML1.0 Recommendation und bietet eine DOM Level1 und 2 sowie eine SAX1.0 und 2.0 API. Es werden folgende Kodierungen unterstutzt: UTF-8, UTF-16,ISO-8859-1, ISO-8859-2, ISO-8859-3, ISO-8859-4, Chinese (big5), Japanese ISO-2022-JP, Cyrillic (koi8-r), und viele weitere.

IBM’s XML for Java v2.0 von IBM [ IBM2001] Der XML Parser von IBM basiert aufdem XML Parser von Apache und wird von IBM lediglich unter einem anderenNamen vertrieben. Die Features entsprechen also denen des Xerces Parsers.

Java API for XML Processing (JAXP) von Sun Microsystems [Sun2001b] JAXP un-terstutzt die DOM Level 1, DOM Level 2, SAX 1.0 und SAX 2.0 APIs. Zusatzlichist ein XSLT Prozessor integriert. Der JAXP Parser wird in dieJava2 PlatformStandard Edition(J2SE) 1.4mit eingebunden werden.

Es gibt noch viele weitere XML Parser und standig kommen weitere auf den Markt. Einenimmer aktuell gehaltenenUberblickuber die neuesten Parser findet sich unter [Fine2001]und [Cove2001].

20Die Kodierungen geben die Zeichensatze an, mit denen der Parser arbeiten kann

Page 47: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

4 Das Java Native Interface 39

4 Das Java Native Interface

Wie bereits in Kapitel2.4erwahnt, existiert ein in C++ geschriebenes Software Develop-ment Kit, mit dem es moglich ist Flashfilme in C++ zu programmieren. Ziel der Arbeit istes, ein moglichst plattformunabhangiges Programm zu entwickeln. Wurde man die Soft-ware in C++ entwickeln, ware die Plattformunabhangigkeit nur noch bedingt gegeben. Esware dann notwendig die Programme fur jedes Betriebssystem einzeln zu kompilieren.Wenn es dann noch gewunscht ist, Oberflachen zu implementieren, ware die Plattform-unabhangigkeituberhaupt nicht mehr gegeben.Um dies zu umgehen, soll die Programmentwicklung in Java ermoglicht werden. Java ist,wie in der Abbildung4.1 zu sehen, eine platformunabhangige Programmiersprache, sodaß kein Neukompilieren der Quellen notwendig ist, wenn die Software unter verschie-denen Betriebssystemen eingesetzt werden soll.

HelloWorld.class

VM VM VM

Windows

...

...Linux OS / 2

Abbildung 4.1:Javaklassen konnen mit der Java Virtual Machine auf verschiedenen Betriebssy-stemen ausgefuhrt werden

Hierbei ergibt sich aber das Problem, wie dann Bibliotheken genutzt werden konnen,die in einer anderen Programmiersprache als Java entwickelt wurden. Die Losung lau-tet: Java Native Interface(JNI). JNI ist ein Teil des Java Development Kits (JDK) undermoglicht es Java Code, welcher auf der Java Virtual Machine (JVM) ausgefuhrt wird,mit anderen Programmiersprachen wie C, C++ oder Assembler – sogenanntenative-Sprachen – zu kommunizieren. Im allgemeinen wird JNI eingesetzt, wenn Programmenicht ausschließlich in Java geschrieben werden konnen. So ist es beispielsweise in denfolgenden Situationen sinnvoll JNI zu nutzen:

• Die Standard Java Klassen bieten keine spezielle plattformabhangige Unterstutzung,welche fur die Applikation notwendig ist.

• Es existiert bereits eine Bibliothek mit allen notwendigen Funktionen, welche JavaApplikationen zuganglich gemacht werden soll.

• Es ist zeitkritischer Programmcode notwendig, welcher zur Sicherheit in einer demBetriebssystem nahen Programmiersprache wie z.B. Assembler entwickelt werdensoll.

Page 48: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

4 Das Java Native Interface 40

• Algorithmisch aufwendige Probleme mit hoher Laufzeit sollen moglichst effektivund schnell gelost werden, was am besten in C oder Assembler moglich ist.

JNI stellt also eine Schnittstelle zwischen Java und einer anderen Programmiersprache(z.B. C++) dar, wie in Abb.4.2zu sehen ist.

Exceptions

Klassen

Java VM

Funktionen

Bibliotheken

N

I

J

Java−Seite C++ −Seite

Abbildung 4.2:JNI als Schnittstelle zwischen Java und C++

Es konnen Funktionen aus Klassen und Bibliotheken einer anderen Programmiersprachedirekt aus Javaklassen heraus aufgerufen werden, aber genauso ist der Zugriff von einerbeliebigen Programmiersprache auf Javaprogramme moglich. So kann z.B. aus einemC++ Programm heraus dieJava Virtual Machinegestartet, Exceptions erstellt oder Java-methoden aufgerufen werden.Die Arbeitsweise von JNI und die Erstellung einer Java Applikation, welche auf eineC++ Bibliothek zugreift, wird in den nachsten Abschnitten verdeutlicht.

4.1 Programmentwicklung mit JNI

Um native-Methoden in Java zu implementieren, ist ein mehrstufiger Prozeß notig. Dieseeinzelnen Stufen sollen an einem Beispiel dargestellt werden: Es wird einHelloWorldProgramm entwickelt, welches es ermoglicht, von der Javaseite aus eine C++ Methodeaufzurufen, die einen Text und einigeubergebene Parameter ausgibt.Hierzu sind die folgenden sechs Schritte notwendig [Sun2001a] (siehe auch Abb.4.3):

1. Zunachst wird das Javaprogramm geschrieben. Methoden, welche aufnative-Codezugreifen sollen, werden mit dem Schlusselwortnative deklariert (siehe auchQuellcode4.1auf Seite42)

2. Die Javaklasse wird mitjavac Klassenname kompiliert.

Page 49: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

4 Das Java Native Interface 41

3. Mit dem Kommandojavah -jni wird ein Headerfile fur die entsprechendenative-Methode erstellt. Dieses Headerfile ist die formale Struktur fur die Methodein dernative-Sprache.

4. Nun wird dienative-Methode in C oder C++ anhand der Vorgaben im Headerfileimplementiert (siehe auch Quellcode4.3auf Seite43).

5. Die C oder C++ Quellen werden zu einer Shared Library kompiliert. Diese Librarymuß auf dem System so abgelegt werden, daß sie auf demLD LIBRARY PATHzufinden ist.

6. Der letzte Schritt ist das Ausfuhren des Javaprogramms.

1.

2.

3.

4.

5.

6.

startenJavaprogramm

erzeugen

Native Methodeimplementieren

Headerfile erzeugenjavah −jni

Mit javac

Schreiben desJavacodes

HelloWorld.java

HelloWorld.class

HelloWorld.h

HelloWorldImpl.cc

libhello.so

stdio.h

jni.h

Shared Library

kompilieren

Abbildung 4.3:Schritte der Programmentwicklung mit JNI

Die einzelnen Schritte werden im weiteren naher erlautert und mit Beispielcode versehen.

Page 50: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

4 Das Java Native Interface 42

Schreiben des Javacodes

Der Quellcode4.1zeigt eine Javaklasse, die einenative-Methode definiert und zusatzlicheinen Staticblock besitzt.

public class HelloWorld {public native void displayHelloWorld(int iter,

String name);

static {System.loadLibrary("hello");

}

public static void main(String args[]) {new HelloWorld().displayHelloWorld(3, "Ralf Kunze");

}}

Quellcode 4.1:HelloWorld.java: Klasse mit einernative-Methode

Jede Methode, die auf eine andere Programmiersprache zugreifen soll, wird mit demSchlusselwortnative versehen, wie es hier bei der Methode

public native displayHelloWorld(int iter, String name);

zu sehen ist. Diese Information wird spater zur Erzeugung des zugehorigen Headerfilesgenutzt.Der Staticblock in der KlasseHelloWorld dient dazu, die Shared Library zu laden,welche z.B. in C oder C++ entwickelt wurde.In der Main Methode kann dann dienative-Methode ganz normal genutzt werden, wie esder Programmierer von Java her gewohnt ist. Diese Klasse kann nun mit

javac HelloWorld

kompiliert werden.

Erzeugen des Headerfiles

Das zu dernative-Methode gehorige Headerfile wird mit dem Kommando

javah -jni HelloWorld

aus der kompiliertenHelloWorld.class Datei erzeugt, in diesem Fall also die DateiHelloWorld.h (siehe Quellcode4.2auf Seite43). In diesem Headerfile wird die Da-tei jni.h eingebunden, in der alle Definitionen und Deklarationen der Datenstrukturenund Methoden angegeben sind, die von JNI zur Verfugung gestellt werden. Die Metho-dendeklarationen in dem erzeugten Headerfile besitzen eine Signatur, die dem Metho-dennamen auf der Java Seite entsprechen, aber noch einen zusatzlichen Prafix besitzen,welcher sich aus dem Klassennamen – mit der Angabe des zugehorigenPackages– unddem WortJava , jeweils durch einen Unterstrich voneinander getrennt, zusammensetzt.

Page 51: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

4 Das Java Native Interface 43

/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class HelloWorld */

#ifndef _Included_HelloWorld#define _Included_HelloWorld#ifdef __cplusplusextern "C" {#endif/*

* Class: HelloWorld Method: displayHelloWorld* Signature: (ILjava/lang/String;)*/

JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld(JNIEnv *, jobject, jint, jstring);

#ifdef __cplusplus}#endif#endif

Quellcode 4.2:HelloWorld.h: Das mitjavah -jni erzeugte Headerfile

Implementation der native-Methode

Die native-Methode wird gemaß der Vorgabe im generierten Methodenkopf im Hea-derfile implementiert (Quellcode4.3).

#include <jni.h>#include "HelloWorld.h"#include <stdio.h>

/* native class HelloWorld.c */

JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj, jint iterations, jstring j_name) {

const char* c_name = env->GetStringUTFChars(j_name,0);for(int i=0;i<iterations;i++) {

printf("%s says: Hello World!\n", c_name);}

}

Quellcode 4.3:HelloWorld.c: Die Implementation auf der C++ Seite

In diesem Beispiel wurde Wert darauf gelegt, daß sowohl primitive als auch komplexeDatentypenubergeben werden, um den Unterschied in der Nutzung zu verdeutlichen.Wie zu sehen ist, kann der primitive Datentyp der Javaseiteint , welcher in C++ demjint entspricht, einfach ohne Umkonvertierung genutzt werden.

Page 52: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

4 Das Java Native Interface 44

Der DatentypString auf der Java Seite entspricht dem Datentypjstring . Letztererist in C++, aufgrund der komplexen Struktur des Datentyps, nicht direkt zuganglich.Die Umwandlung einesjstring erfolgtuber Funktionen, dieuber einenJNIEnv-Zeigerabrufbar sind. DerJNIEnv-Zeiger verweist auf eine Tabelle, die alle moglichen Funktio-nen, die im Zusammenhang mit JNI-Datentypen-Konversionen stehen, enthalt.

Erstellen einer Shared Library

Damit nun die Implementation dernative-Methode in C++ dem Javaprogramm zugang-lich wird, muß aus der entsprechenden C++ Klasse eine Shared Library erzeugt werden.Um dies zu erreichen, wird die C++ Quelle zunachst zu einem Objektfile kompiliert.Unter Linux geschieht dies unter Verwendung desgcc mit dem Kommando:

gcc -c -fpic -I/usr/lib/jdk1.3/include-I/usr/lib/jdk1.3/include/linux HelloWorld.cc

Mit der Optionsflagge-c wird das Linken verhindert, es entsteht lediglich ein Objektfile.Die Flagge-fpic erzeugt einen speziell fur eine Shared Library vorkompilierten Code.Die Flagge-I gibt an, wo nach den entsprechenden Includedateien gesucht werden soll.Aus dem so entstandenen Objektfile wird nun mit dem Kommando

gcc -shared -fpic -I/usr/lib/jdk1.3/include-I/usr/lib/jdk1.3/include/linux -o libhello.soHelloWorld.o

eine Shared Library mit dem Namen libhello.so (unter anderen Betriebssystemen ist derAufruf entsprechend anders). Hier gibt die Flagge-sharedan, daß eine Shared Libraryerstellt werden soll. Mit der Flagge-o kann dahinterstehend der neue Name der kompi-lierten Library angegeben werden. In der Javaklasse wird die entstandene Shared Librarydurch den folgende Staticblock geladen:

static {System.loadLibrary{"hello");

}

Dafur muß allerdings die Shared Library zu finden sein. Unter dem Betriebssystem Linuxgibt es zum einen Standardverzeichnisse, in denen die Libraries abgelegt werden konnenund zum anderen kann eine Variable mit dem NamenLD_LIBRARY_PATHmit den Pfa-den gesetzt werden, in denen nach Shared Libraries gesucht werden soll. Außerdem mußzum Laden der Library auf der Javaseite der Dateiname ohne

”lib “ und ohne die En-

dung”.so “ angegeben werden. Sollte einer der beiden Punkte nicht erfullt sein, kann die

Library nicht gefunden werden und es wird die ExceptionUnsatisfiedLinkErrorerzeugt.

Page 53: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

4 Das Java Native Interface 45

Ausfuhren des Javaprogrammes

Wenn die Shared Library korrekt installiert worden ist, kann das Javaprogramm gestartetwerden. Dies geschieht, wie in Javaublich, mit dem Kommando:

java HelloWorld

und liefert fur die hier angefuhrte Beispielklasse folgendes Ergebnis:

Ralf Kunze says: Hello World!Ralf Kunze says: Hello World!Ralf Kunze says: Hello World!

4.2 Datentypen in JNI

Wie bereits erwahnt konnen primitive Datentypen ohne weiteres zwischen Java und an-deren Programmiersprachen hin und her geschoben werden. Die Tabelle4.1 stellt dieseprimitiven Datentypen in Java und dernative-Sprache gegenuber [Sun2001a].

Java Typ Native Typ Size in bits

boolean jboolean 8, unsignedbyte jbyte 8char jchar 16, unsignedshort jshort 16int jint 32long jlong 64float jfloat 32double jdouble 64void void n/a

Tabelle 4.1:Primitive Datentypen in JNI

Komplexere Java Datentypen konnenuber JNI als Referenz an einenative-Methodeuber-geben werden. Alle Referenzen auf ein Javaobjekt sind vom Typjobject , von demeinige Typen abgeleitet werden. Welche Typen es gibt, ist in Tabele4.2 auf Seite46 zusehen.

Diese Objekte sind auf dernative-Seite aber nicht direkt zuganglich, sie mussen erst kon-vertiert werden. So muß in einernative-Methode einjstring Objekt, das im Unicodevorliegt, erst mit der MethodeGetStringUTFChars in einen UTF-8 String umge-wandelt werden:

JNIEXPORT void JNICALL Java_Test_printLine(JNIEnv *env, jobject obj, jstring line) {

const char* c_line = env->GetStringUTFChars(line,0);printf("%s", c_line);

}

Page 54: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

4 Das Java Native Interface 46

jobject - alle Java Objektejstring - java.lang.String Objektejclass - java.lang.class Objektejarray - Basis aller Arrayobjekte

jobjectArray - Objekt ArraysjintArray - Integer ArraysjlongArray - Long ArraysjfloatArray - Float ArraysjdoubleArray - Double ArraysjbooleanArray - Boolean ArraysjbyteArray - Byte ArraysjcharArray - Charakter ArraysjshortArray - Short Arrays

jthrowable - java.lang.Throwable Exceptions

Tabelle 4.2:Komplexe Datentypen bei der Nutzung von JNI

Um die MethodeGetStringUTFChars aufzurufen, wird auf ein Objekt vom TypJNIEnv zuruckgegriffen. Dieses Objekt stellt eine Referenz auf ein Javaobjekt dar,uber welches diverse Methoden aufgerufen werden konnen, um die Javaobjekte von dernative-Seite aus zu manipulieren, oder aber um eine Exception auf der Javaseite her-vorzurufen. Die Methoden zum Umgang mit String-Objekten sind in der Tabelle4.3enthalten.

NewString() - Neuer String aus einem Unicode-C-StringNewStringUTF() - Neuer String aus einem UTF8-C-StringGetStringLength() - Liefert die Anzahl der Unicode-ZeichenGetStringUTFLength() - Liefert die Anzahl der UTF8-ZeichenGetStringChars() - Liefert Zeiger auf dynamisch allokierten Spei-

cher, gefullt mit den Unicode-Zeichen desStrings

GetStringUTFChars() - Liefert Zeiger auf dynamisch allokierten Spei-cher, gefullt mit den UTF8-Zeichen des Strings

ReleaseStringChars() - Gibt Speicherplatz des Unicode-C-Strings freiReleaseStringUTFChars() - Gibt Speicherplatz des UTF8-C-Strings frei

Tabelle 4.3:Methoden zum Umgang mit String-Objekten

Weitere Informationen zu den moglichen Datentypen, Methoden und weitere Moglich-keiten von JNI sind unter [Sun2001a] zu finden.Mit dem Java Native Interfaceist es also moglich, sowohl primitive als auch komplexeDatentypen von der Javaseite auf dienative-Seite zu schicken. Was aber ist mit selbstdefinierten Objekten, die den Vorgaben von JNI nicht entsprechen und wie konnen kom-plexe Objekte von dernative-Seite verwaltet oder genutzt werden? Auf diese Problematikwird in Kapitel 6.1.1naher eingegangen und eine Losung fur das letztere Problem vor-gestellt.

Page 55: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

5 Clipping 47

5 Clipping

Ein Vorteil von Macromedia Flash ist die Zoombarkeit eines Flashfilmes. So kann ineinen Film ohne Qualitatsverlust hineingezoomt werden, was vor allem bei Wetterkartenvon Vorteil ist. Wenn sich ein Betrachter einer Wetterkarte fur eine Region naher inter-essiert, kann er diesen Teil vergroßern. Dies macht aber nur Sinn, wenn dann auch mehrInformationen sichtbar werden. So ist es z.B. vorstellbar, daß der Betrachter zunachst nurdie Landeshauptstadte der Bundeslander sehen kann und erst nach dem Vergroßern desFilmes auch weitere Orte sichtbar werden. Dies ist prinzipiell moglich, aber die entspre-chenden Flashdateien werden dann wesentlich großer, so daß dieUbertragunguber dasInternet nicht mehr sinnvoll ware, selbst wenn man bedenkt, daß Flashfilme streambarsind, also bereits abgespielt werden konnen, wenn sie noch nicht ganz aus dem Inter-net geladen wurden. Wenn ein Flashfilm zu groß ist, wird die Darstellung des Filmesschleppend vonstatten gehen, da sehr viel Arbeitsspeicher benotigt wird und das kom-plette Herunterladen eines Filmes bei zu vielen Daten im Film zu lange dauern kann.Um dieses Problem zu umgehen, soll ein Film in hoher Auflosung in mehrere kleineTeile zerlegt werden. Es werden Ausschnitte definiert, die einen einzelnen Flashfilm re-prasentieren. Alle Informationen, die in diesem Ausschnitt nicht sichtbar sind werdenweggelassen. Diesen Vorgang nennt man Clipping.In diesem Kapitel sollen die Grundlagen und die moglichen Probleme beim Clippingerlautert werden.

5.1 Grundlagen des Clipping

Das Ziel des Clippens ist es, unbenotigte Informationen wegzulassen. Dies kann ver-schiedene Grunde haben. So ist es denkbar, daß aus einer Grafik lediglich ein Teil vonInteresse ist, oder aber das fur das Rendern einer Grafik es nicht notwendig ist, die Rand-bereiche zu berechnen, da sie spater auf dem Bildschirm nicht sichtbar waren. Aberwelche Informationen sind nun wesentlich und welche nicht? Beim Clipping werdenGrenzen angegeben, in denen die Informationen erhalten bleiben sollen. Diese Grenzenkonnen z.B. durch ein Rechteck oder ein Polygon definiert werden. Alle Informationen,die innerhalb des Polygons oder Rechtecks enthalten sind, bleiben erhalten und alle an-deren werden entfernt. Da im weiteren Verlauf lediglich Rechtecke als Clippinggrenzengenutzt werden, wird auf das Clipping mit Polygonen als Clippinggrenzen nicht nahereingegangen, Informationen hierzu sind unter [FAQ2001] erhaltlich.Die Schwierigkeit beim Clipping besteht darin, zu ermitteln, welche Objekte unsicht-bar, teilweise oder ganz sichtbar sind. Wenn in einer Grafik ein Rechteck eingezeichnetwird, ist es fur den Betrachter dieser Grafik kein Problem mit bloßem Auge zu erken-nen welche Teile der Grafik innerhalb des Rechtecks liegen und welche außerhalb. Solldies durch einen Algorithmus gelost werden, ist dies nicht mehr trivial. Hierzu muß al-gorithmisch gepruft werden, wo sich ein Objekt in Bezug zu diesem Rechteck (also denClippinggrenzen) befindet, welche Schnittpunkte gegebenenfalls existieren und wie die-se ermittelten Punkte ein neues Objekt bilden. Im folgenden werden drei grundlegendeArten des Clippings naher erlautert: Das Punkt-, Linien- und Polygonclipping.

Page 56: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

5 Clipping 48

5.2 Clipping von Punkten

Das Clippen von Punkten ist die grundlegendste Clippingart. Hierbei muß lediglichuber-pruft werden, ob ein Punkt innerhalb oder außerhalb des Clippingrechtecks liegt. Im letz-teren Fall wird er entfernt, ansonsten wird er beibehalten. Der Test, ob ein Punkt sichtbarist oder nicht, ist denkbar einfach: Fur eine Folge von PunktenPi wird ein Test bezuglichder Fenstergrenzenxmin ≤ xi ≤ xmax undymin ≤ yi ≤ ymax durchgefuhrt. Alle Punktedie diese Bedingung nicht erfullen, werden entfernt.

5.3 Clipping von Linien

Das Linienclipping ist etwas aufwendiger, als das Punktclipping. In der Abb5.1werdenverschiedene mogliche Lagen einer Linie gezeigt.

ymax

xmin

ymin

xmax

Abbildung 5.1:Mogliche Lagen einer Linie im Bezug zum Clippingrechteck [Fell1992]

Je nach Fall ist eine Linie komplett innerhalb eines Clippingrechtecks und bleibt des-halb erhalten, oder ist im Gegensatz dazu vollig außerhalb der Clippinggrenzen und mußdementsprechend entfernt werden. Wenn ein Punkt der Linie außerhalb liegt und der an-dere innerhalb des Clippingrechtecks, existiert ein Schnittpunkt, welcher errechnet wer-den muß, um die Endpunkte der neuen Linie zu erhalten. Wenn sich beide Punkte derLinie außerhalb des Clippingrechtecks befinden heißt dies aber noch nicht, daß die Linienicht sichtbar ist. Es kann durchaus sein, daß in diesem Fall zwei Schnittpunkte existie-ren, welche dann die neuen Endpunkte der Geraden darstellen.Der am weitesten verbreiteste Algorithmus zum Linienclipping stammt vonCohenundSutherland[Fell1992]. Hierbei wird die Ebene entsprechend den Clipping-Grenzen inneun Bereiche eingeteilt und mit einem Bereichscode versehen, wobei das mittlere Recht-eck, mit dem Code0000 , dem sichtbaren Teil entspricht (siehe Abbildung5.2). Durchdiese Bereichscodes kann einfach gepruft werden, ob eine Linie sichtbar ist oder nicht.

Ob die LinieP1P2 sichtbar ist, kann mit nur einerand-Verknupfung sehr leichtuberpruftwerden. Im FallCode(P1) and Code(P2) <> 0 ist die Linie unsichtbar und muß nicht

Page 57: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

5 Clipping 49

1001

0001

0100

0000

1000 1010

0010

01100101

Abbildung 5.2:Bereichscodes desCohen and SutherlandAlgorithmus [Fell1992]

geclippt werden. Ansonsten wird die Linie mit einer der Fenstergrenzen geschnitten, umden Schnittpunkt zu erhalten. Anschließend wird der Test erneut durchgefuhrt. Wenn dieobige Bedingung erfullt ist oder die Punkte beide innerhalb des Clippingfensters liegen,wird die Iteration abgebrochen.Das Linienclipping ist also noch recht einfach durchzufuhren. Wie sieht es aber mit Li-nienzugen oder gar Polygonen aus?

5.4 Clipping von Polygonen

Das Clippen von Linien legt den Schluß nah, daß das Polygonclipping auf das sequenzi-elle Clippen der einzelnen Polygonlinien zuruckzufuhren ist, dem ist aber nicht so.

(a) vorher (b) falsch (c) falsch (d) korrekt

Abbildung 5.3:Polygonclipping

Das Polygon wurde in mehrere Teile zerfallen, wie in Abbildung5.3b zu sehen ist. Umdennoch ein vollstandiges Polygon zu erhalten, mussen die Ein- und Austrittspunkte mit-einander verbunden werden, wobei dies auch zu Problemen fuhren kann, wie in der Ab-bildung5.3c zu sehen ist.Um dennoch derartige Objekte clippen zu konnen, wurde vonSutherlandundHodgmaneine Methode entwickelt, mit der ein Polygon sequenziell an den Kanten des Clipping-rechtecks abgeschnitten wird. Diese Methode wirdReentrant Polygon Clippinggenannt[Fell1992]. Das Polygon wird Clippingkante fur Clippingkante geclippt. Punkte, die aufder nicht sichtbaren Seite liegen, konnen weggelassen werden bzw. es wird ein Schnitt-punkt errechnet. Die so erhaltenen Schnittpunkte und alle Punkte auf der sichtbaren Seite

Page 58: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

5 Clipping 50

werden in ihrer Reihenfolge beibehalten und an der nachsten Kante wiederum diesemVerfahren unterzogen. Der Vorgang ist in der Abbildung5.4zu sehen.

(a) oben (b) rechts (c) unten (d) links

Abbildung 5.4:Polygonclipping nachSutherland and Hodgman

Page 59: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

51

II Realisierung und Anwendung

Page 60: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

6 Realisierung 52

6 Realisierung

In den vorangegangenen Kapiteln wurden die Grundlagen vorgestellt, die fur die weitereArbeit wichtig sind. Dieses Kapitel beschaftigt sich mit der praktischen Umsetzung derArbeit.In den folgenden Abschnitten wird zunachst erlautert, wie eine Java API fur das in C++implementierte SWF-SDK von Macromedia entwickelt wurde. Darauf folgt dann die Er-stellung des Dateiformates, welches dem Flash Generator, auf den im darauffolgendenAbschnitt naher eingegangen wird, als Grundlage dient. In den folgenden Abschnittenwird auf die Clippingalgorithmen eingegangen, die es erlauben eine SKF-Datei mit ihrenprimitiven Objekten, Bezierkurven und Kontrolltags, die der Transformation von Objek-ten dienen, an waagerechten und senkrechten Linien zu clippen. Als letztes wird auf diePerformance des Generators eingegangen und gezeigt, wie der Generator und der Clippergenutzt werden.

6.1 Erstellen einer Java API fur das C++ SWF-SDK

In Kapitel 4.1 wird beschrieben, wie eine Anwendung entwickelt wird, die auf Funk-tionen und Methoden zuruckgreift, die in einer anderen Programmiersprache entwickeltwurden. Wie bereits erwahnt, ist es nur moglich, primitive Datentypen oder aber derenArrays als Parameter zuubergeben. Als komplexere Datentypen sind lediglich Stringserlaubt. Wenn in den Methoden der C++ Library komplexe Objekteubergeben oder aberC++ Objekte von der Methode zuruckgeliefert werden, ist eine Anbindung an Java nurschwer moglich. Es muß ein Weg gefunden werden, wie C++ Objekte die Grenze der JNISchnittstelleuberwinden konnen.Daher wurde das SDK zunachst dahingehenduberpruft, ob eine Anbindung ohne wei-teres moglich ist. Es wurde festgestellt, daß es unerlaßlich ist Objekte als Parameter zuubermitteln und sich die zuruckgelieferten Objekte zu merken, damit sie bei spaterenAufrufen wieder an eine C++ Methodeubergeben werden konnen. Wie dies in C++ undJava in Kombination mit JNI implementiert und wie die Java SWF API entwickelt wurde,wird in den nachsten Abschnitten naher erlautert.

6.1.1 Verwaltung von C++ Objekten auf der Javaseite

Um C++ Objekte einfach auf der Javaseite zu verwalten, konnten alle entstehenden C++Objekte in einer Hashtable auf der C++ Seite mit einer eindeutigen ID abgelegt werden.Mit diesem Mechanismus ware es lediglich notwendig, die eindeutige ID zwischen Javaund C++ hin und her zu schicken. Wenn also eine C++ Methode ein Objekt als Ergebnisliefert (z.B. wurde ein Polygonobjekt erzeugt) wird das Objekt in eine Hashtable mit derzugehorigen ID geschrieben. In dernativeMethode auf der Javaseite kommt lediglichdiese ID an, die naturlich in einem Datentyp abgelegt werden muß, der mit JNI ohneweiteresubertragen werden kann. Soll nun dieses Objekt spater weitergenutzt werden,wird lediglich die entsprechende ID an die C++ Seiteubermittelt. Daraus kann das Objekt

Page 61: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

6 Realisierung 53

zuruckverfolgt und mit ihm weitergearbeitet werden.Es gibt aber noch eine einfachere Moglichkeit, welche grundsatzlich nach demselbenPrinzip arbeitet. Jedes Objekt in C++ besitzt einen Zeiger. Dies entspricht einer Adresseim Speicher und ist eindeutig. Daher ist es wesentlich einfacher, diese Zeiger hin und herzu schicken, um die Objekte zu identifizieren. Zusatzlich wurde die Hashtable wegfallenwas aber einige Risiken mit sich bringt, die auf Eigenheiten der C++ Objekte beruhen.Das Problem bei den C++ Objekten ist, daß ein Objekt durchaus verschiedene Zeigerbesitzen kann. Dieser Effekt tritt durch die in C++ mogliche Mehrfachvererbung auf. Wiein der Abbildung6.1zu sehen ist, kann ein C++ Objekt, welches von einer Klasse stammtdie durch Mehrfachvererbung entstanden ist,uber verschiedene Adressbereiche (Zeiger)angesprochen werden, die fur jede Klasse in der Vererbungshierarchie vorhanden sind.

Klasse A Klasse B

Klasse C

A

B

C

Objekt der K

lasse C

Zeiger

Zeiger

Zeiger

(A)c

(B)c

c

Abbildung 6.1:Mogliche Zeiger eines C-Objektes bei Mehrfachvererbung

Wenn dies bei dem SDK der Fall ist, kann die Java Anbindung nicht wie beschriebenimplementiert werden, da ein und dasselbe Objekt verschiedene Referenzen hatte. DieAnalyse des SDKs hat ergeben, daß dies nicht der Fall ist und diese Vorgehensweisedaher durchfuhrbar ist.Nun stellt sich aber die Frage, wie die Objektzeiger so umgewandelt werden konnen,daß sie mittels JNI auf die Javaseite gelangen konnen. Da ein Zeiger auf ein C++ Objektlediglich eine Adresse im Speicher darstellt, die in einem Bytecode abgelegt ist, kanndieser Bytecode in ein Bytearray umgewandelt werden, welches ohne Probleme auf dieJavaseite gelangen kann. Im Beispielcode6.1wird diese Umwandlung durchgefuhrt.

jbyteArray ptr_to_byteArray (JNIEnv* env, void* p) {jbyteArray arr = env->NewByteArray(sizeof(void*));env->SetByteArrayRegion(arr,0,sizeof(void*),(jbyte*)&p);return arr;

}

Quellcode 6.1:Methode zur Umwandlung eines Pointers in ein Bytearray

Page 62: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

6 Realisierung 54

Zunachst wird einjbyteArray mit der Große eines Zeigers angelegt. Im nachstenSchritt wird dann dieses Arrayuber die MethodeSetByteArrayRegion mit dementsprechenden Zeiger gefullt. Dieses so entstandenejbyteArray wird dann an dieaufrufende Methode zuruckgeliefert.Falls nun aus Java heraus an ein C++ Objekt eine Methode geschickt werden soll oderes notig ist an eine C++ Methode ein C++ Objekt als Parameter zuubergeben, wird dasentsprechende Bytearray mitgeschickt und auf der C++ Seite wieder umcodiert, so daßdas C++ Objekt gefunden (siehe Beispielcode6.2) und mit ihm weitergearbeitet werdenkann.

void* byteArray_to_ptr (JNIEnv *env, jbyteArray arr) {void* p = NULL;if (arr != NULL) {

env->GetByteArrayRegion(arr,0,sizeof(void*),(jbyte*)&p);}return p;

}

Quellcode 6.2:Methode zur Umwandlung eines Bytearrays in den entsprechenden Pointer

Hierzu wird zunachst ein leerer Zeiger angelegt und dieser dannuber die MethodeGet-ByteArrayRegion auf das entsprechende C++ Objekt gesetzt. Der so entstandeneZeiger wird dann von dieser Funktion zuruckgeliefert. Hierbei ist zu beachten, daß dieaufrufende Methode keine Information daruber erhalt, um was fur ein Objekt es sichhandelt, weshalb ein Cast21 in der aufrufenden Methode erforderlich ist. Wie kann nungewahrleistet werden, daß der Cast stets korrekt durchgefuhrt wird?Jedes Java Objekt, das ein C++ Objekt kapselt, erhalt bei der Instanziierung den C++ Zei-ger mitgeliefert. Dieser Zeiger wird in einerfinal Variablen abgelegt und kann somitnicht mehr geandert werden. Daher sind Manipulationen an den Zeigern ausgeschlossenund der Cast kann ohne Probleme durchgefuhrt werden.Damit dieses Vorgehen auch wirklich durchfuhrbar ist, ist es unabdingbar, daß die C++Objekte nach dem Verlassen einer C++ Methode nicht einfach geloscht werden, sondernweiterhin existieren, damit sie spater wiedergefunden werden konnen. Um dies zu errei-chen, ist es notwendig, alle C++ Objekte, die auf diese Art und Weise genutzt werdensollen, explizit mitnew zu erzeugen. Diese Objekte bleiben dann so lange erhalten, bissie mit dem Destructor wieder zerstort werden.Auf diese Art und Weise ist es nun moglich C++ Objekte zu verwalten und der Anbin-dung des SWF-SDKs steht nichts mehr im Wege. Wie sehen aber nun die Javaklassenaus, die die SWF API bilden und wie ist es moglich, daß der Nutzer nicht mit dennative-Methoden in Kontakt kommt? Wie konnen Manipulationen unterbunden werden? Diessoll im nachsten Abschnitt naher erlautert werden.

21Umwandlung eines Datentypen in einen anderen, z.B. eine Integer in Float umwandeln

Page 63: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

6 Realisierung 55

6.1.2 Konkrete Umsetzung: Entwicklung der SWF API

Die konkrete Umsetzung der Erstellung der Java SWF API ist nach der Analyse des SDKsdurch die Punkte in Kapitel4.1vorgezeichnet. Damit aber die Handhabung der SWF APIfur den Nutzer moglichst einfach und sicher ist, sind noch einige Punkte zu beachten.Ein großes Problem konnte auftreten, wenn die Bytearrays, welche die C++ Objektereprasentieren und in Javaobjekten gekapselt werden sollen, auf der Javaseite manipuliertwerden konnten, da so Objekte nicht mehr auffindbar waren und Speicherlecks entstehenkonnten. Zusatzlich soll fur den Nutzer nicht ersichtlich sein, daß er mitnative-Methodenarbeitet. Um dies zu erreichen, wurden allenative-Methoden alsprivate deklariert.Daher sind diese Methoden von außen her nicht sichtbar und fur den Nutzer der SWF JavaAPI nicht aufrufbar. Jede Klasse der API enthalt also einenprivate und einenpublicTeil. Die private Methoden dienen der Kommunikation mit dem C++ SDK und diepublic Methoden sind fur den Nutzer zuganglich. Sie konvertieren gegebenenfalls dieubergebenen Parameter und reichen versteckt die Bytearrays, welche die C++ Objektereprasentieren, an dienative-Methoden weiter.Um eine Manipulation der Bytearrays in den Objekten zu vermeiden, wird das Bytearaymit den Schlusselwortenprotected final versehen.protected gewahrleistet,daß es nicht fur andere Pakete sichtbar ist und durch das Schlusselwortfinal , daß esnicht verandert werden kann. Alle Methoden, die nach außen hin aufrufbar sind, besitzeneine zugehorigenative-Methode, welche nach außen nicht sichtbar ist.Im Quellcode6.3auf Seite56wird die Verarbeitung der C++ Referenz auf der Java-Seitedeutlich. Es ist zu erkennen, daß die C++ Referenz an die einzelnennative-Methodengeliefert wird und keinesfalls diese Referenz von außen sichtbar ist oder manipuliertwerden kann.

Page 64: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

6 Realisierung 56

package f3sdk.highlevel;/**

* API for the HFObject class from the Macromedia Flash SDK.* The C++ object is wrapped in a byetearray. Baseclass for* HFButton* HFFont* HFShape* HFEditText* HFOval* HFCircle* HFPolygon* HFRectangle* HFBitmap* HFText* HFSound* @author Ralf Kunze @version 05.08.2000*/

public class HFObject {/**

* Objektreference on the C++ side */protected final byte [] reference;

/*** Set the depth value for the current shape* @param depth The depth value to be set */

private native void SetDepth(byte[] reference, int depth);

/*** Get the depth of this shape* @return Returns the depth of this shape */private native int GetDepth(byte [] reference);

//----- PUBLIC AREA ------------------/**

* Set the depth value for the current shape* @param depth The depth value to be set */

public void setDepth(int depth) {SetDepth(reference,depth);

}

/*** Get the depth value of this shape* @return Returns the depth of this shape */

public int getDepth() {return GetDepth(reference);

}}

Quellcode 6.3:HFObject Klasse, welche HFObject.cc fur Java zuganglich macht

Page 65: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

6 Realisierung 57

Wenn auf der Javaseite alle Klassen erstellt und die Headerfiles fur die C++ Klassen er-zeugt wurden, mussen diese noch in C++ implementiert werden. Hierbei werden einfachin jeder zu implementierenden Methode die Aufrufe an das Macromedia SWF-SDK wei-tergereicht. Dieser Vorgang ist in der Klassef3sdk highlevel HFObject.cc imQuellcode6.4zu sehen.

#include <jni.h>#include <f3sdk_highlevel_HFObject.h>#include <HF3SDK.h>#include <sdktools.h>

/** Class: HFObject* Method: GetDepth* Signature: ([B)I*/

JNIEXPORT jint JNICALL Java_f3sdk_highlevel_HFObject_GetDepth(JNIEnv *env, jobject obj, jbyteArray reference) {

HFObject *HFObj = (HFObject *)byteArray_to_ptr(env,reference);return HFObj->GetDepth();

}

/** Class: HFObject* Method: SetDepth* Signature: ([BI)V*/

JNIEXPORT void JNICALL Java_f3sdk_highlevel_HFObject_SetDepth(JNIEnv *env, jobject obj, jbyteArray reference, jint depth) {

HFObject *HFObj =(HFObject *)byteArray_to_ptr(env, reference);HFObj->SetDepth(depth);

}

Quellcode 6.4:Die zu HFObject.java gehorigenative-Klasse f3sdkhighlevelHFObject.cc

In der MethodeGetDepth wird das C++ Objekt aus dem von der Java-Methodeuber-gebenen Bytecode wiederhergestellt. Dieser Vorgang wurde in Kapitel6.1.1naher vor-gestellt.Anschließend wird dieses Objekt wie ein normales SWF-SDK Objekt verwendet. Sowird fur jede Java-Klasse die korrespondierende C++ Klasse implementiert, die die Me-thodenaufrufe an das SDK weiterreicht.Die so entstandenen C++ Klassen werden, wie in Kapitel4.1beschrieben, in einerSha-red Libraryzusammengefaßt, wobei das SWF-SDK mit in diese Bibliothek eingebundenwird. Auf diese Bibliothek konnen dann die Javaklassen verweisen und die implemen-tierten Methoden nutzen.

Page 66: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

6 Realisierung 58

6.1.3 Beseitigung von Fehlern in der KlasseHFPolygon

In der KlasseHFPolygon des SWF-SDK sind einige Methoden fehlerhaft. Da eine Ma-nipulation des SDKs aus lizenzrechtlichen Grunden nicht in Frage kommt, mussen dieseFehler bereits im Vorfeld, also auf der Javaseite vermieden werden. Außerdem sind ei-nige Parameter nicht in eingangigen Datentypen abgelegt oder es durfen keine absolutenKoordinatenubergeben werden, sondern immer nurAnderungen zu dem vorherigen Sta-tus. Um dies fur den Nutzer der SWF Java API zu vereinfachen, wurden die Parameterentsprechend angepaßt.Im C++ SDK ist vorgesehen, ein Polygon mit einem Punkt als Startpunkt anzulegen.Weitere Liniensegmente (Geraden oder quadratische Bezierkurven) werden dannuberdie MethodenAddStraightLine und AddCurvedLine angehangt. Diese beidenMethoden erwarten als Parameter nicht die absoluten Koordinaten der Punkte, sondernimmer nur die relativenAnderungen zum zuletzt eingefugten Punkt. Dies wurde auchin der Java SWF API so gehandhabt. Zusatzlich zu diesen beiden Methoden wurde esaber auch ermoglicht reelle Koordinaten anzugeben, indem zwei Methoden implemen-tiert wurden, die reelle Koordinaten in relative umwandeln und dann erst an die C++ Seiteweiterreichen. Diese Methoden sind im Quellcode6.5auf Seite59 zu sehen. Außerdemist zu erkennen, daß die Koordinaten des neuen Punktes nicht in jedem Fall an das C++SDK weitergereicht werden. Wenn ein Punkt doppelt eingefugt wird, also die relativeAnderung zum vorangegangenen Punkt gleich null ist, fuhrt dies unweigerlich zu einemAbsturz des Flash Players. Um dies zu vermeiden, wird bereits im Vorfelduberpruft, obder Punkt eingefugt werden darf oder nicht.

Page 67: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

6 Realisierung 59

/*** Add a curved line to the polygon.* All parameters are in twips.** @param controlDX The x coord of the control point.* @param controlDY The y coord of the control point.* @param anchorDX The x coord of the anchor point.* @param anchorDY The y coord of the anchor point.*/

public void addCurvedLineCoords(int controlX, int controlY,int anchorX, int anchorY)

{// calculate the delta control and delta anchor values// delta control values = controlcoords - oldanchorcoords// delta anchor values = anchorcoords - controlcoordsint controlDX, controlDY, anchorDX, anchorDY;controlDX = controlX - oldX;controlDY = controlY - oldY;anchorDX = anchorX - controlX;anchorDY = anchorY - controlY;

//If controlDX and controlDY and/ anchorDX and anchorDY is equal null//the point is not allowed to be added, because//it will lead into a crash of the flash player

if (controlDX!=0 || controlDY!=0 ||anchorDX!=0 || anchorDY =!0) {AddCurvedLine(reference, controlDX, controlDY,

anchorDX , anchorDY);oldX = anchorX; oldY = anchorY;

}}/**

* Add a straight line to the Polygon.* All parameters are in TWIPS** @param x The x coordinate of the new vertex.* @param y The y coordinate of the new vertex.*/

public void addStraightLineCoords( int x, int y ) {//If dx and dy is equal null//the point is not allowed to be added, because//it will lead into a crash of the flash player

if ((x-oldX)!=0 || (y-oldY)!=0) {AddStraightLine(reference, x-oldX, y-oldY);oldX=x; oldY=y;

}}

Quellcode 6.5:Methoden zur Umwandlung absoluter in relative Koordinaten

Page 68: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

6 Realisierung 60

6.2 Das Datenformat

Das Ziel dieser Arbeit ist vor allem die Visualisierung zeit- und raumbasierter Daten,aber auch allgemeiner die Generierung von Flashfilmen aus einem einheitlichen Daten-format heraus. Fur die zeit- und raumbezogenen Daten werden Wetterdaten genutzt, dievom Deutschen Wetterdienst (DWD) geliefert wurden.DasLokal-Modelldes DWD berechnet die Wettervorhersage der nachsten zwei Tage furdas Gebiet Mittel- und Westeuropa. Es enthalt eine Prognose im Stundenabstand fur einhochauflosendes Raster von nur sieben Kilometern Schrittweite. Diese Daten liegen imGrib (Gridded Binary) Format vor. Das Gribformat ist ein universelles, bitorientiertesDateiformat fur Rasterdaten, welches von Wetterdiensten zur Speicherung und zum Aus-tausch ihrer Daten genutzt wird. Es wurde von derWorld Meteorological Organization(WMO) als offener Standard definiert [WMO1998].Eine GRIB-Datei kann aus einem oder mehreren Datensatzen (Records) bestehen, diejeweils die Werte eines einzelnen Parameters fur die Punkte eines rechteckigen Rastersenthalten, z.B. die prognostizierten Werte fur Temperatur, Niederschlag, Bewolkung oderLuftdruck an einem bestimmten Ort zu einer bestimmten Zeit. Da diese Daten mit Ma-cromedia Flash dargestellt werden sollen, mussen diese Rasterdaten in Vektordaten um-gerechnet werden. Dies ist in [Stark2001] geschehen. Außerdem wurden sie in ein XMLbasiertes Format geschrieben. Diese Daten konnten nun mit einem speziellen Programm,einem Konverter oder auch Generator, direkt in einen Flashfilm umgewandelt werden.Dies hatte aber den Nachteil, daß der Generator nur diese speziellen vektorisierten Wet-terdaten umwandeln konnte.Um auch andere Daten zu visualisieren, ist es notwendig ein einfach zu verarbeitendesSchnittstellenformat zu schaffen, in welches die Vektordaten konvertiert werden konnen(siehe Abb.6.2).

Proprietäres

Grafikformat prozeß

Konvertierungs− Schnittstellen−format

SKF 2 SWF

GeneratorFlashfilm

Abbildung 6.2:Datenfluß bei der Generierung eines Flashfilmes

Ebenso wichtig ist die Formatsicherheit, d.h. das Dateiformat sollte von vornherein dieMoglichkeit bieten, Fehler in der Dateistruktur leicht zu erkennen.Hier bietet sich eine XML-Anwendung besonders an. Wie in Kapitel3 beschrieben, sindXML-Dateien einfach zu verarbeiten, da bereits Lese- und Schreibmodule existieren unddie Dateien sowohl im Textformat vorliegen, als auch festen Regeln unterliegen, die ga-rantieren, daß von dem einmal definierten Format nicht abgewichen werden kann.

In den folgenden Abschnitten werden das Schnittstellenformat und die Konvertierung derVektordaten in dieses Format erlautert.

Page 69: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

6 Realisierung 61

6.2.1 Entwicklung der SKF-DTD

SKF steht fur”Stark Kunze Flash “ als Anlehnung an das SWF-Format, der Kombinati-

on der Daten von Benjamin Stark und dem in dieser Arbeit entwickelten Generator. DasSKF-Format ist eine XML-Anwendung und, wie bereits in Kapitel3.3erwahnt, wird ei-ne XML-Anwendunguber eine DTD definiert. Die Erstellung einer DTD setzt voraus,daß die zu strukturierenden Daten analysiert und wesentliche Elemente und Attribute inihrer hierarchischen Ordnung erfasst werden. Daher stellt sich als erstes die Frage, wel-che Daten beschrieben werden sollen.In Flash gibt es verschiedene Objekte, so z.B. ein Polygon oder einen Kreis. Diese Ob-jekte konnen mit verschiedenen Zusatzinformationen versehen werden, wie die Fullfar-be oder die Liniendicke. Diese einzelnen Objekte und deren Attribute konnte man alsGrundlage fur eine mogliche DTD des Schnittstellenformates heranziehen.Eine andere Art der Struktuierung der Daten ware, die Struktur des Flashformates in ei-ner DTD umzusetzen. Das SWF Dateiformat ist selbst tagbasiert und eben diese Tagskonnten dann in XML abgebildet werden. Diese beiden moglichen DTDs werden abernoch durch eine dritte Moglichkeit erganzt.Das Macromedia Flash SDK ist in einzelne Klassen hierarchisch gegliedert, was eben-so in einer DTD abgebildet werden kann. Der Vorteil gegenuber den anderen beidenMoglichkeiten ist die durch die Vererbung der C++ Klassen im SDK bereits vorhandenehierarchische Gliederung. Eine derartige Gliederung hat zudem den Vorteil, daß der zuentwickelnde Generator das SDK ebenfalls als Grundlage nutzt. Wenn also die Objektein der XML-Anwendung die Klassen- und somit die Objektstruktur des SDKs wiederge-ben, ist der Generator wesentlich leichter zu implementieren. Also ist es zuerst notig, daßSDK in einzelne Elemente und Attribute einer DTD zu zerlegen.Bei der Betrachtung der SWF-SDK Klassenhierarchie (siehe [Macr2001]) f allt auf, daßes zunachst als wesentliches Element den Film gibt, der im SDK durch dieHFMovie -Klasse reprasentiert wird. Die zu einem Film gehorigen Attribute sind die Abspielrateund die Große des Filmes. Da der Name des Wurzelelementes der XML-Anwendungden Inhalt reprasentieren sollte, wird es alsskf benannt und erhalt die Attribute desFlashfilmes.In der nachsten Hierarchiestufe ist dann ein Frame zu finden. Ein Frame ist ein kurz-er Ausschnitt eines gesamten Flashfilmes, sozusagen ein einziges Bild eines gesamtenFilmes, auch Schlusselbild genannt. Zwischen den einzelnen Frames finden keine weite-ren Veranderungen statt. Die Objekte bleiben in ihrer Anordnung erhalten, bis in einemfolgenden Frame eine Transformation vorgenommen wird. Dabei konnen die einzelnenFrames aber durchaus zeitlich weit versetzt sein. So ist es moglich, daß ein Frame zuBeginn definiert wird und einige Objekte in diesem Frame platziert werden. Der nachsteexplizit angegebene Frame in dem gegebenenfallsAnderungen an den Objekten vorge-nommen wurden, liegt zeitlich gesehen wesentlich spater. Beim Abspielen des Filmeswird nun das erste Frame sichtbar und bleibt es solange, bis das nachste definierte Frameerreicht wird.Ein Frame wird im SDK durch die KlasseHFFrame reprasentiert. Das einzig notwen-dige Attribut eines Frames ist die Framenummer. Mit diesen beiden Elementen sieht dieDTD wie folgt aus:

Page 70: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

6 Realisierung 62

<!ELEMENT skf ( (frame)* )><!ATTLIST skf rate #CDATA "12"

width #CDATA "800"height #CDATA "600" >

<!ELEMENT frame EMPTY><!ATTLIST frame number #CDATA "15">

Das frame -Tag enthalt bisher noch keine weiteren Elemente. Welche weiteren Tagsgehoren in dasframe -Element?Dies konnenActionssein, die z.B. einen Film starten, anhalten oder aber zu einer be-stimmten Stelle im Film springen. Die Klassen stammen alle vonHFAction ab undlauten:HFActionGoToURL , HFActionStop , HFActionPlay und HFAction-GoToFrame. Die KlasseHFAction wird nicht in die DTD aufgenommen, da sie keineAttribute enthalt und bei der Nutzung des SWF-SDKs nie explizit aufgerufen wird. Da-her werden nur die konkretenActions– also die Subklassen vonHFAction – in dieDTD mit ihren entsprechenden Attributenubernommen.

<!ELEMENT goToFrame EMPTY><!ATTLIST goToFrame frame CDATA #REQUIRED>

<!ELEMENT play EMPTY>

<!ELEMENT stop EMPTY>

<!ELEMENT getURL EMPTY><!ATTLIST getURL url CDATA #REQUIRED

target CDATA #IMPLIED>

Im obigen Beispiel werden die SchlusselworterREQUIREDund IMPLIED genutzt, umfestzulegen, daß zum einen beimgoToFrame -Tag eine Framenummer angegeben wer-den muß und zum anderen daß die Adresse, zu der beimgetURL -Tag gesprungen wer-den soll, zwingend erforderlich ist. Die Festlegung in welchem Browserfenster diese Sei-te geoffnet werden soll ist jedoch nicht erforderlich.Des weiteren sind grafische Objekte vorhanden, die alle von der KlasseHFShape ab-stammen. Die KlasseHFShape bietet Methoden, die fur alle grafischen Objekte gultigsind, so z.B. das Setzen der Liniendicke und -farbe der Umrandung der einzelnen Objek-te oder die Fullfarben. Anstatt nun fur jedes einzelne grafische Objekt ein Attribut oderElement einzubinden, welches die Liniendicke festlegt, ist es sinnvoller ein Tagshapezu definieren, welches diese Eigenschaften als Attributwert enthalt. Erst dann kommt eszu den speziellen grafischen Objekten mit ihren Eigenarten. Die elementaren grafischenObjekte im SDK werden jeweils als Tag mit den zugehorigen Attributen abgebildet, soerhalt z.B. das Tagcircle , welches im SDK die KlasseHFCircle reprasentiert, denRadius und die Koordinaten des Mittelpunktes als Attribute.

Page 71: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

6 Realisierung 63

<!ELEMENT swf ( (frame)* )><!ATTLIST swf rate #CDATA "12"

width #CDATA "800"height #CDATA "600" >

<!ELEMENT frame ( (shape)* )><!ATTLIST frame number #CDATA #REQUIRED>

<!ELEMENT shape (circle) ><!ATTLIST shape lineWidth #CDATA #IMPLIED>

<!ELEMENT circle EMPTY><!ATTLIST circle centerX #CDATA #REQUIRED

centerY #CDATA #REQUIREDradius #CDATA #REQUIRED>

Das Rechteck und das Oval werden mit ihren speziellen Attributen ebenso wie der Kreisin die DTD aufgenommen. Als grafisches Objekt fehlt noch das Polygon, welches imSDK durch die KlasseHFPolygon reprasentiert wird. Auch dieses Objekt wird mitseinen speziellen Attributen unterhalb desshape -Tags eingeordnet. Daspolygon -Tagenthalt aber im Gegensatz zu den anderen grafischen Objekten weitere Elemente. Diesliegt daran, daß ein Polygon aus einer variablen Anzahl von Liniensegmenten besteht.Diese Tatsache kann nicht mit einem einzigen Element modelliert werden. Es gibt zweiverschiedene Liniensegmente: Zum einen ein gerades Segment und zum anderen einequadratische Bezierkurve, die jeweils als eigenstandiges Element in der DTD festge-schrieben werden.

<!ELEMENT polygon ( (addStraightLine|addCurvedLine)*)><!ATTLIST polygon originX #CDATA #REQUIRED

originY #CDATA #REQUIRED>

<!ELEMENT addStraightLine EMPTY><!ATTLIST addStraightLine x #CDATA #REQUIRED

y #CDATA #REQUIRED>

<!ELEMENT addCurvedLine EMPTY><!ATTLIST addCurvedLine controlX #CDATA #REQUIRED

controlY #CDATA #REQUIREDanchorX #CDATA #REQUIREDanchorY #CDATA #REQUIRED>

Das TagaddStraightLine fugt ein gerades Liniensegment mit dem Endpunktx , yzu dem Polygon hinzu,addCurvedLine fugt eine quadratische Bezierkurve mit einemKontroll- und einem Ankerpunkt an.Diese Objekte sollen auch mit Fullfarben versehen werden, wofur die Tags mit verschie-denen Fullstilen in die DTD aufgenommen werden, die in einem Entity zusammengefaßtsind.

Page 72: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

6 Realisierung 64

<!ENTITY % FillStyles "( setFillColor |setFillColorRGBA|setLinearFillColors |setLinearFillColorsRGBA |setRadialFillColors |setRadialFillColorsRGBA)">

Ein Entity ist ein Platzhalter, der nach seiner Definition genutzt werden kann, um dieDTD etwasubersichtlicher zu gestalten. Wenn einpolygon -Tag diese Fullarten bein-halten soll, mussen sie nun nicht mehr alle explizit angegeben werden, es reicht aus, dasEntity anzufuhren.

<!ELEMENT rectangle %FillStyles;><!ATTLIST rectangle xmin %Integer; #REQUIRED

ymin %Integer; #REQUIREDxmax %Integer; #REQUIREDymax %Integer; #REQUIRED>

Im obigen Beispiel fallt auf, daß noch ein Entity genutzt wird, das EntityInteger .In der XML-Syntax ist es aber nicht moglich einen anderen Datentyp alsCDATAoderPCDATAfur ein Attribut vorzuschreiben und dementsprechend kann von einem XML-Parser diesbezuglich auch keineUberprufung stattfinden.Damit dem Benutzer der DTD aber klar ist, welcher Datentyp bei einem Attribut erwartetwird, ist der PlatzhalterInteger definiert worden, der selber nur auf den DatentypCDATAverweist.

<!ENTITY % Integer "CDATA">

In Macromedia Flash gibt es drei verschiedene Arten, ein Objekt mit einer Farbe zufullen. Ein Objekt kann durchgehend mit einem definierten Farbton gefullt werden, miteinem linearen Farbverlauf von links nach rechtsuber zwei definierte Farben oder miteinem radialen Verlauf, wobei eine Farbe den inneren Farbton angibt und die anderedenaußeren.Uber die Angabe von Punktkoordinaten kann beim linearen Farbverlauf dieStelle verschoben werden, an der sich die beiden Farben zu 50% vermischt haben undbeim radialen Farbverlauf kann das Zentrum, wo die innere Farbe zu 100% vorhandenist, verschoben werden. Die Farbwerte werdenuber dieRGBAWerte (Rot, Grun, Blau,Alphakanal) angegeben.Um eine komfortablere Nutzung zu ermoglichen, ist ein Farb-Set mit vordefiniertenFarbwerten vorhanden, dieuber einen Namen angegeben werden konnen. Diese Namenwerden in dem EntityColorName zusammengefaßt. Welche Farben auf diese Weisedefiniert sind, ist dem AnhangA zu entnehmen.Da es zwei verschiedene Wege gibt, eine Farbe zu definieren, gibt es auch pro Fullartzwei verschiedene Elemente. Ein Element mit den entsprechenden RGBA Werten undeines mit dem Farbnamen. Im folgenden werden die TagssetFillColorRGBA undsetFillColor , fur das Fullen mit einer Farbe, undsetLinearFillColorRGBAundsetLinearFillColor fur die Fullung mit linearem Farbverlauf dargestellt. Eineradiale Fullung ist mit dem TagsetRadialFillColor odersetRadialFillCo-lorRGBA moglich, welches analog zu den Tags fur die lineare Fullung aufgebaut ist.

Page 73: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

6 Realisierung 65

<!ELEMENT setFillColorRGBA EMPTY><!ATTLIST setFillColorRGBA r %Integer; #REQUIRED

g %Integer; #REQUIREDb %Integer; #REQUIREDa %Integer; #REQUIRED>

<!ELEMENT setFillColor EMPTY><!ATTLIST setFillColor name %ColorName; #REQUIRED>

<!ELEMENT setLinearFillColorsRGBA EMPTY><!ATTLIST setLinearFillColorsRGBA

leftR %Integer; #REQUIREDleftG %Integer; #REQUIREDleftB %Integer; #REQUIREDleftA %Integer; #REQUIREDrightR %Integer; #REQUIREDrightG %Integer; #REQUIREDrightB %Integer; #REQUIREDrightA %Integer; #REQUIREDxCenter %Integer; #IMPLIEDyCenter %Integer; #IMPLIED >

<!ELEMENT setLinearFillColors EMPTY><!ATTLIST setLinearFillColors

leftColor %ColorName; #REQUIREDrightColor %ColorName; #REQUIREDxCenter %Integer; #IMPLIEDyCenter %Integer; #IMPLIED>

Eine weitere wesentliche Gattung von Klassen im SDK sind die Transformationen. Ei-ne Transformation kann ein Objekt zu einem bestimmten Zeitpunkt verschieben, drehenoder skalieren, wodurch ihre Attribute bereits festgelegt sind. So ist es bei einer Verschie-bung notwendig anzugeben, wie weit in X- und Y-Richtung verschoben werden soll. Dadiese Transformationen zu einem bestimmten Zeitpunkt stattfinden sollen, werden siehierarchisch gesehen in der DTD direkt unter demframe Tag eingeordnet, wodurchder Zeitpunkt festgelegt wird. An dieser Stelle fallt aber ein Punkt auf, der bisher ver-nachlassigt wurde. Wie soll sich eine Transformation auf ein bestimmtes Objekt beziehenkonnen? Dies wird durch die Moglichkeit umgesetzt, in XML Referenzen zu vergeben.Daher werden die grafischen Objekte um ein Attribut vom TypID erweitert.

<!ELEMENT rectangle %FillStyles;><!ATTLIST rectangle ID ID #REQUIRED

xmin %Integer; #REQUIREDymin %Integer; #REQUIREDxmax %Integer; #REQUIREDymax %Integer; #REQUIRED>

Page 74: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

6 Realisierung 66

Der TypID in XML garantiert, daß sie eindeutig ist, denn wenn dies nicht der Fall ware,kame es bei der Validierung einer solchen Datei mit einem XML-Parser zu einer Fehler-meldung. Dadurch wird sichergestellt, daß sich der Entwickler nicht um dieUberprufungder IDs kummern muß. Im Gegenzug erhalten alle Transformationstags einen Attribut-wert vom TypIDREFS.

<!ELEMENT translate EMPTY><!ATTLIST translate USE IDREFS #REQUIRED

x #CDATA #REQUIREDy #CDATA #REQUIRED>

Der DatentypIDREFS bezieht sich immer auf eine vorher definierte ID. Wenn hier alsoein Wert angegeben wurde, der bis dahin in der XML-Datei nicht definiert wurde, trittbeim Validieren der Datei eine Fehlermeldung auf. Desweiteren bietet der TypIDREFS,im Gegensatz zu dem DatentypIDREF, die Moglichkeit, mehrere IDs anzugeben. Wennsich also eine Transformation auf mehrere Objekte beziehen soll, werden – wie im fol-genden Beispiel – alle notwendigen IDs, durch ein Leerzeichen voneinander getrennt, alsWert des Attributes angegeben:

<translate USE="ID1 ID2 ID3" x="100" y="50"/>

Als letztes sollen Textobjekte vorgestellt werden. Um mit dem SWF-SDK einen Text zuerzeugen, muß zunachst ein Fontuber die KlasseHFFont definiert werden. Die hierfurnotwendigen Parameter sind der Name des Fonts und die Zeichen, die im Flashfilm ver-wendet werden sollen. Die Zeichen werden explizit angegeben, damit nur die Zeichenenthalten sind, die auch wirklich genutzt werden und nicht alle im Font enthaltenen,wodurch die Dateigroße minimiert wird. Im SKF-Format wird dies durch das Tagde-fineFont abgebildet.

<!ELEMENT defineFont (#PCDATA)><!ATTLIST defineFont fontname CDATA #REQUIRED

bold (true|false) "false"italic (true|false) "false"ID ID #REQUIRED>

Dieses Tag erhalt neben dem Namen des Fonts die Angabe, ob der Font fett oder kursiverscheinen soll. Innerhalb des Tags werden die Zeichen angegeben, die in den Flashfilmubernommen werden sollen. Ein Textobjekt wird im SWF-SDK mit der KlasseHFTexterzeugt. In der SKF-DTD wird diese Klasse durch das Tagtext reprasentiert.

<!ELEMENT text EMPTY><!ATTLIST text ID ID #REQUIRED

usefont IDREF #REQUIREDdata CDATA #REQUIREDheight %Integer; #IMPLIEDxCoord %Integer; #REQUIREDyCoord %Integer; #REQUIRED>

Da auch ein Textobjekt verschoben werden kann, wird ein AttributID definiert. DasAttribut usefont gibt an, auf welchesdefineFont -Tag sich das Element bezieht. In

Page 75: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

6 Realisierung 67

data ist der darzustellende Text enthalten,height gibt die Große des Textes an undals letztes werden die Koordinaten angegeben, wo der Text platziert werden soll.In der SKF-DTD werden noch einige Tags mehr definiert. Diese sollen aber nicht nahererlautert werden, da sie alleahnlich wie die bisher angefuhrten Tags aufgebaut sind. Diekomplette SKF-DTD ist im AnhangA zu finden.

6.2.2 Konvertierung in das Schnittstellenformat

Das in dieser Arbeit entstandene Schnittstellenformat SKF ist fur die Entwicklung desGenerators bestens geeignet. Wie sieht es aber nun aus mit den zu visualisierenden Da-ten? Generell sollen beliebige Daten visualisiert werden. In der vorliegenden Arbeit sol-len exemplarisch zeit- und raumbezogene Daten am Beispiel von Wetterprognosen ver-wendet werden. Wie bereits erwahnt, stammen diese Wetterdaten vom Deutschen Wet-terdienst und wurden von Benjamin Stark aus dem zur Verfugung gestellten Grib Ra-sterformat in vektorisierter Form in einer XML Datei abgelegt. Nun stellt sich die Fra-ge, wie diese Daten in das Schnittstellenformat konvertiert werden konnen. Ein ersterSchritt ist die Konvertierung der Daten mittels dereXtensible Stylesheet Language Trans-formations(XSLT). In einer XSL-Transformation liest ein XSL-Prozessor sowohl einXML-Dokument, als auch ein XSL-Stylesheet ein. Basierend auf den Anweisungen imXSL-Stylesheet gibt er ein neues XML-Dokument aus [Har2000]. Die Konvertierung derDaten in eine dem Schnittstellenformatahnliche Struktur – das SWFML-Format – wur-de bereits in [Stark2001] durchgefuhrt. Allerdings ist das Format nicht vom Generatorzu verarbeiten, was eine weitere Transformation notig macht. Bei dieser Transformati-on mussen die Namen der Tags und auch das Koordinatensystem angepaßt werden. ImSWFML-Format sind alle Koordinaten in Pixeln angegeben. Das SKF-Format arbeitethingegen mit der Einheit TWIP, was einem zwanzigstel Pixel entspricht und eine we-sentlich bessere Auflosung und Zoomfahigkeit bewirkt. Alle Koordinaten im SWFML-Format mussen also mit 20 multipliziert werden. Diese Transformation ist aber nicht mitXSLT durchfuhrbar, da mit XSLT lediglich die Umbenennung und die Umstrukturierungvon Tags moglich ist und keine Berechnungen durchgefuhrt werden konnen. Daher mußeine andere Moglichkeit gefunden werden, das SWFML-Format in SKF zu portieren,was durch einen eigenen Filter, der die Daten einliest und in das SKF-Format umwandelterreicht wird.Da das SWFML-Format maschinell erzeugt wurde und der Konvertierungsprozeß schnellvonstatten gehen soll, basiert dieser Filter auf einem SAX-Parser. Die Daten werden vomParser eingelesen und die dabei entstehenden Ereignisse verarbeitet. Die Tagnamen wer-den angepaßt, und die Koordinatenwerte entsprechend umgerechnet.Als erstes wird also ein SAX-Parser instanziiert, wie auf Seite35 beschrieben, und die-sem Parser ein Handlerubergeben, der anhand der Ereignisse des SAX-Parsers aus einerSWFML- eine SKF-Datei erzeugt. Dieser Handler verarbeitet dann die Ereignisse undschreibt die konvertierten Daten in eine Datei. Um ein kurzes Beispiel fur die Verar-beitung eines Tags zu geben, wird diestartElement -Methode angefuhrt. Innerhalbdieser Methode werden alle Tags in einem Block in der Methode individuell verarbei-tet. Hier soll nur der Block fur das Tagpoint vorgestellt werden. Die umfangreicheFehlerbehandlung wurde aus Grunden derUbersichtlichkeit weggelassen.

Page 76: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

6 Realisierung 68

public void startElement(String uri,String localName,String qName,Attributes attrs) {

if (qName.equals("point")) {int x=0;int y=0;

x = (new Integer(attrs.getValue("x"))).intValue();y = (new Integer(attrs.getValue("y"))).intValue();

x=x*20;y=y*20;

out.write("<addStraightLine x=\""+x+"\" y=\""+y+"\"/>");out.newLine();

}

Da im SWFML-Format ein Punkt nur innerhalb einespolygon -Tags genutzt wird undein gerades Liniensegment definiert, muß dieses Tag in einaddStraightLine -Tagumgewandelt werden. Hierzu werden zunachst die Attributwerte ermittelt und in TWIPSumgerechnet. Anschließend wird das Taguber einenjava.io.BufferedWriter(hier die Variableout ) in eine Datei geschrieben.Alle anderen SWFML-Tags werden im Prinzip ebenso verarbeitet, allerdings sind einigeTags nicht so einfach zu konvertieren wie daspoint -Tag.Mit diesem Konverter ist es nun moglich, die Dateien aus [Stark2001] in das fur denGenerator verstandliche SKF-Format zu konvertieren.

Page 77: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

6 Realisierung 69

6.3 Der Flash Generator

Der Generator ist das Herzstuck der vorliegenden Arbeit. Er ist dafur zustandig, aus SKFDaten einen Flashfilm zu generieren. Die XML basierten SKF Daten machen es erforder-lich, daß der Generator dieses tagbasierte Format lesen kann, weshalb als Einlesemodulein XML Parser verwendet wird. Dieser erzeugt ein Document Objekt Model aus derSKF Datei und reicht es dann zur Weiterverarbeitung an den Generator weiter. Obwohldie Eingabedaten sehr umfangreich sind, wird ein DOM verwendet, da in einer SKF DateiReferenzen auf bereits vorher definierte Objekte vorkommen konnen und diese in einemDOM sofort anhand ihrer ID auffindbar sind. Wurde ein SAX Parser eingesetzt, mußtedie Datei erneut eingelesen werden, um die referierten Elemente zu erhalten, was einenMehraufwand darstellen wurde. Das zu einem DOM geparste Dokument wird dann vomGenerator Stuck fur Stuck interpretiert und in einen Flashfilm umgewandelt.Wie im Kapitel 3.4.2 gezeigt wurde, gibt es eine Vielzahl von verschiedenen XML-Parsern und es stellt sich die Frage, welcher XML-Parser eingesetzt werden soll. An denXML-Parser werden einige Grundvoraussetzungen gestellt. Der XML-Parser muß einenDOM-Parser mitliefern, da dies fur den Generator unerlaßlich ist. Dieser DOM-Parsermuß die DOM Level 2 Spezifikationen beherrschen, da es erst ab DOM Level 2 moglichist, zu einer bestimmten Stelle im DOM-Tree zu springen, was beim Generator haufigder Fall sein kann.Diese Bedingungen erfullen von den im Kapitel3.4.2vorgestellten Parsern nur derXercesXML-Parser von Apache, derIBM’s XML for Java v2.0von IBM und derJAXPXML-Parser von Sun Microsystems. Da die Parser von Apache und IBM identisch sind undlediglich unter anderem Namen vertrieben werden, muß nur zwischen zwei Parsern unter-schieden werden. Nach einem Performance Test unter [Scho2000] ist der Xerces DOM-Parser der schnellere Parser von beiden. Daher wird er auch im folgenden fur den Gene-rator eingesetzt.Damit der Generierungsprozeß ohne Probleme vonstatten geht, muß bei der Implemen-tation auf verschiedene Punkte geachtet werden:

• Der Generator soll moglichst flexibel sein. Wenn in der SKF StrukturAnderungenvorgenommen werden, soll der Generator schnell anzupassen sein.

• Es sollen platzsparende Filme erzeugt werden.

• Der Generierungsprozeß muß zugig vonstatten gehen.

• Der Generator sollte stabil sein und nicht zu Programmabsturzen neigen.

Wie die genannten Punkte umgesetzt werden, wird in den nachsten Abschnitten erlautert.

6.3.1 Dynamik und Flexibilitat des Generators

Der Generator ist von seiner Struktur her in viele Einzelelemente aufgeteilt, weshalbweitere Elemente leicht eingefugt oder bestehende schnell geandert werden konnen. Je-des einzelne Element in der SKF-DTD besitzt eine entsprechende Klasse als Gegenstuck

Page 78: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

6 Realisierung 70

im Generator. Wenn sich also die Attribute eines Elementesandern sollten, muß ledig-lich eine Klasse umgeschrieben werden und schon ist der Generator angepaßt.Ahnlichverhalt es sich, wenn ein Element in der SKF-DTD hinzukommen sollte. Dann kanneine Klasse implementiert werden, die dieses Element interpretieren kann, welche zuden Generatorklassen hinzugefugt wird. Allerdings stellt sich hierbei die Frage, wiedann diese neu hinzukommende Klasse vom Generator erkannt wird, damit sie auchentsprechend aufgerufen werden kann. Um dieses Problem zu losen, werden die Klas-sen untereinander nicht explizit mit dem Klassennamen statisch aufgerufen, sondern dy-namischuber dasjava.lang.reflect -Paket, je nachdem welches Tag im DOMgefunden wird. Die dazugehorige Klasse wird in diesem Augenblick geladen und ihrwerden die notwendigen Informationenubergeben. Mit dieser Technik wurde gleich einzweites Problem gelost, denn manche Elemente konnen verschiedene Unterelemente inunterschiedlicher Haufigkeit besitzen und es waren aufwendige Stringvergleiche inif -Anweisungen notig, um diese Elemente entsprechenden Klassen zuzuordnen. Mit demjava.lang.reflect Paket ist dies nicht notig. Wie aber werden nun dynamischKlassen geladen und zugehorige Objekte instanziiert?In Quellcode6.6 ist ein Beispiel angegeben, wie im Generator eine Klasse dynamischgeladen und ein Objekt instanziiert wird.

//Call the parse method with reflect

Class clazz = null; Constructor c = null;ParsingObjekt p = null;

//toParse is part of a DOM//getNodeName() returns the name of the tag

//get the classtry { clazz = Class.forName("P"+toParse.getNodeName()); }catch (ClassNotFoundException e) {

System.err.println("No class P"+toParse.getNodeName());}//get the constructortry { c = clazz.getConstructor(new Class[] {}); }catch (NoSuchMethodException e) {

System.err.println("No Constructor P"+toParse.getNodeName());

}//get an instance from the classtry { p = (ParsingObject)c.newInstance(new Object[]{}); }catch(Exception e) {

System.err.println("!!! can’t instanciate object !!!");}p.parse(toParse,frame,om);

Quellcode 6.6:Dynamische Instanziierung eines Objektes

Page 79: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

6 Realisierung 71

In diesem Beispiel enthalt die VariabletoParse einen Teil eines DOMs, also einenTeilbaum, und zwar genau den Teil, der gerade vom Generator abgearbeitet werden soll.Mit der MethodegetNodeName() kann der Name der Wurzel des Teilbaumes ermitteltwerden, was einem Tag der SKF-DTD entspricht. Dieses Tag soll nun an die verarbeiten-de Klasse weitergeleitet werden.Als erstes wird mit der MethodeforName(String Klassenname) aus der KlasseClass versucht, die Klasse zu laden, die dem Tagnamen entspricht. Es wird einP vor-angestellt, da alle Klassen, die ein Tag parsen konnen, mit einem

”P “ beginnen, gefolgt

von dem Tagnamen wie er in der SKF DTD definiert ist. Wenn diese Klasse auf demKlassenpfad nicht gefunden wird, kommt es zu einerClassNotFoundException .Im nachsten Schritt wird derConstructorder geladenen Klasse ermittelt und in der Varia-blenc abgelegt. Falls kein passenderConstructorexistiert, wird eineNoSuchMethod-Exception geworfen. Wenn ein passenderConstructorgefunden und dasConstructor-Objekt initialisiert wurde, kann mit der MethodenewInstance() ein Objekt der Klas-se erzeugt werden. Dieses Objekt verhalt sich nun genau wie ein auf herkommlichemWege erzeugtes Objekt.Diese Vorgehensweise wird immer dann angewendet, wenn im DOM weitere Elementegeparst werden mussen. Durch diese Technik ist eine hohe Flexibilitat und Anpaßbarkeitdes Generators gewahrleistet.Es wurde also gezeigt, wie die Tags in einer SKF-Datei dynamisch verarbeitet werden,indem die zugehorigen KlassenuberRef lectaufgerufen werden. Was aber hat es mit denzu einem Tag gehorigen Klassen auf sich und wie erhalt man die zu einem Tag gehorigenInformationen? Das soll im nachsten Abschnitt naher erlautert werden.

6.3.2 Implementation

Damit eine SKF-Datei verarbeitet werden kann, muß sie zunachst eingelesen werden.Dies ist mit einem XML-Parser ohne Probleme moglich. Es gibt, wie im Kapitel3.4.1be-schrieben, zwei verschiedene Arten, ein XML-Dokument einzulesen. Einmaluber einenDOM-Parser, der das Gesamte XML-Dokument im Speicher als Baum, dem sogenanntenDOM-Tree aufbaut. Die andere Moglichkeit ist, einen SAX-Parser zu benutzen, der beimParsen des Dokumentes einzelne Ereignisse erzeugt, die dann weiterverarbeitet werdenkonnen.Fur den Generator soll ein DOM-Parser als Lesemodul eingesetzt werden, obwohl die-ser wesentlich langsamer ist und mehr Arbeitsspeicher benotigt als der SAX-Parser. Diesliegt daran, daß es beim Generieren eines Flashfilmes notwendig sein kann, auf fruherdefinierte Elemente zuruckzugreifen, was mit einem SAX-Parser so nicht moglich ware,wie es beim TagplaceClonedObjekt erforderlich ist.DasplaceClonedObjekt -Tag enthalt eine Referenz auf ein grafisches Objekt in derSKF-Datei, welches genauso, wie es bereits definiert wurde, erneut im Film platziertwerden soll. Mit einem DOM-Tree kann direkt zu dem betreffenden Element gesprun-gen und die dortigen Informationen verarbeitet werden. Dies ware mit dem SAX-Parsernicht moglich. Das SKF-Dokument wird also mit einem DOM-Parser verarbeitet und derdaraus resultierende DOM-Tree wird innerhalb des Generators in einen Flashfilm umge-wandelt.

Page 80: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

6 Realisierung 72

Jedes einzelne in der SKF-DTD definierte Tag besitzt unterschiedliche Attribute, die in-dividuell verarbeitet werden mussen. Daher existiert fur jedes einzelne Tag eine entspre-chende Klasse im Generator, welche speziell dieses Tag verarbeiten kann. Die Klassenbesitzen denselben Namen wie das Tag, es wird lediglich ein

”P “ vor dem Tagnamen

vorangestellt, da sie ja wie im vorangegangenen Abschnitt erlautertuberRef lectdyna-misch geladen werden.Jede Klasse implementiert das Interfaceflashweather.generator.Parsing-Object . In dem Interface ist die folgende Methode definiert:

public Object parse(Object tree,Object hfObject,StoringManager sm);

Der erste Parameter enthalt einen Teil des beim Parsen entstandenen DOM-Trees, derzweite das hierarchischubergeordnete Objekt und mit dem letzten Parameter wird einStoringManager ubergeben, in dem alle erzeugten Objekte abgelegt werden. DieKlasseStoringManager beinhaltet eine Hashtable, in der die erzeugten Objekte mitihrem zugeordneten Schlusselwert – die in der SKF-Datei vergebene ID – gespeichertwerden. Die Objekte werden gespeichert, damit sie zu einem spateren Zeitpunkt, z.B.durch Transformationen, manipuliert werden konnen und hierfur anhand ihrer ID leichtwiedergefunden werden konnen.Die Implementation der Methodeparse ist fur alle Tags rechtahnlich und verlauftimmer in drei Schritten. Als erstes werden die Attribute eines Elementes aus der Wurzeldes aktuellen Teilbaumes des DOM-Trees geholt, danach wird das Objektuber die JavaSWF API erzeugt und als letztes werden die Elemente unterhalb der Wurzel verarbeitet.Die Attribute aus dem Wurzelelement (im QuellcodetoParse genannt) des Teilbaumeserhalt man, wie im folgenden Ausschnitt derPpolygon -Klasse:

NamedNodeMap attributes = toParse.getAttributes();

try {originX = (new Integer(attributes.getNamedItem("originX").

getNodeValue())).intValue();}catch (NumberFormatException e) {

throw new GeneratorException("Wrong data in originX: "+"integer value required!");

}try {

originY = (new Integer(attributes.getNamedItem("originY").getNodeValue())).intValue();

}catch (NumberFormatException e) {

throw new GeneratorException("Wrong data in originY"+"integer value required!");

}

Page 81: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

6 Realisierung 73

Da fur jedes SKF-Tag eine eigene Klasse existiert, ist darin bekannt, welche Attributein diesem Tag moglich sind, weswegen die Attribute ohne Probleme in der Klasse wei-terverarbeitet werden konnen. Bei der Bestimmung der Attribute ist allerdings ein Punktzu beachten: Da in XML keine Typuberprufung moglich ist, muß dies in der zum Taggehorigen Klasse geschehen. Falls wie im obigen Beispiel ein Integer Wert erwartet wird,aber der Inhalt des Attributes diesem Typ nicht entspricht, ist eine Fehlerbehandlung not-wendig. In einem derartigen Falle wird eineGeneratorException geworfen, die ineinem String die Fehlermeldung enthalt.Im nachsten Schritt wird das Objektuber die Java SWF API mit den Attributen erzeugt.

polygon = new HFPolygon(originX,originY);

Damit dieses Objekt zu einem spateren Zeitpunkt manipuliert werden kann, wird es ineinemStoringManager mit der zugehorigen ID des Objektes abgelegt.

sm.keep(attributes.getNamedItem("ID").getNodeValue(),polygon);

Der letzte Schritt ist die Verarbeitung aller moglichen Unterelemente, so kann z.B. einpolygon -Tag eine beliebige Anzahl aus Liniensegmenten besitzen. Hierzu mussen zu-erst die Elemente unterhalb der Wurzel des Teilbaumes ermittelt werden, dies geschiehtmit:

NodeList nodes = toParse.getChildNodes();

Die so erzeugteNodeList kann mit einerfor -Schleife abgearbeitet werden.

for (int k=0;k<nodes.getLength(); k++) {Node childNode = nodes.item(k);

}

Innerhalb der Schleife wird dann die zum Child-Tag gehorige Klasse wie in Kapitel6.3.1beschriebenuberReflectgeladen und ein Objekt erzeugt, an die dieparse -Methode mitdem Teilbaum des Unterelements als Parameter geschickt wird. Innerhalb dieser Metho-de wird dann der Generierungsprozeß eine Hierarchiestufe tiefer fortgesetzt.Die Methoden im Zusammenhang sind im Quellcode6.7 auf Seite74 angefuhrt, inklu-sive der Verarbeitung der Elemente unterhalb des Wurzelelementes mitReflect. Die um-fangreiche Fehlerbehandlung wurde aus Grunden derUbersichtlichkeit stark vereinfacht.Alle Klassen des Generators sind in dieser Form aufgebaut. Die Klassenstruktur ist imAnhangC abgebildet.Da bei der Erzeugung einesHFFont -Objektes aufwendige algorithmische Probleme zulosen sind, soll speziell die Generierung von Fonts im nachsten Abschnitt naher betrach-tet werden.

Page 82: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

6 Realisierung 74

public Object parse(Object tree,Object hfObj,StoringManager sm){

toParse = (Node)tree;frame = (HFFrame)hfObj;

NamedNodeMap attributes = toParse.getAttributes();

try {originX=(new Integer(attributes.getNamedItem("originX").

getNodeValue())).intValue();

originY=(new Integer(attributes.getNamedItem("originY").getNodeValue())).intValue();

}catch (Exception e)

throw new GeneratorExeption("Wrong value");

polygon = new HFPolygon(originX,originY);

sm.keep(attributes.getNamedItem("ID").getNodeValue(),polygon);

NodeList nodes = toParse.getChildNodes();

for (int k=0;k<nodes.getLength(); k++) {

Node toParse = nodes.item(k);Constructor c = null;Class clazz = null;ParsingObject p = null;

try{clazz = Class.forName("P"+toParse.getNodeName());c = clazz.getConstructor(new Class[] {});p = (ParsingObject)c.newInstance(new Object[] {});

}catch (Exception e)

throw new GeneratorException("Error in reflect");p.parse(toParse,polygon, sm);} //if

} //for

frame.addObject(polygon);

return polygon;}

Quellcode 6.7:Methodeparse aus der KlassePpolygon zur Verarbeitung despolygon -Tags

Page 83: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

6 Realisierung 75

6.3.3 Einbinden von Fonts

Ein Grundsatz in Flash ist, daß eine SWF Datei von keinen außenstehenden Ressourcenabhangig sein darf. Dementsprechend mussen auch die verwendeten Fonts in den Flash-film eingebunden werden. Wenn nun in der SKF Datei ein Font mit Namen angegebenwird, besteht fur den Generator das Problem, genau diesen Font auch erzeugen zu mussenund in den Film einzubauen. Wie erhalt man aber die Definition, also die genauen Um-risse, eines Fonts?Hierzu wird auf die systemweit installierten TrueType-Fonts zuruckgegriffen. Dazu sindeinige Voraussetzungen erforderlich. Als erstes muß der Generator Zugriff auf diverseFonts erhalten. Dies wird in diesem Falle mit der Javaklassejava.awt.Font reali-siert. Diese Klasse stellt verschiedene Methoden zur Verfugung, um Fonts zu laden undzu manipulieren. Damit aber diese Klasse genutzt werden kann, muß es ihr ermoglichtwerden, auf den grafischen Kontext zuzugreifen, der nur dann existiert, wenn ein Window-Server gestartet ist. Der Generator ist also fur den Fall, daß Fonts eingesetzt werden, al-so nur unter grafischen Benutzeroberflachen wie z.B. KDE, Windows, etc. einsetzbar.TrueType-Fonts sind im allgemeinen systemweit installiert, wobei es keine Festlegunggibt, welche Fonts vorhanden sein mussen und welche nicht. Dies ist vollig von der In-stallation des Systems abhangig. Wie ist aber nun ein TrueType-Font definiert und wiekann er in einen Flashfilm eingebunden werden?Ein Buchstabe eines TrueType-Fonts ist in einem EM-Quadrat enthalten. Dieses EM-Quadrat ist so groß, daß jeder Buchstabe des Fonts hineinpaßt und ist nicht mit einerBoundingBox eines Objektes zu verwechseln. Die gesamte Hohe eines Buchstabens wirdBodygenannt, die Hohe des Zeichensuber der Schriftlinie wird mitAscentund unter derSchriftlinie mitDescentbezeichnet. Zur besseren Verdeutlichung der Begriffe sind sie inder Grafik6.3noch einmal veranschaulicht.

QDescent

AscentBody EM

Abbildung 6.3:Ausmaße eines TrueTypeFont-Buchstaben

Wie erhalt man nun die Hullkurve eines TrueType-Fonts in Java?Bei einem TrueTypeFont besteht die Hulle eines Buchstabens aus einem Linienzug ausgeraden und kurvigen Segmenten. Dieser Font kann gemaß den Vorgaben in der SKF-DTD fett oder kursiv sein. Um diesen Linienzug zu erhalten, mussen diese Vorgaben ausdem DOM-Tree KnotendefineFont ermittelt und einjava.awt.Font Objekt mitden entsprechenden Attributen angelegt werden.

Page 84: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

6 Realisierung 76

if ((attributes.getNamedItem("bold").getNodeValue()).equals("true"))

style +=Font.BOLD;if ((attributes.getNamedItem("italic").

getNodeValue()).equals("true"))style +=Font.ITALIC;

java.awt.Font f = new Font(name, style, 1024);

Im obigen Quelltext werden als erstes die Attributwerte desdefineFont -Tags ermitteltund bitcodiert in einer Variablen abgelegt. Darauf wird dann ein Objekt der Klasseja-va.awt.Font mit dem Fontnamen, dem Stil und der Große erzeugt.Von diesem Font kannuber einjava.awt.font.GlyphVector -Objekt die Hulleermittelt werden. Der Glyphvektor wird folgendermaßen ermittelt:

java.awt.font.GlyphVector glyphs =f.createGlyphVector(new FontRenderContext(null,

true,false),

chars );

Der Glyphvektor enthalt die im Parameterchars angegebenen Zeichen. Die Hulle desFonts kann dann in einemjava.awt.Shape -Objekt abgelegt unduber ein Objekt derKlassejava.awt.geom.PathIterator Punkt fur Punkt durchlaufen werden.

java.awt.Shape s = glyphs.getGlyphOutline(number);PathIterator path =

s.getPathIterator(new AffineTransform());

int [] coords;while (!path.isDone() ) {

int pointType = path.currentSegment(coords);path.next();

}

Die MethodecurrentSegment(int[] coords) liefert im Parametercoordsdie Punktkoordinaten und als Ruckgabewert die Art des Punktes. Es gibt im wesentli-chen vier verschiedene Punkt-Arten:

MOVETO: Startpunkt fur einen neuen Linienzug

LINETO: Punkt, zu dem eine gerade Linie gezogen wird

QUADTO: Zwei Punkte, die eine quadratische Bezierkurve definieren

CLOSE: Die Linie ist beendet

Auf diese Art und Weise sind nun alle Hullpunkte des Fonts bekannt und konnen weiter-verarbeitet werden.

Page 85: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

6 Realisierung 77

Um mit dem SWF-SDK einen Font anzulegen, muß zunachst aus der Hullkurve einesBuchstabens einHFPolygon -Objekt erzeugt werden. Dies stellt auf den ersten Blickkein wesentliches Problem dar, denn die Liniensegmente des Fonts sind entweder qua-dratische Bezierkurven oder gerade Linienstucke, wie es auch bei einemHFPolygon -Objekt der Fall ist. Allerdings sind die Koordinatensysteme bei einemHFFont -Objektnicht mit den TrueTypeFont-Koordinaten identisch. Dies liegt daran, daß ein Font in SWFimmer in einem EM-Quadrat der Große 1024*1024 angelegt wird, aber TrueType-Fontsein beliebig großes EM-Quadrat besitzen. Um diese Umrechnung vorzunehmen, muß alserstes die Große des EM-Quadrats des TrueType-Fonts ermittelt werden.

Rectangle2D.Float boundingBox =f.getMaxCharBounds(new FontRenderContext(null,

true,false));

double em_height = boundingBox.getHeight();

Nun wird jeder Punkt des TrueTypeFonts mit dem Wertem height/1024 auf dasSWF EM-Quadrat konvertiert. Aus diesen Punkten werden dannHFPolygon -Objekteerzeugt, die in einemHFFont -Objekt abgelegt werden. Hierbei gibt es aber ein letztesProblem: Der Abstand zwischen den einzelnen Zeichen in einem TrueType-Font ist im-mer unterschiedlich, dieser Abstand wirdAdvance genannt. In der Grafik6.4wird derBegriff Advance nocheinmal verdeutlicht.

AVAdvance

Abbildung 6.4:Horizontaler Abstand zwischen zwei Buchstaben

Den horizontalen Abstand eines Buchstabens erhalt man folgendermaßen:

float advance = (glyphs.getGlyphMetrics(k)).getAdvance();

Mit dem Wertk wird angegeben, fur den wievielten Buchstaben im Glyphvektor der Wertermittelt werden soll. Als letzter Schritt kann nun das erzeugteHFPolygon -Objekt zueinemHFFont -Objekt hinzugefugt werden.

HFFont font = new HFFont(font_name);font.addGlyph(polygon,currentChar,currentAdvance);

Die MethodeaddGlyph erhalt als ersten Parameter das Polygon, welches ein Zeichendarstellt, dann den ASCII-Wert des Zeichens und als letztes den horizontalen Abstand.Wenn dieser Vorgang fur alle gewunschten Zeichen durchgefuhrt wurde, ist der SWF-Font einsetzbar.

Page 86: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

6 Realisierung 78

6.4 Clipping von SKF-Dateien

Der in dieser Arbeit entwickelte Generator kann aus SKF-Dateien einen Flashfilm erstel-len. Fur die Nutzung der Flashfilme im Internet ist es notwendig, daß sie moglichst kleingehalten werden, damit der Betrachter des Filmes keine großen Datenmengen herunter-laden muß. Es kommen aber große Datenmengen zustande, wenn ein Wetterfilm in einersehr hohen Auflosung generiert wird. Daher ist es sinnvoll, einen Film mit einer sehr gu-ten Auflosung in mehrere kleine Filme zu zerlegen, indem unnotige Informationen ent-fernt werden. Diesen Vorgang nennt man Clipping. Die so entstandenen einzelnen Filmekann man dann fur den Nutzer zuganglich machen, indem ein Film mit grober Auflosunggezeigt wird und der Nutzer in diesem Film einen Ausschnitt auswahlen kann. Das Zerle-gen eines Filmes soll bereits in der Datenbasis, also aus dem SKF Format heraus gesche-hen. Der allgemeine Prozeß des Clippings wurde bereits im Kapitel5 beschrieben. Wennaber ein Flashfilm geclippt werden soll, liegen nicht nur gerade Linien oder Polygonemit geraden Kanten vor, sondern auch Polygone mit einer quadratischen Bezierkurve alsKante, primitive Objekte (z.B. Kreise oder Ovale) und auch die einzelnen Kontrolltags,die z.B. ein Objekt verschieben, drehen oder skalieren. Wie derartige Objekte und Struk-turen geclippt werden konnen, wird in den nachsten Abschnitten beschrieben.

6.4.1 Clipping von primitiven Objekten

In dem Flashformat gibt es primitive Objekte, wie z.B. ein Oval, ein Rechteck oder einenKreis. Diese Objekte sind theoretisch auch mit Hilfe von Polygonen zu erzeugen. Wennaber ein Rechteck mit Hilfe eines Polygons erzeugt wird, benotigt es wesentlich mehrSpeicherplatz, da alle vier Eckpunkte anzugeben sind, beim primitven Objekt Rechtecksind aber nur zwei Punkte notig. Noch extremer ist die Situation bei einem Kreis oder ei-nem Oval. Diese konnten nur mit Hilfe von Bezierkurven angenahert werden. Aus diesenGrunden ist es sinnvoll, solche primitive Objekte zu erhalten, auch wenn sie gerade aufeiner Kante liegen und teilweise weggeclippt werden mussten, um den benotigten Spei-cherplatz nicht in die Hohe zu treiben. Wenn also ein primitives Objekt vollig außerhalbdes Clippingfensters liegt wird es entfernt, ansonsten wird das Objekt im Film belassen.Dadurch kann es dazu kommen, daß ein Kreis teilweise im Clippingfenster liegt und teil-weise nicht. Er wurde alsouber die Grenzen des Filmes hinausreichen. Dies ist aber keinProblem, da der Film in einer Webseite eingebettet ist und alles wasuber die Grenzen desFilmes hinausgeht nicht sichtbar ist. Wie bestimmt man nun auf einfache und effizienteWeise, ob ein Objekt sichtbar ist oder nicht?Ein Weg ware es, die Kanten des primitven Objektes zu interpolieren, was vor allem beiKreisen recht aufwendig ware. Es ist aber auch moglich, die Sichtbarkeit eines primiti-ven Objektesuber seinen Mittelpunkt zu bestimmen. Bei einem Kreis ist der Mittelpunktbereits bekannt, ebenso wie der Radius. In diesem Falle wird lediglich gepruft, ob derMittelpunkt des Kreises in dem Rechteck liegt, welches an allen Seiten um den Radiusvergroßert wurde. Ist dies der Fall, ist der Kreis zumindest teilweise sichtbar und wirdnicht aus dem Film entfernt. Die Abfrage als Programmcode sieht folgendermaßen aus:

if ( centerX>(xMin-radius) && centerX<(xMax+radius) &&centerY > (yMin-radius) && centerY < (yMax+radius) )

Page 87: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

6 Realisierung 79

centerX und centerY sind hierbei die Koordinaten undradius der Radius desKreises.xMin , yMin , xMax undyMax sind die Clippinggrenzen des Clippingrechtecks.Falls dieseif -Bedingung wahr ist, ist der Kreis zumindest teilweise sichtbar.Ahnlich wird bei Ovalen oder Rechtecken vorgegangen, nur mussen hier der Mittelpunktund die Abstande des Mittelpunktes zu der Boundingbox, das ist das kleinst moglicheRechteck in welches das Objekt hineinpaßt, errechnet werden. Darauf erfolgt wieder einVergleich wie er auch schon beim Kreis durchgefuhrt wurde:

int deltaX = (xmax-xmin)/2; //Abstand zu den Seitenint deltaY = (ymax-ymin)/2;int centerX = xmin + deltaX; //Mittelpunkt des Objektesint centerY = ymin + deltaY;if ( centerX > (xMin-deltaX) && centerX < (xMax+deltaX)&&

centerY > (yMin-deltaY) && centerY < (yMax+deltaY) )

xmin , ymin , xmax und ymax sind dabei die Punkte der Boundingbox des Rechtecksoder des Ovals, welche als Attribut sofort mitgeliefert werden. Auf diese Art und Weiseist es kein Problem primitive Objekte zu clippen. Wie sieht es aber nun mit dem Clippingvon Polygonen aus?

6.4.2 Clipping von Polygonen mit Bezierkurven

Das Clipping von Polygonen mit geraden Kanten wurde bereits im Kapitel5.4 erlautertund stellt somit grundsatzlich kein Problem dar. Allerdings konnen die Polygone in Flashquadratische Bezierkurven als Kanten enthalten. Das Clipping dieser Kurven erfolgt vomGrundprinzip her genauso wie bei dem Polygonclipping mit geraden Linien. Allerdingsist hier die Schnittpunktberechnung wesentlich aufwendiger und die Berechnung desSchnittpunktes allein reicht nicht aus. Es muß auch der Kontrollpunkt neu errechnetwerden. Wie konnen also Bezierkurven an einer waagerechten oder senkrechten Liniegeschnitten werden?Eine quadratische Bezierkurve wird durch drei Punkte definiert, zwei Ankerpunkte undeinen Kontrollpunkt. Wenn diese drei Punkte zu einem Linienzug miteinander verbun-den werden, verlauft die Bezierkurve in der konvexen Hulle des Linienzuges, wobei dieBezierkurve an den Ankerpunkten dieselbe Steigung besitzt, wie die Linien in den An-kerpunkten [Deho2001] (siehe Abbildung6.5auf Seite80).

Eine Bezierkurve wird stets in einer parametrisierten Form angegeben, d.h. es wird kei-ne Funktion in Abhangigkeit vonx und y angegeben, sondern eine vom Parametertabhangige Funktion:

P (t) = (1− t)2 · P0 + 2 · t · (1− t) · P1 + t2 · P2

tε[0, 1] (1)

Somit ergeben sich folgende zwei Gleichungen:

x(t) = (1− t)2 · x0 + 2 · t · (1− t) · x1 + t2 · x2 (2)

y(t) = (1− t)2 · y0 + 2 · t · (1− t) · y1 + t2 · y2 (3)

Page 88: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

6 Realisierung 80

P

Q

Q

P(t)=Q

12

01

2

0P

=(x ,y )

=(x ,y )P1 11

=(x ,y )0 0

22

012

Abbildung 6.5:Eine quadratische Bezierkurve

Die Darstellung einer Bezierkurve erfolgt durch den Algorithmus von de Casteljau. DieInterpolationsformel fur die Punkte P(x, y) lautet folgendermaßen [Schw1997]:

P (t) = LERP (LERP (P0, P1, t), LERP (P1, P2, t), t) (4)

wobei LERP fur Linear Interpolationsteht und folgendermaßen aufgebaut ist :

LERP (a, b, t) = (1− t) · a + t · b (5)

Algorithmisch sieht die LERP-Funktion wie folgt aus:

private Point LERP(Point a, Point b, double t) {double avalues[] = a.getValues();double bvalues[] = b.getValues();

double newX = 0;double newY = 0;

newX = (1-t)*avalues[1]+t*bvalues[1];newY = (1-t)*avalues[2]+t*bvalues[2];

return new Point(newX, newY);}

Diese Funktion wird innerhalb des de Casteljau Algorithmus rekursiv aufgerufen, um diePunkte auf der interpolierten Kurve zu errechnen.Wenn die Schnittpunkte dieser Kurve mit einer Waagerechten

y = const.k (6)

gesucht werden, wird die Konstantek in Gleichung (3) fur y(t) eingesetzt und man erhaltfolgende Gleichung:

(1− t)2 · y0 + 2 · (1− t) · t · y1 + t2 · y2 = k (7)

Page 89: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

6 Realisierung 81

Diese Gleichung kann nach t aufgelost werden:

t0,1 =y0 − y1 − 2

√k · y0 − 2 · k · y1 + y2

1 + k · y2 − y0 · y2

y0 − 2 · y1 + y2

t0,1ε[0, 1] (8)

Mit der Formel (8) kann nun ermittelt werden, ob und welche Schnittpunkte existieren.Die Werte fur t0,1 sind dabei nur dann gultige Losungen, wenn sie im Intervall [0,1]liegen, denn die Schnittpunkte sollen auf der Bezierkurve zwischenP0 und P2 liegen.(siehe Abb.6.5) Hierbei konnen die folgenden drei Falle eintreten:

• t0,1 sind keine gultigen Losungen. Daraus folgt, daß kein Schnittpunkt existiert.

• Im Fall t0 = t1 existiert nur ein Schnittpunkt. Dies ist der Fall, wenn die An-kerpunkte auf verschiedenen Seiten der schneidenden Linie liegen, wie in Abbil-dung6.6a zu sehen ist.

• Wennt0 6= t1 und beide Losungen im Intervall [0,1] liegen, gibt es zwei Schnitt-punkte. Diese Falle treten ein, wenn die Ankerpunkte auf der einen und der Kon-trollpunkt auf der anderen Seite der schneidenden Linie liegen. Die beiden mogli-chen Falle sind in den Abbildungen6.6b und6.6c abgebildet.

P

P’

P = P’

P’0

0P

1

1

22

außen

innen

(a) Ein Anker in-nen, einer außen

P

P

P

P’P’

0

1

2= P’

1

= P’’20

P’’0

1

2P’’

innen

außen

(b) Beide Anker innen, Kontrol-punkt außen

P

P P

P’ P’

0

1

2

P’1

20

innen

außen

(c) Beide Anker außen, Kontroll-punkt innen

Abbildung 6.6:Verschiedene Arten von Schnittpunkten mit einer Bezierkurve

Der nachste Schritt ist die Berechnung der zut0,1 gehorigen Schnittpunkte. Sie konnendurch die Formel (3) errechnet werden, indem der zuvor ermittelte t-Wert eingesetzt wird.Eine weitere Berechnungsart ist mit Hilfe der Formel (5) moglich. Wenn nun alsot0,1 exi-stieren, erhalt man die neuen PunkteP ′

0 undP ′2, indem folgende Berechnungen durch-

gefuhrt werden:

P ′0 = LERP (LERP (P0, P1, t0), LERP (P1, P2, t0), t0)

P ′2 = LERP (LERP (P0, P1, t1), LERP (P1, P2, t1), t0) (9)

Page 90: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

6 Realisierung 82

Falls man eine der Gleichungen in der Formel (9) ausmultipliziert, ist sofort ersichtlich,daß sie mit der Gleichung in Formel (3) ubereinstimmt.Nachdem die Schnittpunkte errechnet wurden, ist es noch notwendig, den neuen Kon-trollpunkt zu errechnen. Hierbei kann es zwei Falle geben. Wenn die Bezierkurve nureinmal geschnitten wird, also nur ein Schnittpunkt existiert, ist der Kontrollpunkt sehreinfach zu bestimmen. Der neue Kontrollpunkt ist stets der Schnittpunkt der Tangenten,die anP0 undP2 anliegen. Wenn nur ein Schnittpunkt existiert, bleibt einer der ursprung-lichen Ankerpunkte erhalten und dementsprechend auch dessen Tangente, d.h. der neueAnkerpunkt wird genau auf dieser Geraden liegen. Um zu ermitteln, wo sich der Schnitt-punkt auf dieser Geraden befindet, ist es nur notig, den ersten Schritt der de Casteljau-Interpolation durchzufuhren. Dies ist auch in der Abbildung6.5 zu erkennen. Im erstenSchritt wird der PunktQ01, im zweiten der PunktQ12 und im dritten Schritt der PunktQ012 errechnet. Der PunktQ012 ist dann der interpolierte Punkt auf der Kurve.

Beispiel

Es seiP (t) eine Bezierkurve mit den AnkerpunktenP0 undP2 sowie dem KontrollpunktP1 (siehe Abbildung6.7).

P

PQ

Q

P0

001Q

1

12 = P’

012= P’

1

2= P’2

außen innen

Abbildung 6.7:Alte und neue Punkte der Bezierkurve

Es existiert lediglich ein Schnittpunkt und die Kurve soll vonP0 bis zum Schnittpunktweggeclippt werden, so daß die neue Kurve durchP ′

0, P ′1 undP2 bestimmt wird. Durch

LERP (P0, P1, t0) (10)

wird der PunktQ01 errechnet. Der PunktQ12 wird mittels

LERP (P1, P2, t0) (11)

errechnet. So erhalt man die GeradeQ01Q12. Uber die beiden Berechnungen (10) und(11) kann nun folgende Formel aufgestellt werden:

Q012 = LERP (LERP (P0, P1, t0), LERP (P1, P2, t0), t0) (12)

Page 91: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

6 Realisierung 83

Dies ergibt genau den zut0 gehorigen Kurvenpunkt, welcher der neue AnkerpunktP ′0 der

Kurve ist.Q12P2 ist die Tangente im PunktP2 undQ01Q12 die Tangente im PunktP ′0 =

Q012. Daraus wird sofort ersichtlich, daßQ12 der Schnittpunkt der beiden Tangenten undsomit der neue Kontrollpunkt der Bezierkurve ist. Als Veranschaulichung dient die obigeAbbildung6.7.

Der neue Kontrollpunkt lasst sich also einfach durch die Formel:

Q12 = P ′1 = LERP (P1, P2, t0) (13)

errechnen. Je nachdem, wie die Kurve nun geschnitten wird, d.h. einmal oder zweimal,bzw. ob die Ankerpunkte innen oder außen liegen, ist die Berechnung immer leicht un-terschiedlich, was die einzusetzenden Werte bei derLERP Funktion angeht, aber dasGrundprinzip bleibt gleich.So wurde eine Berechnungsmethode gefunden, die es ermoglicht, eine Bezierkurve aufeinfache Art und Weise einem Clippingprozeß zu unterwerfen.Die Implementation des Bezierclipping wird auf Seite86 naher erlautert und der Quell-code ist im AnhangD zu finden.

6.4.3 Clipping von Kontrolltags

In Macromedia Flash konnen Objekte durch Kontrolltags transformiert oder in ihremAussehen verandert werden. So kann es sein, daß ein ursprunglich nicht sichtbares Ob-jekt durch eine Translation sichtbar wird oder umgekehrt. Es stellt sich daher die Frage,ob uberhaupt ein Objekt entfernt werden darf oder nicht. Ein anderes Problem entsteht,wenn ein Objekt durch das Clippen entfernt wurde und sich eine Transformation odereine Farbanderung auf dieses Objekt beziehen mochte.Letzteres Problem wird dadurch gelost, daß jedes Objekt, das vollig entfernt wurde, ineinenObjectManagergeschrieben wird, der sich die eindeutige ID des Objektes merkenkann. Ist es spater notwendig zu erfahren, ob ein Objekt entfernt wurde oder nicht, kanndies uber die ID beim ObjektManager erfragt werden. Zum Beispiel wird beim Clip-pen einer Translationuberpruft, ob die ID, auf welche sich die Translation bezieht, imObjektManager enthalten ist. Ist dies der Fall, wird diese Translation entfernt oder, fallssich die Translation auf mehrere IDs bezieht, nur die entsprechende ID. Dieses Vorgehenist ohne Probleme moglich, da die Objekte stets zuerst definiert werden mussen, bevorsich eine ID auf ein Objekt bezieht. Ganz gemaß dem Prinzip in Flash, nach dem dieDefinitionstags auch immer vor den Kontrolltags stehen mussen.Was ist aber nun mit dem umgekehrten Weg, wenn ein Objekt vielleicht nicht sichtbarist, es aber durch eine Transformation dazu kommen konnte? Fur diesen Fall wurde inder DTD fur jedes Objekt ein Attributclip eingefugt. Dieses Attribut ist standardmaßigauf true gesetzt, d.h. dieses Objekt darf geclippt werden. Wenn nun der Entwickler ei-ner SKF Datei der Meinung ist, daß dieses Objekt sich bewegt und eine Darstellung desObjektes zwingend erforderlich ist, kann das Attribut auf false gesetzt werden und dasObjekt wird beim Clippen ignoriert.

Page 92: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

6 Realisierung 84

6.4.4 Der Clipping-Datenfluß

Eine SKF Datei wird durch den Clippingprozeß in einzelne Dateien zerlegt. Damit dasEinlesen und Verarbeiten keine unnotige Zeit in Anspruch nimmt und es nicht notigist, auf bereits vorher definierte Elemente zuruckzugreifen, wird die SKF Dateiubereinen SAX Parser eingelesen, was wesentlich schneller ist und weniger Arbeitsspeicherbenotigt. Dieser SAX Parser erzeugt dann Ereignisse, die von einem Handler verarbei-tet werden konnen (siehe hierzu auch Kapitel3.4.1). Dieser Handler wird durch eineClipper-Klasse reprasentiert, die die einzelnen Methoden des Handlers implementiertund das Clippen ermoglicht. Da die Anzahl der Clippinggrenzen variieren kann, solltekein Clipper entwickelt werden, der an beliebig vielen Clippingrechtecken clippen kann,sondern ein Clipper der fur genau ein Clippingrechteck zustandig ist. Je nach Bedarfwerden dann die benotigten Clipper erzeugt. Dies hatte aber zur Folge, daß der Clip-pingprozeß fur alle Grenzen einzeln durchgefuhrt werden musste, also die SKF Dateiso haufig geparst werden muß, wie es Clippingrechtecke gibt, was viel zu zeitaufwen-dig ware. Daher wird ein sogenannter Multiplexer zwischen SAX Parser und Clippergeschaltet, der ebenfalls die Methoden des Handlers implementiert und die Ereignissedes SAX-Parsers an die bei ihm eingetragenen Klassen weiterleitet (siehe auch Abb6.8).Der Multiplexer wird bei dem SAX Parser als Document Handler eingetragen und fangtdadurch die vom SAX Parser erzeugten Events auf. Darauf schickt er diese Events an al-le bei ihm registrierten Clipper mit den jeweiligen Clippinggrenzen weiter, welche dannalso die vollstandige Information aus der SKF Datei erhalten und in die entsprechendenTeildateien zerlegen.

SAX Parser

SKF Clipper II

SKF Clipper I

SKF Clipper III

SKF Clipper IV

SAXMultiplexer

Abbildung 6.8:Verteilung der Datenuber denSAXMultiplexer

Die Klassenstruktur des SKFClippers ist im AnhangC zu finden.

Page 93: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

6 Realisierung 85

6.4.5 Die Clipper-Objekte

Im vorangegangenen Abschnitt wurde der Datenfluß von der Datei bis zum einzelnenClipperobjekt beschrieben. Wie aber geht es nun weiter? Wie werden einzelne Objektegeclippt?Der Clipper, welcher die Daten aus der SKF Dateiuber den SAX Parser und den Multi-plexer erhalt, bekommt bei der Instanziierung die Clippinggrenzen, fur die er zustandigist, und den Namen der Datei, in der das Ergebnis des Clippings abgelegt werden soll,mitgeliefert. Anhand der Grenzen kann nun also der Clippingprozeß stattfinden. Die zuclippenden Objekte sind aber zu unterschiedlich, als daß man einen einzigen Clipper ent-wickeln konnte, der alle Objekte mit ihren entsprechenden Sonderfallen berucksichtigt.Daher werden spezielle Clipper eingefuhrt. So z.B. einCircleClipper , welcher spe-ziell fur das Clippen von Kreisen zustandig ist.Die verschiedenen Elemente in SKF erhalten also teilweise einen Spezialclipper. Objekte,die nicht zu Clippen sind (z.B. ein Frame), werdenuber einen Defaultclipper verarbeitet,der die Objekte unverandert wieder ausgibt. Der Clipper erkennt beim Parsen automa-tisch, um was fur ein Element es sich handelt und leitet dann die folgenden Daten an denentsprechenden Spezialclipper weiter. Ist der Clippingprozeß fur dieses Element been-det, wird die Verantwortung fur den Datenfluß wieder an den Clipper zuruckgegeben, biserneut ein Element folgt, welches den Einsatz eines Spezialclippers notwendig macht.Wenn allerdings das Element mit einer Flagge versehen ist, daß dieses nicht geclipptwerden darf, wird der Defaultclipper eingesetzt, der die erhaltenen Daten einfach in dieangegebene Datei schreibt.Wie die einzelnen Spezialclipper arbeiten, hangt von dem Objekt ab, fur das sie zustandigsind. Ein Clipper fur Kreise, Rechtecke oder Ovale arbeitet nach dem in Kapitel6.4.1be-schriebenen Prinzip, ein Clipper fur Kontrolltags wie in Kapitel6.4.3beschrieben.Der Polygonclipper ist wesentlich komplexer als die anderen Spezialclipper. Deshalb sollnaher darauf eingegangen werden.

Wenn einpolygon -Tag vom SAX-Parser erkannt wurde unduber den Multiplexer andie einzelnen Clipper, die fur ein Clippingrechteck zustandig sind, weitergeleitet wurde,reichen diese den Datenstrom an den Polygonclipper weiter.Um das Clipping des Polygons moglichst effizient zu gestalten, werden zunachst al-le Punkte des Polygons eingelesen. Diese Punkte werden inflashweather.geom-util.Point -Objekte abgelegt und daraus einflashweather.geomutil.Poly-gon -Objekt erzeugt. In diesem Objekt ist die Clippinglogik enthalten. Diese Aufteilungwurde gewahlt, da sonst der Polygonclipper zu komplex werden wurde.Ist dieser Prozeß abgeschlossen, ruft der Polygonclipper bei demPolygon -Objekt dieclip Methode auf und der eigentliche Clippingprozeß wird ausgelost. Dieser Clipping-prozeß basiert auf demReentrant Polygon ClippingAlgorithmus vonSutherlandundHodgmander in Kapitel5.4beschrieben wurde.In einer Schleife wird Clippinggrenze fur Clippinggrenze abgearbeitet. Die Punkte wer-den einer Methodeubergeben, die die Schnittpunkte errechnet. Dabei wird fur jedes Li-niensegment gepruft, ob es ein gerades Segment ist oder eine quadratische Bezierkurve.Fur beide Falle sind spezielle Methoden implementiert worden, die die Schnittpunkte mitden Clippinggrenzen errechnen konnen.

Page 94: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

6 Realisierung 86

Die Schnittpunktberechnung bei geraden Teilstucken der Polygone basiert auf derZwei-Punkte-Gleichungy = ((x− xa)(yb − ya)/(xb − xa)) + ya

Diese Gleichung bestimmt dieuber die Punkte a und b definierte Gerade. Der Schnitt-punkt der Geraden mit einer waagerechten Clippinggrenze berechnet sichuber die Glei-chung

x = ((xb − xa) ∗ (yclip ∗ −xa∗))/(yb ∗ −xa∗) + xa (14)

wobeiyclip der Y-Wert der Clippinggrenze ist. Bei einer senkrechten Clippinggrenze lau-tet die Gleichung

y = (xclip − xa) ∗ (yb ∗ −ya)/(xb − xa) + ya (15)

wobei hierxclip der X-Wert der Clippinggrenze ist.In der Implementation ist hierfur die im Quellcode6.8auf Seite87 zu sehende MethodecalcIntersecPoints zustandig. Diese Methode erhalt als Parameter den Startpunktder Linie, den Endpunkt, die Seite der Clippinggrenze, an der geclippt werden soll, undden Wert, den die Clippinggrenze annimmt. In dieser Methode werden dann die Glei-chungen (14) und (15) implementiert. Hierbei muß darauf geachtet werden, ob der errech-nete Schnittpunkt noch innerhalb der gewunschten Grenzen liegt. Da der Ursprung desFlash-Koordinatensystems oben links liegt, mussen die Y-Werte bei der Berechnung ne-giert werden, um sie aus dem mathematischen in das Flash-Koordinatensystem zu trans-formieren.Falls ein Teilstuck eine quadratische Bezierkurve enthalt, wird der Schnittpunktuber dieim Kapitel 6.4.2erlauterten Formeln errechnet, die in der MethodecalcQuadInter-secPoints implementiert sind. Die Parameter stimmen mit denen dercalcInter-secPoints -Methodeuberein, wobei allerdings der Endpunkt ein sogenannterQuadTo-Punkt sein muß. Dies ist ein Objekt der KlassePoint , das sowohl einen Anker- als aucheinen Kontrollpunkt enthalt, wodurch eine quadratische Bezierkurve als Liniensegmentdefiniert wird.Als erstes wird der Parametert anhand der Formel (8) auf Seite81 errechnet unduber-pruft ob kein, ein oder zweit-Werte errechnet wurden. Dementsprechend gibt es dannkeinen, einen oder zwei Schnittpunkte. Danach werden die moglichen Falle abgearbeitetund die Schnittpunkteuber die im Kapitel6.4.2hergeleiteten Formeln errechnet. Da derQuellcode zu umfangreich ist, ist er im AnhangD zu finden.Das Ergebnis dieses Clippingprozesses wird dann an den Polygonclipper zuruckgeliefert,der die Punkte in XML Code umwandelt und an den eigentlichen Clipper zuruckliefert.Dieser schreibt die Daten in die entsprechende Datei.

Page 95: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

6 Realisierung 87

private Point[] calcIntersecPoints(Point from,Point to,int which,int value) {

Point [] newPoints = null;

//Werte der Punkte abholendouble [] a = from.getValues();double [] b = to.getValues();

if (which==1 || which==3) { //waagerechte//Clippinggrenze

//Die Zwei-Punkte-Gleichung umformen//und damit den Schnittpunkt errechnen//Auf Flashkoordinaten Transformierenx = ((b[1]-a[1])*(value*(-1)-a[2]*(-1))) /

(b[2]*(-1)-a[2]*(-1))+a[1];

//Test ob der Punkt innerhalb der Grenzen liegtif ( (x>=a[1] && x<=b[1]) || (x<=a[1] && x>=b[1]) ) {

newPoints = new Point[1];newPoints[0] = new Point(x,y);

}}

else if (which==2 || which==4) { //senkrechte//Clippinggrenze

//Die Zwei-Punkte-Gleichung umformen//und damit den Schnittpunkt errechnen//Auf Flashkoordinaten Transformiereny = -1*(((x-a[1])*(b[2]*(-1)-a[2]*(-1))) /

(b[1]-a[1])+a[2]*(-1));

//Test ob der Punkt innerhalb der Grenzen liegtif ( (y>=a[2] && y<=b[2]) || (y<=a[2] && y>=b[2]) ) {

newPoints = new Point[1];newPoints[0] = new Point(x,y);

}return newPoints; //Ergebnis der Intersection liefern

}}

Quellcode 6.8:Polygon.java: Die Intersec Methode fur gerade Linienstucke

Page 96: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

7 Anwendung 88

7 Anwendung

In der vorliegenden Diplomarbeit wurde ein Werkzeug entwickelt, mit dem Flashfilmeuber einen Generator aus dem SKF Schnittstellenformat erzeugt werden konnen. Hierfurwurde eine Java SWF API erstellt, die das in C++ entwickelte Macromedia SWF-SDKder Programmiersprache Java zuganglich macht. Zusatzlich konnen Dateien, die im SKFFormat vorliegen, geclippt werden. In diesem Kapitel werden kurze Beispiele zur Ver-wendung der Java SWF API, des Generators und des Clippingtools vorgestellt, sowiedie Voraussetzungen bezuglich der Hard- und Software erlautert. Zusatzlich wird auf diePerformance der einzelnen Tools eingegangen.

7.1 Benotigte Hard- und Software

Benotigte Hardware

Die Erstellung von Flashfilmen ist sehr speicher- aber wenig prozessorintensiv, wie sichin einigen Tests herausgestellt hat. Diese Tests wurden auf dem Betriebssystem LinuxVersion 7.1 vorgenommen. Fur den Test wurden zwei Rechner eingesetzt. Der eine Rech-ner arbeitet mit einem Pentium III Prozessor mit einer Leistung von 850 Mhz und 128MB Arbeitsspeicher, der andere besitzt einen Celeron Prozessor mit 633 Mhz Leistungund 256 MB Arbeitsspeicher. Vor allem beim Erstellen eines DOM-Trees, der bei derGenerierung eines Flashfilmes eingesetzt wird, ist sehr viel Arbeitsspeicher notwendig,da jedes einzelne Tag und Attribut im DOM als Knoten abgelegt wird. So erweitert eineinziges Tag mit vier Attributen (z.B. beimrectangle -Tag) den DOM-Tree um funfNode-Objekte. Je großer die zu parsende Datei ist, desto großer ist der Arbeitsspeicherbe-darf. Bei einer 3.5 MB großen SKF-Datei mit 69123 Polygonpunkten reichte bei beidenRechnern der Arbeitsspeicher nicht aus und das Programm wurde abgebrochen. Bei einer1.5 MB großen Datei (31572 Punkte) pendelt sich der Speicherbedarf bei ca. 76 MB ein.Dieses Ergebnis wurde mit dem Kommandotop ermittelt. Dies hat zur Folge, daß be-sonders bei hochauflosenden Wetterdaten der Speicherbedarf stark ansteigt und ein Filmunter Umstanden nicht mehr geparst werden kann. Die Prozessorbelastung ist allerdingsrelativ gering und belauft sich auf ca. 27% Auslastung.Falls die Datei fur die Verarbeitung zu groß ist kann der Clipper eingesetzt werden,um diese Datei zu zerlegen. Der auf einem SAX-Parser basierende Clipper benotigt imDurchschnitt lediglich 13 MB Arbeitsspeicher, dafur ist aber die Prozessorauslastung we-sentlich hoher, sie liegt bei ca. 73%.Die Hardwareausstattung muß also entsprechend dem eingesetzten Parser ausgewahltwerden.

Benotigte Software

Alle in dieser Arbeit entwickelten Programme wurden in der plattformunabhangigenProgrammiersprache Java entwickelt. Da Sun Microsystems das Java Development Kit

Page 97: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

7 Anwendung 89

(JDK) fur Linux, Solaris und Windows implementiert hat und es auf fast alle anderenPlattformen portiert wurde, ist kein spezielles Betriebssystem fur die Erstellung einesFlashfilms erforderlich. Die Verwendung des Generators setzt allerdings die Existenz ei-ner grafischen Oberflache (X11, Windows) voraus.Folgende Software-Pakete werden fur die Erzeugung und das Clippen von Flashfilmenmit den Flashweather-Klassen benotigt und sind kostenlos im Internet verfugbar:

• Sun Java 2 SDK 1.2.2 oder hoher (Java Software Development Kit)

• Apache Xerces Java Parser 1.1.3 oder hoher, oder ein anderer XML-Parser, der dieMethoden der DOM-Level 2 und SAX-Level 2 Spezifikationen implementiert.

Das Java Development Kit muß auf dem verwendeten System installiert werden. DieXML-Parser bestehen lediglich aus JAR-Dateien, die der CLASSPATH-Variablen derLaufzeitumgebung hinzugefugt werden mussen.

7.2 Anwendung der Java SWF API

Um die Java SWF API nutzen zu konnen, sind einige Vorbereitungen notwendig. Zu-nachst muß die JAR-Datei mit dem Java Paketf3sdk.highlevel der CLASSPATH-Variablen hinzugefugt werden, damit sie von derJava Virtual Machinegefunden werdenkann. Zusatzlich muß die Bibliothek mit den implementiertennative-Methoden und demSWF-SDK in die VariableLD LIBRARY PATHeingetragen werden.Sobald diese Vorbereitungen abgeschlossen worden sind, kann die Java SWF API in dieeigene Klasse importiert und genutzt werden.Im Quellcode7.1 auf Seite90 ist das Beispiel aus Kapitel2.4 auf Seite19 nocheinmalin Java implementiert worden. Dieses Programm erzeugt einen Film, der einen Kreis undein Quadrat enthalt. Das Quadrat wird in zwei Schritten um insgesamt 60 Grad gedreht.Ein Ausschnitt aus diesem Film ist in der Abbildung7.1zu sehen.

Abbildung 7.1:Ausschnitt aus einem mit der Java SWF API erstellten Flashfilm

Page 98: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

7 Anwendung 90

import f3sdk.highlevel.*;

public class Flash {

public static void main(String args[]) {

// erzeuge einen neuen FlashfilmHFMovie movie = new HFMovie();

// setze die Groesse auf 300*300 Pixel// Angaben in TWIPS=>6000*6000movie.setSize( 6000, 6000 );// drei Bilder pro Sekundemovie.setFrameRate( 3 );

// ein Rechteck erzeugenHFRectangle rect = new HFRectangle(400, 400, 2400, 2400);

// einen Kreis erzeugenHFCircle circle = new HFCircle(1600, 1000, 800);

// setze die FuellfarbenFRGBAColor c = new FRGBAColor();rect.setLinearFill(c.Blue_RGBA, c.Black_RGBA );circle.setRadialFill(c.Yellow_RGBA, c.Violet_RGBA );

//Schluesselbilder erzeugenHFFrame frame0 = movie.createFrame(0);HFFrame frame1 = movie.createFrame(1);HFFrame frame2 = movie.createFrame(2);

// fuege Objekte zu dem ersten Schluesselbild hinzuframe0.addObject( rect );frame0.addObject( circle );

// rect dreht sich um den eigenen Mittelpunktframe1.removeObject( rect );rect.rotate( 30.0f );frame1.addObject( rect );frame2.removeObject( rect );rect.rotate( 60.0f );frame2.addObject( rect );

// schreibe die SWF-Datei und beende das Programmmovie.writeMovie("HFExample.swf");

}}

Quellcode 7.1:Implementation zur Erstellung eines Flashfilms

Page 99: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

7 Anwendung 91

7.3 Erstellen eines Flashfilmes aus einer SKF-Datei

Damit aus einer SKF-Datei ein Flashfilm generiert werden kann, muß das Java Pa-ket flashweather.generator in die CLASSPATH-Variable eingebunden werden.Außerdem muß die Java SWF API korrekt installiert sein. Damit der Generator letztend-lich genutzt werden kann, ist noch der Xerces DOM-Parser notig. Dieser DOM-Parserbesteht nur aus einer JAR-Datei, die ebenfalls in der CLASSPATH-Variablen enthaltensein muß.Nach diesen Vorbereitungen kann einSKFXercesDOMParser instanziiert werden undder Generierungsprozeß kann mit der MethodecreateFlashMovie , wie in Quellco-de7.2zu sehen, gestartet werden. Fur den Fall, daß ein Fehler bei der Generierung einesFlashfilms auftritt, wird die dabei entstehende Exception abgefangen und ausgegeben.

import f3sdk.highlevel.HFMovie;import flashweather.generator.SKFXercesDOMParser;import flashweather.generator.GeneratorException;

/*** Klasse zum generieren eines Flashfilmes aus einer* SKF-Datei*/

public class Generator {

public static void main(String args[]) {if (args.length != 1) {

System.err.println("Usage: java Generator filename");System.exit(1);

}//Parser instanziierenSKFXercesDomParser parser = new SKFXercesDomParser(true);//Generierungsprozess startentry {

HFMovie movie = parser.createFlashMovie(args[0]);}catch(GeneratorException e) {

System.err.println("Fehler bei der Generierung "+"des Flashfilms: "+e);

System.exit(1);}//Den Film in eine Datei schreibenmovie.writeMovie(args[0]+".swf");

}}

Quellcode 7.2:Nutzung des SKF-Generators

Page 100: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

7 Anwendung 92

7.4 Clippen einer SKF-Datei

Um eine SKF-Datei zu clippen ist das Paketflashweather.clipper erforderlich.Damit es genutzt werden kann, muß es zuvor in der CLASSPATH-Variablen eingetragenwerden. Außerdem ist ein beliebiger SAX-Parser erforderlich, der im allgemeinen nuraus einer JAR-Datei besteht, auf welche selbstverstandlich auch im Klassenpfad verwie-sen werden muß.Nach diesen Vorbereitungen kann der Clipper genutzt werden, indem zunachst der SAX-Parser instanziiert wird. Als Handler wird derSAXMultiplexer eingetragen, welcherbei seiner Instanziierung eine beliebige Anzahl vonSKFClipper -Objekten mitgelie-fert bekommt. Diese Clipperobjekte erhalten bei ihrer Erzeugunguber denConstructordie Clippinggrenzen fur die sie zustandig sind und den Namen der Datei in der sie diegeclippten Daten ablegen.Im Quellcode7.3 ist nocheinmal die Nutzung des Clippers zu sehen.

import org.apache.xerces.parsers.SAXParserimport flashweather.clipper.*;

/*** Klasse zur Initiierung des Clippingprozesses*/

public class Clipper {

public static void main(String args[]) {

//zwei Clipper Objekte instanziierenSKFClipper [] clipper = new SKFClipper[2];

clipper[0] = new SKFClipper("datei0",0,0,350,500);clipper[1] = new SKFClipper("datei1",350,0,700,500);

//Parser instanziieren,//SAXMultiplexer als Handler registrieren,//Clipping startentry {

DefaultHandler handler = new SAXMultiplexer(clipper);SAXParser parser = new SAXParser();parser.setContentHandler(handler);parser.parse(args[0]);

}catch (Exception e){ e.printStackTrace(System.err); }

}}

Quellcode 7.3:Nutzung des SKF-Clippers

Page 101: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

7 Anwendung 93

Zur Veranschaulichung soll die im Quellcode7.4enthaltene SKF-Datei geclippt werden.

<?xml version=’1.0’ encoding=’UTF-8’?><!DOCTYPE skf SYSTEM ’skf.dtd’>

<skf width="4000" height="3000" rate="10"><frame number="0" ID="karte0">

<backgroundRGBA r="255" g="255" b="255" a="0"/>

<!-- Graues Rechteck in der Groesse des Clippingfensterserstellen -->

<shape><rectangle ID="r" xmin="200" ymin="800"

xmax="3100" ymax="2350"><setFillColor name="Grey"/>

</rectangle></shape>

<!-- Zu cippendes Polygon mit gruener radialerFuellung -->

<shape><polygon ID="p1" originX="1000" originY="1000">

<addCurvedLine anchorX="2000" anchorY="1000"controlX="1300" controlY="500"/>

<addCurvedLine anchorX="2000" anchorY="2500"controlX="2400" controlY="2250"/>

<addStraightLine x="1800" y="2300"/><addCurvedLine anchorX="500" anchorY="2500"

controlX="2500" controlY="2000"/><addStraightLine x="1000" y="1000"/><setRadialFillColorsRGBA centerR="51" centerG="255"

centerB="51" centerA="127"outR="0" outG="0"outB="0" outA="127"/>

</polygon></shape>

</frame></swf>

Quellcode 7.4:Zu clippende SKF-Datei

Page 102: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

7 Anwendung 94

In der SKF-Datei ist ein graues Rechteck enthalten, welches die Clippinggrenze darstelltund ein mit grunem Farbton radial gefulltes Polygon, welches anhand der vorgegebenenClippinggrenzen geclippt werden soll.In Abbildung7.2 ist das ungeclippte Objekt zu sehen, welches Kante fur Kante geclipptwird.

Abbildung 7.2:Einzelne Schritte des Clippings

Page 103: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

7 Anwendung 95

7.5 Beispielfilme

Im Folgenden sollen einige Beispiele fur Wetterfilme gegeben werden. Die in [Stark2001]vektorisierten Wetterdaten werden erst in das SKF-Format konvertiert und dann durchden Generator in einen Flashfilm umgewandelt. Bevor der Generierungsprozess einsetzt,wird gegebenenfalls noch der SKF-Clipper genutzt, um lediglich einen Ausschnitt ausden original Wetterdaten zu erhalten.

Abbildung 7.3:Momentaufnahme der vorhergesagten Temperaturwerte fur Afrika

Page 104: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

7 Anwendung 96

Abbildung 7.4:Mit dem Clipper erzeugten Ausschnitt aus der Karte7.3

Page 105: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

7 Anwendung 97

Abbildung 7.5:Prognostizierte Regenmengen fur Europa

Page 106: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

8 Mogliche Einsatzgebiete 98

8 Mogliche Einsatzgebiete

Der Generator wurde fur die Visualisierung von XML basierten Daten entwickelt. Ex-emplarisch wurden in der vorliegenden Arbeit Wetterdaten visualisiert, was aber nur eineEinsatzmoglichkeit darstellt. Daneben sind noch viele weitere Einsatzgebiete denkbar:Einerseits Gebiete, in denen hochwertige Grafiken erforderlich sind und andererseits Ge-biete, in denen zeitbasierteAnderungen stattfinden, die visualisiert werden sollen.Die hier angefuhrten Beispiele sollen lediglich eine Anregung bieten, in welchen An-wendungsgebieten der Generator auch genutzt werden kann.

Hochwertige Darstellung von Grafiken im Internet

Im Bereich der hochwertigen Darstellung von Grafiken stelle man sich z.B. eine mit einerbeliebigen Software erstellte technische Zeichnung vor, die qualitativ hochwertig im In-ternet auf einer Webseite prasentiert werden soll. Mit einer einfachen GIF-Grafik ist dieDarstellung zwar grundsatzlich moglich, aber eine Vergroßerung des Bildes ohne Qua-lit atsverlust nicht, was aber gerade bei einer komplexen Zeichnung sinnvoll sein kann.Wenn nun aber diese Daten direkt von der Software aus in das SKF Format geschriebenoder aber durch eine Konvertierung in dieses Format umgewandelt werden, konnte ausdieser Zeichnung mit dem Generator ein Flashfilm erzeugt werden. Dieser Film ware ei-nerseits platzsparend und andererseits qualitativ hochwertig.Ein weiterer Punkt waren alle Arten von Karten, insbesondere Landkarten. In Geogra-phischen Informations Systemen (GIS) sind die Daten von Landkarten in vektorisierterForm vorhanden. Diese Daten mußten ausgelesen und in das SKF Format konvertiertwerden, wodurch dann die Umsetzung in einen Flashfilm moglich ware.

Animationen statistischer oder simulierter Daten

Eine weiteres Einsatzgebiet ware die Visualisierung von Daten, welche sichuber die Zeitandern. Man stelle sich vor, es sollen die Ergebnisse eines Rauber-Beute-Modells22 imInternet prasentiert werden. Hierbeiandern sich zwei Großenuber die Zeit, was mit einerstatischen Grafik nur schwer dargestellt werden kann. Wenn aber die Daten in das SKFFormat umgewandelt werden wurden, kann so ein Flashfilm erstellt werden, der die Er-gebnisse als Animation darstellt. Auch der Einsatz bei Banken ware denkbar, wenn mansich vorstellt, daß komplexe Statistiken visualisiert werden sollen, um z.B. eine Analysevon zeitbasierten Vorgangen zu ermoglichen.

22Ein Modell, bei dem die Population von Raubern und deren Beuteuber die Zeit simuliert wird

Page 107: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

99

III Resumee und Ausblick

Page 108: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

9 Resumee 100

9 Resumee

Diese Diplomarbeit stellt einen “Generator fur Macromedia Flash zur interaktiven Visua-lisierung XML basierter Daten“ zur Verfugung. Fur die Datenvisualisierung wurde dasMacromedia Flashformat gewahlt, da es gegenuber pixelbasierten Formaten, wie z.B.JPEG oder GIF erhebliche Vorteile besitzt. Zudem konnen Flashfilme von ca. 90% derInternetnutzer betrachtet werden und das Format ist – Dank seiner großen Verbreitung –zu einem defacto Standard geworden. Macromedia stellt außerdem ein kostenloses Soft-ware Development Kit zur Verfugung, mit dem Flashfilme programmgesteuert erzeugtwerden konnen.Beispielhaft wurden von meinem Kommilitonen Benjamin Stark zur Verfugung gestelltevektorisierte Wetterprognosedaten des Deutschen Wetterdienstes in Macromedia Flash-filmen visualisiert.Bei der Visualisierung von Wetterdaten stellte sich heraus, daß bei der Erstellung hoch-auflosender Wetterkarten die Flashfilme trotz des platzsparenden Flashformates sehrgroß werden, so daß sie nicht schnell genug aus dem Internet geladen werden konnen.Daher wurde ein SKF-Clipper entwickelt, der die im SKF-Format vorliegenden Daten ineinzelne Ausschnitte zerlegen kann.Aus diesem Grund ist die Diplomarbeit in vier Teile gegliedert:

1. Entwicklung einer auf dem Macromedia C++ SWF-SDK basierenden Java API,mit der Flashfilme erstellt werden konnen

2. Definition eines Schnittstellenformates aus dem beliebige Filme generiert werdenkonnen

3. Entwicklung eines Generators, der aus dem Schnittstellenformat Flashfilme erstel-len kann.

4. Implementation eines Clippers, der die im Schnittstellenformat vorliegenden Da-teien in einzelne Ausschnitte zerlegen kann.

Um die Verwendung des SWF-SDKs von Macromedia auch Java Programmierern zugang-lich zu machen wurde eine Java SWF API entwickelt, die auf dem SWF-SDK basiert.Hierfur wurde dasJava Native Interfacegenutzt, welches eine Kommunikation von Java-programmen mit in anderen Programmiersprachen entwickelten Bibliotheken ermoglicht.Die Java SWF API bildet die Grundlage fur den Generator, der diese API nutzt, um Flash-filme zu erstellen.Als Dateneingabeformat fur den Generator konnten nicht beliebige Dateiformate un-terstutzt werden, so daß ein XML basiertes Schnittstellenformat entwickelt wurde. XMList ein noch recht junger Standard des W3C, der aber als der zukunftige Standard furden Datenaustausch eingeschatzt wird. Zudem stehen standardisierte Programme zurVerfugung, die XML-Dateien einlesen,uberprufen und einem Programm zur Verfugungstellen konnen.Es wurde ein Visualisierungsprozeß entwickelt, der fast beliebige in XML definierte Da-ten verarbeiten kann, wenn diese in das Schnittstellenformat umgewandelt werden. Hier-zu muß lediglich ein Filter implementiert werden, der die Daten von einem XML Format

Page 109: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

9 Resumee 101

in ein anderes konvertieren kann. Als Grundlage hierzu kann dieeXtensible StylesheetLanguage(XSL) genutzt werden, mit der Regeln fur die Konvertierung definiert werdenkonnen. Fur XSL gibt es bereits leistungsstarke, kostenlose Programme, die anhand derXSL Definitionen diesen Konvertierungsvorgang durchfuhren konnen.

So wurde eine Softwarebibliothek entwickelt, die es ermoglicht auf komfortable Art undWeise aus fast beliebigen nicht nur ausschließlich auf XML basierenden Daten, einenFlashfilm zu generieren.

Page 110: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

10 Ausblick 102

10 Ausblick

Es wurde eine Java API entwickelt, mit der es moglich ist, einen Flashfilm in Java zuprogrammieren. Außerdem wurde ein Dateiformat fur Flashfilme zur Verfugung gestelltund ein Generator entwickelt, der dieses Dateiformat in einen Flashfilm umsetzen kann,damit nicht immer ein neues Programm geschrieben werden muß, wenn eineAnderungim Layout des Filmes vorgenommen werden soll. Als letztes wurde dann noch ein Clip-per implementiert, der die im SKF Format vorliegenden Filme zerlegen kann.Obwohl dies bereits eine umfangreiche Sammlung darstellt, um Flashfilme auf komfor-table Art und Weise zu generieren und sie bereits vor der Generierung zu manipulieren,ergaben sich wahrend der Bearbeitung des Themas weitere Ideen, wovon im Folgendeneinige vorgestellt werden sollen und erklart werden soll, warum diese nicht mehr in dieDiplomarbeit aufgenommen wurden.

Entwicklung eines eigenen SDKs

Der in dieser Arbeit entwickelte Generator basiert auf dem SWF-SDK von Macrome-dia, wodurch gewisse Einschrankungen gegeben sind. So werden vom SWF-SDK ausnicht alle Features von Flash, wie z.B. einige Actionscript Funktionen unterstutzt unddas SWF-SDK ist teilweise fehlerhaft.Aus diesen, aber auch aus lizenzrechtlichen Grunden ware es sinnvoll, das SWF-SDKselbst zu entwickeln, was zu Beginn der Arbeit auch versucht wurde, da es zu dem Zeit-punkt das SWF-SDK noch nicht gab. Es stellte sich aber schnell heraus, daß dies zuzeitaufwendig sein wurde, so daß sofort nach Erscheinen des SWF-SDKs die Arbeit aneinem eigenen SDK abgebrochen wurde.

Entwicklung einer grafischen Benutzerschnittstelle

Um die Nutzung derFlashweather-Bibliotheken komfortabler zu gestalten, ware es denk-bar eine grafische Benutzerschnittstelle zu entwickeln, die alle entwickelten Tools ansteu-ern kann. Insbesondere konnten dann auch Webseiten generiert werden, in die die Filmedirekt eingebunden werden konnten.Speziell fur die Erstellung der Wetterfilme konnten Konfigurationen vorgenommen wer-den, um einzelne Filmeubereinander zu legen und es dem Betrachteruber Schaltflachenzu ermoglichen gezielt bestimmte Wetterdaten auszuwahlen. Hierfur sind jedoch eini-ge ActionScript-Funktionen notig, die vom SWF-SDK von Macromedia noch nicht un-terstutzt werden.

Morphing

Im Flash Studio, der Entwicklungsumgebung fur Flashfilme von Macromedia, ist esmoglich Grafikobjekte fast stufenlos ineinanderubergehen zu lassen, so daß Objekte

Page 111: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

10 Ausblick 103

nicht sprunghaft an einem anderen Ort erscheinen oder stufenweise ineinanderuberblen-det werden, so wie bei den in dieser Arbeit entstandenen Wetterfilmen. Die stundlichenBilder andern sich sehr ruckartig, was durch einen Morphingalgorithmus unterbundenwerden konnte.Diese

”Morphing “ genannte Technik erfordert jedoch die genaue Kenntnis, welches

Grafikobjekt in welches Grafikobjekt des nachfolgenden Animationsbildesubergeht. Hier-zu sind sehr aufwendige Berechnungen notig, da Objekte sich auflosen oder aus demnichts entstehen konnen oder vollig unterschiedliche Objekte ineinanderuberfuhrt wer-den sollen. Daher wurden weitereUberlegungen zu diesem Thema vorerst zuruckgestellt.

Scalable Vector Grafik

Das Macromedia Flashformat wurde aus den in Kapitel2 angegebenen Grunden gewahlt.In der letzten Zeit wurde aber ein Vektorgrafikformat entwickelt, welches wesentlichmehr Designmoglichkeiten bietet als das Flashformat. Dieses neue Format nennt sichScalable Vector Graphics(SVG) und wurde unter der Leitung des W3C von zahlreichenUnternehmen entwickelt, wie z.B.Adobe, Apple, Autodesk, BitFlash, Corel, HP, IBM,ILOG, Macromedia, Microsoft, Netscape, OASIS, Quark, RAL, Sun, Visio, Xerox undeinige weitere mehr. Diese große Zahl von Unternehmen zeigt bereits deutlich, welchesInteresse an einem neuen Grafikstandard fur das Internet besteht und sogar Macromediaselbst ist an der Entwicklung beteiligt, obwohl dieser Grafikstandard ein starker Konkur-rent zum hauseigenen Flashformat werden konnte.Im folgenden sollen einige Punkte aufgezahlt werden, die SVG bietet:

• SVG ist als plattform- und browserunabhangiger Standard konzipiert

• SVG ist ein XML basiertes Format und bietet damit auch alle Vorteile von XML

• Objekte werden in SVG zeitlich koordiniert bewegt

• SVG unterstutzt ein umfangreiches auf JavaScript basierendes Eventhandling

• Texte konnen mit beliebigen Filtern versehen und somit verfremdet werden, wobeider Text als solcher erhalten bleibt. Dies hat zur Folge, daß ein SVG Film nachText durchsucht und mit Copy&Paste herauskopiert werden kann

• SVG unterstutzt photoshopartige Filter Effekte

• Das Format ist sowohl komprimiert als auch unkomprimiert einsetzbar

Diese vielen Moglichkeiten haben aber den großen Nachteil, daß der SVG-Player diesauch alles umsetzen konnen muß und er ist daher mit 3MB sehr groß. Dies konnte denpotentiellen Nutzer abschrecken, dieses Plugin fur seinen Browser aus dem Internet zuladen. Zudem ist SVG bisher kaum verbreitet, da das SVG-Format bisher nur alsCan-didate Recommendationverabschiedet wurde [W3C2001e]. Es befindet sich somit nochin der letzten Vorstufe zu einem offenen Standard und ist noch nicht definitiv festge-schrieben worden. Dies halt Entwickler bisher davon ab Software, die dieses Format

Page 112: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

10 Ausblick 104

unterstutzt, zu entwickeln. Allerdings ist es durch die Vielzahl der Unternehmen die andiesem Standard mitarbeiten moglich, daß bald die ersten SVG Anwendungen auf denMarkt kommen werden und unter Umstanden unterstutzen die nachsten Browser von Mi-crosoft oder Netscape dieses Format, so daß kein zusatzliches Plugin installiert werdenmuß.SVG konnte der neue Standard fur Vektorgrafiken im Internet werden und vielleichtsogar das Flashformat ablosen. Da dies aber noch eine ungewisse Zeit dauern kannund momentan Macromedia Flash das am weitesten verbreitete und popularste Vektor-grafikformat fur das Internet ist, wurde keine SVG Unterstutzung implementiert.

Page 113: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

A Das SKF Dateiformat 105

A Das SKF Dateiformat

Der Generator setzt SKF-Dateien in einen Flashfilm um. Die Erstellung des Formateswurde in Kapitel6.2.1 naher beschrieben. Die dabei entstandene Datentyp-Definitiondes SKF-Formates ist im Folgenden angegeben.

<?xml encoding="ISO-8859-1"?>

<!--SKF Markup LanguageVersion 05.03.2001Author Ralf Kunze

This is the Markup Language for the SKF Generator.The tags represents the objects in the MacromediaFlash format.

All cordinates and sizes are TWIP values.One TWIP is 1/20 pixel.

-->

<!ENTITY % Long "CDATA"><!ENTITY % Integer "CDATA"><!ENTITY % Float "CDATA">

<!-- predefined colorvalues --><!ENTITY % ColorName "(Aquamarine|BakersChocolate|Black|

Blue|BlueViolet|Brass|Bright|Bronze|BronzeII|Brown|CadetBlue|CoolCopper|Copper|Coral|CornFlowerBlue|Cyan|DarkBrown|DarkGreen|DarkGreenCopper|DarkOliveGreen|DarkOrchid|DarkPurple|DarkSlateBlue|DarkSlateGrey|DarkTan|DarkTurquoise | DarkWood | DimGrey |DustyRose | Feldspar | Firebrick |ForestGreen | Gold | Goldenrod | Green |GreenCopper | GreenYellow | Grey |HunterGreen | IndianRed | Khaki |LightBlue | LightGrey | LightWood |LimeGreen | Magenta | MandarianOrange |Maroon | MediumAquamarine | MediumBlue |MediumGoldenrod | MediumOrchid |MediumSeaGreen | MediumSlateBlue |MediumSpringGreen | MediumTurquoise |MediumVioletRed | MediumWood |

Page 114: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

A Das SKF Dateiformat 106

MidnightBlue | NavyBlue | NeonBlue |NeonPink | NewMidnightBlue | NewTan |OldGold | Orange | OrangeRed | Orchid |PaleGreen | Pink | Plum | Quartz | Red |RichBlue | Salmon | Scarlet | SeaGreen |SemiSweetChocolate | Sienna | Silver |SkyBlue | SlateBlue | SpicyPink |SpringGreen | SteelBlue | SummerSky | Tan |Thistle | Turquoise | VeryDarkBrown |VeryLightGrey | Violet | VioletRed |Wheat | White | Yellow | YellowGreen |WeatherML_00000000 | WeatherML_58E0E0E0 |WeatherML_580050A0 | WeatherML_880050A0 |WeatherML_88E0E0E0 | WeatherML_A00050A0 |WeatherML_A0E0E0E0 | WeatherML_B0E0E0E0 |WeatherML_C0F040F0 | WeatherML_C0C01010 |WeatherML_C0F02010 | WeatherML_C0F07010 |WeatherML_C0F0B010 | WeatherML_C0E0E0E0 |WeatherML_C00050A0 | WeatherML_C080E030 |WeatherML_C00000A0 | WeatherML_C050F070 |WeatherML_C000F0B0 | WeatherML_C000F0F0 |WeatherML_C000C0F0 | WeatherML_C000A0F0 |WeatherML_C00070F0 | WeatherML_C02050F0 |WeatherML_C07040F0 | WeatherML_C0C040F0 |WeatherML_D08800A0 | WeatherML_E8E0E0E0 |WeatherML_FF000000 | WeatherML_FF505050 |WeatherML_FFFFFFFF | WeatherML_FF80B040 |WeatherML_FF0050A0 | WeatherML_FF909090 |WeatherML_FFB0B0B0 | WeatherML_FFC0C0C0 |WeatherML_F8D0D0D0)">

<!-- all possible fillstyles --><!ENTITY % FillStyles "( (setFillColor| setFillColorRGBA|

setLinearFillColors |setLinearFillColorsRGBA |setRadialFillColors |setRadialFillColorsRGBA),lineColor|lineColorRGBA)? )">

<!-- all possible transformations --><!ENTITY % Transformations "translate| rotate | scale">

<!-- define a flashmoviea flashmovie contains only frames -->

<!ELEMENT swf ( (frame)* )>

Page 115: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

A Das SKF Dateiformat 107

<!ATTLIST swf rate %Long; "12"width %Integer; "800"height %Integer; "600" >

<!-- define a frame in a flashmovie --><!ELEMENT frame ((background|backgroundRGBA)?,

(shape|getURL|goToFrame|play|stop|button|sound|defineFont|translate|rotate|scale|removeObject|placeObject|placeClonedObject|%ReFillStyles; )* )>

<!ATTLIST frame ID ID #REQUIREDnumber %Long; #REQUIRED>

<!-- tag for the background color --><!ELEMENT backgroundRGBA EMPTY><!ATTLIST backgroundRGBA r %Integer; #REQUIRED

g %Integer; #REQUIREDb %Integer; #REQUIREDa %Integer; #REQUIRED>

<!ELEMENT background EMPTY><!ATTLIST background name %ColorName; #REQUIRED>

<!-- define a shape --><!ELEMENT shape (oval|circle|circle2|polygon|

rectangle|bitmap|text) ><!ATTLIST shape depth %Integer; #IMPLIED

lineWidth %Integer; #IMPLIEDclip (true|false) "true">

<!-- linecolor tags --><!ELEMENT lineColorRGBA EMPTY><!ATTLIST lineColorRGBA r %Integer; #REQUIRED

g %Integer; #REQUIREDb %Integer; #REQUIREDa %Integer; #REQUIRED>

<!ELEMENT lineColor EMPTY><!ATTLIST lineColor name %ColorName; #REQUIRED>

<!-- define a font to use it later. The characterswich are used later have to put into the text tag -->

Page 116: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

A Das SKF Dateiformat 108

<!ELEMENT defineFont (#PCDATA)><!ATTLIST defineFont fontname CDATA #REQUIRED

bold (true|false) "false"italic (true|false) "false"ID ID #REQUIRED>

<!-- text uses a previous specified fontor uses a font name and style (bold/italic).The other attributes can be used for both ways -->height, xCoord and yCoord in twips -->

<!ELEMENT text EMPTY><!ATTLIST text ID ID #REQUIRED

data CDATA #REQUIREDfont CDATA #IMPLIEDusefont IDREF #IMPLIEDbold (true|false) "false"italic (true|false) "false"height %Integer; #IMPLIEDxCoord %Integer; #REQUIREDyCoord %Integer; #REQUIRED>

<!-- now all possible shape objects --><!ELEMENT oval %FillStyles;><!ATTLIST oval ID ID #REQUIRED

xmin %Integer; #REQUIREDymin %Integer; #REQUIREDxmax %Integer; #REQUIREDymax %Integer; #REQUIRED>

<!ELEMENT circle %FillStyles;><!ATTLIST circle ID ID #REQUIRED

centerX %Integer; #REQUIREDcenterY %Integer; #REQUIREDradius %Integer; #REQUIRED>

<!ELEMENT circle2 %FillStyles;><!ATTLIST circle2 ID ID #REQUIRED

xmin %Integer; #REQUIREDymin %Integer; #REQUIREDxmax %Integer; #REQUIREDymax %Integer; #REQUIRED>

<!ELEMENT polygon ( (addStraightLine|addCurvedLine)*,%FillStyles; )>

<!ATTLIST polygon ID ID #REQUIRED

Page 117: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

A Das SKF Dateiformat 109

originX %Float; #REQUIREDoriginY %Float; #REQUIRED>

<!-- add straight or curved lines to a polygon --><!ELEMENT addStraightLine EMPTY><!ATTLIST addStraightLine x %Float; #REQUIRED

y %Float; #REQUIRED>

<!ELEMENT addCurvedLine EMPTY><!ATTLIST addCurvedLine controlX %Float; #REQUIRED

controlY %Float; #REQUIREDanchorX %Float; #REQUIREDanchorY %Float; #REQUIRED>

<!ELEMENT rectangle %FillStyles;><!ATTLIST rectangle ID ID #REQUIRED

xmin %Integer; #REQUIREDymin %Integer; #REQUIREDxmax %Integer; #REQUIREDymax %Integer; #REQUIRED>

<!-- define the fillstyles --><!ELEMENT setFillColorRGBA EMPTY><!ATTLIST setFillColorRGBA r %Integer; #REQUIRED

g %Integer; #REQUIREDb %Integer; #REQUIREDa %Integer; #REQUIRED>

<!ELEMENT setFillColor EMPTY><!ATTLIST setFillColor name %ColorName; #REQUIRED>

<!ELEMENT setLinearFillColorsRGBA EMPTY><!ATTLIST setLinearFillColorsRGBA

leftR %Integer; #REQUIREDleftG %Integer; #REQUIREDleftB %Integer; #REQUIREDleftA %Integer; #REQUIREDrightR %Integer; #REQUIREDrightG %Integer; #REQUIREDrightB %Integer; #REQUIREDrightA %Integer; #REQUIRED

Page 118: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

A Das SKF Dateiformat 110

xCenter %Integer; #IMPLIEDyCenter %Integer; #IMPLIED >

<!ELEMENT setLinearFillColors EMPTY><!ATTLIST setLinearFillColors

leftColor %ColorName; #REQUIREDrightColor %ColorName; #REQUIREDxCenter %Integer; #IMPLIEDyCenter %Integer; #IMPLIED>

<!ELEMENT setRadialFillColorsRGBA EMPTY><!ATTLIST setRadialFillColorsRGBA

centerR %Integer; #REQUIREDcenterG %Integer; #REQUIREDcenterB %Integer; #REQUIREDcenterA %Integer; #REQUIREDoutR %Integer; #REQUIREDoutG %Integer; #REQUIREDoutB %Integer; #REQUIREDoutA %Integer; #REQUIREDxCenter %Integer; #IMPLIEDyCenter %Integer; #IMPLIED>

<!ELEMENT setRadialFillColors EMPTY><!ATTLIST setRadialFillColors

centerColor %ColorName; #REQUIREDoutColor %ColorName; #REQUIREDxCenter %Integer; #IMPLIEDyCenter %Integer; #IMPLIED>

<!-- actionscript tags --><!ELEMENT getURL EMPTY><!ATTLIST getURL url CDATA #REQUIRED

target CDATA #IMPLIEDID ID #REQUIREDevent %Integer; #IMPLIED>

<!ELEMENT goToFrame EMPTY><!ATTLIST goToFrame frame %Integer; #REQUIRED

ID ID #REQUIREDevent %Integer; #IMPLIED>

<!ELEMENT play EMPTY>

Page 119: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

A Das SKF Dateiformat 111

<!ATTLIST play ID ID #REQUIREDevent %Integer; #IMPLIED>

<!ELEMENT stop EMPTY><!ATTLIST stop ID ID #REQUIRED

event %Integer; #IMPLIED>

<!-- just a button --><!ELEMENT button (getURL|goToFrame|play|stop)*><!ATTLIST button ID ID #REQUIRED

depth %Long; #IMPLIEDshapeID_1 IDREF #REQUIREDshapeID_2 IDREF #REQUIREDshapeID_3 IDREF #REQUIREDshapeID_4 IDREF #REQUIREDclip (true|false) "true">

<!-- now all transformations.The coordinates are used in twips -->

<!ELEMENT translate EMPTY><!ATTLIST translate USE IDREFS #REQUIRED

x %Integer; #REQUIREDy %Integer; #REQUIRED>

<!ELEMENT rotate EMPTY><!ATTLIST rotate USE IDREFS #REQUIRED

degree %Float; #REQUIRED>

<!ELEMENT scale EMPTY><!ATTLIST scale USE IDREFS #REQUIRED

x %Float; #REQUIREDy %Float; #REQUIRED>

<!-- remove an object --><!ELEMENT removeObject EMPTY><!ATTLIST removeObject USE IDREFS #REQUIRED>

<!-- place a removed objector place it twice or often -->

<!ELEMENT placeObject EMPTY><!ATTLIST placeObject USE IDREF #REQUIRED>

Page 120: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

A Das SKF Dateiformat 112

<!-- place a predefined object as a new one --><!ELEMENT placeClonedObject EMPTY><!ATTLIST placeClonedObject USE IDREF #REQUIRED

cloneID ID #REQUIRED>

Page 121: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

B Die Java SWF API 113

B Die Java SWF API

In dieser Arbeit wurde einApplication Programming Interface(API) zur Erstellung vonFlashfilmen erzeugt. Diese API basiert auf denHighlevel-Klassen des Macromedia SWFSoftware Development Kit(SDK). Um diese API nutzen zu konnen ist die auf der CD bei-gefugte C++ Bibliothek notwendig. Die Dokumentation der API ist auf der beigelegtenCD im Verzeichnis /docs/f3sdk enthalten.

f3sdk.highlevel

Dieses Paket enthalt die Klassen der Java SWF API.

HFActionPlay

HFActionStop

HFActionGetURL

FRGBAColor

HFFrame

HFMovie

HFObject

Color

HFAction

HFButton

HFFont

HFShape

HFCircle

HFOval

HFRectangle

HFPolygon

HFText

HFEditText

Objectjava.lang

extends

Klasse

HFActionGoToFrame

Page 122: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

C Flashweather-Bibliotheken 114

C Flashweather-Bibliotheken

Die FlashWeather-Bibliothek gliedert sich in den Generator, der sich in dem Java-Paketflashweather.generator befindet, den Clipper, der imflashweather.clip-per Paket enthalten ist und den dazugehorigen geometrischen Objekten, die im Paketflashweather.geomutil enthalten sind. Die mit Javadoc erzeugte Dokumentationder einzelnen APIs ist auf der beigefugten CD-ROM im Verzeichnis /docs/flashweatherzu finden und kann mit einem Webbrowser betrachtet werden. Die folgenden Grafikenveranschaulichen die Klassenhierarchie innerhalb der einzelnen Pakete.

flashweather.generator

Dieses Paket enthalt die Klassen des Generators.

Objectjava.lang.

Pskf

Pshape

Pframe

Prectangle

Pcircle

Pcircle2

Poval

Ppolygon

PaddCurvedLine

PaddStraightLine

PdefineFont

Ptext

Pbackground

PbackgroundRGBA

PsetFillColor

PsetFillColorRGBA

PsetLinearFillColors

PsetLinearFillColorsRGBA

PsetRadialFillColors

PsetRadialFillColorsRGBA

PlineColor

Ptranslate

Pscale

Protate

PplaceObject

PremoveObject

Pstop

Pplay

PgoToFrame

PgoToURL

StoringManager

ParsingObject

Throwablejava.lang.

Exceptionjava.lang.

GeneratorException

ObjectManager

Klasse

Interface

extends

implements

Page 123: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

C Flashweather-Bibliotheken 115

flashweather.geomutil

Dieses Paket enthalt die Klassen der geometrischen Objekte, die fur den Clipper erfor-derlich sind.

Objectjava.lang

Point

PolygonKlasse

extends

flashweather.clipper

Dieses Paket enthalt die Klassen die zum Clippen einer SKF-Datei erforderlich sind.

java.lang.

Object

CircleClipper

Circle2Clipper

ButtonClipper

DefaultClipper

OvalClipper

PolygonClipper

RectangleClipper

ObjectClipperImpl

SKFClipper

ObjectManager

ObjectClipper

ShapeClipper

TextClipper

DefaultHandlerorg.xml.sax.helpers

SAXMultiplexer

Klasse

Interface

AbstrakteKlasse

extendsimplements

Page 124: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

D Die calcQuadIntersec Methode der Klasse Polygon 116

D Die calcQuadIntersec Methode der Klasse Polygon

Das Clipping von quadratischen Bezierkurven ist einer der wesentlichen Algorithmenbeim Clippen von SKF-Dateien. Um die mathematische Herleitung im Kapitel6.4.2unddie Erlauterung der Implementation auf Seite6.4.5mit Quellcode zu belegen, ist im Fol-genden die MethodecalcQuadIntersecPoints angefuhrt, die die Schnittpunkteeiner quadratischen Bezierkurve mit einer Clippingkante errechnet. Da der Quellcodesehr umfangreich ist wurde auf die Fehlerbehandlung verzichtet und es wird nur das Clip-ping an der oberen waagerechten Kante dargestellt. Die Vorgehensweise fur die anderenClippingkanten ist analog implementiert.

private Point[] calcQuadIntersecPoints(Point from,Point to,int which,int value) {

double x0=0, y0=0, x1=0, y1=0, x2=0, y2=0;

boolean doubleT = false;

double fromValues[] = from.getValues();double toValues[] = to.getValues();

x0=fromValues[1]; y0=fromValues[2];x1=toValues[3]; y1=toValues[4];x2=toValues[1]; y2=toValues[2];

Point P0 = new Point(x0,y0);Point P1 = new Point(x1,y1);Point P2 = new Point(x2,y2);

double t0=0, t1=0;if (which==YMIN || which==YMAX) {//Berechnung des Parameters t falls//waagerechte Clippinggrenze

double square=value*y0-2*value*y1+y1*y1+value*y2-y0*y2;

if (square<0.0) {//komplexe Loesung nicht moeglichreturn null;

}

if (square==0) {t0=(y0-y1)/(y0-2*y1+y2);doubleT=false;

}

Page 125: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

D Die calcQuadIntersec Methode der Klasse Polygon 117

else if(square>0.0) {t0=(y0-y1+Math.sqrt(square))/(y0-2*y1+y2);t1=(y0-y1-Math.sqrt(square))/(y0-2*y1+y2);if (t1<t0) {

double hilf=t0;t0=t1;t1=hilf;

}doubleT=true;

}}

else if (which==XMIN || which==XMAX){//Berechnung des Parameters t falls//senkrechte Clippinggrenze

double square=value*x0-2*value*x1+x1*x1+value*x2-x0*x2;if (square<0.0) {

//komplexe Loesung nicht moeglichreturn null;

}

if (square==0) {t0=(x0-x1)/(x0-2*x1+x2);doubleT=false;

}else if(square>0.0) {

t0=(x0-x1+Math.sqrt(square))/(x0-2*x1+x2);t1=(x0-x1-Math.sqrt(square))/(x0-2*x1+x2);if (t1<t0) {

double hilf=t0;t0=t1;t1=hilf;

}doubleT=true;

}}if (which==YMIN) {

//obere waagerechte Clippinggrenze

Point[] newPoints = null;

//Ankerpunkte sind innerhalb und Kontrollpunkt//ausserhalb der Clippinggrenzen,//sowie zwei t Werteif (y0>value && y2>=value && y1<value && doubleT) {

newPoints = new Point[3];

Page 126: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

D Die calcQuadIntersec Methode der Klasse Polygon 118

//Punkte f"ur P0,P1’ und P2’ errechnen//Kurve zwischen 0 und t0//P0 bleibt erhaltenPoint P1_ = LERP(P0, P1, t0);Point P2_ = LERP(LERP(P0,P1,t0),LERP(P1,P2,t0),t0);newPoints[0]=new Point(P2_,P1_);//Erstes Kurvensegment errechnet

//Segment zwischen t1 und 1 errechnenPoint P0_ = LERP(LERP(P0,P1,t1), LERP(P1,P2,t1),t1);P1_ = LERP(P1, P2, t1);//P2 bleibt so erhalten

//gerades LiniensegmentnewPoints[1] = P0_;

//zweites KurvensegmentnewPoints[2] = new Point(P2, P1_);//fertig mit diesem Fall

}else if(y0<value && y2>=value) {

//Die Kurve verlaeuft von aussen nach innenPoint P1_ = LERP(P1, P2, t0);Point P0_ = LERP(LERP(P0,P1,t0),LERP(P1,P2,t0),t0);newPoints = new Point[2];newPoints[0] = P0_;newPoints[1] = new Point(P2, P1_);

}else if(y0>value && y2<=value) {

//Die Kurve verlaeuft von innen nach aussenPoint P1_ = LERP(P0, P1, t0);Point P2_ = LERP(LERP(P0,P1,t0),LERP(P1,P2,t0),t0);newPoints = new Point[1];newPoints[0] = new Point(P2_, P1_);

}else if(doubleT && (y0<value && y2<=value

&& y1>value) ) {//Anker aussen und Kontrollpunkt innenPoint P0_ = LERP(LERP(P0,P1,t0),LERP(P1,P2,t0),t0);Point P2_ = LERP(LERP(P0,P1,t1),LERP(P1,P2,t1),t1);Point P1_ = LERP(P0_, LERP(P1, P2, t0), t1);

newPoints=new Point[2];newPoints[0] = P0_;newPoints[1] = new Point(P2_, P1_);

}

Page 127: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

D Die calcQuadIntersec Methode der Klasse Polygon 119

return newPoints;}else if (which==XMAX) {

//rechte senkrechte Clippinggrenze//[ ... ] analog zum Fall YMIN

}else if (which==YMAX) {

//untere waagerechte Clippinggrenze//[ ... ] analog zum Fall YMIN

}else if (which==XMIN) {

//linke waagerechte Clippinggrenze//[ ... ] analog zum Fall YMIN

}}

Page 128: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

E Inhalt der CD-Rom 120

E Inhalt der CD-Rom

arbeit Diplomarbeitarbeit/latex Latex-Quellen und Grafikenarbeit/pakete Tex-Pakete und Dokumentationarbeit/pdf Acrobat Reader PDF-Versionarbeit/ps Postscript Versionarbeit/html HTML-Version

beispiel Anwendung der Flashweather-Klassenbeispiel/skfdateien Aus [Stark2001] erzeugte SKF-Dateienbeispiel/flash Flashfilmebeispiel/clipped geclippte Filme

classes Alle Java-Klassenclasses/flashweather/generator Die Generator-Klassenclasses/flashweather/clipper Die Clipper-Klassenclasses/flashweather/geomutil Die Point- und Polygon-Klasseclasses/swfsdk Das Macromedia SWF-SDKclasses/f3lib C++ Klassen fur dienative-Anbindung

docs Dokumentationdocs/flashweather API der Flashweather Paketedocs/java Java 2 APIdocs/swf Flash Dateiformat Spezifikationdocs/w3c XML, DOM, SVG Spezifikationendocs/xerces Xerces-J API

bibliotheken Die entwickelten Bibliothekenbibliotheken/flashweather Die Flashweather-JAR-Dateienbibliotheken/javaswf api JAR-Datei der Java SWF APIbibliotheken/lib Die C++ Library fur die Java SWF API

software benotigte Softwarepaketesoftware/flash Flash Netscape-Plugin fr Linuxsoftware/java Java 2 SDK 1.3software/swf-sdk Macromedia SWF-SDKsoftware/xerces Apache Xerces-J XML-Parser

Page 129: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

F Literaturverzeichnis 121

F Literaturverzeichnis

Die Literaturquellen beziehen sich nicht nur auf gedruckte Literatur, sondern im wesentli-chen auf Websites. Letztere bieten einen aktuelleren Zugang zu Informationen, vor allemin der recht schnellebigen Informatik, sind aber auch gerade deshalb schnell veraltet undwerden geloscht oder die URLandert sich durch Umstrukturierungen auf dem Server. Zudem Zeitpunkt der Abgabe dieser Diplomarbeit waren alle Adressen erreichbar.

Literatur

[Apac2001b] ApacheApache XML Projecthttp://xml.apache.org

[Apac2001] ApacheApache Software License, Version 1.1http://xml.apache.org/LICENSE

[Beck2000] Becker, OliverWas ist XML?http://www.informatik.hu-berlin.de/˜xing/Einstieg

[BeMi2000] Behme, Henning ; Mintert, StefanXML in der Praxis, 2. erweiterte AuflageAddison Wesley Lomgman Verlag, Pearson Education DeutschlandGmbH 2000

[Cove2001] The XML Cover PagesXML Onlinereferencehttp://xml.coverpages.org

[Deho2001] Deuflhard, Peter; Hohmann, AndreasNumerische Mathematik I, 2.AuflageWalter de Gruyter, Berlin 1993

[Debo2001] Debon, OlivierPage for multi-platform Flash Pluginhttp://www.geocities.com/TimesSquare/Labyrinth/5084/flash/download.html

[FAQ2001] FAQ.orgcomp.graphics.algorithms FAQhttp://www.faqs.org/faqs/graphics/algorithms-faq

Page 130: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

F Literaturverzeichnis 122

[Fell1992] Fellner, Wolf-DietrichComputergrafik, 2.AuflageReihe Informatik, Band 58, BI-Wissenschaftsverlag, 1992

[Fine2001] Finetuning.comXML Parsershttp://www.finetuning.com/parse.html

[Gopr2000] Goldfarb, Charles F.; Prescod, PaulDas XML-Handbuch, 1.AuflageAddison Wesley Lomgman Verlag, Pearson Education DeutschlandGmbH 2000

[Har2000] Harold, Elliotte RustyDie XML Bibel, 1.AuflageMITP-Verlag GmbH, Bonn 2000

[Har2001] Harold, Elliotte RustyXML in a Nutshell, 1.AuflageO’Reilly, Koln 2001

[IBM2001] IBM AlphaworksXML Parser for Javahttp://www.alphaworks.ibm.com/formula/xml

[IDC2001] International Data CorporationOnline User Forecast, Stand Marz 2001http://www.idc.com

[ISO2001] International Standard Organisationhttp://www.iso.ch

[Lee2000] Berners-Lee, TimBiographyhttp://www.w3.org/People/Berners-Lee/

[Macr2001] Macromedia Inc.Macromedia Flash File Format (SWF) Software Development Kit(SDK) License Agreementhttp://www.macromedia.com/software/flash/open/licensing/fileformat/

[Macr2001a] Macromedia Inc.Flash Player Statisticshttp://www.macromedia.com/software/flash/survey/

[Macr2001b] Macromedia Inc.Company backgroundhttp://www.macromedia.com/macromedia/proom/corpinfo/background.html

Page 131: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

F Literaturverzeichnis 123

[Macr2001c] Macromedia Inc.Flash Player Quellenhttp://www.macromedia.com/software/flash/open/licensing/sourcecode/

[Macr2001d] Macromedia Inc.Flash File Format SDK Documentationhttp://www.macromedia.com/software/flashplayer/downloads/

[NPDO2001] NPD-OnlineEssential Market Informationhttp://www.npd.com

[OpTe2001] Open Text CorporationAelfredhttp://www.opentext.com/microstar

[Orac2001] OracleOracle Technology Networkhttp://technet.oracle.com

[Oswf2001] Open SWF.Introduction to SWFhttp://www.openswf.org/

[Scho2000] Schoch, FrankXML-Parserhttp://www.informatik.fh-muenchen.de/˜schieder/xml-00-01/04-parser/inhalt.html

[Schw1997] Schwarz, Hans RudolfNumerische MathematikB. G. Teubner, Stuttgart 1997

[Stark2001] Stark, BenjaminFlashWeather, Vektorisierung von raum- und zeitbezogenen Daten zurVisualisierung mit Macromedia Flash, DiplomarbeitUniversitat Osnabruck 2001

[Sun2001a] Sun MicrosystemsJava Native Interfacehttp://java.sun.com/docs/books/tutorial/native1.1/index.html

[Sun2001b] Sun MicrosystemsJava Technology and XMLhttp://java.sun.com/xml

[Wol2000] Wolter, SaschaFlash 4, 1.AuflageGalileo Press GmbH, Bonn 2000

Page 132: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

F Literaturverzeichnis 124

[WMO1998] World Meteorological OrganzationA guide to the code form FM 92-IX Ext. GRIBhttp://www.wmo.ch/web/www/reports/Guide-binary-2.html

[W3C2001a] World Wide Web ConsortiumXMLhttp://www.w3c.org/XML

[W3C2001b] World Wide Web ConsortiumXHTMLhttp://www.w3c.org/TR/xhtml1

[W3C2001c] World Wide Web ConsortiumXML 1.0 Recommendationhttp://www.w3c.org/TR/1998/REC-xml-19980210

[W3C2001d] World Wide Web ConsortiumSynchronized Multimediahttp://www.w3.org/AudioVideo/

[W3C2001e] World Wide Web ConsortiumW3C Scalable Vector Graphics (SVG)http://www.w3.org/Graphics/SVG/Overview.htm8

Page 133: Flash Weather - Universität Osnabrückrkunze/flashweather/flashweather.pdf · 1 Einleitung 1 1 Einleitung Das Internet bietet eine gewaltige Informationsvielfalt. Fast zu jedem Thema

Erkl arung

Hiermit erklare ich, daß ich die Diplomarbeit selbststandig angefertigt und keine Hilfs-mittel außer denen in der Arbeit angegebenen benutzt habe.

Osnabruck, den ................ .................................(Unterschrift)