21
|
1 DIGITAL DOCUMENT LIBRARY
|
|
2 ------------------------
|
|
3
|
|
4 Stand : 21. Januar 2001
|
|
5
|
|
6
|
|
7 Leitung : Gerd Grasshoff (gerd.grasshoff@philo.unibe.ch)
|
|
8
|
|
9 Autor : Christian Luginbühl (luginbuehl@student.unibe.ch)
|
|
10
|
|
11
|
|
12
|
|
13 Inhalt
|
|
14 ------
|
|
15
|
|
16 1. Einführung
|
|
17
|
|
18 2. digilib3.jsp
|
|
19
|
|
20 3. navigation3XXX.js
|
|
21
|
|
22 4. ScaleServlet.java
|
|
23
|
|
24
|
|
25
|
|
26 1. Einführung
|
|
27 -------------
|
|
28
|
|
29 Das Projekt Digital Document Library hat zum Ziel, "Dokumente" mit Hilfe eines
|
|
30 Browsers anschauen zu können. Diese Dokumente sind hochaufgelöste Bilddateien,
|
|
31 die auf einem Server gespeichert sind. Um der Benutzerin, dem Benutzer die
|
|
32 Möglichkeit einer raschen Konsultation der Daten liefern zu können, müssen diese
|
|
33 Bilddaten auf eine vernünftige Grösse verkleinert und in dieser Form dann an die
|
|
34 Anfragenden geschickt werden. Weiten sollen den Benutzenden Hilfsmittel zur
|
|
35 Verfügung stehen um in diesen Seiten zu navigieren. Diese Hilfsmittel bestehen
|
|
36 aus Funktionen um zwischen verschieden Seiten hin und her zu wechseln,
|
|
37 Ausschnitte aus einem Bild zu zoomen und der Möglichkeit Markierungen zu setzen.
|
|
38 Ein weiteres wichtiges Feature dieses Programms ist es, Referenzen ganz
|
|
39 bestimmter Seiten (inkl. Ausschnitte und Markierungen) auszugeben, die dann in
|
|
40 beliebigen anderen Dokumenten eingebaut werden können. Sofern die Lesenden
|
|
41 dieser Dokumente dann über einen Anschluss ins Internet verfügen, können diese
|
|
42 Referenzen direkt angeschaut werden und so die Digital Document Library als
|
|
43 grosse Quelltextsammlung gebraucht werden.
|
|
44
|
|
45 Das Programm nun ist ein Client/Server-Modell. Einerseits haben wir das User
|
|
46 -Interface (also den Client), wo die Darstellung und die Navigation aufgebaut
|
|
47 und berechnet werden. Dieser Teil des Programms umfasst im Prinzip zwei Dateien.
|
|
48 Mit der Frage des Layouts beschäftigt sich digilib3.jsp. Es ist die Datei, die
|
|
49 im Browser aufgerufen wird (mit den verschiedenen Parametern, die in Kapitel 2
|
|
50 erläutert werden) und die nötigen Aufrufe macht für die Skalierung der Bilddaten
|
|
51 und der entsprechenden Navigationselemente. Die zweite Datei des Clients ist
|
|
52 eine dynamisch ausgerufene JavaScript-Datei namens navigation3XXX.js, wobei die
|
|
53 XXX für die verschidenen Borwservarianten stehen. Da die Scriptsprache
|
|
54 JavaScript in den verschiedenen Browsern nicht ganz gleich implementiert ist,
|
|
55 ist es nötig diese Datei an die verschidenen Umgebungen anzupassen. Das Laden
|
|
56 dieser Dateien übernimmt digilib3.jsp, indem es erst abfragt, welchen Browser
|
|
57 von Client gebraucht wird und dann die entsprechende navigation-Datei vom Server
|
|
58 verlangt. Auf der Serverseite ist ein Programm namens ScaleServlet sehr wichtig.
|
|
59 Dieses Servlet handelt die Anfragen der Clients und macht die verschiedenen
|
|
60 Skalierungen an dem Bildern und schickt, dann den entsprechenden Ausschnitt an
|
|
61 den Client.
|
|
62
|
|
63 In den nächsten Kapitel sind die einzelnen Files mit ihren verschidenen
|
|
64 Parametern der Aufrufe erläutert.
|
|
65
|
|
66
|
|
67 2. digilib3.jsp
|
|
68 ---------------
|
|
69
|
|
70 Bei einem Request von digilib3.jsp werden auf der Serverseite die verschiedenen
|
|
71 Parameter des Aufrufs in die zurückgesendete Datei eingefüllt und dann vor allem
|
|
72 für den von 'digilib' ausgehenden Aufruf des ScaleServlets verwendet. Die
|
|
73 verschiedenen Parameter beim Request sind durch Pluszeichen voneinander
|
|
74 getrennt. Beispiel:
|
|
75
|
|
76 http://pene ... /digilib3.jsp?histast/eastwood-collection/AF+3+s1.2+r:3852+12/30
|
|
77 ------------------------------ - ---- ------ -----
|
|
78 Parameter 1 2 3 4 5
|
|
79
|
|
80 Die verschiedenen Parameter werden in digilib3.jsp in ein Array mit 11 Elementen
|
|
81 (1 - 11) aufgenommen. Folgend ist nun eine Auflistung aller Parameter und ihrer
|
|
82 Bedeutung. Es ist absolut zwingend, dass diese in der richtigen Reihenfolge
|
|
83 aufgerufen werden.
|
|
84
|
|
85 - att[1] = '<%= docuurl %>'
|
|
86
|
|
87 Dieser Parameter gibt den Pfad ohne Hostnamen zum Verzeichnis mit dem
|
|
88 gewünschten Werk an. Wichtig zu verstehen ist, dass hier nicht ein bestimmtes
|
|
89 Bild angesprochen wird, sondern nur ein Verzeichnis.
|
|
90
|
|
91 - att[2] = '<%= startPage %>'
|
|
92
|
|
93 Dies ist die Nummer des Bildes im von Parameter 1 gewählten Verzeichnis. Falls
|
|
94 dieser Parameter leer ist, wird er automatisch auf '1' gesetzt.
|
|
95
|
|
96 - att[3] = '<%= scalefact %>'
|
|
97
|
|
98 Scalefact gibt den Vergrösserungsfaktor der Bildes an, im Vergleich zur in
|
|
99 ScaleServlet angegebenen Standardgrösse. Die Syntax diese Parameters ist 'sx.x',
|
|
100 wobei x.x für die Werte 0.6, 0.8, 1.0, 1.2, 1.4, 1.6, 2.0, 2.5 oder 3.0 stehen
|
|
101 kann. Standardwert ist 's1.0'.
|
|
102
|
|
103 (Anm: Serverseitig wird an diesem Teil noch gearbeitet, damit die Standardgrösse
|
|
104 auf verschidenen Bildschirmen auch verschieden gross ist)
|
|
105
|
|
106 - att[4] = '<%= commandostring %>'
|
|
107
|
|
108 Gebraucht wird dieser Parameter dafür, dass die Bilder nicht aus dem
|
|
109 Browsercache genommen werden, sondern auf dem Server dann neu berechnet werden.
|
|
110 Bei einem "Zoom Out" wird hier eine Zufallszahl generiert. Die Syntax ist
|
|
111 'r:xxxx', wobei x irgend eine höchstens vierstellige Zahl. Standardwert ist r:1.
|
|
112
|
|
113 - att[5] = '<%= remarkcoord %>'
|
|
114
|
|
115 In diesem Parameter werden die Koordinaten der Markierungspunkte festgehalten.
|
|
116 Syntax ist 'xxx/yyy;zzz/ttt; ... aaa/bbb'. Die Koordinatenpaare um "/" geben an,
|
|
117 wo eine Markierung gesetzt werden soll, wobei Werte von 0 bis zur aktuellen
|
|
118 Bildgrösse erlaubt sind. Durch ";" werden die einzelnen Markierungen getrennt
|
|
119 (maximal 5 sind möglich). Standardwerte sind hier '' (leer) oder '0/0' (keine
|
|
120 Markierung wird gesetzt).
|
|
121
|
|
122 - att[6] = '<%= windowwidth %>' / att[7] = '<%= windowheight %>'
|
|
123
|
|
124 Windowwidth gibt an, wie breit/hoch das Bild auf dem Bildschirm ist. Standard
|
|
125 ist '' (leer).
|
|
126
|
|
127 - att[8] = '<%= xoffset %>' / att[9] = '<%= yoffset %>'
|
|
128
|
|
129 Diese Attribute haben zwei Bedeutungen. Falls att[10] und att[11] leer sind,
|
|
130 gibt xoffset bzw. yoffset an, um welchen Punkt im Bild gezoomt werden soll.
|
|
131 Falls att[10], att[11] nicht leer sind, geben sie die Koordinaten der linke
|
|
132 oberen Ecke des zu vergrössernden Bildausschnitts an. Standard ist hier ''
|
|
133 (leer).
|
|
134
|
|
135 - att[10] = '<%= width %>' / att[11] = '<%= height %>'
|
|
136
|
|
137 Falls diese Attribute verschieden von '' (leer) sind, geben sie die Breite/Höhe
|
|
138 des Bildaussschnittes an, der gezoom werden soll.
|
|
139
|
|
140
|
|
141 Die weiteren Funktionen von digilib3.jsp sind:
|
|
142
|
|
143 - Laden des navigation3XXX.js-Files für den entsprechenden Browser.
|
|
144 - Erstellen eines Framesets (kleiner Frame mit den Navigationsbuttons und
|
|
145 Frame mit dem Bild).
|
|
146 - Erstellen der Navigationsbuttons.
|
|
147 - Zusammenstellen der korrekten Parameterliste für den Aufruf von ScaleServlet.
|
|
148 - Erstellen der verschiedenen Layers mit dem Bild (Aufruf), den Markierungen und
|
|
149 den Zeichen für die Eckpunkte beim Vergrössern.
|
|
150 - Aufruf an navigation3XXX.js für Intialbefehle wie Setzen der Markierungspunkte.
|
|
151
|
|
152
|
|
153 3. navigation3XXX.js
|
|
154 --------------------
|
|
155
|
|
156 Navigation3XXX.js ist eine Sammlung von Funktionen zur Navigation in der Digital
|
|
157 Document Library. Die verschidenen Funktionen werden zum Beispiel durch klicken
|
|
158 auf einen in digilib3.jsp erstellten Navigationsknopf aufgerufen. Um
|
|
159 verschiedene Browser zu unterstützen (die Implementierung von Javascript und das
|
|
160 Document Object Model sind unterschiedlich), gibt es angepasste navigation3
|
|
161 -files, die von digilib3.jsp entsprechend des verwendeten Browsers geladen
|
|
162 werden. Momentan sind Versionen für Netscape Communicator 4.xx (navigation3.js)
|
|
163 und Netscape 6 (navigation3_n6.js) verfügbar. Bei der Programmierung des Clients
|
|
164 wurde darauf geschaut, dass digilib3.jsp für möglichst alle Browser das selbe
|
|
165 ist und somit nur navigation3XXX.js angepasst werden muss. Voraussetzung hierzu
|
|
166 ist, dass ein Brwoser mit Layern (<div>-Tags) umgehen kann. Nachstehend ist ganz
|
|
167 kurz erläutert, welche Funktionen in navigation3XXX.js welche Aufgaben erfüllen:
|
|
168
|
|
169 - genString(detail)
|
|
170
|
|
171 Anhand von 'detail' generiert diese Funktion die Parameterliste für einen Aufruf
|
|
172 eines neuen Bildes, eines Ausschnittes oder des Strings für eine
|
|
173 Referenzabfrage. 'detail' wird gebraucht, um die Anzahl der nötigen Parameter
|
|
174 für das Ausführen der aufrufenden Funktion zu bestimmen. Diese Funktion wird
|
|
175 immer indirekt, d.h. in anderen Funktionen von navigation3XXX.js aufgrufen und
|
|
176 liefert eine Stringrückgabe.
|
|
177
|
|
178 - Backpage(), Nextpage(), Page()
|
|
179
|
|
180 Diese Funktionen handeln die Navigation durch die Seiten eines Verzeichnisses.
|
|
181 Diese Funktionen werden mit einem Klick auf die Navigationsbuttons aufgerufen
|
|
182 und Laden eine neue Seite.
|
|
183
|
|
184 - Ref(refselect)
|
|
185
|
|
186 Hier wird ein PopUp-Fenster erzeugt, das die komplette URL der momentanen Seite
|
|
187 zurückgibt. Mit 'refselect' wird bestimmt, ob die Formatierung der Ausgabe in
|
|
188 HTML- oder LaTeX-Form sein soll. Diese Funktion wird mit dem "Ref"-Button
|
|
189 aufgerufen.
|
|
190
|
|
191 - Mark()
|
|
192
|
|
193 Diese Funktion plaziert eine Markierung auf dem Bild, wobei sie zuerst nur die
|
|
194 Maus-koordinaten bei einem Klick auf das Bild abfängt und dann die Funktion
|
|
195 'setmark()' aufruft. Es können bis zu fünf Markierungen auf ein Bild gesetzt
|
|
196 werden. Auch diese Funktion wird direkt über die Navbuttons aufgerufen.
|
|
197
|
|
198 - Zoomrect(), Zoomin(), Zoomout()
|
|
199
|
|
200 Direkt aufgerufene Funktionen die sich mit dem Zoomen innerhalb eines Bildes
|
|
201 beschäftigen. Die Rückgabe ist bei allen drei Funktionen ein Aufruf eines neuen
|
|
202 Bildes.
|
|
203
|
|
204 - Moveto()
|
|
205
|
|
206 Diese Funktion verändert das Zentrum bei einem schon gezoomten Bild. Die
|
|
207 geklickten Koordinaten entsprechen dann dem Zenrum des neuen Bildes bei gleicher
|
|
208 Vergrösserung. Dieses Feature wird in Zeichnungsprogrammen oft mit 'Pan'
|
|
209 betitelt. Direkter Aufruf und Aufruf des neuen Bildes sind gleich wie bei den
|
|
210 Zoom-Funktionen.
|
|
211
|
|
212 - Scaledef(scaledef)
|
|
213
|
|
214 Mit Scaledef wird die Bildgrösse im Vegleich zur in ScaleServlet.java
|
|
215 angegebenen Standardgrösse verändert. Der Parameter 'scaledef' gibt diesen
|
|
216 Faktor an. Eine Liste der möglichen Werte ist weiter oben angegeben. Auch hier
|
|
217 wird di Funktion direkt über die Auswahlliste im Navigationsframe aufgerufen und
|
|
218 auch hier wird ein neues Bild geladen.
|
|
219
|
|
220 - setmark()
|
|
221
|
|
222 Setmark wird indirekt von Mark() oder initScripts() aufgerufen und zeichnet sich
|
|
223 für die Positionierung der Markierungen verantwortlich. Die Funktion extrahiert
|
|
224 aus att[5] die einzelnen Koordinaten und setzt die Punkte. Wenn eine bestimmte
|
|
225 Reihenfolge bei den Punkten eingehalten werden soll, dann müssen sie auch immer
|
|
226 gleich in der Parameterliste aufgerufen werden. Die Funktion setmark gibt nichts
|
|
227 zurück.
|
|
228
|
|
229 - parseKeypress()
|
|
230
|
|
231 Diese Funktion dient dem Abfangen von Tastatureingaben, wobei die Tasten "n" für
|
|
232 nächste Seite und "b" für vordere Seite abgefragt werden. parseKeypress wird von
|
|
233 initScripts aufgerufen und hat keinen Rückgabewert.
|
|
234
|
|
235 - initScripts()
|
|
236
|
|
237 In dieser Funktion werden Vorkehrungen getroffen, die beim Anzeigen einer neuen
|
|
238 Seite getroffen werden müssen. Deshalb wird diese Funktion automatisch beim
|
|
239 Laden von digilib3.jsp aufgerufen. Insbesondere ruft diese Funktion
|
|
240 parseKeypress und setmark auf, wobei bei verschiedenen Browsertypen auch noch
|
|
241 andere Sachen hinzukommen (bei Netscape 6 wird zum Beispiel auch die
|
|
242 Clientgrösse berechnet und geschaut ob Scrollbalken gemacht werden müssen).
|
|
243
|
|
244
|
|
245 4. ScaleServlet.java
|
|
246 --------------------
|
|
247
|
|
248 Der Aufruf von ScaleServlet.java erfolgt grundsätzlich von digilib3.jsp und die
|
|
249 Parameterliste hat auch die selben Attribute (ausgenommen ist att[5] mit den
|
|
250 Koordinaten der Markierungspunkte. Bei Fragen über die einzelnen Bedeutungen der
|
|
251 Attribute sie hier also auf Kapitel 2 verwiesen. An dieser Stelle sei aber noch
|
|
252 etwas gesagt, über die Zusammensetzung der Parameterliste. ScaleServlet.java
|
|
253 kennt drei verschiden lange Parameterlisten, mit denen es arbeiten kann, wobei
|
|
254 die korrekte Zusammenstellung der Parameterliste in digilib3.jsp erfolgt.
|
|
255
|
|
256 - Kurz (att[1] - att[4])
|
|
257
|
|
258 Diese vier Parameter geben dem ScaleServlet die Aufgabe, ein Bild (bestimmt mit
|
|
259 att[1] und att[2]) auf die Standardgrösse zu skalieren und an den Client zu
|
|
260 senden. Att[3] gibt zusätzlich den Skalierungsfaktor an und att[4] verhindert
|
|
261 mit einer Zufallszahl, dass das Bild aus dem Browsercache geholt wird.
|
|
262
|
|
263 - Mittel (att[1] - att[4] + att[6] - att[9])
|
|
264
|
|
265 Diese Möglichkeit des Aufrufs wird gebraucht, um bezüglich des in att[8] und
|
|
266 att[9] bestimmten Mittelpunktes einen Ausschnitt zu vergrossen. Um den genannten
|
|
267 Punkt einzuordnen, wird die grösse des momentan angezeigten Bildes mit den
|
|
268 Parametern 6 und 7 mitgegeben.
|
|
269
|
|
270 - Lang (att[1] - att[4] + att[6]- att[11])
|
|
271
|
|
272 Ein Aufruf in dieser Form gibt dem Servlet an, einen Ausschnitt aus einem Bild
|
|
273 zu vergrössern und zurückzusenden. Folgt ein Aufruf in dieser Form, bekommen die
|
|
274 Parameter att[8] und att[9] die Werte der linken oberen Ecke und att[10]/[11]
|
|
275 die Breite/Höhe des Ausschnitts.
|
|
276
|
|
277
|
|
278 Aufgrund eines eingebauten Session-Managements im Servlet ist es möglich mit
|
|
279 digilib auch mehrfach in ein Bild hinein zu zoomen.
|
|
280
|
|
281 (Anm: Auch wenn dieses Session-Management seinen Zweck beim Anschauen der Bilder
|
|
282 sehr gut erfüllt, ist es dem ScaleServlet nicht möglich den Referenz-URLs
|
|
283 anzusehen, ob zuerst mehrfach hineingezoomt wurde und gibt unter Umständen
|
|
284 - eben wenn mehrfach hieingezoomt wurde vor der Generierung der Referenz - einen
|
|
285 falschen Ausschnitt zurück.)
|
|
286
|
|
287
|
|
288 ---------------------------------------------- |