<%BANNER%>

Reimplementation of the Computer and Information Science and Engineering (CISE) department website ssing a content manag...

University of Florida Institutional Repository
xml version 1.0 encoding UTF-8
REPORT xmlns http:www.fcla.edudlsmddaitss xmlns:xsi http:www.w3.org2001XMLSchema-instance xsi:schemaLocation http:www.fcla.edudlsmddaitssdaitssReport.xsd
INGEST IEID E20110109_AAAAZO INGEST_TIME 2011-01-10T02:35:05Z PACKAGE UFE0001224_00001
AGREEMENT_INFO ACCOUNT UF PROJECT UFDC
FILES
FILE SIZE 1675 DFID F20110109_AADHJD ORIGIN DEPOSITOR PATH gerhard_r_Page_143.txt GLOBAL false PRESERVATION BIT MESSAGE_DIGEST ALGORITHM MD5
a64f9fa6d5376523dab5bcb63b4ca5cd
SHA-1
1a58202905b4f5d7e634530c26f3f779c9f1361f
2203 F20110109_AADHIP gerhard_r_Page_129.txt
20a0df2f4e166a080204c46fc5e5d70f
3cebd34f093a1a2ef2b0677ea5feca0f5c180a26
860 F20110109_AADHJE gerhard_r_Page_144.txt
ff9f737f9c6d1da35dd61eed97985e98
e446171ce1e682a72a44840511a191c2acca67ca
1913 F20110109_AADHIQ gerhard_r_Page_130.txt
6f229acb7db3aecef5d47a18c8ae94ef
37306398368e9e01c719ee697974687fe8756e4a
887 F20110109_AADHJF gerhard_r_Page_145.txt
4f3a71a0d364e3f7a55d9186e4bc9252
aad94d18edbea13c02a02d3f57c9f65b18456fb5
1420 F20110109_AADHIR gerhard_r_Page_131.txt
11e1510544d7afd64b446a8bcab92264
2483bcebe39fe2fbf94f29172147a9cefdfbec7d
7528 F20110109_AADHJG gerhard_r_Page_001thm.jpg
8ec483a0b74106563d9d97a3ac322c84
da52ed09738c37d865e9f0ff3a173fee76758228
2107 F20110109_AADHIS gerhard_r_Page_132.txt
d0aa4f90e311e1f8e243da9f12e09e4e
f9aa96658be17b89c79ab3b1720612cfde236481
2088345 F20110109_AADHJH gerhard_r.pdf
aa4cff24a519a2d88f41a6e05c8a992a
4a606b7a1377f5861805f980aafaefc20007beb5
20252 F20110109_AADHJI gerhard_r_Page_001.QC.jpg
87438b7b19d02d87282561031ce4cbf1
2ad812664f9603d02bf7357e546160e805bd0df3
4482 F20110109_AADHIT gerhard_r_Page_133.txt
5228a765bba324b958acb5c6df90fa4e
9a982fa116ffd3335a0f790a66a9d0c7e1ea87b6
5634 F20110109_AADHJJ gerhard_r_Page_002.QC.jpg
e80dfccef625b69c21916a18af5774e4
385570750deb0ee9ab9b1c6178ddf8b7a1303846
2850 F20110109_AADHIU gerhard_r_Page_134.txt
692a963f758175cf33e57f8063355bca
ed210f1037893202a2fb043b17fd6a97af739f2e
3097 F20110109_AADHJK gerhard_r_Page_002thm.jpg
be43c97577126db4837fe9a16d89df14
42e167738360732f72fbb1d1738946807c783a4f
3374 F20110109_AADHIV gerhard_r_Page_135.txt
e1edeed63d03c9adc9b5d3acaed1d254
b1e82744ee4930aff7e483426c35854097f8432e
5260 F20110109_AADHJL gerhard_r_Page_003.QC.jpg
ee22d7eea29527b4d873fc778cbcd3db
223f82f5bcb4c03b808eaaf54e22560fd68bc799
3212 F20110109_AADHIW gerhard_r_Page_136.txt
fe351c3ec5c36ab614e3b2bea2db3a19
d397afd1f8cf8ea773d8231ffb2d0895d67c7544
64067 F20110109_AADHKA gerhard_r_Page_011.QC.jpg
c2954572722d31c0e755e99befd41029
acfceff121a2c9e65b2c579938db373cd0ef7f64
2820 F20110109_AADHJM gerhard_r_Page_003thm.jpg
3d618804577b6e6c1a811c74d80a28b7
2285325a66611e96ac69279c58bdf016d7c3b9bd
1693 F20110109_AADHIX gerhard_r_Page_137.txt
91b819df4cf28105c7892db7a0b1b3f9
85b86a187dc9ed86dd347e6e94387cd0277809a0
19340 F20110109_AADHKB gerhard_r_Page_011thm.jpg
8e98ff6853dce32f39e5ef05cdb6095f
da97954ec99d012d53824662dbf442c161bd3941
24182 F20110109_AADHJN gerhard_r_Page_004.QC.jpg
15bce97ae6fde8660ac58a84ae778a1a
7ffdfdbd71ab54d5b7a495c7c4ca85aa7eb42675
2015 F20110109_AADHIY gerhard_r_Page_138.txt
ee4e92e6ac53da69df218aa66e44103c
3ab7d42200f1054e54fb7c48f8b0d06404d8a299
110641 F20110109_AADGHA gerhard_r_Page_019.jp2
c82a936306799f5f27b1076fb0223ba8
affd19df72a4cfa0731e07c0b92d0aa05ab845a6
47359 F20110109_AADHKC gerhard_r_Page_012.QC.jpg
aa10003b458076ca9e170dabb4ebb251
ffb61ef6d925c605b8e9f55463fd7440a0dbdf1b
8409 F20110109_AADHJO gerhard_r_Page_004thm.jpg
aa44959f2a648df58323998aed7ffbb2
4b4ff6a532543308c0805de58b6b7d047a9e2eac
1922 F20110109_AADHIZ gerhard_r_Page_139.txt
202f1db13fa6b50c03e0f21a90fc1faf
8c7f739fa3b68900cb6ca9918c8defd2d028631b
48243 F20110109_AADGHB gerhard_r_Page_135thm.jpg
58e0dfc8a7f4fa4bec5d38bd48f92f01
1163053dc5d29f6d99880ef382c6226a70380998
15680 F20110109_AADHKD gerhard_r_Page_012thm.jpg
36f1d2fcf946bd0e89a9620bd6ddb28f
e986c7805715132574293d5e3fd4ea5fdfab64fd
94174 F20110109_AADHJP gerhard_r_Page_005.QC.jpg
5e1dafe5ad7863481a1164882342a454
2a80c70db49bd06551c4ac6a5a1cda1d1213e6d3
24368 F20110109_AADGHC gerhard_r_Page_021thm.jpg
5aa1af89147a65e60b0e758550e063e5
b30de30c3df37fe6b0f7588de6bd74c12340ab08
69602 F20110109_AADHKE gerhard_r_Page_013.QC.jpg
bf3a33ce1c1e080d410d582367f9d726
dddce600bc32fed0ec15100e50c01c75aaa8c46a
45141 F20110109_AADHJQ gerhard_r_Page_005thm.jpg
cb31e13034b6c4be44818ab5ec02de5d
1c09601ba301a28d4f3a8218bbc9cf9fd4aea72c
201465 F20110109_AADGHD gerhard_r_Page_037.jpg
afe5ed3258c3c87502bf07601e68cea6
04e06d45a88c1f3ec77b375fc34952c6c7143ec8
21688 F20110109_AADHKF gerhard_r_Page_013thm.jpg
d2d5dc39e12c1c4ba0874748363149a9
e0ae95ad3a07ffb84a88348831e15690808819f4
113325 F20110109_AADHJR gerhard_r_Page_006.QC.jpg
6b5209fdb68f7934694ec924d814d6e4
d201b960f751a34aa391f15a8d0198fa5e7e2b5b
75953 F20110109_AADHKG gerhard_r_Page_014.QC.jpg
787768b5cb1b55930ed3c56c3f88d2c9
39e7535f545fd9c8a916dba3c5d98e8c8c14c301
50709 F20110109_AADHJS gerhard_r_Page_006thm.jpg
0b6dd6a1055b9992a974b2cf4e381cac
50160805bef7d2f06db57131445ead7a98b525c4
25271604 F20110109_AADGHE gerhard_r_Page_110.tif
0c9a007f9391a1c5285e8a102c84e6bf
1b6b2537479b1f8f0fb6631d88b3d38966a7a65c
24196 F20110109_AADHKH gerhard_r_Page_014thm.jpg
eecda14e5a0ca3faeb71fd2c01c7a9c2
2ca82e4ff101c33a098a39b83a5716ad2fa84094
35813 F20110109_AADHJT gerhard_r_Page_007.QC.jpg
3b37d9b1674f24a0183e594cd32ae3e6
1e3ce8290f790b4e821cc75856c1a4cd0c595d49
511879 F20110109_AADGHF gerhard_r_Page_066.jp2
7862c983e9cf384944936f3ef18a6545
b4113bbf40f8fea9c3b492966061929217b4f86f
11484 F20110109_AADHKI gerhard_r_Page_015.QC.jpg
ad22368d5fd31fc15d8817147e1a8a79
79ac89204acf5c1cd3333a05e64b55e80967561c
69290 F20110109_AADGHG gerhard_r_Page_119.QC.jpg
f7379e8aee07e8bdecce695a175f0998
1f5fa32b8799a279b42545edacb944a7bfd8836f
4496 F20110109_AADHKJ gerhard_r_Page_015thm.jpg
9657294246c8c0aafcc584395db2a770
5ee0244cb4b07728ce57b81941e7c8ddf99300aa
31146 F20110109_AADHJU gerhard_r_Page_007thm.jpg
28629350c3c21c9edaa2e910c4b308b8
ffd7a9c1e3dc90681c2f65b4a77dd71d950a0967
1051957 F20110109_AADGHH gerhard_r_Page_134.jp2
90655cfd6dc76b7d342a7814db482518
47d08ee6e754d19a613f3ff256b308cff4214f90
64086 F20110109_AADHKK gerhard_r_Page_016.QC.jpg
e9557a89393aa333cbf1be9dee6ebfa2
7aaf99adce36e13d5cbf40baf946e4c57d851882
40697 F20110109_AADHJV gerhard_r_Page_008.QC.jpg
1eff46792c588fcb57df04e0c16f07ba
fa96954d176623de4393cf98d3b9e7471257fa4f
F20110109_AADGHI gerhard_r_Page_130.tif
e2dce2f9226e172369e5827f4f051336
f84184a5cbf1185aef1baa633e6fd5bfc2f81a67
19741 F20110109_AADHKL gerhard_r_Page_016thm.jpg
b4afe506b4ba45c895b6f42829bf9ff7
95a18529d0c08556f57e45f457bd3bac606f3cb6
31963 F20110109_AADHJW gerhard_r_Page_008thm.jpg
efd84a25ab410c71288e6bd55db1b236
9b2600aa60ffa1e0d273d0430d6b8c015ea55881
F20110109_AADGHJ gerhard_r_Page_078.tif
069145eaf1c78c2e4f8195946187956b
deccc3731f39556c5d97262b3456961cc02df954
78828 F20110109_AADHKM gerhard_r_Page_017.QC.jpg
1236c8d3987a5017852b2a238f38355e
85cb56cbfd09300f7481bfe61a2fe16f04cc339e
91792 F20110109_AADHJX gerhard_r_Page_009.QC.jpg
343e37fc4a8f31b2bdb8824e56a0dd45
2fb54cc514f4300c8b213c4e44141d4487106f13
24328 F20110109_AADHLA gerhard_r_Page_024thm.jpg
4eecf1091dfb58d60f4b8522c50c7900
d791eab6ae6ef1e010b2e68e030aea01dd5c9737
1808 F20110109_AADGHK gerhard_r_Page_054.txt
f55e9bad7bd890f12147e4cbd0c2e39d
17f261398db27ed502d2359bd6790894cbf28d30
23439 F20110109_AADHKN gerhard_r_Page_017thm.jpg
132fda21e7cda1ce92ee018135257c9d
82db3f45cead0d789dd77730eac96714933e1985
44869 F20110109_AADHJY gerhard_r_Page_009thm.jpg
db8e7f0060d367f12ab2719f8d34a80c
482faebd84861d8810bb9a5c856d6ce92dd6f7ea
77369 F20110109_AADHLB gerhard_r_Page_025.QC.jpg
e1264f6856e8a1781392c74de034549b
c794bf87525b2cb8442a0b36ca100ed3edf4d2d4
F20110109_AADGHL gerhard_r_Page_112.tif
238547d27306989c8c78424a7291ace5
cbdd1b7679f0d179374d6a8c78138c9dfebb7ef3
70215 F20110109_AADHKO gerhard_r_Page_018.QC.jpg
fe410e8ebabe3a6b2bfd8c6104c4a397
1d51aba97f03e690d93ceb5c3d1096fc869f2db1
101811 F20110109_AADGGX gerhard_r_Page_006.pro
38e131d0f88b42a0bee6c9deef1100e7
51e1d2e9fa3281e2ab20b40dfb241686fc13b648
34207 F20110109_AADHJZ gerhard_r_Page_010.QC.jpg
672ba3ac799e0118df7793c748a8ee02
5dc179e1259fcaaa3eefe37d14f9d4e920fc69b2
1053954 F20110109_AADGIA gerhard_r_Page_003.tif
fce0b5be81eb6bf66119da06399a0999
71d345863f2cfa1784855129f135b99c34654f65
24033 F20110109_AADHLC gerhard_r_Page_025thm.jpg
d69f0f4c7ac367f029246859e37266ab
444d48b30f90c4c79de46fba4f4b90adfd0cdb06
212954 F20110109_AADGHM gerhard_r_Page_053.jpg
aaa934fef57c78bd03d9fc51555d522a
5393766c03cca5da560008795e68966d78bad273
76866 F20110109_AADHLD gerhard_r_Page_026.QC.jpg
f4a763cb0329b7e6e366faece4901730
f677aed49f4a063dbcc0431c3ed778b6a6f6a020
97479 F20110109_AADGGY gerhard_r_Page_073.QC.jpg
75b3d180aec930441a4380605fb4b9fb
deba85d82f0d8bc57a933882839f94504d1d6ca3
67603 F20110109_AADGIB gerhard_r_Page_012.jp2
2de001d86c96f0f0cdc3d8fe8985cf2b
270f84b585d235fc670eee09c0e736d624dd8039
105040 F20110109_AADGHN gerhard_r_Page_118.jp2
8f325608d561fe027c7bc71ab0770462
4af666623f2bf32ce5f0cd2db392dfca8a73e909
23298 F20110109_AADHKP gerhard_r_Page_018thm.jpg
043074e790c27a347ab218374320fbab
5838b541e92633f5c080ddc4e471479b245f611a
24581 F20110109_AADHLE gerhard_r_Page_026thm.jpg
6c05db3a2c439a01c1f6b151968aa44d
ca2a592e0e93b9cd15fb426990264303f75e0e70
72050 F20110109_AADGGZ gerhard_r_Page_064.QC.jpg
268bc4328ea3a633e4338205b937e200
c16fea23c8946c579eec4da7b116e65f8061a31e
27596 F20110109_AADGIC gerhard_r_Page_001.jp2
18ef112ffedf5e0bd7595c26fabbf8fb
643bb122a8f8239b6a706d83cf38888895f1a721
1051972 F20110109_AADGHO gerhard_r_Page_041.jp2
164605ddbd5fcecd8ff045dabf0e6927
37993b4bea572d4e0f789481ff885d689cd51092
80147 F20110109_AADHKQ gerhard_r_Page_019.QC.jpg
a5d56555b068446c9ccdb1c17120473d
7452f7d4f63af9b2bae278c0abbe6d8d5cd9ac69
89992 F20110109_AADHLF gerhard_r_Page_027.QC.jpg
871d46eaee59ddd0ad4a07cddaa2cbd6
a01bd80f63270c2597ec374684f954d0a2006d0b
47369 F20110109_AADGID gerhard_r_Page_062.pro
838cd445836f2c25e68fe9a8d5e57dd3
b21ff97f283e8ff21811493e2f390383ddbdd8da
45641 F20110109_AADGHP gerhard_r_Page_054.pro
c0898322b5b61b81ef50c39f0b161cf5
b2e79816ccdceb68389c99fa4291521b95232715
24536 F20110109_AADHKR gerhard_r_Page_019thm.jpg
7ef3a5c2da6f112e764533c45c8688e5
843e592e8d089e3e5cf578e43a5604c0309929fb
46427 F20110109_AADHLG gerhard_r_Page_027thm.jpg
2da96850c11600ba6535cc2d0a365f4e
23d954b1e03ceda7e182d0d8a2a60aa79b7dfe86
F20110109_AADGIE gerhard_r_Page_079.tif
9069756ddcb16cbb52bd8781fe288964
7db96de5c6c65b244e5f2e39e7604aaf8340b29e
2389 F20110109_AADGHQ gerhard_r_Page_009.txt
f6d75502c08d088cbf6c18529d8bc5bd
2efe9b52cb398f9eb6821ac72a3fb4a5ae9151d1
76836 F20110109_AADHKS gerhard_r_Page_020.QC.jpg
baf72292ee138c5a0de534472fb82da8
c01d0eb869ae6ee9cae573a9f9f6ba48724308e6
74969 F20110109_AADHLH gerhard_r_Page_028.QC.jpg
8a577ee566c1bb5d60f2570a42f013a5
fb056e1028429cd39ac388bc7c593641db61b797
104453 F20110109_AADGIF gerhard_r_Page_032.jp2
838d66b7a42f72e25bc3ec9e8b2d4e23
fd88f387d9a0d2fb96f921338681c10df5a74e17
53488 F20110109_AADGHR gerhard_r_Page_129.pro
ac6ab22093e8e2cc6067551c42c4ddb1
2f5100f12954c03f90e635715947e08580b679ea
24082 F20110109_AADHKT gerhard_r_Page_020thm.jpg
1305cc688a67ac8a811934258e9824d3
9b6bd1e6020193ca6865c22cf300c570a4323658
24099 F20110109_AADHLI gerhard_r_Page_028thm.jpg
a04200cf8074b1d022a2b4e5f69b76ce
69abfba16e7a94d985c17ef22ee5f365e24a09f2
101072 F20110109_AADGIG gerhard_r_Page_075.QC.jpg
42d7262401830de7d79693f9f12c3261
8669bdc1f7258bc44e7c74059cf701c8e9390ebc
29652 F20110109_AADGHS gerhard_r_Page_010thm.jpg
1926d6a26462a1fa7efb48df7235513f
a6eb6cb471e1a5b79ff374b25bb3c81111d40d13
78378 F20110109_AADHKU gerhard_r_Page_021.QC.jpg
c476a8e5655764417be57c0a84cd4fe0
d6b194207343775e7b2ba1b56655482a0e780cd6
76097 F20110109_AADHLJ gerhard_r_Page_029.QC.jpg
a0a3ff491885586ee1513499b37a1617
90b827e62a1a197118dc055addd91ad6e2a0d0a0
95112 F20110109_AADGIH gerhard_r_Page_044.QC.jpg
948a14da313a943620add7601870244c
05ed383b6b615089b2e1b859754b1ce9ddfcfe4d
23547 F20110109_AADHLK gerhard_r_Page_029thm.jpg
63f726c4d1a8cb2df0b3fbce11adbc00
8c856c2e96e9f2b03c322897db3cc61ba513001d
218337 F20110109_AADGII UFE0001224_00001.xml FULL
66a1f557fc476cfec17bddd41dd4fef8
a7bdd9dd4561371dd0e210f771e8719afaf08a0e
46436 F20110109_AADGHT gerhard_r_Page_055.QC.jpg
c12f3dda692be919f5f383bdbdd10585
4c9d117da00c7f1ef0055e6bdf068d93db4766e3
50379 F20110109_AADHKV gerhard_r_Page_022.QC.jpg
f488f01843f3950341eb0cf30f6e3553
0960e85f6e7186eed4c709db520d65dab2fde668
74301 F20110109_AADHLL gerhard_r_Page_030.QC.jpg
94bdc04554f9a26658e80a37d3ade58b
0720775e35b828aba44b4dbadf02002f5ba1d058
F20110109_AADGHU gerhard_r_Page_009.tif
cda0be286c8aeec218c91bcedde286ea
442eccfb589cecba190415631ffb44f367c587cd
15439 F20110109_AADHKW gerhard_r_Page_022thm.jpg
bcff13922dbbcca57cdf7d284f5d451b
4f46427dd4f0459312a0ed9e6eb6b5f59a8b41b0
23846 F20110109_AADHMA gerhard_r_Page_037thm.jpg
286ed619b9cd6bbadc4b41951e1692a9
8016979c7008ff8db8652e4f16f96d012ef76d1f
23090 F20110109_AADHLM gerhard_r_Page_030thm.jpg
7169436efc27f9e482062e57cf8065df
02874ff18482f6df558ac6be80a27e1816e858e0
31039 F20110109_AADGHV gerhard_r_Page_047.pro
5677eeb81f408d6c357b3a4e062f8536
3015c9f14c1d7c01aaccb7fa9b04c6093b4f5d6d
76169 F20110109_AADHKX gerhard_r_Page_023.QC.jpg
6b58d32cf11afb41074881308c6e05af
cff5a2e205ef8184e47757c031b0dc0f0bb0e0af
104640 F20110109_AADHMB gerhard_r_Page_038.QC.jpg
963a78f22f8ae480c276958899469b5b
01ae21738696834055ffb7aae9f62a90cb8c0139
81361 F20110109_AADHLN gerhard_r_Page_031.QC.jpg
a7e61904e9d53838ccb482fec982c4af
48412c6153a9117281c89b7df410c3ca6c4dd6d9
62659 F20110109_AADGIL gerhard_r_Page_001.jpg
f98c3237c34025cc5cf36cf65cc3bb86
2a740fb5703ad6e4ddb3305046fd6c2aaf03eb02
1674 F20110109_AADGHW gerhard_r_Page_124.txt
8b3f8c6f4dac48f515bf0688864187da
c40fc8086d0998976377dad0f31fc77d929fa5bc
24587 F20110109_AADHKY gerhard_r_Page_023thm.jpg
6b25bd76a5f527863635913e665b6679
55b3050b178deb25170323f5f7b657f0cb77f11f
49431 F20110109_AADHMC gerhard_r_Page_038thm.jpg
bb1df3c71160d4b325fb7c38c184e384
9d3aee08febb375c81e8859024c57ea162a98623
25274 F20110109_AADHLO gerhard_r_Page_031thm.jpg
a083a951b8cac8e5b51b9f1529010226
d8decdf48fa787d5fae29529dfa7b69677231948
167399 F20110109_AADGJA gerhard_r_Page_016.jpg
0f22ce1db8c2b4bb22f3ea30b43f511d
86116b1aeeef40a86c020626cb56c71d409e3509
14304 F20110109_AADGIM gerhard_r_Page_002.jpg
fb6d046e4597d03dc8dd8a7aaa72b9e4
dbbf8fc308619dffda38ae6823f6783ed817f2f9
1285 F20110109_AADGHX gerhard_r_Page_103.txt
8b4bf7bfe93e76eee7de4089acbab986
25ecf53a9a5cd1b5e49e09eea1ffd799385289df
80299 F20110109_AADHKZ gerhard_r_Page_024.QC.jpg
70676ee64e63e25aa199b48a5229becc
bd29dd219608f8dd4828ddefb3efffbf46fd2053
89883 F20110109_AADHMD gerhard_r_Page_039.QC.jpg
6216a4e2d7fad4910389e43136bfea30
1d2d29d1abf91838b16b961ae9986536165f931c
75145 F20110109_AADHLP gerhard_r_Page_032.QC.jpg
4a60d59973197394df9534f192fe3fa0
f7841d4725ed2dc99a8af162294b8f7de7794cc3
205965 F20110109_AADGJB gerhard_r_Page_017.jpg
401d31cabf168057f0cea15dc5432859
9c6337bd0d3fe57c791a7afea0e878ecac5019e3
15113 F20110109_AADGIN gerhard_r_Page_003.jpg
20b913854e2382c3f70132dc9bf3ebf1
f1f4e3fc6fb682d514533253521c79390e56daf2
1833 F20110109_AADGHY gerhard_r_Page_028.txt
216baadb178766dbb763b4c9dc286385
10a72c23547bf487bc618b143f1db5cdf1e64487
45060 F20110109_AADHME gerhard_r_Page_039thm.jpg
9042070a8d0bb87618a37f628e8143fa
3d2082f3d9cca1ce29f1c27b5b1696cea861e93e
24561 F20110109_AADHLQ gerhard_r_Page_032thm.jpg
b36ced519d0d16e709d3d902b0f9cc3f
754547a339a698466d7b78fcf18c6d4ade265346
197215 F20110109_AADGJC gerhard_r_Page_018.jpg
9d0f2cc3e3d1e94ba0f2e1cc296ca142
d2ba82374aff5593f763e86cf256564555b404ad
59927 F20110109_AADGIO gerhard_r_Page_004.jpg
135082d2512c748e655b47582910614a
e4663444a49e6c3f8d573fab46b21a2da48e65f6
F20110109_AADGHZ gerhard_r_Page_029.tif
0f2b4b132a8b2cd15f6cf12dd1de38d8
d112948f28b8f650bf95865c91d0d44684941099
94847 F20110109_AADHMF gerhard_r_Page_040.QC.jpg
01e2239b517a247784b673004ccc412a
fd5b855c5807a5cf100634179a8e26e468475027
73116 F20110109_AADHLR gerhard_r_Page_033.QC.jpg
b5c9731976c9cc1e05fe5a192717d89e
37c76737e20603cbfe6b53a16bf2b524436dae32
215665 F20110109_AADGJD gerhard_r_Page_019.jpg
60cb6cb384f223b9eff7952fcf25dc81
501578edead1f4eafa6bd9fe0c12b952f757853e
257672 F20110109_AADGIP gerhard_r_Page_005.jpg
c130fc58e9ea5a55ad9d2886032776be
12de6e9925c4001e36c526b6a0811fa6f7bc948e
47617 F20110109_AADHMG gerhard_r_Page_040thm.jpg
f9ebcceaa766de102dcb0b27108588c4
9a2263c47552eaf2d43726c07c28c98527141c59
23205 F20110109_AADHLS gerhard_r_Page_033thm.jpg
6ac1438eb4859137b6acf18c3e76d4c6
2e530f585349068e461a8c3a9c19bafeba5ad48b
206201 F20110109_AADGJE gerhard_r_Page_020.jpg
c59d3341ecc6407684b65b77f7ed0792
6fb164d597d0f26f4f270b2a40a1543ceeec4573
337106 F20110109_AADGIQ gerhard_r_Page_006.jpg
8d53e519d2aac60734a085d1729a5eed
cc9813d454c1d20556287d9a2fef73c82cd95edd
83330 F20110109_AADHMH gerhard_r_Page_041.QC.jpg
d337c3e1e919fd06f4934101a0959966
2a1705e75dbf473987de703b16568f36836b4ae0
69549 F20110109_AADHLT gerhard_r_Page_034.QC.jpg
a5b0888b61664f76167ba8d4704b9ddd
d29392bb1144aeab6b9f98286876abb826d59dff
222384 F20110109_AADGJF gerhard_r_Page_021.jpg
e7652102a4182b211d7b8ea5f6261f76
e15476b8775043a7c5f453ebfbb6cf3268e93254
61470 F20110109_AADGIR gerhard_r_Page_007.jpg
6f0621cae7d5ad4353049673bd4ff1cd
849b301190af3bff65db226e72fce4484ceae66c
42740 F20110109_AADHMI gerhard_r_Page_041thm.jpg
9c2d80e12afd75931cb1445a23bde729
906cf29a7beee5ce0e69f11479f60908d98d68eb
23072 F20110109_AADHLU gerhard_r_Page_034thm.jpg
7b3498fa7a1105221df6d3ba63902a4b
870def431c2d55eee712da22e19ff28587b6cb90
133326 F20110109_AADGJG gerhard_r_Page_022.jpg
f7df170cc11dd061510d983c6da0367c
0fa1d89586d3ff5b5e835c61802bcf8380ca48ba
67778 F20110109_AADGIS gerhard_r_Page_008.jpg
ac5763586bc9df3a3a2f920a29ac5bb8
15033cc73888af0298cff67bfddd81ffa8559c16
68646 F20110109_AADHMJ gerhard_r_Page_042.QC.jpg
b0208c6026877d86ba612f918419bfa6
4c17e973e4f5e357a6e4bfb6f637740acf9fab17
87542 F20110109_AADHLV gerhard_r_Page_035.QC.jpg
5ee1e8dbe09407f128fea85915527162
efcef18fb097d186ccc691d0fc139eaf85e0fce7
209858 F20110109_AADGJH gerhard_r_Page_023.jpg
ef6b395e7aa63d98b80f7cacb00aee80
d2354c6b89fdaaf00f202672584f6dd8cd4b254b
228477 F20110109_AADGIT gerhard_r_Page_009.jpg
ec416d58d608894447487298018834ed
ad9ebf8498fd4561f1a74f496115e49ffbf60ff5
23659 F20110109_AADHMK gerhard_r_Page_042thm.jpg
c1349f3db192b853dc4c35dd51c669c7
11c2639d3ce5c7438385851841ff9e518a651f18
212854 F20110109_AADGJI gerhard_r_Page_024.jpg
abee54a17fab62d998100e19f6fc03ab
06cad7ba7f3bf8fd1f1dcb90e48125ad0bb87814
72302 F20110109_AADHML gerhard_r_Page_043.QC.jpg
d1e049a88bdd3f3970f6d437cf5447f6
7b43c77e443ae60d50cfe8cfc9e8c20789e5832f
44963 F20110109_AADHLW gerhard_r_Page_035thm.jpg
60f592700b1236a282bf6150cb78f6b5
afd14d662c8bf754df9bd178681b3a679196c38d
204552 F20110109_AADGJJ gerhard_r_Page_025.jpg
10fc2bcdc3fd1a281f786631231edd11
e1f3d3f55ca943f18e5a5c443a0676bb8dbcdf37
54698 F20110109_AADGIU gerhard_r_Page_010.jpg
2332dd3fc2f3fcaaf672f844ad65c01b
0378b17397b761af2b66307734a8af6fa69115ff
59326 F20110109_AADHNA gerhard_r_Page_051.QC.jpg
8721f83c0f58d98b404001530f947f82
c4d42301b4163504f302580fc5df22afa29cb1f2
21956 F20110109_AADHMM gerhard_r_Page_043thm.jpg
4a0272d3043699893f61eaad97309624
f87a426df59a60870141da4d4c4ada9f10708192
73970 F20110109_AADHLX gerhard_r_Page_036.QC.jpg
cf1fb8385994b0b1fe48c3032664b526
f09ade2761860c41cbd807db3f8addf86117f9a9
206188 F20110109_AADGJK gerhard_r_Page_026.jpg
a0b97f967e2a95b804246fe91bd72065
612657d2f6655ab841906594a2e6ad294f16124a
181866 F20110109_AADGIV gerhard_r_Page_011.jpg
5d65f0c95ee331ee65ef6a81955f5027
8a8fd29bc2d06c01dc8f7b245053689caab0ba6d
19707 F20110109_AADHNB gerhard_r_Page_051thm.jpg
c820fbcefd2e6dfe5ea306d94515680a
c527f8d0e0fe64c966b03dc262a4b2103aa72469
48025 F20110109_AADHMN gerhard_r_Page_044thm.jpg
bfc8fb3cecf21ad59492f66d81596464
0784dba140ab3b118c884def70c8ec1e023fa0f2
22768 F20110109_AADHLY gerhard_r_Page_036thm.jpg
bf2bc4e9c0290044bbc8520308d1fb45
8aab38678e412989e459bc65cdb0e348d4fcc892
199637 F20110109_AADGJL gerhard_r_Page_027.jpg
3c0d40c1384f10e3905e0d7777784ba8
6f1b34ea9a85bc3ccd86d46b0dffb60d0733241d
127588 F20110109_AADGIW gerhard_r_Page_012.jpg
0e82d20cec5472024a8efe3a2ab3a4a4
db4d1e91a9ba9cb4a446c43c4928ec90b3449c9d
72498 F20110109_AADHNC gerhard_r_Page_052.QC.jpg
28838ec9d50b0eb052849acb369b09d4
bc2d121d6aa5a4e5a3c0c282b73731e6889288ef
75334 F20110109_AADHMO gerhard_r_Page_045.QC.jpg
e23549c9536b00aca0453591bfaaa9fd
0fd5add3409d2f91dd016ebed8946a42506cf1af
73072 F20110109_AADHLZ gerhard_r_Page_037.QC.jpg
8454e4b5c1ad230b762d8be4cfc1c62e
189646548d59f855f7b60a6d70902c3d92b22ab5
200564 F20110109_AADGJM gerhard_r_Page_028.jpg
2dc73bf0f94552328aa7bfb65f90c32d
091357d38fd2fefc49804ac876f524235d657abc
187287 F20110109_AADGIX gerhard_r_Page_013.jpg
a2899242b180a8eaa66d696e8a533cc3
f84483c6b4545c476cf541e1867009c370adfb21
211528 F20110109_AADGKA gerhard_r_Page_043.jpg
bc75f1a09f011927f65567091a875012
e80300e65473c17a9ab980d1d94d37c851520290
23071 F20110109_AADHND gerhard_r_Page_052thm.jpg
8a523187dd54b8ba600262f8e1e91f4f
ace9dd73683a9dc8f79418b8cffc860134e445f3
23305 F20110109_AADHMP gerhard_r_Page_045thm.jpg
28accb03d3a74f229e6f764a556bc7d2
d6da077d0b792328ce79120bdb925a9820e9de49
203757 F20110109_AADGJN gerhard_r_Page_029.jpg
a1464588031c2784ff48c31c2c7f3bdc
3845194ffc1fff2f860ca9ceab5762a152432920
208035 F20110109_AADGIY gerhard_r_Page_014.jpg
47ab7094cb1121a6e8331b10fb96ad40
3e3545f837e1c3a25399130dd23e744aa27b5f63
206842 F20110109_AADGKB gerhard_r_Page_044.jpg
d8afb317139fd457e5a608adff022506
404390f8f1426f69b88ce0dd21affcf2c2792cca
80724 F20110109_AADHNE gerhard_r_Page_053.QC.jpg
12af2b76aeacb812052a57863ad9db11
61bb5a22f2c3e8a563c7d2ef2e2e8700daa408a5
80758 F20110109_AADHMQ gerhard_r_Page_046.QC.jpg
5be3dfd160b51d144a7312f6438d7ffe
774941a9683f2d8a930c2b24c73773f5a7d01a48
200806 F20110109_AADGJO gerhard_r_Page_030.jpg
524f08b8d743595af15ac98b3a02d3ac
d103132934c5fbe72fcd21f8e34270266426ca19
25986 F20110109_AADGIZ gerhard_r_Page_015.jpg
46255a7bdd80d5b74ef3d854c9e34391
fb962199e07ebca6f604dad46a29a14e47127ca4
208508 F20110109_AADGKC gerhard_r_Page_045.jpg
b8cd36c83d01aff73524a60ffef1af69
4bc58fe41bd75f48524622ca2e11c6c2273cef8f
25750 F20110109_AADHNF gerhard_r_Page_053thm.jpg
c37819e3a0b8e04ac3068bb2da3b950a
5d438ef3dbb657a3f0b3b94c98642c94b4b22ed2
25052 F20110109_AADHMR gerhard_r_Page_046thm.jpg
7621edb904927ba3d604283fce269896
718488a2b2e3375a732059d8c9463a17181cde02
215153 F20110109_AADGJP gerhard_r_Page_031.jpg
7f1b7e868732f764cbc706473b4368e5
fde81e484aea961b7b4fd0b24b6339003b5dab87
208173 F20110109_AADGKD gerhard_r_Page_046.jpg
5a7236ca63953779c71c40a4c60d51dd
371ab41d2df422b89228e6cf01a3782740b05b75
72661 F20110109_AADHNG gerhard_r_Page_054.QC.jpg
fe11a785b4e6cbc93673c7abc05844c8
0e0354056de80b53c467e5bf665e6f9b4b8fd112
84891 F20110109_AADHMS gerhard_r_Page_047.QC.jpg
9b615982c7fca2a417b6ca1185e21e4e
3ac10d2edf63a6c249e170476c0844574757d3ae
203469 F20110109_AADGJQ gerhard_r_Page_032.jpg
517d985ec2fdd58fefb06d6e06c8864c
1e4d6569f36f80412afa2f3182477a1815e453ff
185883 F20110109_AADGKE gerhard_r_Page_047.jpg
8e3eeadd568f990973972c38706136d0
c6b43b8bdd56c5c3a6f4b509a3ee384a999beb6b
23676 F20110109_AADHNH gerhard_r_Page_054thm.jpg
d05e6b4046b8fe9ba38c92cb3e88df0c
c8866a21428b2a5dee536503261348eebeb4f4a5
43221 F20110109_AADHMT gerhard_r_Page_047thm.jpg
bfa2aa3a2b4aab32bc104d9f59706d74
9a2c4f7cf71b0e8ed0c59e5f88f610e1805c6214
197239 F20110109_AADGJR gerhard_r_Page_033.jpg
d10fb09087edb28d210469a5d1bf921e
3f48627ebeead70133be405b5eb8de8f7e6b2870
211754 F20110109_AADGKF gerhard_r_Page_048.jpg
3fc0e984f81dcab21b3a380321a1018f
bd8fbd55659ac2db4a0038abcfd7fd83fdc71bc5
15463 F20110109_AADHNI gerhard_r_Page_055thm.jpg
0b7ba3c3160940fa2475c57c86d76b8e
7f6923978ba72681a596be11008d4604962cedc0
F20110109_AADHMU gerhard_r_Page_048.QC.jpg
8611bbcf2beb177bcd7967a58f86d588
dfcd0b2f0fe8e8c03360444cf587fd41e7fbaab6
193096 F20110109_AADGJS gerhard_r_Page_034.jpg
57dd6f56ca2f0ee57f750520fb4b6ee8
2595ce299a3b9e9e183df6b22f7ae3d399e51129
194034 F20110109_AADGKG gerhard_r_Page_049.jpg
f28ad19ccbe3bf25ee1d4739d4c8002c
bf9cddea988de512506a9219ec77aff23f4d5e33
80322 F20110109_AADHNJ gerhard_r_Page_056.QC.jpg
e73e118440af0c9109eeaf68d703d001
fb02275e5c5c89538b666ae4e8eff25453b9bf37
24374 F20110109_AADHMV gerhard_r_Page_048thm.jpg
ac7e763119a7d7ba237901f820e3a5b9
7741ba26a015b6ed22ad6076f78a729f14faece5
205615 F20110109_AADGJT gerhard_r_Page_035.jpg
77a4f32f5be8966806f4f07fef2831a3
78673730986516d986d4d2b9d84ba1878d46faf5
195018 F20110109_AADGKH gerhard_r_Page_050.jpg
a93da90665686b02476e8b4e77bc88db
c3dd5863db477a0c803e0f9c4c61b349f8a244d5
31694 F20110109_AADHNK gerhard_r_Page_056thm.jpg
741e1764e500c027c9224b31baa79d62
b42d5890545a5bd3901e4c3c069bce1984939a4f
72347 F20110109_AADHMW gerhard_r_Page_049.QC.jpg
959d99471f2e45723de2d584ed0a63d4
552b6c67cdd87f0a31adbe32b2802797fbdcea7d
195744 F20110109_AADGJU gerhard_r_Page_036.jpg
131a6be3390ed5654e19d7a23f86e0ed
64f457ac02e1bbfefeffc721c98ca5206f0ec31d
173889 F20110109_AADGKI gerhard_r_Page_051.jpg
07ea9c9a6619de3091828d6a10d0d496
c7421d56e560fa7b2254f474976429176e45e17e
62903 F20110109_AADHNL gerhard_r_Page_057.QC.jpg
8b184f5edb771755fc7f222d9485bf4a
bbc0282d40cef817c7b44f442b8fba4a1aade10f
188291 F20110109_AADGKJ gerhard_r_Page_052.jpg
9cf1ee2b932a7eed879421a669764066
23e51d2d4daf1c41190305c67343d07def646a01
68725 F20110109_AADHOA gerhard_r_Page_065.QC.jpg
d59410e296419396be1556a179872767
0ff99ee4b43f880bb2c383244d39e5a29866ff7f
21928 F20110109_AADHNM gerhard_r_Page_057thm.jpg
0d6085c637389317c06319a8334e8d84
c1f7afec5921e8a86a1d88a7b6d9fbd395176c30
23416 F20110109_AADHMX gerhard_r_Page_049thm.jpg
8fa3e0b4f356c552e1b38c48b12b8092
d69db5a08a61e16e92bfbed7254c1a03f156664c
230556 F20110109_AADGJV gerhard_r_Page_038.jpg
3970c21ea78fdf93d685ec81c306ee4b
6abefa3313d9e680e0b7682d84ae1953d967460a
196850 F20110109_AADGKK gerhard_r_Page_054.jpg
ff5f7f59f74676d1a32dacb5975387b8
a8c31edec08f19ec526fe703afe0b99185b5bfba
22307 F20110109_AADHOB gerhard_r_Page_065thm.jpg
350058e30de827a1258e5a173ab97e7c
ba15cabb4e2eb4f642be8fa4d0b1893a89583cb4
79561 F20110109_AADHNN gerhard_r_Page_058.QC.jpg
9a69ed90d10a85ae292955accd312362
1eec1e60c8ec8f04ddea62271b473fb437ccf912
87176 F20110109_AADHMY gerhard_r_Page_050.QC.jpg
b26782bb987ee41bd1e2c2585ba86e7c
14fe419fcac8a3a27472d6581b184362bc2eab26
204447 F20110109_AADGJW gerhard_r_Page_039.jpg
dece8894d027fde78d5d2c5c0626861b
3b656d478f0bc7acf5f8b35a803a14e654093382
123650 F20110109_AADGKL gerhard_r_Page_055.jpg
72175d64e492ab7dbe1f805f2a97b467
027590e573cc72c0bc8966ccb1522831ebdf8c11
69499 F20110109_AADHOC gerhard_r_Page_066.QC.jpg
7c566e76b4110da8718aef62d2a480a9
8b8eb27a6b5af9d8ab536aec470806f64eea984c
24667 F20110109_AADHNO gerhard_r_Page_058thm.jpg
e6f081ac6a1b7546e29bea4ea3820cc4
66e8a8ce4b9b005db1409efec5074be40df6a3df
45604 F20110109_AADHMZ gerhard_r_Page_050thm.jpg
ce9fe4e64a228fccef368d21d3347d5e
4c237512aa6f3c135775b47ebc793aadf3aadead
221221 F20110109_AADGJX gerhard_r_Page_040.jpg
035bdbfd3482d96406ed1bf2372895bc
d303abb67431df4bef1665bb026bc4d144a7f7fd
196312 F20110109_AADGLA gerhard_r_Page_070.jpg
234455145b69765a65cd9f8963e49afc
36c040ee75eb405796b1e23c44c202d8cc5667f3
229091 F20110109_AADGKM gerhard_r_Page_056.jpg
3cc07a195794a7c33d4ac800305ca3c3
af254296a9c29dd1e5d154fc6d363e30a3d63812
41465 F20110109_AADHOD gerhard_r_Page_066thm.jpg
b03c9675d150b0005c50b78cf1a37f1d
456678d47286b2e0b22fe15e33974e11221202e2
71803 F20110109_AADHNP gerhard_r_Page_059.QC.jpg
08b6cdd17dc50aa81c6896cefd8b413b
e61c9c734242ca2aa9566493c0db35636c81d7c5
186863 F20110109_AADGJY gerhard_r_Page_041.jpg
7cbf9d8c92d850a7e086b161826c5853
2c06201e71d4a1494da2af608fb6a6cd2643f5f6
189819 F20110109_AADGLB gerhard_r_Page_071.jpg
4cc521691f12059c22a13ecd25b5e535
1a2d59295bab3baa73022f4ebab7f5dc8748c9b7
176693 F20110109_AADGKN gerhard_r_Page_057.jpg
cbf04bd75e6e68c232d2515e9d2b1ef8
d7bd44c5cf32295ee9c8a6624324762c743d3323
73085 F20110109_AADHOE gerhard_r_Page_067.QC.jpg
40f861f4eb966de21d7febea5a065fce
dc8fdf3630df256bd0acda74d52a42b6237e2402
22694 F20110109_AADHNQ gerhard_r_Page_059thm.jpg
e85d6268b18c37d44935b18e6c6c71de
a1cc7ca90405ca0d0b83f403a6d207fca7e32521
198028 F20110109_AADGJZ gerhard_r_Page_042.jpg
3e2ff1a9aa4582c219ea99e8ed0db8c8
a974397f520dec970a111fd25d129b1987398464
191687 F20110109_AADGLC gerhard_r_Page_072.jpg
4542922ffbc5de6ffe47f0474ca1b9ed
ac2c8a165b012ea9d4d26f1f0d3c8d5b8b2f4799
213227 F20110109_AADGKO gerhard_r_Page_058.jpg
833c4584eff372a25abcc6caca17bdb0
14cd8b8890f5025fc60a858ee9ce5317ab108239
22973 F20110109_AADHOF gerhard_r_Page_067thm.jpg
4f6f50efe168165ea6b63855dd31ea88
cb8d2d2ce18645dec5f74edc6d383767b5a86b3a
68945 F20110109_AADHNR gerhard_r_Page_060.QC.jpg
5054e51d22e77002b63e96fc5aa1536d
0a4bd0c8040a98eb43e56948352b93825ca567ca
225459 F20110109_AADGLD gerhard_r_Page_073.jpg
72c6b0720963c72ba2b0d550604cc036
6cdea42b56bfac9f9cae0f9b060e48aa39c90fdf
193834 F20110109_AADGKP gerhard_r_Page_059.jpg
1eb1a7649fee8a66eb2523b380e40f5f
63e486b5b97a57d126b4077f23c13e06ed64321b
79190 F20110109_AADHOG gerhard_r_Page_068.QC.jpg
64d4bb14dc9da007403fc01a042c3d31
c1abedbf2165eabb9e71cc7e8c5cbda56e16d1d1
21839 F20110109_AADHNS gerhard_r_Page_060thm.jpg
e2d9685e50d775218942c03d67017fc6
f844c3fcf85b659971bded70d194317ca67dfa5c
215921 F20110109_AADGLE gerhard_r_Page_074.jpg
b6ab5eb71544d2da767c4e56d99a8aa2
9beab72fd0c63dc0c5fccd61964490b12c4ca5d2
185947 F20110109_AADGKQ gerhard_r_Page_060.jpg
5b2a00ec3e911661715985bece2f0ca9
d1f7bbfb42da06accce0d5da3afe697ddce3c8b5
24647 F20110109_AADHOH gerhard_r_Page_068thm.jpg
979d918467ad4df46bd65b4f3a831c27
4863c74d4c4d7418adf3199c0c58f9178b9b0ffe
64959 F20110109_AADHNT gerhard_r_Page_061.QC.jpg
d979952a86573d869580081675dceef3
158a276f05c3ee23cceba5dcdbeffbaa841b5384
219490 F20110109_AADGLF gerhard_r_Page_075.jpg
57483759246f960bd6444619f2ab028e
f6a5baa48857cb951aa5428da6435e9b7fc9d03a
175299 F20110109_AADGKR gerhard_r_Page_061.jpg
c8f24f854535b5d8e74a4e6ef755ee88
78482874b876a7d71088210290cb2018edf966c7
81914 F20110109_AADHOI gerhard_r_Page_069.QC.jpg
a15a97235d1e6c12fff320c6960d672a
ada3945837efd5cceae21f08847cc6bb8147f602
21649 F20110109_AADHNU gerhard_r_Page_061thm.jpg
66ac421fd2fe88e62f1d502c3fe86d43
7806280400189a6a776ba7bc4d1c5ec32500ac39
204018 F20110109_AADGLG gerhard_r_Page_076.jpg
c6b6b7018b7b62937503ea64ef8c1cc7
bdb0f4b131f3f5d6023970a555a0f183322b7298
198100 F20110109_AADGKS gerhard_r_Page_062.jpg
af6206cd2e9e1834ffd6267dc856cf46
cbd1e923bf7011b794040c3804007eef519f205f
24457 F20110109_AADHOJ gerhard_r_Page_069thm.jpg
2d35a0246b6188de4005fdabf765eca1
f1860195e5c3545cfde33053ae38328b4a06aecc
73598 F20110109_AADHNV gerhard_r_Page_062.QC.jpg
34e61bb5be4988790f3b0e738af97409
cbb6f79e511b93ca669be9c2372387e035ed7c53
181871 F20110109_AADGLH gerhard_r_Page_077.jpg
65892ae4223468ccdc45657268f899a4
82e05cd223a81f2d0212bfe639caec8e43028e8c
209710 F20110109_AADGKT gerhard_r_Page_063.jpg
61772a36f134c2181670ae59b49ad7da
c71357582a92a7ba1af61b0f2f58e38303ce3dc0
74645 F20110109_AADHOK gerhard_r_Page_070.QC.jpg
fdcb4e4bad2c0fe8fd83004a8ace9255
82647063732dc2fa2646e56a644170da1041f06a
24844 F20110109_AADHNW gerhard_r_Page_062thm.jpg
f403a88251ee4fd688f9ba46c55b41b5
c533b0e42d7a14e505f9f67074b3634bc5643d16
182008 F20110109_AADGLI gerhard_r_Page_078.jpg
af61e339c4dce8074fe34e41a132afa1
49cc8ad408bed72b9a6e0624edbe7089b5eb6ee0
189390 F20110109_AADGKU gerhard_r_Page_064.jpg
1bd49a8ab7bcd8fca2ab87b6f42ff4ac
3b4a8e21246cbd774d86039ecfb35ad91cc1bb39
24418 F20110109_AADHOL gerhard_r_Page_070thm.jpg
4b221ec2fe561de76f2b8c2d3fb0f347
0a37a12c39d7c61b48106b9fa0b95a639ab68e96
79929 F20110109_AADHNX gerhard_r_Page_063.QC.jpg
d26e4976528b0e139a679eb2939e41f1
72aededba12cd9a87a6080f283025ba69001a425
187276 F20110109_AADGLJ gerhard_r_Page_079.jpg
fa69d354a3eccd73d6f1bd7fbcc4f9e0
d93207e258fc2769adf98ae23c6016052b7a98ad
184450 F20110109_AADGKV gerhard_r_Page_065.jpg
07fdceb46baed296d5b51d699ad3871d
40a9adbb125e1b211043abc4c68aa597029a3b85
84455 F20110109_AADHPA gerhard_r_Page_079.QC.jpg
08e8645d065f706a6275cfc6916c99a4
46509d43213161f2d14c888c937b0a54488c07ad
72028 F20110109_AADHOM gerhard_r_Page_071.QC.jpg
cae4b6a286f2f9aa34b9cadde2bf1ac2
78ad3a14f4c975205b228973c71abf4c25bc2788
214119 F20110109_AADGLK gerhard_r_Page_080.jpg
fabb0ffea302cdc1942cf4495bb5ee8f
ebb334b0f602313c925c242288be81871231edd0
46226 F20110109_AADHPB gerhard_r_Page_079thm.jpg
4ec94699dbbaf6f1b6cf31202f3b0b91
983498b74e07352b650620728055b42bc6bb889d
22361 F20110109_AADHON gerhard_r_Page_071thm.jpg
b25d686b623c34fa28c9d14ce2b77cb1
6f86d7e84fad7d8dfa8a11e7b7e66c7ed78ba165
24906 F20110109_AADHNY gerhard_r_Page_063thm.jpg
afb38343f1ac851a342e37b7b52efbb7
542e6670269890513494ec1e0074e837687e8b9f
182927 F20110109_AADGLL gerhard_r_Page_081.jpg
2d185c7aed88f393a3b4eb3f7978fe14
f9ac826fa4865689beeaa261d7e74c4e2dea47a7
144099 F20110109_AADGKW gerhard_r_Page_066.jpg
2cf088e2ac56ad3f5c06aeb8197369a4
92a57b2ff34ad5daaccbd9dff9b3aa1797236b3f
96667 F20110109_AADHPC gerhard_r_Page_080.QC.jpg
206e3f5b539f94e28d73e123f8d81dfa
f0b35ff6c8e703f164ec8bfa18502aa7f4339976
69331 F20110109_AADHOO gerhard_r_Page_072.QC.jpg
5c4ac72eeb78f4e1b81c33b7de8fe6ed
f3dd52e7c2d5551d7766bdeb73172d8e74e50c76
22887 F20110109_AADHNZ gerhard_r_Page_064thm.jpg
2aca441cb891ae07ac2b621f7ae66eb9
64482058136cb4c2d48059f68632fdce8b195196
171123 F20110109_AADGMA gerhard_r_Page_096.jpg
717c674ca40a268c69df60681744effe
c02133a8bdef1f637fd135a0505f18b3fbe01a2d
216897 F20110109_AADGLM gerhard_r_Page_082.jpg
2b44c06f59baf8cac7cf7c52f7b4f286
e5b9f7efb0b6a4ae379ab38690e00c7876b5a6e9
195544 F20110109_AADGKX gerhard_r_Page_067.jpg
3cc551a6765b3f53d6e0056ffafc2d62
6689946ba6f1e46381a7dea1cf98d9e087f2d298
47214 F20110109_AADHPD gerhard_r_Page_080thm.jpg
8db151c21675838153b809c2556d722f
d2df70c444f8a3a92980ad033d6c3e7f5e337a8e
23313 F20110109_AADHOP gerhard_r_Page_072thm.jpg
fa0ed167da2ca2fa7f41463e24e7795f
501c475a5aea5b1957ac5154c65009e4e91d12bd
186652 F20110109_AADGLN gerhard_r_Page_083.jpg
d2d15ecd754b48a290aa101c29b94786
f9a920549eb4ed27b169c0d4d236e746a0b20236
204909 F20110109_AADGKY gerhard_r_Page_068.jpg
87ae7311508c77faf2c8d0741675e09b
8cfc640a2f3ad13fdf575a6438602849a1b89378
203247 F20110109_AADGMB gerhard_r_Page_097.jpg
c777c66a1a6d6383ce74bcf4d79e8c3a
efb056e3dd462af870b90b2a2b646e221ed72324
80710 F20110109_AADHPE gerhard_r_Page_081.QC.jpg
fc1bbfc82add91873f30a752b928d35c
3993b512066bf8afb56dbbb28dee6f591c04a33c
49532 F20110109_AADHOQ gerhard_r_Page_073thm.jpg
f8f0cd1ace5f59bbd501c8a41158a0fe
3ab8ad30a8364c72ccd123b259aee9b8314c23e9
188869 F20110109_AADGLO gerhard_r_Page_084.jpg
7d243dc5a85c97692fe715c90962926b
80f0416b01716b0468346a012584d013a88f34dc
233382 F20110109_AADGKZ gerhard_r_Page_069.jpg
2dc7c4b81f24d210d721ac6506d733f9
85c838ebecea8bdd3531f040a81c7a614371d167
264408 F20110109_AADGMC gerhard_r_Page_098.jpg
11b5cbbb28ac0b89a43bfb9f9eacb41d
8840fac731c3468e0fab8160eca4303dd238adf5
43961 F20110109_AADHPF gerhard_r_Page_081thm.jpg
da5945ccfb1cbf102cc9fbe90ae5c4ed
2d0c14004d6320f82b45559ae3a857bdd5c1be27
94674 F20110109_AADHOR gerhard_r_Page_074.QC.jpg
d14b9b106371af0bd08f9f5b3ffb9e2d
e268c1e3f520562b99d988fb7961f5422fb8a1af
197695 F20110109_AADGLP gerhard_r_Page_085.jpg
51121493cc1ef2cf580e7fa61dec50b5
c33bdfa255c7b176f6ea9cc824c9041fba943dd2
181328 F20110109_AADGMD gerhard_r_Page_099.jpg
f013b009884ac7f988c79f3850ae5657
5d957522bbabd27b2b6965e27ac341950373059e
97592 F20110109_AADHPG gerhard_r_Page_082.QC.jpg
aad81687fa0fe705d23cf94c84fd1d75
0ff7866fbdcf67fe5dfe324ba90728ccc559cd3e
47720 F20110109_AADHOS gerhard_r_Page_074thm.jpg
79ace0ce57b55e9d4cccb1454e00d181
e0cc20918146f010b5fb2d1308cad106e48826b0
169075 F20110109_AADGLQ gerhard_r_Page_086.jpg
dcf549ffe7d1c8bbf74b316c6f88b9b3
303d47bf9a712bd03bcb787c5bf3a6fc390d090a
182396 F20110109_AADGME gerhard_r_Page_100.jpg
7a805429a8b2ee1ad68dce9b02012572
8e72c79b36498121fe52a51899df8f768e15e813
49364 F20110109_AADHPH gerhard_r_Page_082thm.jpg
acf0294970ebb9e9caea1cecb5f401ac
23a4de4e789324e75dc7db142a9b991fc8867ecf
48675 F20110109_AADHOT gerhard_r_Page_075thm.jpg
aa1b7c8b526fb3c66bac8a77027d557c
89c5857692d42f82e97c47f7670c9fe13dc805fb
199847 F20110109_AADGLR gerhard_r_Page_087.jpg
bc3c74c2129b5cf825468aae83326f36
4250bf3a64667e848186bd481ea315540a5a5fc2
187848 F20110109_AADGMF gerhard_r_Page_101.jpg
3ffa903b7012053a1101479269f51c90
8081f0d7bb86ccb136a71b60fba69e526d3b160e
89514 F20110109_AADHPI gerhard_r_Page_083.QC.jpg
20b330703b5187c634253815290468af
5c9b91e3207fcc134b50237592427e020fd60577
91753 F20110109_AADHOU gerhard_r_Page_076.QC.jpg
dbb3af3257f4182ce866931af4913887
7b47fa84aaa024ee2dd1b0237dc22d13d7414e5b
180319 F20110109_AADGLS gerhard_r_Page_088.jpg
f046a4aadf34307bd3ae9522b571e257
c574e003b2ff3710bbb1b9984f0ebafd75b4938c
163760 F20110109_AADGMG gerhard_r_Page_102.jpg
d104a92564b5942a6a5616ed3662e6f0
77430f6c24ac5e91a679c89030995efd05b6e796
45574 F20110109_AADHPJ gerhard_r_Page_083thm.jpg
3ce6b944fdcbbb76d6f75b6f2dcac549
fdd52304501b90904604a26c76fef34c509cb53e
47566 F20110109_AADHOV gerhard_r_Page_076thm.jpg
e7f00752ef9b26b16a6319594564e180
182207c760bbbbf37720e039c57fa751c6d8a03d
188765 F20110109_AADGLT gerhard_r_Page_089.jpg
ca364238fbd89534d76cd55f6b5734c4
3c5fc102964d1dfda2d9551a66211d0f0d319e94
101760 F20110109_AADGMH gerhard_r_Page_103.jpg
d9308d2dcbe0bba5ec3975282d94ef9e
c0f6be5d055158a4c30091a0194040e23c0042b9
84859 F20110109_AADHPK gerhard_r_Page_084.QC.jpg
c00b9cf4f0a21c87ed7fa57b1a56e4e0
1e4d5cf85cf7e6ca934c0c7c1d9e738fdeda5b72
81845 F20110109_AADHOW gerhard_r_Page_077.QC.jpg
d6b9af9dc0613aca32be25253132552f
3b0373e15a23ba5a1c93530474f442d8db7da6cc
210441 F20110109_AADGLU gerhard_r_Page_090.jpg
90a6db5375191c48d6aa7ad7413801d6
d52ef55151c11d3e542d2ec6b363406e0bcc66c2
223025 F20110109_AADGMI gerhard_r_Page_104.jpg
036493110c9db2225b419f9fc952f5b9
dd20f7c6a86661237a487f29197757dae28046a5
43753 F20110109_AADHPL gerhard_r_Page_084thm.jpg
d5562ecb7b3e561fbb2bc80d849b0439
c6f31a25d6fb5c2178a07dd772f820a4c1e7f625
44599 F20110109_AADHOX gerhard_r_Page_077thm.jpg
6a126774e4ccd8cbde28ccd1b2d637e0
5d6bdb32058d7930b2bbbaf7bfd194edb13c8a28
191990 F20110109_AADGLV gerhard_r_Page_091.jpg
f30c63bff3b9d2e109fcf3819a6d2805
4be0f26932862c06e3a9c63f31afa1097ee32384
206847 F20110109_AADGMJ gerhard_r_Page_105.jpg
be6aa142ccf197ec452100ddefd405f4
4f85428f897885b35d04bcf69d6ffa1bb095efc8
38432 F20110109_AADHQA gerhard_r_Page_092.QC.jpg
ae30c765b4c062d038884358bc84b876
749408d0bfd5a5b834fe66831b56453528d49e7c
83819 F20110109_AADHPM gerhard_r_Page_085.QC.jpg
15fb3422f7595adecce09f4209585548
095a167e1ff0bdcbb6ae0e32bfdbac07ddf3a8dd
85670 F20110109_AADHOY gerhard_r_Page_078.QC.jpg
b3d3c9b847450e61a68860a2cc497db6
ecdaaa75d4c4a49f8de7a3b23aca02eeac8055f2
106419 F20110109_AADGLW gerhard_r_Page_092.jpg
6e1b9e08dffaa74724c68496ce092834
a4c413bcf11ceb9cc7652e48c7739e45ccc22c1c
196192 F20110109_AADGMK gerhard_r_Page_106.jpg
68b0ca046bae697b1188627d6252798c
2c9cdb3640b43f9c6902e0c4534c38bf36717c3a
12709 F20110109_AADHQB gerhard_r_Page_092thm.jpg
74651d0b52972a284d9acb410e9031ce
0f95fa00b808b272f1412372b77f2b9f76e00f42
44777 F20110109_AADHPN gerhard_r_Page_085thm.jpg
d09a903f8290183f74c4e9e248fe6ef5
93397147848b49a4b04fe7c99b412e87bf1aeaef
204391 F20110109_AADGML gerhard_r_Page_107.jpg
02cbc112bd22bb9fd1d28fdffc952f87
7f4ece9e297ec47687b55297fe5fe0f3e4a4ac3d
69062 F20110109_AADHQC gerhard_r_Page_093.QC.jpg
9a3426c9679fb1ca295321419be03e19
0f8cd37fee2dfeae9afcca71b85a3384e2dd95ff
78641 F20110109_AADHPO gerhard_r_Page_086.QC.jpg
f57a2a1b3210e0854e04637ab9812fb3
be6b50533518360eecaa4496a4d72ec3e19b3466
44850 F20110109_AADHOZ gerhard_r_Page_078thm.jpg
25dd2c8a0be008e0f99db4c7b343e7bc
a6f82a6706f6375f91d2c01df3ba39d8a6a712d6
207056 F20110109_AADGLX gerhard_r_Page_093.jpg
500486dffbfb49cfa03065f18f7cbbab
a988688ef15a8e6c273bd31c48e05edc92793141
195656 F20110109_AADGNA gerhard_r_Page_122.jpg
1d430ef4e8f66784abfbca7d21c8ab3f
e87ebebf088348fb2098ad5cafaf96d2cc73a7ec
170590 F20110109_AADGMM gerhard_r_Page_108.jpg
c3aa31352a34e16ef261d02d974a11f0
01480ad7b6fe3f1bb94a4f41b20807bc7cdab2f9
21308 F20110109_AADHQD gerhard_r_Page_093thm.jpg
c1af9b7b24a4d99a74935efeb7f81054
5a36972299b2e60de8e37b1a4c2508b0072b82d1
43681 F20110109_AADHPP gerhard_r_Page_086thm.jpg
eaf68ba2fe2f60cc52cd78ec82713623
1c5816544b0aedf680786549baedf98bfac1c921
192248 F20110109_AADGLY gerhard_r_Page_094.jpg
eefe38c6cbe017ac8de2d1bfa97fc5ec
81fca4b21f517e5968fb003940e67e47b91d694a
172839 F20110109_AADGNB gerhard_r_Page_123.jpg
920f88e435600a0c887e18413784ebdd
bf773b8d01157c30bb55ba185ce4d58ebbf5ff8a
157568 F20110109_AADGMN gerhard_r_Page_109.jpg
da32f1e6a4202b462c0bb04b762c1bb5
897befa0c05645bf4612776dbf475cdb6b276059
69824 F20110109_AADHQE gerhard_r_Page_094.QC.jpg
920bc9cf937ac37bb7abd4a9a6e148ce
9e126ab0f7430d6ce8ce82d8fddac047d0a5ba46
75489 F20110109_AADHPQ gerhard_r_Page_087.QC.jpg
72bda3cd05c4031de73ac19516db124f
1c256eee852d698361a4a175e614e0cdd4c6e277
78439 F20110109_AADGLZ gerhard_r_Page_095.jpg
e92517ef5298666106a187a8a00cc3b1
11a235b0e97521227523e58d3977e4205c8d87c8
193529 F20110109_AADGNC gerhard_r_Page_124.jpg
24b25b8b5faf888d1d975460349955a0
de6f65b6422b24dcc6746ad1fee3b3f4cee9a7e3
209388 F20110109_AADGMO gerhard_r_Page_110.jpg
0de8082aa1571d1fff4c338ad1ae395a
e86aa847514383a8f815a8ee752f7bef40b52faf
22774 F20110109_AADHQF gerhard_r_Page_094thm.jpg
bf73254de40e37586628f2307f85e1ed
16467a6b039e3ed572f52574d75b840a81a00dfd
23741 F20110109_AADHPR gerhard_r_Page_087thm.jpg
9947b0acc6d2fc03caa3e4af5e802989
419805135535422a08b632ff068ea5d15abdce48
221274 F20110109_AADGND gerhard_r_Page_125.jpg
b21a235febf4345c7c57e3ca1e652614
858e4fe513c3585eb7d3eb8ee86c6cbd3de3c85f
221404 F20110109_AADGMP gerhard_r_Page_111.jpg
c9ca7eae081f356c9f3f12c44ef03706
411959878b797b140e92d1c0d155a898b324cc39
31233 F20110109_AADHQG gerhard_r_Page_095.QC.jpg
5c640deee1ecf5f73612b054a13413da
b9bb8fcff73fae33f57af12b6cc4ac6a89c98371
66182 F20110109_AADHPS gerhard_r_Page_088.QC.jpg
e1c3a9e165dfd6373860d5ebcd708287
e999d70ef88d8b2340738d5de6c4d8ce634e0059
211790 F20110109_AADGNE gerhard_r_Page_126.jpg
835f158db2ae250b977c3865c4a94d55
78afe7c95ed1d7c343e02e7b4c2e251604b7f41d
225880 F20110109_AADGMQ gerhard_r_Page_112.jpg
d7e4b1a9c865020d877a2141d72f7a0d
81d9916565889b264ae1c4e88ce4e3b255c40b08
10083 F20110109_AADHQH gerhard_r_Page_095thm.jpg
302b058d098c8ff9f8b791c6d4a8302c
d73eef83a7bac1cfc903d271d0cbebddd97b781f
22542 F20110109_AADHPT gerhard_r_Page_088thm.jpg
73c4d58d698930bac2e3288d60fdded3
9924601730928a86d9a7ade90386f9561feb359a
215308 F20110109_AADGNF gerhard_r_Page_127.jpg
aab5dc7e6ac67f93ae8661236136db3b
e606ca701d985ac0eccd8f97fc408f571f3f7e0a
225596 F20110109_AADGMR gerhard_r_Page_113.jpg
8757b157fce8dab3887b8f1d8c5d2f26
7f7077b46285dadde11117af4324c5e7b474109f
59999 F20110109_AADHQI gerhard_r_Page_096.QC.jpg
7b49a2a0529334982010aecb8e571b92
cd4c807b2e345733ad153a9dd2971699e166bfd5
67323 F20110109_AADHPU gerhard_r_Page_089.QC.jpg
407e8665eed4e43de4f2f3470beb9b88
49c998f8fee60d6a12d62e689fbf92db40b1d7a8
202532 F20110109_AADGNG gerhard_r_Page_128.jpg
68604022c0c09f9288abd8ff9c87c9b7
9e7bf5f3ba09a316f44fb646a05aecff7b771769
197377 F20110109_AADGMS gerhard_r_Page_114.jpg
732b8ac3246c34594fc31b2015fcd190
8993287be8cc9be69fdb2829a28cc27284408f6c
19428 F20110109_AADHQJ gerhard_r_Page_096thm.jpg
c79750492886d10d40eace3e3feca308
31693c01e1f1cb4ba7684a9db552adbf463c38c9
21457 F20110109_AADHPV gerhard_r_Page_089thm.jpg
67caa8fd18f62532a8b96991827593f7
e38d3d2124a978d7aa9b3c3db29bc58d48aad8ab
233220 F20110109_AADGNH gerhard_r_Page_129.jpg
1dc6087a5eea1e7bf7f065fe78cca6bd
04a5171091c13705fa374876bd84217432d85a73
208940 F20110109_AADGMT gerhard_r_Page_115.jpg
65c95e5bf374ac8eb858ecdd99c4d28c
b29aa2fcad9ab7321063552e9200c308fafb9d6a
70415 F20110109_AADHQK gerhard_r_Page_097.QC.jpg
1e625759e018bfe60e0021f119b808c8
641b712e9f91bd3ada91b0e8f81c26b8cf78b006
95732 F20110109_AADHPW gerhard_r_Page_090.QC.jpg
8eb0835a9018b682ea7151ac42d4f7b1
2d53a8accd6599124165538cd584b07c13b7fd95
222708 F20110109_AADGNI gerhard_r_Page_130.jpg
e5c2b7e2cc8317169b984aa013c678d0
c22e6f4bc853e877dd7007ab7858c4c5eec4c698
171850 F20110109_AADGMU gerhard_r_Page_116.jpg
1f47df4eabafa789e3f859ff30bd8a59
b80513e5e33a36df7c1ad832fa914cb5b76a1aa8
20838 F20110109_AADHQL gerhard_r_Page_097thm.jpg
19d8b69c9e97c945eef4463cfe4ada62
9f9b14bfc8b134e9c3eba24f88d78f15d756837a
47861 F20110109_AADHPX gerhard_r_Page_090thm.jpg
5208d5a3969e562b9268106edb4c2b04
fd2092c27ab85028d433b9603bac01ff7eee06e2
141406 F20110109_AADGNJ gerhard_r_Page_131.jpg
aec5eb7e25665151849cc591c3937c18
ed353ded59fdd4b245fd5a791ae6208b54231d61
200494 F20110109_AADGMV gerhard_r_Page_117.jpg
ec5b4296016a70a628d58b37edb75e61
5df3873b5bb9d45c645c4dbb7ee13b6670d7ed22
68042 F20110109_AADHRA gerhard_r_Page_105.QC.jpg
98677ab9606bdc8a3abd8b953cbfce51
1cf9c4975bf697e2099644b2d569c3e5152357bd
111803 F20110109_AADHQM gerhard_r_Page_098.QC.jpg
8aa9b22eecadc1a91ca03b925110d72b
9dc8235f7f0762fc61313f3b752d2c798600610a
73784 F20110109_AADHPY gerhard_r_Page_091.QC.jpg
30843b86a3f34960443f838bb5ca0d89
df322fe4e14b8e3c14bdda2b068cc51c53a49402
184612 F20110109_AADGNK gerhard_r_Page_132.jpg
fced3a8e93a72c7eedfcfdffaa03392b
680f00590bf14593eff54854904953db4f2e5af9
206179 F20110109_AADGMW gerhard_r_Page_118.jpg
714bafd88a2cc852b2f4a4778dbb64fb
adc3028b3e596054b44e277a8f9f304c8d2c2eb3
20602 F20110109_AADHRB gerhard_r_Page_105thm.jpg
7d2a72f34cb70eb982d8b2123cbe1589
030c03f0f63c35917e5e2199d09175b6f1b1f40d
53249 F20110109_AADHQN gerhard_r_Page_098thm.jpg
4e3b4a5451900893c04207fbe63f3d08
d11ca030e890ec2c3f0ec9640ed5e12ea44c8f27
23930 F20110109_AADHPZ gerhard_r_Page_091thm.jpg
9f5fe8e87384c8305ee12e2017438269
01a06dca74ca63c3f9895173d9ede089904289dd
253507 F20110109_AADGNL gerhard_r_Page_133.jpg
c379660baed6fd58af1a15314ead188d
b342745b71dfe03c65e41806b5145a9fdaf56c88
184465 F20110109_AADGMX gerhard_r_Page_119.jpg
e5c790c52b841f0174cb372ec9360d50
cf28fa645297b3229e8312672345044e91902203
87391 F20110109_AADHRC gerhard_r_Page_106.QC.jpg
064679e5d757d1c5633b0bc4d2bc92e9
781088afe29f5028f4cdbaf3168d016026d60b85
66531 F20110109_AADHQO gerhard_r_Page_099.QC.jpg
4d67e502e5be0e0edf53165d0845f24f
a24e9a011dc704f1917c7e5eb185c07ae9e9fb23
29169 F20110109_AADGOA gerhard_r_Page_004.jp2
38db66d70f7fe76d701d8bb6177e7803
fe07582ea1de533d7bce86e5138928bcd932d48c
267384 F20110109_AADGNM gerhard_r_Page_134.jpg
8866f87e7c5ac23d79e1710a4ff0affa
aa97d8e823cb08f2a139c583954dacda804338ff
44978 F20110109_AADHRD gerhard_r_Page_106thm.jpg
cfc549d9b0bc30634b4dbfdc7bf70bd8
71943a97a9969cc38fc4d26964d3d4d1640939ea
22240 F20110109_AADHQP gerhard_r_Page_099thm.jpg
646a2e520556b981916b6a9ebba00f27
4078b4dafd2be28030f21693c9372c696642303e
1051970 F20110109_AADGOB gerhard_r_Page_005.jp2
447ea814406ac95b140d196f3c866df3
c215b6ea03d9dff3348574d7392b915cbce20e7a
235461 F20110109_AADGNN gerhard_r_Page_135.jpg
58e002e403041024b808efaf8257cdd4
0526949a5b8ee3175524ea1e76cd9bc543c566c6
201526 F20110109_AADGMY gerhard_r_Page_120.jpg
fbc83b5e63e035741b595d97d771ecab
bfd02d7d4ed0c97fe724b8dbd749add3ee4b98c3
90126 F20110109_AADHRE gerhard_r_Page_107.QC.jpg
53556823dd77e02786a539a09e871573
4f6b2591788098a935554bc24b807435d017a21e
69352 F20110109_AADHQQ gerhard_r_Page_100.QC.jpg
fddeb75b36f06761beb1a175a26a4ffa
40a0d2fbda21f93e16299b33723fe8f5725c048f
1051974 F20110109_AADGOC gerhard_r_Page_006.jp2
99c9a90014c017acab1774b9b64d9c48
c311fabb3c7d65cce7e9fa2c2df19fc77470feef
247106 F20110109_AADGNO gerhard_r_Page_136.jpg
8954585f3c88d1324d0860e41410d2aa
a91e0a178794c4674670409b6abf077b491d4e30
190804 F20110109_AADGMZ gerhard_r_Page_121.jpg
44ed34d2ae72e7bc993331cbf2af11c8
d07e2f8b3a2c5f0c74c45a29338ca71d98344f28
45230 F20110109_AADHRF gerhard_r_Page_107thm.jpg
4250b0987d7149794b98f9cc3308ded3
8cd97bdae86c7204d1356699e7e9b503bb3fb97b
22295 F20110109_AADHQR gerhard_r_Page_100thm.jpg
2b4ab0a1d654c7238dbced3d798b85a9
a372021f3822154eb77fee543252e5b47ce64ad4
216623 F20110109_AADGOD gerhard_r_Page_007.jp2
57943e8791f1b7b76110550696d7a8bd
269e9c55fe604feb63ac249fb97bd5d181221ce4
175811 F20110109_AADGNP gerhard_r_Page_137.jpg
674e73ee80cb901703686f8fd59bc3cf
489558e97518282307ce5b2907d89117d09cf4da
79347 F20110109_AADHRG gerhard_r_Page_108.QC.jpg
56df52de9026457b2fca27205c76976e
a206d60b56e68eadcd6e4af6b74086ca61e2cfba
70288 F20110109_AADHQS gerhard_r_Page_101.QC.jpg
3f13ea17b68fd2a075094f17d8468867
bb92ef4fbcc3298222d5dfd7bac81a2b1fb1f412
294077 F20110109_AADGOE gerhard_r_Page_008.jp2
34cd95588b7fe63dc9c6b5d19e724f3e
40f3035c350f4ef61d8a9b37ef4bf30b7d91a392
217832 F20110109_AADGNQ gerhard_r_Page_138.jpg
76db525adcd704a54ad188c0e6655880
1da16e0a1ce3018783f94d1cd02e629e1c2a615f
42864 F20110109_AADHRH gerhard_r_Page_108thm.jpg
627e7fbdf38da98cd5b4df36e745e05d
aff505f33117c2bec43cbc6f59734d3542a04f53
23452 F20110109_AADHQT gerhard_r_Page_101thm.jpg
1c9185634c3088cc3fe0a62e60f678ae
42846709427ba0cec98598b2fe0bae2b95a662fd
1051977 F20110109_AADGOF gerhard_r_Page_009.jp2
7fcbb28ef18d91772a62aa0bb84dd9c6
261294e54d73427d19da93a5fb8ca3c9a7a28160
204916 F20110109_AADGNR gerhard_r_Page_139.jpg
9ed4085de67a03672aabb400ca8484d1
941e5e0f052f51ddb0d8d40ffd494d96001a5f05
72085 F20110109_AADHRI gerhard_r_Page_109.QC.jpg
cf6a2f18b4679d716d42526e4ce0da30
3170c74d74a76d689170ecdb8d92c495c3ba7b8e
77858 F20110109_AADHQU gerhard_r_Page_102.QC.jpg
e3a2c32ad6da26f9e49751377e6f85e4
af54e266be5050ce3b54be4a182ee6b4855254d6
171969 F20110109_AADGOG gerhard_r_Page_010.jp2
435a34c1cde0619dffc66f874a5b23a4
b7c878869ec36b70378cb344745a521ed387ae3d
141002 F20110109_AADGNS gerhard_r_Page_140.jpg
acdf9e60ae5b88c5e9ea0d5a4244583b
25fb5bf2282dda4c63e1fbcabcb7868c999b473f
41446 F20110109_AADHRJ gerhard_r_Page_109thm.jpg
91a56548bdc10d3cea30d94ad6341414
16a37204a6b12172eee2eda2d552dd53dec4e40c
41807 F20110109_AADHQV gerhard_r_Page_102thm.jpg
30a7ef81f0f6072604f0d582911ff38f
9c4a998d1ce52ba5611ac5829dd38cc987dff4ea
88254 F20110109_AADGOH gerhard_r_Page_011.jp2
496dc8e854e48ebd18cca83af14b0199
bd15379e8c39a69084ead7fd6e223d47b01c4e68
163434 F20110109_AADGNT gerhard_r_Page_141.jpg
b64e5f015ba4bd1d20ec14bfd2127f28
acbfe4a3fe7769f7e970d4cd0936e5def6eb77c8
92500 F20110109_AADHRK gerhard_r_Page_110.QC.jpg
ca460c08b4e2a4520aff80aeb52d77fc
7c4120949f5d993c2a30c940f2d4fb5715a59d90
55266 F20110109_AADHQW gerhard_r_Page_103.QC.jpg
1712710c8ccf4fba2471f35983471d31
0829e512248e0944ecbfc03dc64f326812343034
96092 F20110109_AADGOI gerhard_r_Page_013.jp2
66485892e8d6f6e067af3e8787328c65
710b0b160b9e219cd1319536c12422f447415bb6
204346 F20110109_AADGNU gerhard_r_Page_142.jpg
ebad2ec482a5acc8a7f82cbac9e9ee4f
d1efa12cf7e758a7ddf993d726d9dfa7b63891bc
46684 F20110109_AADHRL gerhard_r_Page_110thm.jpg
76d8ccd0aa85dd35e0a18cb09d7a5d6d
085fba81450582a1f27e495ebd3d0782aa282bc9
35890 F20110109_AADHQX gerhard_r_Page_103thm.jpg
8a38c61f4c79a7ff7345c2005905b179
918d353dd5d8bdb7a34fe3a20bf34790cc07f034
105671 F20110109_AADGOJ gerhard_r_Page_014.jp2
3d56041f131f91c37ce76883eb2f3626
2dd9ed6062ca20e7bb4671082b1d1b20a80b3ffb
191774 F20110109_AADGNV gerhard_r_Page_143.jpg
413e407140e27715bd4c748ba82800a3
becc970aced70f5e2322726771c69c2ed7389fc0
71622 F20110109_AADHSA gerhard_r_Page_118.QC.jpg
4a346d8accf624169c0c8f69a0eef036
d505e783cfc2bb7f4604753cec938ffc3fba9cda
90537 F20110109_AADHRM gerhard_r_Page_111.QC.jpg
376c28665eb01ea8d9e9af64f2d9b68d
80b2e9e03f912fa1fbac2e9453de09c55edff36d
76541 F20110109_AADHQY gerhard_r_Page_104.QC.jpg
925a11da2d6a05101cced4486bde14dc
0ed987f0d4cadc941c09780dfac85dd6aa430109
12252 F20110109_AADGOK gerhard_r_Page_015.jp2
09b4f9ccba28459a247dc84a9139fa22
07c1557d2fe675298ce05a389f3f8b7d7b5ac0e9
115876 F20110109_AADGNW gerhard_r_Page_144.jpg
35bf50362ca4fb1f17596046ce251571
6ea20493b9508a490deefc46caf1ce21db4ce972
23273 F20110109_AADHSB gerhard_r_Page_118thm.jpg
17d40a53525bb7079388419e10359914
d7899203e3cd25a1cdbd26c2e33441ec780d2387
47925 F20110109_AADHRN gerhard_r_Page_111thm.jpg
12242157b07da77ab23ab7af56570cd3
3c1a9f02397ac51073eef5b1c1df97a20f387877
23545 F20110109_AADHQZ gerhard_r_Page_104thm.jpg
9b175d9317b1d16ce92b8eba98abfd1d
3671341dff8dba6c58a4ba4d3830237e1eb3813b
86271 F20110109_AADGOL gerhard_r_Page_016.jp2
f07341319905facbc98864c47ec8ef82
4a84ce230cb909372b00635349792f857c630d73
98145 F20110109_AADGNX gerhard_r_Page_145.jpg
b6f7a151407e9dd969a87ab5b118b744
4e2d5a246f78e23e31f04ada648e09c7cdf1671e
21888 F20110109_AADHSC gerhard_r_Page_119thm.jpg
7ff96fa968775263ad7937d165caf5b4
0af3faa372710db8ca977252c5e1b2ae32419afb
96459 F20110109_AADHRO gerhard_r_Page_112.QC.jpg
7fc5ceb337be3ca4ea96880d454b886a
10c5fa24393eab1fca1861301e49a4c2a189709a
106101 F20110109_AADGOM gerhard_r_Page_017.jp2
12c1f63b59daa71b57b124623fc91f83
a945262c853a967ecd6b6e313fff00e040d97688
5475 F20110109_AADGNY gerhard_r_Page_002.jp2
e5067b48bc83e22a723dd658c83ffaf8
b3e7002c545436bcfbc802c6f19480772f98c4f8
101441 F20110109_AADGPA gerhard_r_Page_033.jp2
32f4327e33c7017ee4767a59785c00b4
379d719910ac3600e7d11de8e531957cfc95295e
76690 F20110109_AADHSD gerhard_r_Page_120.QC.jpg
f93d3690fb849027e3bdb082f7d87f70
83dcad2ce8f9a23652716fb69174c7037d2689fe
47287 F20110109_AADHRP gerhard_r_Page_112thm.jpg
b6fd0c2b8f4e8cf9c581c125bb3a0439
cdf54832c7b486db5b6bb591368e9b3e2c026f90
103467 F20110109_AADGON gerhard_r_Page_018.jp2
9c5515678a94b2fc4941dcbadf704b84
6959b2baf8b2a31339144c48ea3b3e0c91568629
99662 F20110109_AADGPB gerhard_r_Page_034.jp2
e3692218e90b40bc93ea6659377cfa3e
c1f71adf3f3be6c3a928c2de65335236c02ae9c5
24815 F20110109_AADHSE gerhard_r_Page_120thm.jpg
852eb83b79b1eed3705820f0a4fb7853
dba3bf95f011b06a415574a133d41a18a9b1b1f4
99356 F20110109_AADHRQ gerhard_r_Page_113.QC.jpg
981a1a1120ffc18cf58a56a2e2f65171
3457035701df3c00e668f172535b5532114787eb
106167 F20110109_AADGOO gerhard_r_Page_020.jp2
e8dd0baa86ff6c7e57481adf2dc05fd3
1488ced267564a8134fe5848fc4cd2a529f13119
5888 F20110109_AADGNZ gerhard_r_Page_003.jp2
ba61e15341a1ad1b6b7ebf97f3f873b7
e3534d878cdd48caf048233fa28a77b2f2e8741b
1051975 F20110109_AADGPC gerhard_r_Page_035.jp2
e63feb39ece0ce90c912f3d406451ca7
6692ce9900099a1da75e0767222de0ba1c4ead31
81957 F20110109_AADHSF gerhard_r_Page_121.QC.jpg
b100378b0d86a929f489400d05772add
839a3bfc1643d053da610fc7b343ef342a959f44
49076 F20110109_AADHRR gerhard_r_Page_113thm.jpg
0a07170208ab2acf38c3a1051a990445
d57d8aaa5efa176838743face5175dd61071a170
113633 F20110109_AADGOP gerhard_r_Page_021.jp2
c469a255be245db56db3d34b0234ab16
2ef45a2220539bcaaa161ac436696df71402a5c8
98382 F20110109_AADGPD gerhard_r_Page_036.jp2
86194bc1c466d94b3c28886db693906a
23f53a210ed4230b7fb7ba7c4e00a54c1493fd02
43274 F20110109_AADHSG gerhard_r_Page_121thm.jpg
a9fd307411a7eeafd61efa87a12bbdfd
f1b2aa696cd50f148d419ec09a50f7ae850857e9
74084 F20110109_AADHRS gerhard_r_Page_114.QC.jpg
a45fb49a9694b49a33b1de95301bfd0b
110dda04d7bff0b1d2670ee7cad1ff3282639210
70027 F20110109_AADGOQ gerhard_r_Page_022.jp2
59a4d9993766bbecbcbb18ddf396ae0a
7f75ccf397fc61dae553165b55c9b334f2f21b37
103015 F20110109_AADGPE gerhard_r_Page_037.jp2
5bdb8fc81e22e058b9d749e6fac34190
ba9e8ea028744bc5b5548e2d03a72db3bc9af5cf
87778 F20110109_AADHSH gerhard_r_Page_122.QC.jpg
363794a968d8bc586c61bc57e23d3d5c
b7b8cfff2c31deda7e3793b297ef3a98747c5cc0
23256 F20110109_AADHRT gerhard_r_Page_114thm.jpg
cffce51bdf252dc178be0b8fbae969fe
81325b1124071d10badb36d653f88b4c6259ce50
107895 F20110109_AADGOR gerhard_r_Page_023.jp2
cacafa7ef6e01f27cf83ee3baea6b011
84732f9493b6e9d2af00a792937653413cf698a9
1051971 F20110109_AADGPF gerhard_r_Page_038.jp2
ec01bb705072399d65e02a79f1cf0b38
8e33caf7e5c6e1833331802aa5af0a108c5b734f
45374 F20110109_AADHSI gerhard_r_Page_122thm.jpg
cd3ec27ea9aa6a8cdd417922c0d09500
c6d003d00a6b38ff197c67f9c57291f319c76fef
77939 F20110109_AADHRU gerhard_r_Page_115.QC.jpg
2f811f61a0e756f7104f57b75a9ee246
ac994942ed633f3f1cb6c521b1f6f44d2bc24071
107282 F20110109_AADGOS gerhard_r_Page_024.jp2
81c3f98e484c58ae35aff4d6b442051f
415bda519afb454038225fb8299eddcee880ec87
1051960 F20110109_AADGPG gerhard_r_Page_039.jp2
fa08596167bf6f3c12e01c3c3d30270d
4d93be91c5e88ed15c2c2ed42aea0d040cc56d97
67160 F20110109_AADHSJ gerhard_r_Page_123.QC.jpg
53148bcec0c63da8dfe363829b2dad9c
c4d9a6cc95e30df5035d9ede22a843b03476d133
23522 F20110109_AADHRV gerhard_r_Page_115thm.jpg
bc31db59b0e234683b21878d0859dfe7
51a314fc09c9dc454fe7ece71027b80ee384641c
103637 F20110109_AADGOT gerhard_r_Page_025.jp2
c5fca17810c16151b202156019b07fb3
94a2e43ae562c445ab9113b5075bdbc48bba2088
1051981 F20110109_AADGPH gerhard_r_Page_040.jp2
fafe89d95104b5f4560f936a8d0b0273
5dfec73b145f342083d69e94cda055541ea577fc
22428 F20110109_AADHSK gerhard_r_Page_123thm.jpg
1e2df97bd582c857cc2483cd2bb9dbcb
34de689d307a57e14871109c806bab6545e0e6d8
64260 F20110109_AADHRW gerhard_r_Page_116.QC.jpg
ff3c9e446a426a373e8c44fdecedfe93
75e55139d7e9256ff1cd7dd1509833f0c1671864
103670 F20110109_AADGOU gerhard_r_Page_026.jp2
765e8cba632ec3856bd966931a8dd71b
87f129d825e88705f4588133656333d031b6969b
101256 F20110109_AADGPI gerhard_r_Page_042.jp2
92c46ce70b18aa333e10c987d51ac8a6
2ef390833c52b32baeeb66e3e529e140e5f4c9e0
90368 F20110109_AADHSL gerhard_r_Page_124.QC.jpg
b05b63ffc1bd4e60a86fbdffcf1c5113
132525436e8dcf498fc8e4a982b942fbf4fea83a
22407 F20110109_AADHRX gerhard_r_Page_116thm.jpg
aae3d210b307b39804e138a92dbe3def
c15b2f44d6ca95e6067fd22e92cf679ea1bbbabd
880890 F20110109_AADGOV gerhard_r_Page_027.jp2
e07f6df862174cff5af075ae04cba73d
687fba52c4582e5969c16e49187ff4a0c15a9032
100448 F20110109_AADGPJ gerhard_r_Page_043.jp2
018d6ad7169a57ae11b8f3354630570e
e27f2f6971e9b7b99aa90258bea3c0adb3726d71
15496 F20110109_AADHTA gerhard_r_Page_131thm.jpg
ba9e40f7a9519b53b08065e6e352e7f9
89b1a3dc342344dfacfe458ee0f3782a75e85332
46221 F20110109_AADHSM gerhard_r_Page_124thm.jpg
8b1ce314ed5a20558a0e36869c753dbc
747cd67c4177ab43539f45cb4a1b8d823500cd55
75197 F20110109_AADHRY gerhard_r_Page_117.QC.jpg
8224163499c3c796a0c8b7ea60a8d389
561514ba7ebdec9370aad1fdac86bab85f55355a
101181 F20110109_AADGOW gerhard_r_Page_028.jp2
b0fd4f0806ad93c6be5be0b7289dac5c
3c1edcc7a54b01d4a8d2951d589cc08b82f05955
971387 F20110109_AADGPK gerhard_r_Page_044.jp2
0e7bd2c6da1635adb793493f942ae856
4482fc36cc3ecc41b69fd779b5b635893ddf53f8
80528 F20110109_AADHTB gerhard_r_Page_132.QC.jpg
91f01cf6789753b2d3adc830cb998d5a
b9ce1690212191bce3c35f8dfc58610734539ef1
96684 F20110109_AADHSN gerhard_r_Page_125.QC.jpg
24ab60ac15d5c9cd9e5b822a24d72565
f8b494ada8c0301c1cd76ccd67fcd40a181b93c8
23510 F20110109_AADHRZ gerhard_r_Page_117thm.jpg
4edeae1e74da5ca834675c923e6c8d57
e1c00692ef564be8153ab08abacffc9501cbbda4
103823 F20110109_AADGOX gerhard_r_Page_029.jp2
0c0226a79867633292fd0d97a4664f94
212076575a38fb7a6485e1c2c3d6e5beec0aea5e
105974 F20110109_AADGPL gerhard_r_Page_045.jp2
802dd409f1fe48a141e19a8ae05eab71
d3f540417063c698212c8ff619e3858f5a6c0142
43381 F20110109_AADHTC gerhard_r_Page_132thm.jpg
8e3050d939afcc6923fd7f2cab3385a4
b298ee3090203c176369885cc2bfc73e61d1b6be
46916 F20110109_AADHSO gerhard_r_Page_125thm.jpg
935175cc52146d40e291035d4cbbff7a
5a39feaec76931ccc52351ee89ca6696d3d7d58f
104320 F20110109_AADGOY gerhard_r_Page_030.jp2
191e4572437f8ba20d7c35831edb7be2
2254c2d111d94b8d33103c0244fefcd7422f2142
95001 F20110109_AADGQA gerhard_r_Page_060.jp2
2c946ea526f98bc9f37a525923cce2cd
4e12cbb95b87f2ce6c9790ec9816d0e273303e84
109021 F20110109_AADGPM gerhard_r_Page_046.jp2
965318395ed804daa4e3b6ea445352c5
c73c5d96ca3676eff7ab5dc40c9b271864645db5
102896 F20110109_AADHTD gerhard_r_Page_133.QC.jpg
2245c2aaea7282773dd4b02e36291c74
2339a09db4988353574d1828056f38b5ce8c9528
89233 F20110109_AADHSP gerhard_r_Page_126.QC.jpg
5783bc8af480a82bd353aee2fae8bacf
6bcf0ba25be0b4762f7de1b79ded7c30d863fd5e
109336 F20110109_AADGOZ gerhard_r_Page_031.jp2
e2cc10f4d4c755105e5bc3494b90c1f9
508fb4133740a7bdafc46071b61752c8cd377daa
90735 F20110109_AADGQB gerhard_r_Page_061.jp2
18d000ab1a0ee7cefa4307ca60b93a4f
59956286a70f3d399ed20256f917ba89979a3091
834974 F20110109_AADGPN gerhard_r_Page_047.jp2
d8760868551984d384d9682a55ff8151
b0a3367b6d1712e9f7e96f66f902528f43568995
49022 F20110109_AADHTE gerhard_r_Page_133thm.jpg
0d17111a28db6f99da45eff77112d202
50c75f6aa9f9bc998108f04b9dcff74aa85b043a
45476 F20110109_AADHSQ gerhard_r_Page_126thm.jpg
91ddf87024fba9676ba6a68a6cd29f08
9baa565be3840de3b41e958adf659dfc3eaee9dc
F20110109_AADGQC gerhard_r_Page_062.jp2
d5ee15720754e5993ef3bf6cdc3afc23
7763d2366b68980e1fe089b945d809ddad65aeb2
109431 F20110109_AADGPO gerhard_r_Page_048.jp2
2908634deaed483753475d0bd076c4c2
08ddb16e420482028afcffda3289b6319a111c2b
106395 F20110109_AADHTF gerhard_r_Page_134.QC.jpg
c5d7be046f2eeab5ca79bed09956ea6b
4c38ff3272d633dbd5cb60f4ad7e75ebf055d2ec
89476 F20110109_AADHSR gerhard_r_Page_127.QC.jpg
fc5e32f5b0644b583dbd22aababc8a16
a8ca5164b971810cb50692cd369314037cdd778e
108397 F20110109_AADGQD gerhard_r_Page_063.jp2
d15278d8c4ce8e84b74d4b8b19b8a632
85b13eb447068f6b8965d29d062a3b271512610d
103016 F20110109_AADGPP gerhard_r_Page_049.jp2
d4666c5e1553ef41dac5c240211855ff
ffb5e7709ce2ba13b0ccc6894e0c40d36fad5a90
50657 F20110109_AADHTG gerhard_r_Page_134thm.jpg
6f6484ba102af6597483c29aab855986
3dbdf6f9145019c363f2142c5a77308ef510f342
46184 F20110109_AADHSS gerhard_r_Page_127thm.jpg
ab84b2b3a572d9f827e0b1bc8e49b1c4
277667fa513a16391e4d105f930011b232e4936a
98740 F20110109_AADGQE gerhard_r_Page_064.jp2
f1f46a9502f8b94877973c4c8e981e7a
00cf09eca5892fa7f172f8b303c34fda1671f87b
1051958 F20110109_AADGPQ gerhard_r_Page_050.jp2
4881778bcd8dcc37f6ac6aa21f719c1d
cd7a1166850b395e19229183c5e040f9b4451379
98638 F20110109_AADHTH gerhard_r_Page_135.QC.jpg
88a31b865de19bf57d2e32b9d1487b8c
d64f47bc4051769fc010f1a49298ab42dd9b1607
90627 F20110109_AADHST gerhard_r_Page_128.QC.jpg
082678fbec48e62a37d8b5ee3fd231af
f374680d44a4e055ad6d20b20a9b9a2a25181419
96207 F20110109_AADGQF gerhard_r_Page_065.jp2
dc440e3be32db79f85d1c21983dc10b3
e4c49c32205bfc32b5cada0c9c3bd2a386d58059
87324 F20110109_AADGPR gerhard_r_Page_051.jp2
689b9e91370604c8010c1760fa526eeb
05f817a0e3b3e63949e9f89e5858094b788dfebf
103119 F20110109_AADHTI gerhard_r_Page_136.QC.jpg
45f36a64939317b4921f1b0aeed8c79c
0961ac051a82d2e5157e28a89530d7b058b60797
46099 F20110109_AADHSU gerhard_r_Page_128thm.jpg
fcfb56fcc3c4fb96b464cd0235f3d2b3
ba6ed620457f88bf54429596ba999fc4046feb0a
100105 F20110109_AADGQG gerhard_r_Page_067.jp2
a925c0741ac34dc2464fa905b7816345
d41296a81d414c3de587394a2c86a7ee875a1d6f
95692 F20110109_AADGPS gerhard_r_Page_052.jp2
5c144aea1c14dbdc267aa51e63ca3e45
8240637b419299e72ae67d743e07f897e55bdeff
50699 F20110109_AADHTJ gerhard_r_Page_136thm.jpg
29cd2a5423463b72cf2086aad20482ba
bc70801cc9406c3e50d00ef77213810872234bcd
97541 F20110109_AADHSV gerhard_r_Page_129.QC.jpg
00d759ab77e70f497df700a44a443ee8
f3712b0cd115cfa64bb93b4d1d9174476c30b3a0
106320 F20110109_AADGQH gerhard_r_Page_068.jp2
8f811df01989df0ab6db237705686444
9872eff0c17dda6871e01d4f61cfa38b7ddc70f4
110526 F20110109_AADGPT gerhard_r_Page_053.jp2
71a861eb22677fd5ecce732c97eab683
5b47fd1b369b38661eba29d24285794962a4a9d2
64880 F20110109_AADHTK gerhard_r_Page_137.QC.jpg
6ec256149dcfbf4af2caa5a39bb0811d
17fce67f89088708a58345a943a4074c5345e1de
46737 F20110109_AADHSW gerhard_r_Page_129thm.jpg
41cf00e6d2cade8945739936a4f2f8c4
fac176c24c667d52206a12c92fc1be3eb9331e78
119390 F20110109_AADGQI gerhard_r_Page_069.jp2
a2553bc25e15e906880cd4e6d10cf934
68d5014ff6c98885642011af615840319a98410d
102549 F20110109_AADGPU gerhard_r_Page_054.jp2
5cd25143fb52a0b5d10a7720fc2bf7de
1dde9271088fb0198af48c670d8181823b448b94
20249 F20110109_AADHTL gerhard_r_Page_137thm.jpg
a6f772bb0107450302e8f3e5587a7dd4
b8484854dd5b39c51d641cfdb92f5b5e9363c4a7
94772 F20110109_AADHSX gerhard_r_Page_130.QC.jpg
502aa0db41b7fa1fc65c23d073213919
a7b525afdbf339b19d0a45023b40efa60639cc50
102524 F20110109_AADGQJ gerhard_r_Page_070.jp2
21cbec811c66f460fadfe8e48e00404f
378ca295b6e3ba25fa9ce861194169b70b7c6d7e
64250 F20110109_AADGPV gerhard_r_Page_055.jp2
bd4d76f69d4f2128d3d000077a00c9e3
d964a45c2e9b57bdd8aeffa6f6cc03a0b6ccf555
38062 F20110109_AADHUA gerhard_r_Page_145.QC.jpg
42000fa9db4df5ceb2e5d39176974b0d
8d4916ff79c6f38ddc1b411be52c1f03746efc29
82308 F20110109_AADHTM gerhard_r_Page_138.QC.jpg
60afb76880efe14decd34ad22ec47f4f
5e1ae8ef8349cf6b0d6e1283c800b757bfa42927
47934 F20110109_AADHSY gerhard_r_Page_130thm.jpg
86429a440234f216d30425a471c8ebc1
36f9d7e5bcc2bcdaa042098cfa7a5bb0a0614b34
97892 F20110109_AADGQK gerhard_r_Page_071.jp2
2886776ce9b95c0f62bd1155eaa715f3
bf010186747806aa618dde129cd10cf683f5e3bd
1051953 F20110109_AADGPW gerhard_r_Page_056.jp2
a4aa0f8aa7fabe2b9c2feff9d9da73d4
6dec52922aa7ef86f4c25da8148aea6c48158884
12325 F20110109_AADHUB gerhard_r_Page_145thm.jpg
2407fb1b326ba87c325243c75204d32a
d9d8391a5eab0139ca327bdc754cdbbd6a25729a
25622 F20110109_AADHTN gerhard_r_Page_138thm.jpg
395183ecca8927e9b50394bc513f1125
beb78644434f99f5b04425b756eecba2352d211f
47309 F20110109_AADHSZ gerhard_r_Page_131.QC.jpg
df07494a79db7b84147b80a91721ba87
d8f06db193912de1ec942e7159774ef1079838e8
95570 F20110109_AADGQL gerhard_r_Page_072.jp2
2a834ae0b10517c4965f66c2b1933962
7629dd8226344a2be1748082fe1b30d3afc5d0cf
91738 F20110109_AADGPX gerhard_r_Page_057.jp2
0de0490ef274fe702c9c1cc71a0cffd1
fb90f4cd58128d1ff9dd406bd652dabd8a26350e
168504 F20110109_AADHUC UFE0001224_00001.mets
1455855482af252280dcf701d053169d
4b475999c49127c0e7ed857874b04cf45bb59044
75400 F20110109_AADHTO gerhard_r_Page_139.QC.jpg
deb383f0579908fc79612503bbf8aa0d
082c62822ebef4821ba1115c00efd33fca14b1df
F20110109_AADGQM gerhard_r_Page_073.jp2
6011f6d98dfeed57a67ae68fedcc1f84
d2dbb2591a8e3a6f9168a7aff33ec4660af0f065
111142 F20110109_AADGPY gerhard_r_Page_058.jp2
245ee93ae1b61cb3f1589e1b53103651
b122c0791b8e5177f56a573dd5962b69eab6023e
101813 F20110109_AADGRA gerhard_r_Page_087.jp2
398fbe92bd4ad8cac2edf481a32efab7
435ac7d0b7ed073547161056aec580a8e140dcb4
24500 F20110109_AADHTP gerhard_r_Page_139thm.jpg
c551ebdd2bb1727a1f6815f418a4d79b
814e9163b2a448f99711bfca544da88d797594f4
1012779 F20110109_AADGQN gerhard_r_Page_074.jp2
92a0196177b9a588113d5cdbfac8f1ea
e9e14322e8d7c7a79241f3791778b850908cf7b1
100593 F20110109_AADGPZ gerhard_r_Page_059.jp2
fba06090639ba9ec4f7a22018ad05d9b
ada3c00458384b94d62aa8e4fd5681eaffa4e7d8
95240 F20110109_AADGRB gerhard_r_Page_088.jp2
8c68fb41741a0e48a90204bdc337ef3e
f3d313c4f847e3b749edfb4717bd4efc593c5e39
54116 F20110109_AADHTQ gerhard_r_Page_140.QC.jpg
76dd2ee933a7302d948110fbdcff9c4e
17b46b700df7c3101bf6465d7c54f0eaaab93229
1026712 F20110109_AADGQO gerhard_r_Page_075.jp2
3de89fd6caf5e7cf3b9ef932f8c98769
134ccbd594f059476216814da08ac96ffb4f0295
95213 F20110109_AADGRC gerhard_r_Page_089.jp2
156542f4974f1e7134db15c91a146d16
d242c4c73355dfac5beae47e922c6f54d833ab8e
17130 F20110109_AADHTR gerhard_r_Page_140thm.jpg
76abccd3b292dc357adfd5e188f80509
9e32aca1ac91dce7127f144d3fa2b4e3cd976749
963465 F20110109_AADGQP gerhard_r_Page_076.jp2
529e9ce0d70c8b764fc5257941885b2a
1d05ad6985bcc0834c144161d18b48f2502351e7
997906 F20110109_AADGRD gerhard_r_Page_090.jp2
1bd94f3e24bb20ceb9cef4e4411d5389
6a0df80d19e3077a0fb16b0d2779d4fa3a33e01f
59407 F20110109_AADHTS gerhard_r_Page_141.QC.jpg
109a1f89ea3ee6ddb0fe5b5f2754598b
c79d7b51286b05296805b3bf185fd82f16cc90ab
900616 F20110109_AADGQQ gerhard_r_Page_077.jp2
8688d3081e41a10a82cbb9b8c01a42fc
926e9658477ab95bb84fb77df02f9879e3e5a795
101965 F20110109_AADGRE gerhard_r_Page_091.jp2
74b5a50834c3a25bc73ebe779f709a35
99e50c6434a32c7a52043d2f9bf61b7ce9c157a0
19136 F20110109_AADHTT gerhard_r_Page_141thm.jpg
200104f80fdf86ddea1de3f07b322b82
511e2a454d4e499846b78a6081aa406c2b570ac8
897492 F20110109_AADGQR gerhard_r_Page_078.jp2
6cb7e350681b586cea42b329b0732099
da6f64d51bc43fe94204acf72bbf76a958b9ccaf
55405 F20110109_AADGRF gerhard_r_Page_092.jp2
1ee37a437575fe978d714c67c96e24f4
24e5d5253640ddc8535fd176d7205aee71e67dc1
61065 F20110109_AADHTU gerhard_r_Page_142.QC.jpg
0bf1f7156e55dd7062ba73db94982837
e5f1f2a335f4429406bb52df6adbc1594e89ee86
892901 F20110109_AADGQS gerhard_r_Page_079.jp2
e0ba97030165372cd248826379c80737
1ac3dd93a0209284a23186899c8eee3159bf05ce
103468 F20110109_AADGRG gerhard_r_Page_093.jp2
1a432f468e00657981729d77fe3c9eeb
ba016e485d38bc94039a6f919605cfb6a64299d5
22675 F20110109_AADHTV gerhard_r_Page_142thm.jpg
cc01c883f3a3565373925c22a76afd46
f67db6d22940ebb514f3d291cfb92a928be7a7d2
1007536 F20110109_AADGQT gerhard_r_Page_080.jp2
76f74c2e6e30778ab6f8090261d2facf
262fda813d517c956c2e32968d22760203d419ea
101221 F20110109_AADGRH gerhard_r_Page_094.jp2
f9722868a63373fa73b5dca7364043c7
e4d7032dd449d8b7ff016fe1fa488c628f56ac1a
79622 F20110109_AADHTW gerhard_r_Page_143.QC.jpg
801e33da37c43b1ec1d9185bb1732e70
868f5e9a7fd0b680e7ba5d9dd9e4572ba7e80358
876373 F20110109_AADGQU gerhard_r_Page_081.jp2
e5efcbeb225d0355cb6431299fc47bc5
dfad3c40f932eb190816ca8891009af1aaa0d794
41027 F20110109_AADGRI gerhard_r_Page_095.jp2
99dda407552288497020d39ac7787ecc
09e6cfa93730d343cd9dbe1678c563bd35c69ecd
F20110109_AADHTX gerhard_r_Page_143thm.jpg
4a262887a3e446f82023c984e98cf936
4f03125dc40d1883fec1254c475a1cb97b5090a1
1023769 F20110109_AADGQV gerhard_r_Page_082.jp2
27acc8b17c0feda3631ee904b52ec1da
db19b28038cb20e43f3c71ab561e12e322c94d37
87693 F20110109_AADGRJ gerhard_r_Page_096.jp2
db782ad27b372e6f559d44248c3f5ecc
d30963717df402349df0b393306861f2173a359c
56611 F20110109_AADHTY gerhard_r_Page_144.QC.jpg
5edecc4329a7bad3ba41331505ecf803
499b502d73a8570ce3ff9da236f2cd55acb9a3a2
897912 F20110109_AADGQW gerhard_r_Page_083.jp2
0e7f935fca0eae70b20fb7f9cd1f2201
b156dcf51dc5a5bc01f9709f7399f474a8b09019
101395 F20110109_AADGRK gerhard_r_Page_097.jp2
3047dbb543d7e669062b4fc6e2860364
cb5f1ba6885484a7ceb2c98c2eba514fa3a33936
36616 F20110109_AADHTZ gerhard_r_Page_144thm.jpg
3b86aa57004d180ecb8bd09af44fad86
daa20f69c4c4e048ff60f26e035cc4084d484a9e
F20110109_AADGQX gerhard_r_Page_084.jp2
41a79bd7d7615a19b6f5ebe7b1555b7d
c9f6fe4868717083c86d93d57ae626eff9838c25
1051983 F20110109_AADGRL gerhard_r_Page_098.jp2
58c3f13e37dcbe75a26d0c763b8eb1ab
c5d5d5de6b0e23c0b3493b69dce9d5644c5d61da
1051954 F20110109_AADGQY gerhard_r_Page_085.jp2
8c941bc15e608bb0f097c6e617d6a234
63bbe9398c4c2dd006beda3c6daf73db7c874be2
1051961 F20110109_AADGSA gerhard_r_Page_113.jp2
7f8dfa3459ffc5ee93da13c527597734
e9b5c659b4b91a588b0889e6affdd145f2da3af0
95735 F20110109_AADGRM gerhard_r_Page_099.jp2
19c7c99469b3212d3797de0a6cb0525b
cb21c5764a762555c99318124cf2019da0ab80fb
861828 F20110109_AADGQZ gerhard_r_Page_086.jp2
82d830c98c3a67087c42f858d8f46516
62c5e3b443cd797539624810fb747c664fb1fa92
102672 F20110109_AADGSB gerhard_r_Page_114.jp2
6b818d203ee88b756bb8cc8f864b283b
4ded6a97e7bdedc3fb3b9ab7135469d4dcc0e407
94778 F20110109_AADGRN gerhard_r_Page_100.jp2
569b3c56480a4b7fad4b6333324f0cfa
e60c07fdb0e84de43ce26c67b595d84f5cc485fc
109018 F20110109_AADGSC gerhard_r_Page_115.jp2
db537ca6c7a696e1aefb2a810b7a004d
9bc873d1b8a3fbe34a7f999619d7987a8206d2d2
95867 F20110109_AADGRO gerhard_r_Page_101.jp2
90fccc2a4107caa1dafc5b71df998e51
9ffc6452aabbc68ad43b70502a880d850aaf866c
90957 F20110109_AADGSD gerhard_r_Page_116.jp2
4e983b0daa7934e2db928f692efc80dd
268ea88b2aef93f6106206ed3d05ec3c441f01c0
733489 F20110109_AADGRP gerhard_r_Page_102.jp2
63158e0db9c2282a7c01330bde78bec8
33cdddfd1ca6faf3e48d53dc3cfcf2167f5fa6e0
103001 F20110109_AADGSE gerhard_r_Page_117.jp2
8f6d56c4e1f611dcaa8d507875e3da21
94b2f897ffdcb4e45f8b0090a5f30cd578ca6459
439696 F20110109_AADGRQ gerhard_r_Page_103.jp2
c5b306524841d2dec59357875e533131
15fb48c79f37362b9485c5f9af8f290a0404005a
96265 F20110109_AADGSF gerhard_r_Page_119.jp2
1935539ead5adc65cdba97eaf3a8b747
8c97a5e5457088d5d58d3e4b792e287f8a175408
111140 F20110109_AADGRR gerhard_r_Page_104.jp2
180e78bbe5225750551e014375a23188
9d05b3f465087742c74144a57db302001b88661b
105323 F20110109_AADGSG gerhard_r_Page_120.jp2
fa7c9911fada548979d2832063992cf0
0a4f93da8216bbc78bbe7a4d8fc03b317464d1a0
104344 F20110109_AADGRS gerhard_r_Page_105.jp2
0a2d70e8c7a52b920ad07e1689bc4724
98c47d8b2ff574ad857bc21741d1360dacadc9e7
1051980 F20110109_AADGSH gerhard_r_Page_121.jp2
97a582ed7092951bfaecbd5ab7b2d6ad
6c79ac30d48a77ab5c4fb506c881e0265a8c3a58
1051959 F20110109_AADGRT gerhard_r_Page_106.jp2
916c5dcf96c8cfc6a28bd195c2a26322
8fd1f5baea29061d07128cef2d57d68d05d06a36
1051938 F20110109_AADGSI gerhard_r_Page_122.jp2
b0f56dceff5260622021c72d83622017
2e3e0b01c12d51e772be76c92c384aad6c982c1a
948279 F20110109_AADGRU gerhard_r_Page_107.jp2
a5c570b646ad1eb72212a8380fdc6f14
fe28c1faa29539aee3b88ef934bdb25a7a454a7a
88624 F20110109_AADGSJ gerhard_r_Page_123.jp2
6e6aee2d4c9097f8d8bcaab5d528b041
66667e84e8fd93a5488fa4e43ae86e55390d251e
887376 F20110109_AADGRV gerhard_r_Page_108.jp2
abd850513c924501fb1200e2a55fd77c
53602e1d124529df5d4d27fa43f6a1eb344610ae
861291 F20110109_AADGSK gerhard_r_Page_124.jp2
1c9b25bea0e1fb116e7f3ee8566d165e
fe6c984d804ef35b875a3d510d6b46d622a4ed7a
786829 F20110109_AADGRW gerhard_r_Page_109.jp2
8fe4e8991b15989941d639981426fae5
c91af7b9c710f0614ebd3654185a5c230f3d9b08
1051951 F20110109_AADGSL gerhard_r_Page_125.jp2
461ccc9d94bcf88a7badfd5fd8b25ef8
12a0ee8c6fc112443aa13ba55bfee194e3c7f830
986728 F20110109_AADGRX gerhard_r_Page_110.jp2
9f7ed14c34d8e575f041057ad16a9187
ea198645163d706641e40ccfca7ae7b0227fee5c
84948 F20110109_AADGTA gerhard_r_Page_141.jp2
36f3be8db0cb13a0b4605fff8ba7a1a1
35d452ddfca0f88265d27c03b558b4f2dd68d714
1051966 F20110109_AADGSM gerhard_r_Page_126.jp2
5ad9685b806b07a13b625cfd28550472
1470e2248fe7ec3d74a99b9d86408ee8e404d4e3
1051985 F20110109_AADGRY gerhard_r_Page_111.jp2
ff1dc9983956eda400bf8149c2ced7e7
143855b2ff329ceefbe58a9204a9d3728b9750a5
106534 F20110109_AADGTB gerhard_r_Page_142.jp2
3ffa016c688af6a7b8d35a10d9692072
7844545f04d3c2ee707a637ac970e610fe8a9b31
F20110109_AADGSN gerhard_r_Page_127.jp2
9af5e1c02764b9994b02be64a017e2fd
626f15c0a90aec73659f063a5ce25c68bb84b68d
F20110109_AADGRZ gerhard_r_Page_112.jp2
0a2a4ab2716c0a473ab9e20787302d21
a8895b5a63d3fd157483ff0bb1680c498973452a
909471 F20110109_AADGTC gerhard_r_Page_143.jp2
8347918ffbe5ee14d54ee10964c862d7
b1ed77fb8e6939baf5f9ae7f27fcb966ca152b14
962657 F20110109_AADGSO gerhard_r_Page_128.jp2
2d705afb8fe4e24d2be9e30498f71d22
33fb1ba58e4c13359f7b807bc84730ec9ee38af5
480435 F20110109_AADGTD gerhard_r_Page_144.jp2
01e14cc4805ceb5b402ccb020e83d73b
92c2c82a8aee8a339ab820dc5ae8ba537e8b3ddf
F20110109_AADGSP gerhard_r_Page_129.jp2
9311b5824c21f45d2de006d94301b91c
49f1f7e76cd4f2604fa133496b1f2ec09318dc94
49400 F20110109_AADGTE gerhard_r_Page_145.jp2
cfbd60d38d6a2c2be90a1d3f6e0a48d0
8c7e30f6cd9660b3fc07ee1cd082ac3ba6acee14
1031678 F20110109_AADGSQ gerhard_r_Page_130.jp2
eaae147ad4fe7230edd3848d2afff837
d633d9b40a5e2216a0c8e0598afba14103a32c30
F20110109_AADGTF gerhard_r_Page_001.tif
7e3cd7b705b64f38466af60dbe24e1e7
c39000c1ed481521d14874c553da3b05f67e9107
69562 F20110109_AADGSR gerhard_r_Page_131.jp2
1850f385d0912d9f4a2462ef0c78f8df
55d27fe4373b053e1c6ca1c1472ac8901def2639
F20110109_AADGTG gerhard_r_Page_002.tif
e8f42d792875eb6790b6fed9d133cfdf
c6d8316439014803e2a58fe34afe6828720d5d90
1001000 F20110109_AADGSS gerhard_r_Page_132.jp2
a6bdfd26ebfced98065fc6d8308195cb
435262896affdedf3b44ad21ee21b0fb19540b55
F20110109_AADGTH gerhard_r_Page_004.tif
8d2ea759aacd3420a46d7b867bc33930
9a3b7c0e5e722743d88fa70610bb747f58eacdc9
1051978 F20110109_AADGST gerhard_r_Page_133.jp2
add4979dee0378d8cdb359316b350175
36c8c076df311b789f1faa9b5ccbcaacdc327193
F20110109_AADGTI gerhard_r_Page_005.tif
1b3323a23dff520b9c9fdc6c66749f9e
3486123c796d4cf1f2f35abe4eb745559b32eab7
1051952 F20110109_AADGSU gerhard_r_Page_135.jp2
2b22fdcf81c1d3331a3968165781cefe
9ff394935d36b0dd4edbf4087115fe21447d60ad
F20110109_AADGTJ gerhard_r_Page_006.tif
51dafa773a624e9a62854f4eed0cf673
942e6e0933b084e622a07fc2fdd6960de1f8a6cd
1051986 F20110109_AADGSV gerhard_r_Page_136.jp2
1615c14b34cc381622b4238845158eb9
d2a93a501704076b1f1b83727fef8351f4f6e8ba
F20110109_AADGTK gerhard_r_Page_007.tif
b813c1e56c09514f617bcc72b681e34f
4934605b4b9f201505b58eac321ef7a4ee300537
88168 F20110109_AADGSW gerhard_r_Page_137.jp2
83a6fb42f8edf33e61505100f102d334
63e519ebad3351c6716c8fe2e9cb6f4524e40572
F20110109_AADGTL gerhard_r_Page_008.tif
39f11a04dc76ec77181f91c100eb4ab1
53da3e1655d9fd66c64fa36dedc83347525f714d
111050 F20110109_AADGSX gerhard_r_Page_138.jp2
8618ca20c996ebd214a67e9bd298196d
724f5d935bf924d4e4ffed0a4b5770b9288d2d0d
F20110109_AADGTM gerhard_r_Page_010.tif
4878595cd4fe1a403475358696121227
368bac9bc0bd7f3552441909235860bab613bde9
105244 F20110109_AADGSY gerhard_r_Page_139.jp2
360b259e46cf86fcfca3126e3e68f1a4
b82a1c77a8b9c89b50ea2f1831c51e8e20a718ce
F20110109_AADGUA gerhard_r_Page_024.tif
a5b293c5093664450d21b99ca9a3cde2
1844ecdd526766c1723af0c49c4e72f0cbc6e5e7
F20110109_AADGTN gerhard_r_Page_011.tif
f64448ce9045443f434c6f976d430c20
170af15c4c7bd47e145e88709bed98520a1af4d0
72262 F20110109_AADGSZ gerhard_r_Page_140.jp2
8c2c45e5e66d33334b0ca2ec587a5e97
7092be8d9a797bbb7fa0f2d394f0daf8916b5b5e
F20110109_AADGUB gerhard_r_Page_025.tif
8a10709e1d615a2a59a31c05267d2495
bbb371d81f464603a362270b882d8eba80f5b3d7
F20110109_AADGTO gerhard_r_Page_012.tif
50acc4c383fa319623f11f73735cbd9e
f9f3f135dca6f95ab4c90a097b4b50648e15ddbe
F20110109_AADGUC gerhard_r_Page_026.tif
2963cc5ff688dabeb68fd5e811c340d2
34c4e69bd985b0f926ebbf8a21f194b9dde189e9
F20110109_AADGTP gerhard_r_Page_013.tif
89e9b283785ac0958927b80d6df12cbb
a8b3b51502ed1d6e7f315a977fa66b8a033c6071
F20110109_AADGUD gerhard_r_Page_027.tif
e0ff734ca5002ff44fe9e6f55905a40e
da673bd2531f56da83a473389deff02b84504e21
F20110109_AADGTQ gerhard_r_Page_014.tif
54d5f40524f757a507cba7ec8fd772cd
c3b952347c5f33b73146a687109a3450a465b0ce
F20110109_AADGUE gerhard_r_Page_028.tif
871479522524dc323113b363d84120ca
8f6971a91f4a9b2a4c67e266fbdb368d9b169531
F20110109_AADGTR gerhard_r_Page_015.tif
2a75a2c5be5824fbc45fb5a1ec299097
75193e6bdba488a89e699698b0a27411aaa19ab3
47507 F20110109_AADHAA gerhard_r_Page_042.pro
3e5e599f50c1f2bbae366cd6232d08a3
03d1e8f253f0f7b5f229dff070ee23a2ab8f9752
F20110109_AADGUF gerhard_r_Page_030.tif
1ee8053680fa9cd7f01fb6401565307f
1b30025aeadc09cbe4b8b3e1fe841f696efeafc5
F20110109_AADGTS gerhard_r_Page_016.tif
8a83969ffea7391aedd6a67e65812f2f
2ba04d87a7169129325d33cd7418b59dcdbf2181
51860 F20110109_AADHAB gerhard_r_Page_043.pro
454de0b922ff826227bc9666c1fb8f5a
ced22c5bd2b4fd3b0f50ccdfdb9292b3c86b0d50
F20110109_AADGUG gerhard_r_Page_031.tif
56294869b5d9837023cd6fc1097f9f9b
1a0192b555fb8b75d865352b08a3b1c71c1e46e8
F20110109_AADGTT gerhard_r_Page_017.tif
364ce4a470c98bd0ff04ccc57ca44175
342a4234a7755737c75251df10e3ed389be4865d
39326 F20110109_AADHAC gerhard_r_Page_044.pro
2535c5bfb0b898f36d1f19159f544cd3
54e05b0054b65e3492b495f4f44876f3dd392721
F20110109_AADGUH gerhard_r_Page_032.tif
dfa002f731bdf5efe2fdbd80198f08b1
97fa66400304d5980e0b94745f0da6a41fc57484
F20110109_AADGTU gerhard_r_Page_018.tif
2435807d704dcb89e09ac3ccd07b2555
0659c2d408583abc37a2b4284fc4dbd3a97a8ed5
48842 F20110109_AADHAD gerhard_r_Page_045.pro
cb01a7fd66f5e3ca96e131ff62a4fe93
fd21d3cd5e7506abe11dc5776efac2580af12550
F20110109_AADGUI gerhard_r_Page_033.tif
450068faf96c7d9995ce9b71c7aa75ff
d16868328d1e2442c3bac3e5ab7728371198f524
F20110109_AADGTV gerhard_r_Page_019.tif
b18d2d72fe8565dbbc72269017cf1865
ad4e1b9abbe15f5bdea6b0d95cd0ba4cf3ea086c
50555 F20110109_AADHAE gerhard_r_Page_046.pro
745ed702a5d7133635d7f9ba2f2749d7
99837fcf68ce4a5efc423a630321d1c6df957858
F20110109_AADGUJ gerhard_r_Page_034.tif
ae70b7076967f84fe5929a94eacb2843
6dbe07b4fe303454ad2ae3c3cd3f3612c34b4a8f
F20110109_AADGTW gerhard_r_Page_020.tif
e85a566a2a6e1eff103c4ac9f6b01b93
34a5d1356d9f39756d50c62f4ca1bc29b01dfe8c
49856 F20110109_AADHAF gerhard_r_Page_048.pro
9ef2777f996d430cd6e34b1525cc9514
1ab03b2fc81d8bdd4f785835088644c67006ab69
F20110109_AADGUK gerhard_r_Page_035.tif
f2233c6fcb363885ceae408bde46b77b
bada0d497780bbef9ab3f9c117fcb6e2d78b19f0
46472 F20110109_AADHAG gerhard_r_Page_049.pro
c37137a9fb466fe5c7d263671d121954
f9cab8e37101b8f9045cae81d4f576a3226c54ca
F20110109_AADGVA gerhard_r_Page_051.tif
3ccf1915ba7256a17d6593311689d83d
0bc23c407a5b2b1a594606ae6d8a42f317ac6a74
F20110109_AADGUL gerhard_r_Page_036.tif
d48d2d4818279e251b23d6de7e691417
0aaddbed24ddc91448d07f335bc82c2b43488e79
F20110109_AADGTX gerhard_r_Page_021.tif
f312e680e6e53c4b4d285955f6270321
153dd3fb453a150c9dcea95f0c1977f553d5ac3c
31091 F20110109_AADHAH gerhard_r_Page_050.pro
3529cb20ed24ee16106efb9859c76513
3ed0c89ebea089045ca1242a3a851a80dc8f7642
F20110109_AADGUM gerhard_r_Page_037.tif
11c9c0363af57a017132f3424e781cf4
c6f942540f9cc5d4562b11b8eb5cd846724b44e2
F20110109_AADGTY gerhard_r_Page_022.tif
9315bb73ce5f762c3838ce4611da05b1
7d124903a8df8f963e3664e86d8908fce2dcaf0b
40086 F20110109_AADHAI gerhard_r_Page_051.pro
c42e0bcbbecf3ec76bb8c7140ff9a8a8
956fdeafc5d5cacb60565fba36cbfa57d85143f1
F20110109_AADGVB gerhard_r_Page_052.tif
25635886d931c26268924d434a7c3f58
ecfe8c1615e5c8234222a6a35f8189753a81e19a
F20110109_AADGUN gerhard_r_Page_038.tif
b336ad88d55df0a60c5c43428769f997
a2d6712fc8da6c6c82caa5632ac8898939200939
F20110109_AADGTZ gerhard_r_Page_023.tif
4b5bc2aa38107bf6bc27d481c51eb553
d1012df61104b22828409efa85a33c1c0ee7ea64
44064 F20110109_AADHAJ gerhard_r_Page_052.pro
2844fe2a609f87d63abaea5b73a6e721
41bbb85dad7868d36b59e79b2dc66536c2dcf54d
F20110109_AADGVC gerhard_r_Page_053.tif
bde61d6affd806d712707fe34d3e524c
f48888c3ab37872f5ad7846604295f0e3929f8c5
F20110109_AADGUO gerhard_r_Page_039.tif
28cc990b72ccd499b6efd0fd40859f0d
f79f3c1fa68f78acc592a5f28975c342b0cd8e3b
51291 F20110109_AADHAK gerhard_r_Page_053.pro
2988606053ed57261afc196261637c9d
ffb1c8825867b01c6de2dba6c7c16dfc0e1645fc
F20110109_AADGVD gerhard_r_Page_054.tif
2c986d525ecbbc34cc11ea647c9b0a0a
7d12b8bea6456f49acb6a0d6f9bc4e44453609cf
F20110109_AADGUP gerhard_r_Page_040.tif
0637230c2bc49e441ffb327c2d04dd54
910a7fa4bbbdb08615089c1cbd8dbea08e4e3052
F20110109_AADGVE gerhard_r_Page_055.tif
60e09721822bbe30796e16988a3c3f14
273f66ed5abbd792400088b36d52fba15b5a3b77
F20110109_AADGUQ gerhard_r_Page_041.tif
27a5fa8711b733a8c191cc11231704bb
6ac2b0c45c6ec23d58739dcad4aabd7f5da5f301
27732 F20110109_AADHAL gerhard_r_Page_055.pro
01adfcc9b213545219bffe0d0edf2b25
db53a62faac03db845b27fcbaf586867bb18936d
8423998 F20110109_AADGVF gerhard_r_Page_056.tif
822fb0503d2a2394fde75eaabc54af6b
25e8084f9b43f22b43f719a3ae4ebeada0bea446
F20110109_AADGUR gerhard_r_Page_042.tif
80b49f7314331e0fb21e5bb70060cca8
9b61e2542318e82da6466a55d725b1278f76bdd0
45075 F20110109_AADHBA gerhard_r_Page_071.pro
931d3e4b7141b014917280d8122ec614
d22d3f980f3569afba7e0f7f53ff14c5da91743c
53883 F20110109_AADHAM gerhard_r_Page_056.pro
c49e1bf615300ebc5a0695940bd2ec22
3df3d70e935590fe6966b41e69d9b60e6300ce57
F20110109_AADGVG gerhard_r_Page_057.tif
2ced327b1f9364e2d6448aea56d3cd49
eea3bd873f4297da06049853db45550dabf0fff1
F20110109_AADGUS gerhard_r_Page_043.tif
90606caf3ebdcfa7d8c3a2d87cc806cb
6ddd7119463798923a6f37b46bd552aeb6d83767
43526 F20110109_AADHBB gerhard_r_Page_072.pro
87614d13eaeb43c4e32f8ad9a6e072bd
c55b63f012b6bfba4cc278df4314f31fd713b522
41580 F20110109_AADHAN gerhard_r_Page_057.pro
15417735d22792ee26cf93fba57c8785
ef62b1cd26f23cc9219a24975f92782af217eeff
F20110109_AADGVH gerhard_r_Page_058.tif
97b333b97fd8df0e6651e6859152e554
d321160c2b76311cccec3649b2ae81b71b1bd49f
F20110109_AADGUT gerhard_r_Page_044.tif
85b769585d284509dc84f29d74df5019
2d298728545c1dd9dcf1ea2bcffb0ede088d098f
45668 F20110109_AADHBC gerhard_r_Page_073.pro
475afca6a84c480aeb3352d7cff91619
12ee3e71b880ee8f425aef495e7ca1745c86aa45
49872 F20110109_AADHAO gerhard_r_Page_058.pro
541a7828e0c4f725a6de303e30345cc5
5e8609aabcc64877608613f1abd231668cb09a61
F20110109_AADGVI gerhard_r_Page_059.tif
10c4129c39ab0b219dcf3deefbaa2374
71f5e65843479dd59e14ac8ad3ea5d79e8dfc1f6
F20110109_AADGUU gerhard_r_Page_045.tif
b718e28e2a9af6fdd2861bccc6278579
2d6d6feca34d72e004737fb2f447229d26e2833c
44270 F20110109_AADHBD gerhard_r_Page_074.pro
ade8a7659001958642983cb6115f341c
adf7cecc8bdc69d8cbeaabef1345d24c79faf9bc
44897 F20110109_AADHAP gerhard_r_Page_059.pro
8e16e2365bec3847572d3d0a311d61fb
18a52cf58b979d491de5f3d1dae3d918b9f2ec05
F20110109_AADGVJ gerhard_r_Page_060.tif
4d7c001569ccdc924fc6687530f6ebc9
031700d947f33b8f60f63fc3fc6f9e71b9d98620
F20110109_AADGUV gerhard_r_Page_046.tif
7360b339e8af020c1af2d528013e035e
d569434b464e459b01589ebc6d3051f93ced93f9
45767 F20110109_AADHBE gerhard_r_Page_075.pro
97e868c890deb09066f16421bc68269a
36e4bd0d17b30f75b488154cbd69e46194b73359
43650 F20110109_AADHAQ gerhard_r_Page_060.pro
167454470ccd69be18a480defa34395c
82f15e3fc2aa12043c8b4b8470c1c15dcd6d7a89
F20110109_AADGVK gerhard_r_Page_061.tif
6232f67d15fa357a0fe9e57de0723500
90b8148e47aee0d67afe50ec8770b690cf7731ae
F20110109_AADGUW gerhard_r_Page_047.tif
d9f6abcd8115d4ff092b063e021b2808
69cefd5dfdcd4f1370e310e40444be4dcab52560
42220 F20110109_AADHBF gerhard_r_Page_076.pro
952876054bec1a6610fe505cf8b203e5
036a81f522ebcc0714aa9833e2fa38beb7a830ca
40758 F20110109_AADHAR gerhard_r_Page_061.pro
b12382e4280e7416dcb7d40eda8c08df
ac6d8788abb2a45717b8ed7029959a8b74ee0c38
F20110109_AADGVL gerhard_r_Page_062.tif
cb1c876d9ac9b750bfc182a1c2876e69
e4df752873bc64cdcdc6b487252dc2c9c2cbc631
F20110109_AADGUX gerhard_r_Page_048.tif
d6d18cd1b575858b92148652f916f834
073d90eaffea4953b5ccc5186f1681a62adfdb1e
38164 F20110109_AADHBG gerhard_r_Page_077.pro
d587bc49c8bd9398096ad87b037e3c11
7ee69e024fd641b4bde352a3d6725bc36d0e0dbb
F20110109_AADGWA gerhard_r_Page_077.tif
a3a4676e6eae349cacdc44d6d24e7fd8
56d36f7e33884ec01f313a711e0cea68fc8c6a81
50206 F20110109_AADHAS gerhard_r_Page_063.pro
8a6eacfc9adb9de043f7daed5f9cc36d
e86500a4aad56e999189bf05cd1e2c62b59bcb63
F20110109_AADGVM gerhard_r_Page_063.tif
898b274eff31cd012c7288ed4e6595b7
69b11f2b66bd9c753245f968b3d7d0366cb4f1c0
F20110109_AADGUY gerhard_r_Page_049.tif
c83099fc351070d301befd3ee58097c3
c903ca7676fca9ed17a9db17c0c350335d4d38f0
38179 F20110109_AADHBH gerhard_r_Page_078.pro
0ed7b5ea917c6e9a45d4c43f08064dad
0694a02842d8f7859847714bb6ac3f90b6092504
F20110109_AADGWB gerhard_r_Page_080.tif
e51bd0dc7b5acae8cde0ec52d4a53086
36bd121d124c783fbc380d8d49479193141b44ea
44325 F20110109_AADHAT gerhard_r_Page_064.pro
8b5e56dee5a6ab42fb3c0bcf35c88f60
62202d0ae336dbbca4d32002803c04dcc9ce942f
F20110109_AADGVN gerhard_r_Page_064.tif
522399c3c42412d78a6873f177b60bb8
16613395a8e8c2f9b00702ee9bdb96b60c99f79e
F20110109_AADGUZ gerhard_r_Page_050.tif
1ec02f2a5aa3213880fda3f71376b394
8abfb14b63d2485841ab38b32e3526234326ccfd
38703 F20110109_AADHBI gerhard_r_Page_079.pro
a05ebc4c7929f1d9c9871362d258e610
e918a5b5dfc11f38be11704cf9bd5edd6b164500
F20110109_AADGVO gerhard_r_Page_065.tif
000c2e8ec062f8dadc7bb866a28ef74d
ce149bd72db5ec4a277f4742e00591d6111a123d
44854 F20110109_AADHBJ gerhard_r_Page_080.pro
4e3e909c9f3e8b20c822725eb9d17da8
ab8096165a7c94b9a8c002bbf7d2cad76bdc3daa
F20110109_AADGWC gerhard_r_Page_081.tif
808157d3c20e742f55542eb89a29d2f4
404c4139826ccbc5e49b0c695384ab79c5389d05
43015 F20110109_AADHAU gerhard_r_Page_065.pro
aad9a1811e7608d42c745b46ed194d4f
13a0df50311064a236b35e006e4d0680dd55978e
F20110109_AADGVP gerhard_r_Page_066.tif
d21b744c883eedead4eb26c7bd1b45be
9c1b48bf900517605a149930feb702847e56fe12
39294 F20110109_AADHBK gerhard_r_Page_081.pro
031d47da88819dbff960199649b43234
0e8348784e47b3bbe9713f42ec0de0d490ca5c56
F20110109_AADGWD gerhard_r_Page_082.tif
fd95ce5aed0f2ded197403cec67197f1
324832866d6c1acf2f06b8daf975fbc5df358380
11700 F20110109_AADHAV gerhard_r_Page_066.pro
4bd64d67d2e6ecbc3d8b6c4ffd1eb163
f2a312cad95df6e4943764e95e312a7657c539c6
F20110109_AADGVQ gerhard_r_Page_067.tif
eaeeee4d020399583e0f94821791b48b
453130626b3e1e4c5accd1ad0d2c086aebad5cdd
45037 F20110109_AADHBL gerhard_r_Page_082.pro
f07e4e0778fb212733bdc2d8c6cd3e3a
9760cc2c00cd06321a12c7f621729a01af75ad7d
F20110109_AADGWE gerhard_r_Page_083.tif
0eda69553f78a0082a0081b1d886372d
495eed7cba4f0155a3a0b738ff06166f3ada7442
45940 F20110109_AADHAW gerhard_r_Page_067.pro
18d6ec31532b8349102c9bdd98f6bca0
011e156f1b6c335b8184af05e0f5bd27f79a92b2
F20110109_AADGVR gerhard_r_Page_068.tif
4e00fdcef15fcfa894c6352b8c4db52d
2fe04b9ec6f46c0af04535c8a11c508553358236
47621 F20110109_AADHCA gerhard_r_Page_097.pro
71f436a29ad68bd440f5b378c81bb5cc
ee4c335b338a4ea2f99c8cd6e2271b3a7469ab63
F20110109_AADGWF gerhard_r_Page_084.tif
1e0bb8ab8b81a9f5ae5b41b28739d24b
802eef5fdc34d238d8bd07b963845f62b7bd6f3a
49216 F20110109_AADHAX gerhard_r_Page_068.pro
6fd5d86a6fe03def4644fe27e42fc60a
4319e856e1917f8ec0b075344f52ac5e0cd0451b
F20110109_AADGVS gerhard_r_Page_069.tif
20188c115c93a333a40f130111a727d9
6465a90a7d172e902bb2cb5a16030fda37cf380e
22467 F20110109_AADHCB gerhard_r_Page_098.pro
96c983cc8a98cbe8d6a87f50786acdf0
e33818021ae6b1da1ad538296806f8d2df5085fc
38172 F20110109_AADHBM gerhard_r_Page_083.pro
a6647c05c003adac7b4642657ac20fef
ea9bfbc3d01db10f7ba2dc898a462bda91638e5a
F20110109_AADGWG gerhard_r_Page_085.tif
1ae81911f49f3015fa8585d9c3e9ef2c
a45c09481309acc7610491137269f46317fbf4f6
57033 F20110109_AADHAY gerhard_r_Page_069.pro
1f4d5f3d611c267d0afdeb7b317c764b
c8ef05c0696606f634e82aedfc74046943014ad9
F20110109_AADGVT gerhard_r_Page_070.tif
f03dcab4c5768d5554908f38e32562a2
0ea7d8df064db9b9ecd5ee3c3adb3b0143addf69
43974 F20110109_AADHCC gerhard_r_Page_099.pro
3123b8e6353ca434578dfcb996bc1c13
0fac2345c30bf89b26586b466532ffae1f8edd10
40008 F20110109_AADHBN gerhard_r_Page_084.pro
7177a279b59f6b50c805c84d0fcf7a80
a5382afb15b919427f54ff75b19f7c69418437b7
F20110109_AADGWH gerhard_r_Page_086.tif
d1821d128c491beb099660f952526bdf
64d98932616dce15d176936c2c917ee97e838769
46095 F20110109_AADHAZ gerhard_r_Page_070.pro
1578a6685ddd0a23bfda376433524d4b
534593d446c8d6ea7f0fe9ebdb304c462d7b1587
F20110109_AADGVU gerhard_r_Page_071.tif
46ab02f94a2e7cd2c0d87be6ade962d1
69fef2561d7bfb962e9ec15bf70f5fcc2d53e72d
44205 F20110109_AADHCD gerhard_r_Page_100.pro
17d7ac3052619e699b762eb16a78d4aa
d9546af4112ace7f873af36266df148973dd7f4c
41060 F20110109_AADHBO gerhard_r_Page_085.pro
797a36e5cb784d4da8f0329f7a3cb503
f6445b927f2f78c796fdf9f13d9426652fbe073b
F20110109_AADGWI gerhard_r_Page_087.tif
06e63a549edcaaf487eb6a61fd8cde11
c7f61b3c2a2ae0d890415a9407e1022e84e9035a
F20110109_AADGVV gerhard_r_Page_072.tif
8668b5a378a78fea06bd9e140d542d77
66d090507f2e81152b5e87c1c5905ccd3b3d3596
44285 F20110109_AADHCE gerhard_r_Page_101.pro
b9725e9f70f04bb0876279edebefe978
2c40ad241c527c6cf26fb5b3cceac3292b98705d
35118 F20110109_AADHBP gerhard_r_Page_086.pro
271805f6efc5eba89e3200c2573e3972
e41bb5725d86a880f86c4cf80ba37d4ee9d65283
F20110109_AADGWJ gerhard_r_Page_088.tif
b0eac775f74822e548ae85fa719f1e6b
b00d67910793fef6f823f1f7129b8c319f817ed8
F20110109_AADGVW gerhard_r_Page_073.tif
19d8cc6b9db8e255fab65f5f4105abcc
70214a44b340dd2638b979eea5443da84ea7b273
29860 F20110109_AADHCF gerhard_r_Page_102.pro
e7de1cb30ea2c738daf174b297c2c701
ad01679b61b3a0e1cfd5e997ade29f24037b5668
46380 F20110109_AADHBQ gerhard_r_Page_087.pro
ee2d1e82f9fa103c3eb791ec4f89c6d4
18ee680b77f10be8b87e1ce4594bd5f5508c97e3
F20110109_AADGWK gerhard_r_Page_089.tif
0121ac19734aa2c14f5fe17d49fd79be
06b8e1e0bcb590c279f3ef1f4c30f0f9429aa0ef
F20110109_AADGVX gerhard_r_Page_074.tif
66eb3ddc9099cef317a3b8093316dd87
6730d83a795aad4772883028fca3ae4db625f979
13144 F20110109_AADHCG gerhard_r_Page_103.pro
280ae47c946b4e501cc4aa23fb515c38
63690f8fd010bf624d835c6ee2469b8b5fb7d0bf
F20110109_AADGXA gerhard_r_Page_105.tif
d0fa9122f98d07439a1639a2bc297607
ef69441025a04e680f86f587a546abc1fcae545f
41333 F20110109_AADHBR gerhard_r_Page_088.pro
b206afc3309c4ea0ffd550bfe9c7e8e8
d27d6a2d07fb1766be9a1a2e6c51f78f7ce83714
F20110109_AADGWL gerhard_r_Page_090.tif
c1fc34d7e7ed814a706ec0eb81bd5e45
38b3b93e395dbf20a6015cb625ed3cf37bbd5cce
F20110109_AADGVY gerhard_r_Page_075.tif
be9149ae449c6165a016e5ad8430458c
ef072f0dd63b759dad5b0fa47aad56c21a34c1eb
56258 F20110109_AADHCH gerhard_r_Page_104.pro
dc916bbf107943d32143ad81ed22bfbe
9324af38b185b53e8329e8185e8a9239645b1685
F20110109_AADGXB gerhard_r_Page_106.tif
71b22183bcff608f990143f307a0a7ff
61b4aa3904c125e1a39a46ba7239b21415d7b7a3
43966 F20110109_AADHBS gerhard_r_Page_089.pro
af780f1da4a6a942dc7022fe8b4b4bc5
c5f310d7427e60d74ce1d9d22f964ef3a1673272
F20110109_AADGWM gerhard_r_Page_091.tif
8310c8a4c1157acdb9db5026c40a84a0
cbb516eea1511925dcc0cc0bd26d0d0681ccd9a1
F20110109_AADGVZ gerhard_r_Page_076.tif
cdccfcde83dda2e98288b71a564aad7d
25ce562141a4b7a012172e3b50cf8e958d929577
58033 F20110109_AADHCI gerhard_r_Page_105.pro
f4c0edb6d65b6fdb26fa6b0d92509926
b1a80747d56b6bb1213f436d7a67bd4dc18a23d4
F20110109_AADGXC gerhard_r_Page_107.tif
7c09fbe994f1fb713ae606c3e246f0d9
87104d5b355a531ca7fd6f91f48c3e5df47b3839
43628 F20110109_AADHBT gerhard_r_Page_090.pro
736905dce91964afb4ea87ff450c51ad
f50646a60ac4fbb47e47f9bcd02903e6d3b3be14
F20110109_AADGWN gerhard_r_Page_092.tif
3c6782a556c2c4876027fbbfe00d7f7a
55f94173f18617aa5435f50e63a9be79c5f3e0b9
40861 F20110109_AADHCJ gerhard_r_Page_106.pro
02dab0da039ede13ade5d95802bcf2cf
9b0ae63b23c5012238816432eff399f68ecd888c
46354 F20110109_AADHBU gerhard_r_Page_091.pro
01770ee6cba7af98b182ac9c05000f81
ffd364d5d44a60b63502ff28f738e38c17414db7
F20110109_AADGWO gerhard_r_Page_093.tif
3a435ccb776d5dbda036898ad8e5d6b2
6b089cbb31bf99bfa7596ffa091f4913b78c0849
43253 F20110109_AADHCK gerhard_r_Page_107.pro
ae1b27f04d3adb1862b42d7345608b36
c474aaf629b4be6cbad8a7e71ad73de4a2a4bda1
F20110109_AADGXD gerhard_r_Page_108.tif
085bc51d4a19c82c5a578073acb00162
011825e4bb5161e530e44383c972e743ac4de70b
24206 F20110109_AADHBV gerhard_r_Page_092.pro
8d581e93a69e1107b61f1a117bc54dcd
35fc38fc91162019dfbcd7c7d909c111ef873f43
F20110109_AADGWP gerhard_r_Page_094.tif
6e6b194c63551785660922f422cdc39f
275f7dba80468800aef3105fae69972a544712d7
34944 F20110109_AADHCL gerhard_r_Page_108.pro
802d2a24602c606fed2195e125afd590
7c9d4bf8201e13d9514d685bedb526d0c5a5fe4a
F20110109_AADGXE gerhard_r_Page_109.tif
f5af6a7105b4432a0c2ee2291b0d8478
7adfc4aa5ed71817909eb74ab60216b09c272372
49073 F20110109_AADHBW gerhard_r_Page_093.pro
558c1261bd23fbb6584cbbe7b1c5d481
b311b1c4cba0d617e362c17a63eae0a5b29316ab
F20110109_AADGWQ gerhard_r_Page_095.tif
58317f217af46fbfaf7a8a6fecae3ebc
793f53ba8430a891c8bbe0eeece1a770f6eec6f9
33778 F20110109_AADHCM gerhard_r_Page_109.pro
9a3a8ce852d81f1921e0800398618694
22bbce47ed7bba67c80b4be9a3e47ef705e58fc7
F20110109_AADGXF gerhard_r_Page_111.tif
2241778ce2def4c30b14ba84f8c3729d
dc9ee4ea70840d8404679e712cd1ede19b365791
45954 F20110109_AADHBX gerhard_r_Page_094.pro
ef4602004c9c68eb42186ac1f0c3d00e
ad4cd36d13b1551fae01e0f1449e3e458d78b0ac
F20110109_AADGWR gerhard_r_Page_096.tif
627e19a5d45edd6f11806d404935982a
b583ca03bca6a829b06e4ebe1e44a46a8b31e5f9
41931 F20110109_AADHDA gerhard_r_Page_123.pro
020f35f18a6fd48b447398c3ff09edf4
33aae7cb841fb657804bea702dea41f4659aaa2f
F20110109_AADGXG gerhard_r_Page_113.tif
304f0547cb526b5cc45e291d92e595dd
ba9a693b6e122c48ea8ec9fdae008d2220e0d435
17293 F20110109_AADHBY gerhard_r_Page_095.pro
edcf19e919b78069fff7be196af620b9
220ef6425b602c1449fee5a62999cc882eabbd81
F20110109_AADGWS gerhard_r_Page_097.tif
f89232bd5058d6ebf5d10e425ce19018
2a9f8c36c370ea5a34383b24b6faac80749a3b67
38273 F20110109_AADHDB gerhard_r_Page_124.pro
7fe20cf4ed43aaf27d4488f3fb63e461
04f6c7c06c7cf22b967df7837fef21a974eb9419
42477 F20110109_AADHCN gerhard_r_Page_110.pro
9d2f1fa0f183224553794b3fe5c80216
6ea07423b3f56fba5ce1b1815f8c6e5dffb89ae3
F20110109_AADGXH gerhard_r_Page_114.tif
dfe24b4e7f3229441988456e292b8684
7424569411bb0a83500c5d8958ae30d7950d2bf4
40258 F20110109_AADHBZ gerhard_r_Page_096.pro
042899d4669b54896aa699f7e5295b0d
ddf5f73be7de38994646198eb970bf81f2db901a
F20110109_AADGWT gerhard_r_Page_098.tif
2cbe9b8b33c2449b51919662c43a8b7f
fb368d6a82a8f598c73bbe0b589f5f7508002e21
46516 F20110109_AADHDC gerhard_r_Page_125.pro
944dbfa10cae4cf651978eec0d84e957
af6953e07547060e8babf5feb7569ea53f766470
45687 F20110109_AADHCO gerhard_r_Page_111.pro
fd0919adad9e8cd9d0943463bff8f665
22eefa6caee1fe489db05a889ffe4589d8d2b418
F20110109_AADGXI gerhard_r_Page_115.tif
89c19101de36983e15982ff5d4eee394
03cdeab1d50026857f4b37f603c2b6f4aa011225
F20110109_AADGWU gerhard_r_Page_099.tif
1410899bb68607bc3c326d1411b83afc
756bebd0246afbd4f4f4e7dfd70c350491f85c78
43585 F20110109_AADHDD gerhard_r_Page_126.pro
015b2a4adf4b0ee4ed454da93fa3a8a7
0b075857d5cce9fc73b476c73feb7186efbf1a18
46636 F20110109_AADHCP gerhard_r_Page_112.pro
93a6b06643abc33edb40caba869b3156
07d7d457a7d51c6adaae728c8398b10bedd62cc6
F20110109_AADGXJ gerhard_r_Page_116.tif
1f742dd4b96862a47a172264d0c080ed
016aa99b28fea3b2e9fb24d5231c41f513f6050c
F20110109_AADGWV gerhard_r_Page_100.tif
e5c92450fe732f59aabb03ea3fa9bdb4
1423d8250944b643c7bdfea99719b7b4f6f6dc46
46065 F20110109_AADHDE gerhard_r_Page_127.pro
9d6ce48bf24afa1fb9e9f7dde20dc11f
28ce490dc70eda4c64a611292c90b98d88a47d86
47706 F20110109_AADHCQ gerhard_r_Page_113.pro
0269eb692cc02709e0372e8cff733d8e
dff49bb7ef6ece4e006b9cc3fe35a0215d4fdb67
F20110109_AADGXK gerhard_r_Page_117.tif
8f7ba7d273bd204e484624ad7d023a51
9016b080c29457979eb72420ed368bf46eb6b374
F20110109_AADGWW gerhard_r_Page_101.tif
8c1e04178ac0bf5cde7fc81719ab978c
918ef67913c530f09c74bc8b4dd20adbc0f44c1d
40975 F20110109_AADHDF gerhard_r_Page_128.pro
014106802c6d60aeb50b99c76c36d69b
0d377885407dac3e9c7207e24613bc26f41db00b
F20110109_AADGYA gerhard_r_Page_134.tif
a0736e211b7d4b11b412ad54e1bde974
4741f609034bb3c3c157a1a727ebe436ed09630f
47134 F20110109_AADHCR gerhard_r_Page_114.pro
65cac895669b3fce885ebe21b7ba0409
394df56fb3a36c94c3a723f604eb0a533c1f0d25
F20110109_AADGXL gerhard_r_Page_118.tif
58039cada8f2d5946eb738c1100b3a8a
60f4b2350a51fdd0e606016c399f6bb970566c40
F20110109_AADGWX gerhard_r_Page_102.tif
291169b5d053db2c5bd302d02f039e74
56aa6667af42aa6590d528b01683b55fc183cc49
47802 F20110109_AADHDG gerhard_r_Page_130.pro
cd5fc72992bfe8062e8b387a6564fd3a
d64e89025146e84d9ba1564bf7eee1f7ca824fab
F20110109_AADGYB gerhard_r_Page_135.tif
6d982fdbea50bcf8cc92ec1e4fe2d130
1f75b6d48c5bed85aeec6027a9d09982d816e7b2
50717 F20110109_AADHCS gerhard_r_Page_115.pro
1b79223333c501d3b64606b7143e4285
cddf72f731ecdf2f2eea2cc14767e03a20b59549
F20110109_AADGXM gerhard_r_Page_119.tif
5a66b7ec49e5203765085d9dc9cc7a0e
2a93b372b8aea2db8c35d7ecabc33359230f253c
F20110109_AADGWY gerhard_r_Page_103.tif
29e8593dc66aa60173591747abe89c52
985db79dff7f58a01f0feeb57c1dfa353ed1cc5c
34564 F20110109_AADHDH gerhard_r_Page_131.pro
9a59b8baab97f9e116cd2140cf4a3b8e
0c93ef239ad852eb5c9175ac5d4bafe7592c65a3
F20110109_AADGYC gerhard_r_Page_136.tif
8f22c5bb9dc6c8e9ae5eada3b575ca32
dde49253b6abfbc609cde3328dea4a5998e023da
41386 F20110109_AADHCT gerhard_r_Page_116.pro
e0fff95938e3203280aec8cbb8524c77
69edae6248ae45883f4b70640e088f4ea82daf6f
F20110109_AADGXN gerhard_r_Page_120.tif
f727b9e6388ae691391ff7e751048717
6bfc843ef7c1a8566979f2ab9e33573192e54465
F20110109_AADGWZ gerhard_r_Page_104.tif
dfcbd091ef7bb8b3e4193b8f76d9d9a9
13f55bd3afa7b4793be16b7231c33b009e1fc2f3
43930 F20110109_AADHDI gerhard_r_Page_132.pro
02e97d8243d09db2598f99574a7aa89f
779d402f612d9a8147fb944465c0194daa253a6a
F20110109_AADGYD gerhard_r_Page_137.tif
1483c0248539a7a54250b2a7b74c36b5
0f5428ce8442505d09dfe01c1e065a6326f72418
48152 F20110109_AADHCU gerhard_r_Page_117.pro
a2d5e0ac82fd5fa7e1ac702226f7ebb3
c530a624fcbc85652067fe9cec185c1dea2fb974
F20110109_AADGXO gerhard_r_Page_121.tif
0749d66e3cbe84b34a0e47d2fce72d96
ae4c46363726c9eb5f74ad8c51988c79da666d7f
84771 F20110109_AADHDJ gerhard_r_Page_133.pro
0352b66386c45f71f3c0214e1be65460
30de11908e80d859243eae068ce936b5c906c80d
49921 F20110109_AADHCV gerhard_r_Page_118.pro
d35be77f2a5e2dfd6f6c766bad42770e
43c0f99431070ec141dd31c9124e40ee2a38e7da
F20110109_AADGXP gerhard_r_Page_122.tif
8182b40badaf13809832ff13e57dd855
31cc8b90909326780be040c4e2d37460cbd6e5db
59843 F20110109_AADHDK gerhard_r_Page_134.pro
338d95a17fae74bdaebdd9a0e0a7d3a0
ab9e2a847b6e88d7a18d39b7d218d20e5167bc5e
F20110109_AADGYE gerhard_r_Page_138.tif
968ebd119853a9464585838e7afd3bef
c98aab52af3b5e46c274b2dc739d17134169f6f3
43379 F20110109_AADHCW gerhard_r_Page_119.pro
c28bca0b3ddca265aae0bc2bf377c1ff
477b5e2c7e5a3ed9576c1d5994c0cb8421d9a8b0
F20110109_AADGXQ gerhard_r_Page_123.tif
b7aa224520aad38886d130a4a9333fd7
e55824d71af2e2119fd9a1388dc08788649c78c0
72405 F20110109_AADHDL gerhard_r_Page_135.pro
99d9b984d6fa94c4c38623b3c9c90b0c
3222ba77d81ec67553351273ddd93fbab7dea388
F20110109_AADGYF gerhard_r_Page_139.tif
40e3cb955cfe4429a00a1aafc82bb4f0
7c2575f05b73db39b2a99021c2738a42368fec3a
48935 F20110109_AADHCX gerhard_r_Page_120.pro
61db1fe8d3892929d459439d59db6b15
8931aab2d277eda840e49ca0653516e989fda7cb
F20110109_AADGXR gerhard_r_Page_124.tif
0ac21fefe73b55147571ec38bcce2a9e
0b5f347bf84f2a3791d6a5f21fc4b276e09ab595
3344 F20110109_AADHEA gerhard_r_Page_005.txt
88e1626b0866caf51284816ec0fff6af
4bf31e584b13e7f030a1b2bc8c74f2f5d8af3d4c
65082 F20110109_AADHDM gerhard_r_Page_136.pro
ead2bd998e861df96050c25c6f440bcf
e4d889eec970c1d917bd672e04a2dbf445fbc74b
F20110109_AADGYG gerhard_r_Page_140.tif
8bf010f9c0d65df23c54fa7ae0c6bd92
1974085f70c482bad075c954593ca9839f054337
38256 F20110109_AADHCY gerhard_r_Page_121.pro
26199a89227ef30afe6f4ddb14db265d
da68a6f47ed8fe344ab724958ef6de6a7fe0d4b8
F20110109_AADGXS gerhard_r_Page_125.tif
a9ed1806812ac0f543e24e0820bee4c7
2ccf59384773dfa188658e1e44676c329ced870e
4149 F20110109_AADHEB gerhard_r_Page_006.txt
38f0044bb1bad90a302246b2ab8a58ed
08a034890b20f0afbbef2938725d44220a440898
40125 F20110109_AADHDN gerhard_r_Page_137.pro
9c8b6c5e4784376bc48e910766ed5ea1
5651abd858448a35d6c72c345151e0867e57b17f
F20110109_AADGYH gerhard_r_Page_141.tif
d0f4c521ed885e01214436a6564eec9e
f8fcac3055242bdf31b5cd9eba30b8ddcc718219
39220 F20110109_AADHCZ gerhard_r_Page_122.pro
d73a551001d87d8a8fa0e8dd72416264
d1f08939917065aa78693e6c28fd9dd8b24e5913
F20110109_AADGXT gerhard_r_Page_126.tif
762140a6780dab889d496884f3416e03
d1b4a03cbae1d3e5987aeac7d1bc393391746807
376 F20110109_AADHEC gerhard_r_Page_007.txt
12e5de216b47438b7accfffa3a3199a5
5d93d564a7292f7c04e83d47aa5bd5b24fc50736
F20110109_AADGYI gerhard_r_Page_142.tif
5e97e3a4499c4b0a38ad622c76f982b9
fe6cd4ca0d411faff622671d408796a98c172df2
F20110109_AADGXU gerhard_r_Page_127.tif
2ccd548275314ca2420e7ef484e5bfca
2ddd5d9d26d20de147445b6712fd65e5c7ce5eb7
509 F20110109_AADHED gerhard_r_Page_008.txt
41f6be4fe56efa81676fa6e3bcaedf10
21182989bf50bbce1abbe8e82897e6fde19693a6
51057 F20110109_AADHDO gerhard_r_Page_138.pro
22805cae2a3e2ff14e4f09801b367318
4c2705240efcf4fd49895292ddb8b88682f798fb
F20110109_AADGYJ gerhard_r_Page_143.tif
f712c74f9317c919f6a03eb0ae2006a9
8bb995f7ac072627e5512403b914f3612b5868fb
F20110109_AADGXV gerhard_r_Page_128.tif
50df94ca222605ecc84e0475b0f9b83d
aed0b28c7e9c9652ce52d1b2a505802c84df2990
415 F20110109_AADHEE gerhard_r_Page_010.txt
b3a4926d07090fe173cceba48cbde5dd
2cd4c33f7126db5d308270f1970ef89597ca3c09
48070 F20110109_AADHDP gerhard_r_Page_139.pro
9cd958a9e325920e308a575be2c16f76
9294ba0f2675b30ba2fa8ebbce4b03a203ee6753
F20110109_AADGYK gerhard_r_Page_144.tif
102bba3e163ef53e14a129596c17540a
1ff62c081d61478df9902431a096f93c6695fb9c
F20110109_AADGXW gerhard_r_Page_129.tif
b874373de40449d3e742a7030a22b9f4
48eab9f873a218e1033eb51c8c01a04ecdcb4a06
1743 F20110109_AADHEF gerhard_r_Page_011.txt
a4755710ab47d6bddb10e1f0297870a9
7933d54b513fdfb67927002af272d9dd49d18c33
33077 F20110109_AADHDQ gerhard_r_Page_140.pro
ee9d8b9d844a5edcbac3db445e97ca49
816e2b2fc5264f2073bc770ef4c20eb65f5c7ec4
F20110109_AADGYL gerhard_r_Page_145.tif
de8fa5faba5b4fcb47b1f3f4f18d910e
50f7bd22fca777205dee6ca569bf07cdb1a2cac0
F20110109_AADGXX gerhard_r_Page_131.tif
39d8b9aa9536d1de01cc202a57db2d19
e99d2ff9c6b311c15feb4e8b20f6d327f43362b9
1183 F20110109_AADHEG gerhard_r_Page_012.txt
35156c3dbde2984ba3bf6176f6ca774b
0130f272cd638a4f6c9be5385219c68e0d668648
38754 F20110109_AADGZA gerhard_r_Page_016.pro
55fef790048bb4165f22bb6c1b5e9c91
3410860976ca9931dd85e2fdc0e0aa3f0f03c342
36519 F20110109_AADHDR gerhard_r_Page_141.pro
514ce9a8db36ac056794c88a2a287a66
c63578ca329d7abbe53c5f37ef5863c8c3f7c355
9418 F20110109_AADGYM gerhard_r_Page_001.pro
12004ebe730f0f47255abc7f857cb4fe
a0ef88e00f8d9e9fc6454716bb4770efa6fa7979
F20110109_AADGXY gerhard_r_Page_132.tif
978b301c66745d741e32790a85d7698c
4ef5b5551e67e6c0c36e411fdb1f80772b7cab9b
1814 F20110109_AADHEH gerhard_r_Page_013.txt
65c1925e3964ef2982484ee0f81bd051
4c5f1a2317493a8f200da66be984b749f1c9ae93
49937 F20110109_AADGZB gerhard_r_Page_017.pro
8fc0b3951740061862b4aac466081a26
9ccbc4df7fd03a92dd5e38db81d274f2e123b086
45714 F20110109_AADHDS gerhard_r_Page_142.pro
f4c451bf0b2d504914d67f23f9a85c08
af76e750ba7f40a0367ba484d860d11a83ee1199
1098 F20110109_AADGYN gerhard_r_Page_002.pro
705fc0a024109672aadf099f1ec558c7
d53c611ab8f4a26ac058c84a4ae068af8641327a
F20110109_AADGXZ gerhard_r_Page_133.tif
c56e74b9c4c3a221e3685a9b29383a4b
98292d50abe11c8966d4035839c388d61d8218fb
1927 F20110109_AADHEI gerhard_r_Page_014.txt
44360ee4d405bec0c4ade5d7790af79b
418cd5897901c49f60378bc3b2e65fdd113ac91d
47155 F20110109_AADGZC gerhard_r_Page_018.pro
99e3a0c8ea373347e95d0806f223ba4b
aab2a986256d7307785e4d04adb830d2dfe5e617
37098 F20110109_AADHDT gerhard_r_Page_143.pro
01cebdc315c710e841072465b6635516
936792a576aec01334b3c2cedeb157077d07a1f6
1328 F20110109_AADGYO gerhard_r_Page_003.pro
73f3109d147506513dcc041143910334
ca1bbfd979b1ad82dfc7f660e637e2fcf2078466
178 F20110109_AADHEJ gerhard_r_Page_015.txt
43fec8271527611f3d334831128336ac
3d5515031c91b27c953edcc1a81ca52242d2df85
51491 F20110109_AADGZD gerhard_r_Page_019.pro
b94e093d69a3b4eca3758b653f97e21c
c61073b5f3f0716d9337690908fd01cc207377ce
19107 F20110109_AADHDU gerhard_r_Page_144.pro
ce75dd97fda76e01c621c645a77272e8
6cdb6ad8b4707c21898950d8d87bd077c5be007b
11974 F20110109_AADGYP gerhard_r_Page_004.pro
24be40da610ca65346e3b5c424821920
6a88ef04123f8b455f81b6cb3b76127558d21839
1620 F20110109_AADHEK gerhard_r_Page_016.txt
beaa099cc248b82cfd400f81f221c14d
9b5ccaa4a968ebacc97b732cea0bd41820953622
48702 F20110109_AADGZE gerhard_r_Page_020.pro
c74087337fcfdb80fb55936161e26700
60b8cda8323dcacfdeed079d874f0d12abdd19be
21005 F20110109_AADHDV gerhard_r_Page_145.pro
0e68b911342828206a825ba3908b7142
2c26be39e22b237bad89c29e674139bdd89071b5
79508 F20110109_AADGYQ gerhard_r_Page_005.pro
9cedaa1a696e61f5ae6dcfc43e803e57
bad58ca61678ef46e783183fd7ac98d16afe1b73
1996 F20110109_AADHEL gerhard_r_Page_017.txt
f07780642fce5f604e49a916aa186be8
bcd2a76ed53fc41fd0bca3cf9b710ec3c780eceb
514 F20110109_AADHDW gerhard_r_Page_001.txt
b0a28eb2fafc41d116b556279037c6a7
dfdb30063f1b9491ebc518ba1a92180287712a62
9438 F20110109_AADGYR gerhard_r_Page_007.pro
c9cfed6c6c504712d8daf9316d13a595
f9e12d86455d1cf00c62b6b2bfcd197210f83e7d
1853 F20110109_AADHFA gerhard_r_Page_033.txt
0f5dbaa1eb5606cd3b15e57f371c88e4
a5d8d7baa9331e420f6b770b33000b540fd396fc
1875 F20110109_AADHEM gerhard_r_Page_018.txt
7ce0af66b215328e79c5d3ad0d630494
11de43599884d83cf961b6f05b8c5047ac27f9e4
53190 F20110109_AADGZF gerhard_r_Page_021.pro
e93407d9b0fd50917fa1216aa22f6f10
f972fac3e3429836709d3a085b6983206e298e50
107 F20110109_AADHDX gerhard_r_Page_002.txt
8a83aefc05010ee53fef85db7f89bcda
c7a6f986f9729fce1823055583b8dc1f1b223120
10702 F20110109_AADGYS gerhard_r_Page_008.pro
afffd1b4e2bfcc524001b0d7abc8be1f
001d463b92004781808005c8aa9606175ccd0cb7
1816 F20110109_AADHFB gerhard_r_Page_034.txt
dfe8e40c22487c4018d66852cb6f3930
5c88681611770e118d7f83b06b2d84cf874c8368
2040 F20110109_AADHEN gerhard_r_Page_019.txt
89bbc7ee4d6ecb8cae99cc3ef551260f
bcc006ebd02c886f0da3d8e54608c54ed20273a5
31260 F20110109_AADGZG gerhard_r_Page_022.pro
0dc02e6ab6559611eba1ee43b16295bc
b1380e528a14c65e668a98ca10b18ac93826a226
105 F20110109_AADHDY gerhard_r_Page_003.txt
fa2642e2170652f65b804ffb93f46bdd
198ba3fd499d44d52219d8ddd1975b96510518d4
60076 F20110109_AADGYT gerhard_r_Page_009.pro
69a054df37812318974921aa332c7d3b
674543a51134f6787fe8d3586aab1bcac963cd87
1807 F20110109_AADHFC gerhard_r_Page_035.txt
7c2664e9b3ae9b9a3ab2110877d3b98c
87901f0758d883286e4463eec710b841fd22efec
F20110109_AADHEO gerhard_r_Page_020.txt
12282991f220c5f1cffb18fb3f15b770
3e10f2ae0d03bb8d03fff1086ec51444d383ec54
48705 F20110109_AADGZH gerhard_r_Page_023.pro
b9ca180b61cb1f4377b3c89a34bc2a1e
be610927120f47e52b29b6d8b26d40eefac488e5
526 F20110109_AADHDZ gerhard_r_Page_004.txt
a0791e56947b85b2e02fd570884495c1
e4ddd1c05b7ec928b4c88480607127d5761d9116
1769 F20110109_AADHFD gerhard_r_Page_036.txt
407e5c5754172cdda940320cb2650750
532547d3ea87ce55366ef18a1e3b1af5e01ccedc
49840 F20110109_AADGZI gerhard_r_Page_024.pro
5997028ddd1cfa73ce5c459c8e209c38
ee87c018fe27af739f423e01573d7bc0ad24db08
6490 F20110109_AADGYU gerhard_r_Page_010.pro
b41aff63ae7e19a600b0b67c030e74cd
481d9861eca47aafa44ce938dbd03d1f26eccc9f
1926 F20110109_AADHFE gerhard_r_Page_037.txt
5f800ef168e838954f360a6cb645f8cd
9ff74aa7e7e154e066658f03d622faf9374eb884
2188 F20110109_AADHEP gerhard_r_Page_021.txt
84431b90a76a3204ad27af19963fd8a2
e033bd78f9803f0d63cfd8284ea65cd0df74af54
47815 F20110109_AADGZJ gerhard_r_Page_025.pro
a3480e4158fe718742f7af5c195d48c0
871d53ada36c73d38449a67cbdcda2095f4bd580
39291 F20110109_AADGYV gerhard_r_Page_011.pro
05664550bd05ee734291b5b620649a6d
1d40ef830f424860854e9679f3da3031170196b3
F20110109_AADHFF gerhard_r_Page_038.txt
d7b9171987c4e62b9fa96b37e478930e
65ba5369b149d88e57290c3e28f2516c2ec972f1
1235 F20110109_AADHEQ gerhard_r_Page_022.txt
b377f180979aefcda625a5abc7070f65
e25df0aba030363cc38889db9917af1559b502fb
48283 F20110109_AADGZK gerhard_r_Page_026.pro
c9fdd1b4c9fb6383d0e165b8f1268334
d1b7f95d17a48367caa58eb2832517c053337b4e
29630 F20110109_AADGYW gerhard_r_Page_012.pro
9a0192f1d91e9a1b64d0145647dc4792
44f20c3e85af8ec3c7e20117ad7916f3adb2ff50
1671 F20110109_AADHFG gerhard_r_Page_039.txt
3d2b198db00a39371f67b39da69e3544
79c18369928d87eb76cf85130013c48c9aefd014
1921 F20110109_AADHER gerhard_r_Page_023.txt
336f79a243c3bb4a9cee6477ce1067ab
044fe50e2fdb26ffc1a5b3aa3405e7262a544bcb
43287 F20110109_AADGZL gerhard_r_Page_027.pro
0ef31314e973c5f97088a1bd0b05ecbd
306712239e892ae2020b7bd3417de11beba63a19
44170 F20110109_AADGYX gerhard_r_Page_013.pro
3cee4c8c4e626708e01c023503eb0392
d332123c140f427778dc640329bfd63592b486b4
1890 F20110109_AADHFH gerhard_r_Page_040.txt
b63aa8091ad5ca3262126ea297f2df08
fc8cb0ca7f1e3d44f2c56aa4619c408ff66c91a2
1979 F20110109_AADHES gerhard_r_Page_024.txt
57b0d3840bea69c602f92eb16ba2ac97
a1800e0112b66b0966a5666c214262231c6be852
46248 F20110109_AADGZM gerhard_r_Page_028.pro
cb2d8fd0318835ab2bc17fd0b9fd5eff
4cbb04955ac223a327f26810276ae0bb17258e87
48828 F20110109_AADGYY gerhard_r_Page_014.pro
468ed69e1662ab001b1542eae357c9ac
8ee2002c83756a664004b0b8700fd2065b961e2b
1542 F20110109_AADHFI gerhard_r_Page_041.txt
11f54330ab787299f8fb3998ea37b20b
fd9a3974413cc58fb034192ab51cb74a88d944de
1889 F20110109_AADHET gerhard_r_Page_025.txt
14fd2021380ae426b41c903020ccc316
785ffba90a056bc5e4821ebeae8b3a0e3a2a0797
48344 F20110109_AADGZN gerhard_r_Page_029.pro
668d86503abff1118f83b06be44c3e15
e633cdb1c5f8bb927eaa367ff6ae1b48e7f86235
4411 F20110109_AADGYZ gerhard_r_Page_015.pro
1a1f2e395a1c5ea564251acdac0aeab7
690a9d1400478db5da66e93cab80d02ca8cd4af0
1917 F20110109_AADHFJ gerhard_r_Page_042.txt
886ae916f7262e2a7d2a4b12f39e5b7f
1c9f29963a9010ca4f3026b43eb6d81e51073473
1900 F20110109_AADHEU gerhard_r_Page_026.txt
2ecd1e9c32c267a167b6c71ad9817eda
701b617810ea586d72c135e099bf8afc4b2e274f
47501 F20110109_AADGZO gerhard_r_Page_030.pro
14600f16b043dce2076f66a9fe96a176
b194b2b060bf930c364155112dd0d58468d3438c
2613 F20110109_AADHFK gerhard_r_Page_043.txt
4c9efafa7437f172345abaf2e8ad3dbd
f1efaf4c0d32942423d390798b75fa8c3734bdfb
2119 F20110109_AADHEV gerhard_r_Page_027.txt
1e598950efe74b92a5174b6d373ed037
2193dc41538f4d82ff19dbdbdf7fc30ee4f731ad
50908 F20110109_AADGZP gerhard_r_Page_031.pro
a097b96f3f53f79e15ce1b98772248ce
08f0c5ba5354160bec5d8fd1c1cc2473d3d0c2c2
F20110109_AADHFL gerhard_r_Page_044.txt
ce34b20054e26b04d5cc4d90e2434711
80203c35a8aac9059b16cd94ab182d64f15496c4
1920 F20110109_AADHEW gerhard_r_Page_029.txt
c008eff48524320e9378f7c5008c1833
1798f87de07dca09e23f1939c9662a37f3511d2d
47031 F20110109_AADGZQ gerhard_r_Page_032.pro
affd77c4193fa34f4d0b4d951ac0b065
a0647fcdebf799c2619833800101c3209d1ee921
2113 F20110109_AADHFM gerhard_r_Page_045.txt
10c77527084ca3326ab8d7d821767d8c
564494e741ac25e5320b571aac31d9a296360634
F20110109_AADHEX gerhard_r_Page_030.txt
0cbac022a0cdff1a93da3f1c5a0d7bcf
209b37a6c0b9e9c9ddc1354a484d356d37f6273e
46608 F20110109_AADGZR gerhard_r_Page_033.pro
9bc7b924dac31cb053aba84185d6d2c4
5788ba4677b4df76d57ba5752f28af80b10f6f1d
1754 F20110109_AADHGA gerhard_r_Page_060.txt
a1011850f9803269a82463442eec4496
6e83964680797486162f6acb09d4f1f604e7473b
1998 F20110109_AADHFN gerhard_r_Page_046.txt
d65bef1156951b273899d02d065e7baa
7c9fa4a8a84a5fd22ae55bb19b720666595a2d12
2007 F20110109_AADHEY gerhard_r_Page_031.txt
8adec101864b7d977d2ef987fb39c6a2
6571e9090eab518a55bab5db066a57ff3c2f1764
45567 F20110109_AADGZS gerhard_r_Page_034.pro
6c0e006e4c809788f2ef8832b1e1fdef
d34e1d11d32472a4f13d80e0be1cf7c5cbdea063
1648 F20110109_AADHGB gerhard_r_Page_061.txt
a3a240c8e9e30ec9cee50b21cbb59c72
547d0441fa0e3ca028b34b57dc79b0da0ee13b5e
1244 F20110109_AADHFO gerhard_r_Page_047.txt
f87942fb77daaab351c72ebd994430ad
87ef9c5d5357ab3f827ba69aac8c14127c1f0816
1868 F20110109_AADHEZ gerhard_r_Page_032.txt
bd99bdebe869a2edfd9460e78af944c2
c4a74cefd5bb10c8683d710108782d614ee7e768
42489 F20110109_AADGZT gerhard_r_Page_035.pro
a33ecf27cd5306148d5ad6d23a83f055
e103b90f9117e0c780eae853b3f05c12a3c965d4
1872 F20110109_AADHGC gerhard_r_Page_062.txt
27aa7149f836293f57f5329c1b66a5f4
78d3fd3350cf2926bb759ff9fc288e9452bed08c
1961 F20110109_AADHFP gerhard_r_Page_048.txt
f7449c9906ee93feff17e35ebbbacf4c
718870df8a16296bc73457e5f40d1db185679c6a
44479 F20110109_AADGZU gerhard_r_Page_036.pro
5e5ff0197a1c3ed9d05ed03b6bb0e671
176707d8c73d6fdc50c813d29549875c09d9a6da
1988 F20110109_AADHGD gerhard_r_Page_063.txt
f307c0c0ec326b5d4538338a102b74c2
7a3f5cfeda02e5af1c7ee5d6ff59feeb1fdda270
48538 F20110109_AADGZV gerhard_r_Page_037.pro
0666fd877da0279f9eb6f7353a048eb1
04286ab3b1f40038481cb84ef43e846565f7e097
1811 F20110109_AADHGE gerhard_r_Page_064.txt
121954e5b19f849cea0fcb34c6039980
c510812c87d5904a2977b6430e9d8b9930686dd6
1843 F20110109_AADHFQ gerhard_r_Page_049.txt
94c41d1546ed4bba49a3a647cc764d2f
b5e53db0831bd0fea388a70ab3f77829b9e32094
48405 F20110109_AADGZW gerhard_r_Page_038.pro
2def76286d32423aa504303d889aed2c
472dd85aac404500041c2f3d4977e2e6373689d5
1750 F20110109_AADHGF gerhard_r_Page_065.txt
2c562d6ea67e4f4ce261533ff48883fc
bcfb2dfe53ca13973a77d76894948ec1316fdc9d
40560 F20110109_AADGZX gerhard_r_Page_039.pro
cb1774d47b537307d1e6dc30a9085ccd
8821331b90b16a22f0b79b8c62133fde5a59790c
455 F20110109_AADHGG gerhard_r_Page_066.txt
957659490ab9dae823a0c661ad71b7a1
e4d0ff3edb5ce218762c8ec1b1965f86bba06a73
1287 F20110109_AADHFR gerhard_r_Page_050.txt
be5cb0f4570706349a7ec4d2daf8f5ae
b2d227ce36a9a4b05c04fe2bbe62533d8657299a
46504 F20110109_AADGZY gerhard_r_Page_040.pro
fd72ddf0941dc1fa10423bc5da6ab865
02ffea2283adb73ad5531eb8eb18d64eac064030
1831 F20110109_AADHGH gerhard_r_Page_067.txt
ece2cdfbb618f985294970da5da8d42d
b74ce19810b29b8b99fc449366dabc6d5c9c6386
1644 F20110109_AADHFS gerhard_r_Page_051.txt
5aa73a591459136c69436220d18d1852
ac71fa4b7387918add99c7870b8c2d232c6ab7c4
36945 F20110109_AADGZZ gerhard_r_Page_041.pro
da2cbe2879a2c3372eaa5e7b009019c6
2d2b043dd0cd8938989650e0532a0a02e94baeb3
1983 F20110109_AADHGI gerhard_r_Page_068.txt
371432dfb9081bcc0485dc6152ba8b7e
9bcf504f40207e1254bdf68c32aea53c0ffc8b82
1935 F20110109_AADHFT gerhard_r_Page_052.txt
ee274c54a65a42df6845c29e00c03ee3
58332f5f3ba596ac3804330b30834c1192a72257
2328 F20110109_AADHGJ gerhard_r_Page_069.txt
2a212a769b716a3b9bbde96ca4ebe96b
fb3c069c4bee46aa585820296f324c064a271138
2019 F20110109_AADHFU gerhard_r_Page_053.txt
dceed5bb1e2c0f65f8ce3ae6d6a93500
32f6c131ff84a29f09581daeb1c476e9ae6da556
1838 F20110109_AADHGK gerhard_r_Page_070.txt
bf3f4d3d9ee66bc63a0348e518834153
68d1d6f945a48675fc74f3e54c409a1fbec3704a
1121 F20110109_AADHFV gerhard_r_Page_055.txt
03ac0b0d9f4b64874c853819b7fbd9f5
df26a076683fc530b6b57c3613ba87d356093acc
1800 F20110109_AADHGL gerhard_r_Page_071.txt
fd9d522320c770dbd49d560ef5e50aeb
2c63b732acb69f5cb5e9f15110eda3059a66ccf4
3098 F20110109_AADHFW gerhard_r_Page_056.txt
7daafcf1dbbe66f90ac7e13fa0816b59
e2af994ed1e7a80201e41e52e3471112cac99497
1500 F20110109_AADHHA gerhard_r_Page_086.txt
e1ba0a00ecb2246e1207190d886d8a76
e24e798fb26bbbdcc13746670d4f5bae47a056c4
1765 F20110109_AADHGM gerhard_r_Page_072.txt
d4e267053f5d819e1c487749872ca585
59687a358563e6a85bd4a99b6d33573518611936
1771 F20110109_AADHFX gerhard_r_Page_057.txt
de0e973345794513db21e25e4255de3e
6a229f59aaf710e23a3d6b53793f344e5f890b34
1860 F20110109_AADHHB gerhard_r_Page_087.txt
83460d91fc4455a011aeaa5ecda35aa6
c55a66209c615506772ddbe8629ec7aa64722754
F20110109_AADHGN gerhard_r_Page_073.txt
78c7499d6e1368f0126d8fc2ef67f887
ff98b423796978db2f7617578332e7da53fe2ec4
F20110109_AADHFY gerhard_r_Page_058.txt
64f19a8a8b69239012a3116b03cbe0b7
05697eea1d498faea770792f3142b6d1ec8075cc
1661 F20110109_AADHHC gerhard_r_Page_088.txt
bd872dd60e2b4e4ce12531bf70f3ebc0
2666a52ae7ec9c999732419a86b4fd4605d3cde2
1778 F20110109_AADHGO gerhard_r_Page_074.txt
15335929950f13fae64da634483c8e63
15c353ddc37bb21c35c7326b42b4c4ebd8239b5b
1809 F20110109_AADHFZ gerhard_r_Page_059.txt
a57b73bb16058a4cbaba79345c01934c
0106522829dfd6c5b2b8aed1dda4d42010316bdf
1764 F20110109_AADHHD gerhard_r_Page_089.txt
1d05f5a84fa3e19405ec597f40926fab
4e0aabed2b1abfc584eba0fbc49f91bd133579a8
1829 F20110109_AADHGP gerhard_r_Page_075.txt
c5369b93fff0e0f5cfc794ba23ff6be9
df6316d3dfaee6948a238540a4ebb4d0cdbd5ecf
F20110109_AADHHE gerhard_r_Page_090.txt
9ba4d5f561267d2e2cae127352f7e9a3
e1bc6e1e14250020f47034055c25c738e9a5c2de
1710 F20110109_AADHGQ gerhard_r_Page_076.txt
f09b5d8bf0f903fad1ff53ed42c79f5e
5d281af521349b4154adcf864ea7483a87d980f4
F20110109_AADHHF gerhard_r_Page_091.txt
91785c9bc5f0569fe68425a4e405ca21
ce01663ae6f7df9f37eec09add674554e1c9977e
984 F20110109_AADHHG gerhard_r_Page_092.txt
785312b80d0a6625caa2bde876211f89
bc96739b51e07938a8614188d410c173f0b915a1
1583 F20110109_AADHGR gerhard_r_Page_077.txt
5dfeecda350f469ae71d236732f0d64d
306ec1d61447f1f7ea118a7d3721bcc8f56b1bd9
2097 F20110109_AADHHH gerhard_r_Page_093.txt
782616cde155a7d12deae8bee3d1fead
05e8ef5ddb4c5cc733cdff17f3197048c6ff92c4
1594 F20110109_AADHGS gerhard_r_Page_078.txt
f1be25f96f36e9d1a1315882be7a677e
9a69c18fc18cb0f3692032f081caa2b5447ac1e2
1869 F20110109_AADHHI gerhard_r_Page_094.txt
7cedc069617d33bb84d29457be656249
bf1b046f520170ebbbe4d41cf945d52f0115abb5
1591 F20110109_AADHGT gerhard_r_Page_079.txt
514f5611b74204cbb144100c7e98f6bb
5c5ef49be799d26f25bd0366706e9f74da2524de
694 F20110109_AADHHJ gerhard_r_Page_095.txt
86487121b5ba5ec0a7e2d3d15190781f
f780cf566ee832bc1a2fa3f6d5df168db3be832d
F20110109_AADHGU gerhard_r_Page_080.txt
a3ca8df75f8766964d56e09da61104ff
84e3d3eb3974d285a3c541d947a9d6941702fa63
1716 F20110109_AADHHK gerhard_r_Page_096.txt
6f4cf063dcf128451caedcb8a9a53437
7cfaf807388de5d90bac9c5bbc34ae9fc57c89cf
1645 F20110109_AADHGV gerhard_r_Page_081.txt
a49f529a6d61d896c82d327718ad8981
f0590e1a3afcf4f4a96166ad9ed51e3fe9f973d6
1984 F20110109_AADHHL gerhard_r_Page_097.txt
f7ec497dc6a4faffab1943c4adcc86ee
079e1c65e9bcb0d429ee014554ee7f419675a93e
1803 F20110109_AADHGW gerhard_r_Page_082.txt
82dbb1fa0f11485b9cd7469859d05aa4
1f6ad908ff5ed65388141d9857bf56419b57f211
884 F20110109_AADHHM gerhard_r_Page_098.txt
8851a0f5b78354bf4a225bdd8ec00b2b
419638b838cacd4acbbd8acba54ff99abec440b8
1552 F20110109_AADHGX gerhard_r_Page_083.txt
80218229c744d2cfb1c6d66fd80864b6
92bbaa1663ad175e406f8a8d8f9d941581167e85
1901 F20110109_AADHIA gerhard_r_Page_113.txt
d2d33fa175a764ec3a62c934a0cff610
743b802f976325130e05c069e5cf78e6adef0c3b
F20110109_AADHHN gerhard_r_Page_099.txt
0454e49ecbd45e750afb681befdb94e7
ca5eadc523f8c00f5f9b1f82b127c04185891d42
1759 F20110109_AADHGY gerhard_r_Page_084.txt
e199f1dfbfdfde7f83a4c5594b056f0b
8262fdcad37f3f0fbeac48d64f3d0217f4c5095d
1902 F20110109_AADHIB gerhard_r_Page_114.txt
2af4f52118e731ddfca9e680496c9754
84b3a769b8eb1aaf0d28fd6abf4a526b422d417c
1768 F20110109_AADHHO gerhard_r_Page_100.txt
0f824a3db341997ef714a2d2b54a0bcf
5bd735813bafedcbaf508a056f2d13e11b7c051b
1738 F20110109_AADHGZ gerhard_r_Page_085.txt
ddf15d9663036d2d4fac854eeb6b39f0
f15766da486f75283085513bd85c7e3634440506
1999 F20110109_AADHIC gerhard_r_Page_115.txt
5e8b5e9344360c8544c3a5b71bc3da50
fe2aefa8c4bb2267ddfd023fbd399833e487bd74
1777 F20110109_AADHHP gerhard_r_Page_101.txt
139ba459b586065cd082f79f163f8a1a
4426d2795e97e5c8ad624375693e3ee574a7fc8b
1666 F20110109_AADHID gerhard_r_Page_116.txt
75d1000396a0160a321bf801322706a3
9bc922d2ca182e81e8259fc50969742201ce7d1c
1523 F20110109_AADHHQ gerhard_r_Page_102.txt
6febc1ae6a08e9e7d355f4ad1b403006
c96a885e03e92285b36685e9b03f36dd89e6f718
1910 F20110109_AADHIE gerhard_r_Page_117.txt
a740f76ca1681f9c82b0cc5ee32fc84d
5c9a14890032383ae78266e4e50dcd3e0068d97b
2300 F20110109_AADHHR gerhard_r_Page_104.txt
b665d26bf977dc17833f447e9b3044d8
7c6e492aabdb0ad84229e748977bcf591d791cf2
1995 F20110109_AADHIF gerhard_r_Page_118.txt
df59247be1138792188a49b924146315
512bb9fe91a8e6562f7b3ab536c8474cfc1af1b1
1730 F20110109_AADHIG gerhard_r_Page_119.txt
ddb873c8ee3c05b08ca3509f2cd9bc1a
e4db1b8c4b7c837db852b5c031497a34064de951
2407 F20110109_AADHHS gerhard_r_Page_105.txt
652099c77917ca68c497564c8ce59602
2fc16a08509a000c69f0b24f93f7327c70622935
F20110109_AADHIH gerhard_r_Page_120.txt
ac93f201fdb9d4713f84206ac8c93ad1
c7489a7c9e2b8deeaf04f1821340da835de25edf
1851 F20110109_AADHHT gerhard_r_Page_106.txt
61a217819bebd680c7ba7c5beac1a3d4
b1d66af6a7bd2bdac29725931bba95d78b6ac42c
1740 F20110109_AADHII gerhard_r_Page_121.txt
b912e6232a44e30bd512109d4b297cc5
51663e41130d591ffd5e0f3dfc1111002c557016
1840 F20110109_AADHHU gerhard_r_Page_107.txt
5f9a1362b9cc498cf55a044ef6dff732
74bfb3c0356d0f74e5791540d9a8ddae0c3c0626
1618 F20110109_AADHIJ gerhard_r_Page_122.txt
c772eb70fcb30681746befb58e80ce8b
00094cf27f48798154a0a495bff97cee42455adc
1549 F20110109_AADHHV gerhard_r_Page_108.txt
227e95bd308006fddd80314faf962bec
e7ec6609f9ef3a07a09f1062eed89036345cfe82
1694 F20110109_AADHIK gerhard_r_Page_123.txt
37ff3ab2bec539ae8a436baade34b3ce
7d769b2003b7af35adac2b006a165d5e3d304706
1459 F20110109_AADHHW gerhard_r_Page_109.txt
9aeb4a19ccc8165edb3b7c2cd6667db8
5765b2230ef3ff454f6866cad34ba8fe604df79a
1906 F20110109_AADHIL gerhard_r_Page_125.txt
22f63436be86466edce4406879d898f5
5fe5875279e6b29e9b4a31ac8539bea61b9757ae
1722 F20110109_AADHHX gerhard_r_Page_110.txt
d9eec282d805e09b76cd11532a25a707
620b99f5c801f470239e1d592604b259f975b97a
1318 F20110109_AADHJA gerhard_r_Page_140.txt
daba928ca941c43732ab127ce61b7615
1db81ab4fe88296d51e23150c18204f75579c53f
1858 F20110109_AADHIM gerhard_r_Page_126.txt
b6938778f44969f06b2729a2cfada52f
1957ff56706f9e8d0c633f5436533ed655e8cf56
F20110109_AADHHY gerhard_r_Page_111.txt
faf47409251a34aa69859b99630ea2ea
c5ffe393839069a012c00e642efd3be45cd0e5d4
1649 F20110109_AADHJB gerhard_r_Page_141.txt
bd73bcaacddeddbb05aad963e2ab9933
d1065c9ba4e310511dcfb44a1c6e2e0a0621fe9d
F20110109_AADHIN gerhard_r_Page_127.txt
71d05e775b71fcf089cad2649302bf74
afac78a04a9a7114acc016b5d3e04a89e09547dd
F20110109_AADHHZ gerhard_r_Page_112.txt
169383cf5cbbf89e7e1f6acde1f9c66d
2bcb9e6c022f7d70e4b7b4a5435ee11fa390887c
2086 F20110109_AADHJC gerhard_r_Page_142.txt
291d8bf3f992c73dd457e6118565dfc4
ce8aac00a9db679a9cd3cc6c259a0f87d18cbe3f
1672 F20110109_AADHIO gerhard_r_Page_128.txt
16de0ea6714caa9f113c83ddf7cdec25
72ec58d7ef89a9302f7cf95842bc5b841e4c40e3



PAGE 1

REIMPLEMENTATION OF THE COMPUTER AND INFORMATION SCIENCE AND ENGINEERING (CISE) DEPARTMENT WEBSITE USING A CONTENT MANAGEMENT SYSTEM By RIMA GERHARD A DISSERTATION PRESENTED TO THE GRADUATE SCHOOL OF THE UNIVERSITY OF FLORIDA IN PARTIAL FULFILLMENT OF THE REQUIREMENTS FOR THE DEGREE OF MASTER OF SCIENCE UNIVERSITY OF FLORIDA 2003

PAGE 2

Copyright 2003 by Rima Gerhard

PAGE 3

This document is dedicated to my family.

PAGE 4

ACKNOWLEDGMENTS I would like to thank Dr. Markus Schneider for being the chair of my committee and helping me with this thesis despite his busy schedule. I would also like to thank Dr. Joachim Hammer and Dr. Douglas Dankel for agreeing to serve on my committee. I would also like to thank Mr. John Bowers for his continuous assistance throughout my years in graduate school. Finally, I would like to thank my family and friends for their support. iv

PAGE 5

TABLE OF CONTENTS Page ACKNOWLEDGMENTS.................................................................................................iv LIST OF TABLES...........................................................................................................viii LIST OF FIGURES...........................................................................................................ix ABSTRACT.......................................................................................................................xi CHAPTER 1 INTRODUCTION........................................................................................................1 2 RELATED WORK.......................................................................................................4 2.1 Web User Interface Design and Implementation....................................................5 2.1.1 General User Interface Design Guidelines...................................................6 2.1.2 Specific Guidelines imposed by UF and the COE.......................................7 2.1.3 Software Engineering Methods for Websites.............................................11 2.1.4 Website Implementation Technology.........................................................12 2.1.4.1 Web publishing................................................................................13 2.1.4.2 Web technologies.............................................................................15 2.1.5 Conclusion..................................................................................................30 2.2 Content Management Systems.............................................................................31 2.2.1 Introduction................................................................................................31 2.2.2 Strudel.........................................................................................................34 2.2.3 OpenCMS...................................................................................................36 2.2.4 Zope............................................................................................................36 2.2.5 Ariadne.......................................................................................................37 2.2.6 Cocoon........................................................................................................38 2.2.7 Evaluation...................................................................................................39 3 ZOPE..........................................................................................................................45 3.1 Introduction...........................................................................................................45 3.2 Zope History.........................................................................................................46 3.3 Zope s Fundamental Concepts............................................................................47 3.4 Zope Architecture.................................................................................................52 3.5 Object Orientation in Zope...................................................................................53 3.6 Zope Management Interface.................................................................................56 v

PAGE 6

3.7 Zopes Scripting Languages.................................................................................57 3.7.1 Python.........................................................................................................57 3.7.2 DTML.........................................................................................................60 3.7.3 Zope Page Templates.................................................................................62 3.7.3.1 Path Expressions..............................................................................64 3.7.3.2 Calling Python scripts from Page Templates...................................68 3.7.3.3 Macros..............................................................................................70 3.7.4 DTML vs. ZPT...........................................................................................75 3.8 Connecting to a relational database with Zope.....................................................75 3.8.1 Difference between ZODB and a relational database................................75 3.8.2 Z SQL Methods..........................................................................................76 3.8.3 Caching.......................................................................................................79 3.8.4 Transactions................................................................................................80 4 REQUIREMENTS ANALYSIS.................................................................................81 4.1 Functional Requirements......................................................................................81 4.2 Non-Functional Requirements..............................................................................82 5 IMPLEMENTATION.................................................................................................84 5.1 Software and Hardware Specifications.................................................................84 5.2 Database Design...................................................................................................85 5.3 Site Architecture...................................................................................................90 5.3.1 Folder Hierarchy.........................................................................................90 5.3.2 Folder Properties........................................................................................91 5.4 Definition Of The Website Style..........................................................................95 5.5 SQL Queries.........................................................................................................99 5.6 User Groups........................................................................................................102 5.6.1 Authentication to the dbAdmin area.........................................................102 5.6.2 Professors.................................................................................................103 5.6.3 Database Administrator............................................................................106 5.6.4 Additional Users and Delegation..............................................................106 5.7 Database Administration Issues..........................................................................108 5.7.1 Form Checking with JavaScript...............................................................108 5.7.2 The dbAdmin Folders...............................................................................112 5.7.2.1 The Standard Folders.....................................................................112 5.7.2.2 The Professor Folder......................................................................117 6 USER INTERFACE.................................................................................................120 6.1 Overview of Graphical User Interface................................................................120 6.2 Database Administration GUI............................................................................121 7 CONCLUSION AND FUTURE WORK.................................................................125 7.1 Have the Requirements Been Met?....................................................................125 vi

PAGE 7

7.2 Conclusions.........................................................................................................127 8 LIST OF REFERENCES..........................................................................................129 BIOGRAPHICAL SKETCH...........................................................................................133 vii

PAGE 8

LIST OF TABLES Table page 1 Overview of website implementation technologies........................................................31 3-1 Overview of areas that can be improved using a CMS...............................................33 3-2 Comparison of CMS....................................................................................................44 viii

PAGE 9

LIST OF FIGURES Figure page 2-1 Client/Server-side technologies...................................................................................15 2-2 Principle of website management................................................................................32 2-3 Strudel architecture......................................................................................................35 2-4 Ariadnes system architecture.....................................................................................38 3 Zope Architecture...........................................................................................................54 5-1 ER diagram of CISE Department................................................................................86 5-2 Folder Hierarchy of website........................................................................................91 5-3 Python Script getFolders.............................................................................................93 5-4 Usage of getFolders from Page Template...................................................................94 5-5 Generated Code from the getFolders script.................................................................95 5-6 The index_html page macro........................................................................................97 5-7 Using the whole page macro in another page..............................................................98 5-8 Calling a ZSQL method in embedded HTML...........................................................100 5-9 Form checking with Javascript..................................................................................110 5-10 Objects inside ciseZPT/dbAdmin/Project...............................................................112 6-1 Zope Management Interface......................................................................................120 6-2 Main CISE website....................................................................................................121 6-3 Logging in to the database administration area.........................................................122 6-4 Screen presented to a database administrator............................................................122 6-5 Screen presented to a professor.................................................................................123 ix

PAGE 10

6-6 Sample database dialog.............................................................................................123 6-7 Security Management through-the-web....................................................................124 x

PAGE 11

Abstract of Thesis Presented to the Graduate School of the University of Florida in Partial Fulfillment of the Requirements for the Degree of Master of Science REIMPLEMENTATION OF THE COMPUTER AND INFORMATION SCIENCE AND ENGINEERING DEPARTMENT WEBSITE USING A CONTENT MANAGEMENT SYSTEM By Rima Gerhard August 2003 Chair: Markus Schneider Major Department: Computer and Information Science and Engineering The maintenance of a website is a complex and time-consuming task. Many documents in different formats are published online by many different groups of people. The CISE Department hosts a website of medium size. This website has received a redesign in the summer of 2003. New content has been added and the integrity of the site has improved (i.e., broken links have been updated and the navigational strucure has been reimplemented). Still, the website is mainly static, and with every update to the website profound knowledge of HTML is needed. This reduces the number of people that can work on the website to a very small group of web administrators. This situation quickly turns into a bottleneck. The website is difficult to manage in terms of ensuring consistency and supporting evolution. New tools for dynamic websites have emerged in the past year. There is, on the one hand, the group of server-side languages that allow for the creation of dynamic websites. On the other hand, there is the group of web content management systems (CMS). The xi

PAGE 12

main objective of such systems is to move the developer away from the level of HTML documents and to assist in the general maintenance problem of ensuring consistency of content, reference, and presentation. CM systems are especially useful when websites are frequently updated and several authors exist, as in the case of the CISE Departments site. Another feature of content management systems is that they allow for a separation of content, style, and logic. The goal of this thesis is to reorganize the Departments website using a web content management system and a database. All content is stored centrally in a database, which means that data are not stored in a redundant fashion any more. The layout and logic are being handled by the content management system. The resulting website0 conforms to the policies and guidelines stated by the University of Floridas Web Administration group as well as the College of Engineering. The resulting system is easy to maintain even by people who lack fundamental HTML or programming logic. With the new system, it is easy to distribute and assign work among many users. xii

PAGE 13

CHAPTER 1 INTRODUCTION The Internet steadily grows in size. This growth can be attributed to an ever-increasing amount of documents available on web servers. Due to the rising number of online documents, the management of websites becomes a difficult and time-consuming task. The Computer and Information Science and Engineering Department hosts a website and is currently experiencing the complexities involved in maintaining a current website of medium size. In the fall of 2002, when this project was initiated, an older version of the Computer and Information Science and Engineering Department website was in use. Many times website users were frustrated because they were not able to locate the information they are looking for. In the summer of 2003, a new website went online, which features a new design and some new capabilities. However, there is still no support for the frequent updates and developers need profound knowledge of HTML to publish content. Therefore, the number of possible authors is greatly restricted and most work falls back on the sites main administrators, a situation that quickly turns into a bottleneck. The website is difficult to manage in terms of ensuring consistency and supporting evolution. The main problem is that maintenance for a site of relatively medium size remains very complex and time-consuming. To support maintenance, a large variety of new products and tools for website engineering have been developed. These so-called web content management systems (CMS) range from full-scale enterprise platforms, large upper tier and mid-market packages to various forms of open-source tools. The main 1

PAGE 14

2 objective of such systems is to move the developer away from the level of HTML documents and to assist in the general maintenance problem of ensuring consistency of content, reference, and presentation. CM systems are especially useful when websites are frequently updated and several authors exist, as in the case of the Computer and Information Science and Engineering Departments site. In the course of this project, several CMS have reviewed. One of them fulfilled most requirements and was chosen for the implementation of the new website. The goal of this thesis is thus to reorganize the Departments website, according to the following constraints: first of all, content shall be separate from presentation. Second, the website should be conform to the policies and guidelines stated by the University of Floridas Web Administration group. Finally, website data shall be managed by a database and editing of content as well as creation of new documents shall be simplified. We begin in Chapter 2, with a description of related work. First of all, we will review general design principles and specific guidelines imposed by the University of Florida. Second, we review the major website implementation technologies available today and make a selection of the technologies deemed appropriate for the implementation of the new website. Third, we will list a number of existing open source content management systems. Chapter 2 concludes with which system was chosen along with the reasons for doing so. In Chapter 3, we will present an overview of Zope, the CMS chosen for this thesis. Chapter 4 identifies the requirements that have been fixed for the website. In Chapter 5, a description of the implementation follows. Chapter 6 will give an overview of the user interface of the final website. Chapter 7 states the conclusion

PAGE 15

3 for this project as well as what possible additional work could be undertaken in the future. The last chapter lists all references used throughout this thesis

PAGE 16

CHAPTER 2 RELATED WORK In this Chapter, we will give an overview of the topics that are relevant for this project. The first area that is important for websites is the area of website design. Graphical User Interface (GUI) design methods are quite different from Web User Interface (WUI) design methods. Section 2.1.1 and 2.1.2 are dedicated to this area, detailing the guidelines for website design as imposed by the University and general design principles. Most work relevant for designing and evaluating user interfaces has come out of the Human-Computer Interaction (HCI) community. There is another meaning to the word design. There is the graphical and user interface aspect of website design as treated in subsection 2.1.1 and 2.1.2. But there is also the design of the structure of the site. This area is closely related to the field of database design. Any database designer knows that a database needs a well-defined structure; otherwise, many maintenance problems will occur. Websites are certainly comparable to databases both provide (sometimes large) amounts of information that needs maintenance. Databases have design methods such as the well-known ER-diagram [CHE76]. Therefore, websites need design methods similar to the design methods developed for databases. We will present some related work in the area of website design methods, which are lately also referred to as Hypermedia Development Methods, in subsection 2.1.3. 4

PAGE 17

5 Section 2.1.4 gives an overview of the website implementation technologies currently in use. In addition to giving a brief explanation of each technology, the choice is made whether the technology should be adopted for this project or not. The next area of related work is CM Systems. They were developed to support website builders in the task of managing the content, style and structure of a site. We have selected 5 systems, and describe their features in subsection 2.2. At the end of the section, a choice is made for one of the CMS. 2.1 Web User Interface Design and Implementation Web User Interface Design refers to the area of the actual visual presentation of the website. This includes the graphical user interface. It defines the first impression a user gets after visiting a page, therefore, we will list related work of this area before we treat all other aspects of a website. The most important goal of WUI design is usability. Nielsen [NIE00] defines usability as follows: Usability is the measure of the quality of the user experience when interacting with something whether a website, a traditional software application, or any other device the user can operate in some way or another. In the context of the World Wide Web, this means, how easy it is to find, understand and use the information displayed on a Website [KEE98]. To give some concrete examples, the following problems could be found on a website with poor usability: first of all, websites might suffer from information overload. Typically, a user does not want to browse through a lot of pages to find the piece of information that he is looking for. The attention span of a surfer is likely to be short. Second of all, ill-structured websites might lead the user to experience the lost-in-hyperspace syndrome. This syndrome appears when the navigation process is not very

PAGE 18

6 well structured and guided. It therefore becomes hard and time-consuming for the user to locate the desired information. The user is then said to be lost within the hierarchy of hypertext. The usability, appearance, accessibility and uniformity of a web pages projects the image of the CISE Department to students, alumni, visitors, and prospective employees. If a website has poor usability, it will discourage exploration and waste user time and leave a negative image of the CISE Department with the user. Therefore, it is important to adhere to methodologies for designing usable websites. There is a number of researchers who have treated the subject of graphical and user interface aspects of website design. Nielsen [NIE00] has suggested methods for designing pages with good usability. Another alternative for most page designers is to provide them with a set of simple guidelines for designing pages. These guidelines should be based on fundamental principles of user interface design. 2.1.1 General User Interface Design Guidelines The WWW hosts a wealth of guidelines for designing web pages. Conference articles that address the issue are few, however. Borges proposes simple design guidelines [BOR96][BOR98], such as Verifying that links connect to existing pages, Including the date the page was last modified, the mail address of the person that maintains the page and the URL address of the page on a footer, Avoiding pages become overcrowded with links, Keeping pages short (about a letter size page), Providing clear navigation from anywhere to anywhere, and do it on every page, to name but a few. Most guidelines have a basic idea in common: the key to successful Website design is not sophistication, it is simplicity.

PAGE 19

7 2.1.2 Specific Guidelines imposed by UF and the COE The University of Florida Web Administration group has imposed a set of guidelines. Their guidelines can be broken up in two sets of policies. First, they propose the Acceptable Use of Computing Resources Policy which consists of general rules for web pages, e-mail, and University affiliation. The key idea here is that the following information must be readily accessible on the main page: The name of the unit or group represented by the page; A means of contacting the person(s) responsible for maintaining the page content; The date of last revision; The university word mark; and An active link to the UF home page. Second, they have formulated the Accessibility Recommendations for UF Websites under the ADA (Americans with Disabilities Act), the University is required to accommodate individuals with disabilities. A similar, more expansive set of recommendations has been put forward by the W3 consortium [CHR99]. These documents encompass areas such as recommendations for colors (ensure that all information conveyed with color is also available without color, for example from context or markup), graphics (provide a text equivalent for every non-text element because Screen readers for the visually impaired will skip over images, image maps, buttons, bullets, etc. "Alt" tags give a written description of the image.) and language (use the clearest and simplest language appropriate for a site's content because screen readers will translate simple language more accurately than complex text). The Office of Public Relations of the University of Florida has put together a set of graphic policies for the University of Florida. To achieve a look, a consistent impression, they have defined rules concerning the University Word mark. A word mark, words used as a logo, provides a strong, distinctive graphic symbol unique to the University of

PAGE 20

8 Florida. The word mark consists of the seal (based on the state seal with the university motto and founding date), a word mark using the university's name and a positioned rule. The university mark should be used as a signature in visual presentations about the university, including websites. Furthermore, the University has established rules concerning colors and typeface. The official university colors are orange and blue. The exact shades for use on the web are Orange Hex={FF,4A,0} and Blue Hex={00,21,A5}. The university's official typeface is Palatino (called Palatino, Book Antiqua, or other names by various companies). Finally, the College of Engineering (COE has established a Web Page Guidance Document [COL03] which outlines the common thematic and structural elements that will brand the web pages within the COE at the University of Florida. Websites subject to the requirements include those maintained by the COE and the Departments within the COE. The documents stated that departmental home pages should have a uniform layout comprised of the following three elements: a header, a left-side menu box, and footer. Other guidelines in this document include the following areas: Layout. Web pages shall be standardized upon a minimum 780-pixel width. The height of the page is variable to allow greater flexibility for the departments free space. The intent is to have an effective presence over the broad range of browser and screen combinations present worldwide. Color Schemes. Each department can choose the color scheme for its website. Light lettering on dark backgrounds will be used for headers and footers. Menu boxes on home pages will be encapsulated in the same dark background color. The menus will be dark lettering on a light background. Above this menu box, but within the encapsulating

PAGE 21

9 frame, a search box, contacts, sitemap, or other similarly appropriate links may be included at the departments discretion. Headers. Headers will be designed and used as the primary branding elements to instill a sense of community within the cyber-presence of the COE. Headers on home pages will consist of three components: 1. The upper strip (height 35 pix) in which the COE and UF wordmarks are placed in leftand right justified positions, respectively. a. The UF wordmark should be 20 pixels high and 80 pixels wide. Graphics in the desired color scheme can be requested from UF Web Administration. b. The gator engineering wordmark should be 25 pixels high and 120 pixels wide 2. A larger middle strip (height 45 pix) in which the text Department of (Arial 10 bold) above the department name (Arial 30 bold max, smaller to incorporate longer department titles) appears both left and middle justified. 3. A navigation bar (height 20 pix) below that having a prescribed font (Arial 16), but department defined functions Department names shall appear as College of Engineering for the COE and Department of for the departments. No abbreviations shall be used. The upper strip for the home page header shall be the base for the subordinate page header. The name of the department will be superposed using a prescribed font (Arial 20) in a center-justified position. For subordinate pages Department of should be omitted so that longer named programs may be accommodated in a consistent manner. Each department shall maintain an option of including a strip for logos or section headers below this upper strip. Finally, an optional navigation bar of the same constraint as above will be immediately below that. These navigation bars may be section or even page dependent, according to the needs of the department. Left Justified Menu Box. Departmental home pages are required to have a left-side menu box (width 180 pix) that contains three sections: Quick Links, Information

PAGE 22

10 For, and Programs. The required links cannot be hidden in a drop-down or expandable menu, but if needed each required link can be extended with a drop-down or expandable menu. These sections are to be uniformly labeled for the departments using a prescribed font (Arial Bold 3, 16). Links (Arial 2, 12) within these sections are to be uniformly labeled, if used. These sections are outlined below. The ordering of items within them should be precisely followed. Optional items that a department wishes to add should follow the prescribed list. Quick Links ABC Directory (where ABC = departmental initials) College of Engineering Graduate School University of Florida Career Opportunities Other optional links Information For Prospective Students Undergraduate Students Graduate Students Alumni Visitors Faculty/Staff (optional) Corporate Partners (optional) Other optional links Programs Research International Centers (optional) Laboratories (optional) Other optional links The COE also provides 2 HTML templates for use by other COE Departments [COL03]. The template currently used by the CISE Department as well as in this project is based on the COE templates.

PAGE 23

11 2.1.3 Software Engineering Methods for Websites As mentioned in the introduction at the beginning of this chapter, databases have several similarities to websites. Both store information for users. Both need a structure to facilitate working with them. Both can suffer under maintenance problems such as redundancy, incompleteness, and inconsistency, if their structure was not designed properly. In order to avoid these problems, researchers have developed several hypermedia development methods: HDM [GAR93b], its successor HDM2 [GAR93a], OOHDM [SCH98], RMM [ISA95], W3DT [BN96], SOHDM [LEE98], and WSDM [DET98]. Koch has presented a comparative study of the most relevant methodologies for hypermedia and Web development [KOC01]. Currently, websites are often developed ad-hoc. The original CISE website seemed to be no exception. The development style can be blamed for many of the inconsistencies and poor usability that the user experiences when surfing the site. The methods listed above assist the website designer in planning a site. They provide appropriate techniques, processes, and methodologies. They fall into the area of software engineering methods and can be compared to the methods created for designing databases such as the ER-method [CHE76]. When websites are developed ad-hoc, the target audience of the site often experiences one or more of the following problems: first of all, information is needlessly repeated in several areas. On the previous CISE site, there was a textual description of the undergraduate classes offered in CISE under the area Undergraduate Program as well as in the link to the CISE Graduate Brochure. Not only is the information redundant, it is also inconsistent to store the information in an area where on expects to find material relevant for graduate students.

PAGE 24

12 Second of all, websites tend to be incomplete when no design method was employed. The CISE website has some incomplete areas as well. To give only one example of this, consider an international student who seeks to pursue a degree in the CISE Department. When searching the previous CISE website, the student will not be able to find any information on what degrees from foreign countries will be accepted by UF. One might argue that such information does not have to be offered by the CISE website. However, that information might be provided elsewhere, on another site affiliated with UF. Even if the CISE Department does not host the information, it should at least link to it, to provide as much service to its target audience as possible. International students in general do not find very much information geared towards them. This is surprising since the population of graduate students in CISE is currently made up of more than 80% international students! Another problem arises from the incompleteness issue: the problem of broken links. A broken link leads to a user not finding the needed information. This will decrease the confidence of users and leave a negative over-all impression. Many broken links can be found on the current site, for example under the Student Organizations area. Three out of the seven student organizations listed have either dissolved or else changed their URL. We have not implemented a specific software engineering method in this project. This is due to the use of a database instead. The content management system used also solves the majority of the problems described above (broken links, redundancy, incompleteness). 2.1.4 Website Implementation Technology In this Section, we present an overview of the technology available for website creation to date. Before however giving more detail of the implementation languages and

PAGE 25

13 technologies available to date, we will give some background on the mechanics of website publishing. 2.1.4.1 Web publishing Most of todays web publishing is happening through the Hyper Text Transfer Protocol (HTTP), or its variant, the secure HTTPS, which combines HTTP and the Transport Layer Security (TLS) or the Secure Socket Layer (SSL). The inventor of HTTP is Tim Berners-Lee. He implemented the protocol in 1990 at CERN, the European Center for High-Energy Physics in Switzerland. HTTPs functionality is quite simple. A client is sending a request to a server. The server then processes that request and answers with a response. Both the request and response are sent as messages over a TCP connection. The Multi purpose Internet Mail Extension (MIME) format is used for these messages. A MIME message is made up of a body and a set of headers. For HTTP messages, the body is optional, and the message has been termed as the HTTP entity. Additionally, a response (or request) line is prepended to the message. The request line has information about the request method, the resource locator, and the protocol version. The resource locator identifies resources in a hierarchical structure (such as the file system). The resource itself could be anything from an HTML page, to an image, a file, or an application. The HTTP resource locator makes use of the URL syntax. The server must determine what resource is actually requested by the resource locator. The most popular request methods employed by HTTP are GET, PUT, POST, and HEAD. The GET method is used by a web browser to request a specific document. A web browsers job is to formulate the actual GET request, send it to the server, receive an HTML document in return, and finally display the HTML document according to the

PAGE 26

14 HTML instructions. We discuss HTML in further detail later in this chapter. The POST message is used by web browsers to send data to a web server. The web browser can attach the data to an HTTP request as the message body. The message body would normally be the URL String after the question mark (?), e.g. http://www.cise.ufl.edu/inde.html?name=Markus+Schneider&phone=1234567. As with the GET method, the browser is responsible for preparing the POST headers and request body. The PUT request sends information to the server that will be used to create a resource as specified by the resource locator. If the resource already exists at that location, it can be overwritten. The HEAD method is used to get information about a document. Since a much smaller of data is transferred (not the whole document itself), HEAD is a lot faster than GET. The HEAD method is often used by clients who use caching to determine whether a document has changed since the last time it was accessed by the client. A local, cached copy can be used again if it has not changed. If it has, the document needs to be retrieved again using the GET method. A final important property of HTTP is that it is a stateless protocol. This implies that a request must have enough information in it to process it. The web server does not have any saved state information from previous requests that might be useful when processing the current request. This feature of HTTP makes it quite complex to build web applications. User might expect from an application that it remembers their preferences and some facts from previous interactions. Many workarounds have been devised to cope with this limitation: cookies, session products, authentication headers, and hidden form variables. Future HTTP versions could quite possibly remove this limitation.

PAGE 27

15 2.1.4.2 Web technologies Before listing the web technologies available today, it is important to note the difference between client-side and server side technologies. Figure 2.1.4.2 shows how client-side and server-side languages differ when a website is called. The client-side is basically represented by the browser, the front-end of any website. The browser displays HTML sites in frames. Technologies that are termed client-side are downloaded along with the HTML code and are employed on the computer of the user (the client). The server-side languages deal with resources of the server. Connections to databases are established, information between several users of an application is shared, or the file system of the server is being manipulated. Figure 2-1 Client/Server-side technologies HTML/XHTML. The layout of text and images that show up in a user's web browser when the user visits a website is usually composed using a simple language known as Hyper Text Markup Language (HTML). When a user visits a typical website, a chunk of text that is "marked-up" with HTML is transferred between the web server and

PAGE 28

16 the user's browser. The browser interprets the chunk of text, showing text and images to the user. The chunk of text, which is transferred, is typically referred to as a page. With HTML, website developers can create headers, paragraphs of text, lists, and tables. They can create links, which refer a user to another website or other data in the web. HTML can be extended with CSS Style Sheets and JavaScript, which is discussed in the next Sections. HTML is actually a simpler and easier-to-use subset of the Standard Generalized Markup Language (SGML). The W3 Consortium [WOR03] is responsible for the standardization of HTML. No specific editor or software is needed to create HTML files. However, there are powerful programs for HTML editing. The CISE Department has purchased a license for Microsoft FrontPage [MF4], whose main feature is that pages can be created in Normal (WYSIWYG) View, or code can be written in HTML View. FrontPage users can, therefore, create websites without knowing any HTML. Also, FrontPage has HTML, ASP, and XML source-code preservation capabilities in that allow a user to import code created in a text editor or other HTML editing toolwithout rearranging or changing it. XHTML is a new HTML derivate. In version 1.0, XHTML is a redefinition of HTML with the addition of XML. One of the most important features of HTML is the ability of defining links (short for hyperlinks). Links can refer to other pages within a site, or any address in the World Wide Web. This simple feature turns out to be quite powerful, since machines, that are physically miles apart, can now be reached through modern web browsers with nothing but a mouse click. The World Wide Web basically relies on this feature.

PAGE 29

17 One kind of web design that is possible with HTML is websites that are built based on frames. There are many issues that must be considered before frames are implemented on a site. One problem arises with search engines. Search engines can link directly to framed content documents, but they cannot link to the combinations of frames for which those content documents were designed. Many framed content documents are difficult to use when accessed directly (outside their intended frameset), so there is little benefit if search engines offer links to them. Therefore, many search engines ignore frames completely and go about indexing more useful (non-framed) documents. Another issue is bookmarks. In current browsers, if a user bookmarks a page, the browser actually only bookmarks the parent frameset. When that user later calls up that bookmark, she will get the home page or equivalent. This can quickly become frustrating when a user realizes that she has to retrace their path through the site when the user calls up the bookmark. To conclude, the Accessibility Guidelines suggests to avoid using frames altogether. The reason for this is that there are still browsers out there that do not use frames, browsers that are brand new and make a conscious decision to not offer that traditional support. Some of these are browsers for the blind, or other handicapped users. CSS style sheets. Style sheets [BOS98] can be used to manage, update, and change the layout of large sites easily [BOS98]. With traditional HTML, the presentational information is scattered throughout the document. In CSS, the presentational information is collected in one place, and it is easy to read and edit. CSS collect the style information for an entire website into one file, which is in turn included in the header of all HTML

PAGE 30

18 files that the style should be applied to. The editing of that file affects the presentation of the entire site. The Extensible Style Language [CLA99] is supposed to replace CSS. XSL defines stylesheets, which in turn define how XML documents are being displayed in a web browser. Through transformations, an XML file can be turned into another XML file, i.e. by leaving out or adding on certain elements, or by changing the order of elements. Disadvantages of style sheets are that support is often limited, buggy, or sometimes completely nonexistent within certain versions of popular Web browsers. However, browser support is getting better with newer versions of web browsers. The University of Florida Web Administration also has their take on CSS. They simply recommend organizing documents so that they may be read without style sheets. For example, when an HTML document is rendered without associated style sheets, it must still be possible to read the document. JavaScript. JavaScript is a general-purpose programming language that, when used for Web documents, goes directly inside the HTML documents and is downloaded to the browser with the rest of the HTML tags and content. Scripts can make a page interactive. Traditional web pages tend to be lifeless and flat unless one adds animated images or more bandwidth-intensive content such as Java applets or other content requiring plug-ins to operate (ShockWave and Flash, for example). A popular example of the use of JavaScript found on the web is image rollovers: roll the cursor atop a graphic image and its appearance changes to a highlighted version. Other things JavaScript can be used for includes: Automatically change a formatted date on a Web page Cause a linked-to page to appear in a popup window

PAGE 31

19 Furthermore, interactive forms validation is an extremely useful application of JavaScript. While a user is entering data into form fields, scripts can examine the validity of the data, i.e., Did the user type any letters into a phone number field?. JavaScript could be included on a web form to perform interactive error checking. This is useful for example for forms that transmit data to a database. Before inserting the actual data, one could check with JavaScript whether all fields of a form were filled out and whether they were filled with the right data type. XML. XML stands for Extendible Markup Language. It is a flexible way to create common information formats and share both the format and the data on the World Wide Web, intranets, and elsewhere. Any individual or group of individuals or companies that wants to share information in a consistent way can use XML. It is a formal recommendation from the World Wide Web Consortium [WOR03] and is similar to the Hypertext Markup Language. Both XML and HTML contain markup symbols to describe the contents of a page or file. HTML, as described above, describes the content of a Web page (mainly text and graphic images) only in terms of how it is to be displayed and interacted with. For example, the letter "p" placed within markup tags starts a new paragraph. XML describes the content in terms of what data is being described. XML-based files contain nothing but logic markup (also called semantic markup). A markup such as only contains information about the meaning of the data inside of the tag. It does not contain any information about how such data should be displayed. The data is entirely independent of the output medium (such as monitor, printer, ) and does not include any formatting instructions. As opposed to HTML data, which is displayed by a browser using default values, a browser does not

PAGE 32

20 know how to display XML data per se. Therefore, before such data can be presented, one needs to specify the formatting with a using a style language. Two formatting languages are available for this purpose as of today: CSS and XSL. CSS, on the one hand, was already discussed above. It can be used to tell a web browser how to display elements of an XML file. XSL, on the other hand, is more powerful. Especially important is the transformation component XSLT, which transforms XML data into HTML on the server side. The advantage of this is that XML in combination with XSL can be used on old browser versions, which do not recognize pure XML. The disadvantage is that this only works within an HTTP environment. Furthermore, the web server needs to have a corresponding interface, that allows for the integration of an XSL/XSLT software module. XML is "extensible" because, unlike HTML, the markup symbols are unlimited and self-defining. XML, as HTML, is also a subset of the Standard Generalized Markup Language. XML markup, for example, may appear within an HTML page. The major problem with XML is the capability of software to represent XML-based data adequately. Not all web browsers have the same capability of interpreting XML. The MS Internet Explorer interprets XML-based markup languages since product version 5.0, the Netscape browser since version 6.0. Interprets means that the browser is able to recognize XML data as such and can parse it. This does not mean, however, that the XML data is also displayed nicely formatting is done with CSS or XSL or translation with XSLT to HTML. Since the goal of a web designer is always to make the web page viewable in most browsers, it is not recommended at this point to use XML-based languages for web

PAGE 33

21 design. Clearly, when XML is used in combination with XSLT, this restriction does not apply. CGI. The Common Gateway Interface (CGI) is not a programming language. In fact, CGI applications can be written in just about any programming language in use today. CGI programmers write scripts and programs for the web that are called from HTML files. Actually, HTML and CGI communication works both ways: a CGI script could also transfer HTML code to a web browser. The difference to JavaScript is that those scripts or programs are not executed after the website has been transferred to the users browser, but before the browser receives the data from the server. CGI scripts and CGI programs are so-called server-side scripts. A CGI script could, for example, query a database that is installed on the server machine and display the query results on the client browser with dynamically generated HTML. The CG Interface has to be supported by the web server software. Most of the time, a directory with the name cgi-bin is used for this purpose. There are no requirements for the language in which a CGI program is written. Since the program has to be executable on the server, the program must have been compiled to the operating system environment of the server. Alternatively, the server could have a runtime interpreter to execute the program. If the server is running on Linux, for example, the server machine is executing C programs that were compiled by a Linux-C-compiler to an executable file. Most of todays CGI programs, however, are not compiled programs, rather just scripts, that are executed by an Interpreter when called. The best-known and most popular Interpreter is the Perl Interpreter. The Perl-Interpreter is available for most

PAGE 34

22 operating systems as freeware and is installed on almost all servers in the web. More information about Perl itself follows later in this Chapter. Alternatives to a CGI applications are Microsoft's Active Server Page (ASP), JSP, and PHP in which a script embedded in a Web page is executed at the server before the page is sent. They are discussed in further detail in the next Section. ASP. ASP stands for Active Server Pages. It is another alternative to PHP and CGI/Perl. Consequently, ASP is used to create server-side dynamic websites. As opposed to CGI/Perl, scripting code in ASP is embedded in HTML code (as is the case with PHP and JavaScript). ASP is tightly coupled with the world of Microsoft and Windows, even though ASP exists for Linux and other Unix-based operating systems and the Apache web server is supported along with Microsoft web servers. However, the ASP integration is optimized for MS web servers and is therefore mostly used under Windows NT. ASP is not a scripting language, as opposed to PHP. It is considered an environment; the scripting languages that can be used within this environment are Jscript and VBScript (the standard). The principle of ASP is as follows: due to certain conventions the web server recognizes that a HTML file is an ASP file. The server then implements the script code contained in the file and sends the entire chunk of generated HTML code back to the calling browser. A simple example for ASP is given in the following two documents. The first one, search.html, calls a script when an HTML form is submitted. The second script, called db_script.asp, executes a database query and displays the result. VBScript was chosen for the implementation.

PAGE 35

23 1. File search.htm 2.File db_script.asp <%@ LANGUAGE = "VBScript" %> <% SomeName = Request.Form("SomeName") %> <%= "You are looking for: & SomeName & "

" %> <% Dim db_conn, db_query Set db_conn = Server.CreateObject("ADODB.Connection") db_conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Inetpub\wwwroot\cise.mdb" Set db_query = db_conn.Execute("SELECT FROM Professor WHERE Name LIKE '%" & SomeName & "%'") Do While Not db_query.eof Response.write db_query.Fields("firstName") Response.write db_query.Fields("lastName") Response.write db_query.Fields("email") Response.write "
" db_query.MoveNext Loop db_query.close db_conn.close %> The ASP environment is available under a license and needs to be purchased. DHTML. Dynamic HTML (DHTML) is not a new language, it is rather an extension of HTML. It does not introduce any new HTML tags, however. It makes HTML dynamic by allowing website authors to alter elements of a website when it is displayed in a browser. Some content can change without, however, having to reload an entire page. A website therefore acts like an application that needs to be loaded only once. The interaction with the user decides what will happen on the screen next. To give a concrete example of DHTML, one could create a website where users can select one item from a drop down box. Depending on what item of the box was chosen, the website

PAGE 36

24 would then display another drop down box or a text field. This is just a simple example more complex examples of DHTML include animated graphics that glide over the screen, dynamic sitemaps, or clock counting up seconds in real time. When programming DHTML, website creators need a profound knowledge of JavaScript to begin with. Some ready-made DHTML solutions are available on the web, but whenever a custom-made solution is needed, one needs to have a strong background in JavaScript programming. Another problem with DHTML is that the two most common web browsers, MS Internet Explorer and Netscape, are only able to interpret it since version 4.0 (in both cases). Unfortunately, DHTML is one of the areas where these two browsers have decided to implement entirely different strategies. When writing DHTML for both browsers, one often has to write twice as much code one version for each browser. Many features will only work with one of the browsers. Finally, the major disadvantage of DHTML is that it could pose problems for people with visual impairments. The Accessibility Recommendations for UF Websites by the University of Florida Web Administration does not state any explicit recommendations as far as DHTML is concerned, but it is safe to say that overly dynamic sites with moving elements would not be deemed acceptable. Perl. Perl stands for Practical Extraction and Report Language [PER03]. The language stems from the Unix operating system world and was first published in 1987. Perl was invented by its only creator, Larry Wall. Following the Unix philosophy, Perl is an open language. Since Version 5, Perl supports elements of object-oriented

PAGE 37

25 programming. It is a scripting language that really started becoming popular in conjunction with the CGI environment. Perl has reached a certain level of popularity for being the language of hackers. One can achieve complex instructions with just one line of code. The code itself seems almost unreadable to the uninitiated. The syntax is based on C. Files that contain Perl code arent compiled to executable code. The Perl Interpreter is responsible for checking syntax and compiling Perl code whenever a file with Perl code is called. The obvious disadvantage is that due to this extra step, scripts dont execute as fast as compiled and linked scripts. The advantage is that scripts dont have to be compiled and linked for every new operating system environment. The scripts are therefore portable and can run anywhere as long as the Perl Interpreter is installed. The disadvantage of CGI in combination with Perl is that Perl Scripts are separate files, that reside (due to the CGI architecture) in different directories than the HTML files. Another problem is that Perl was devised as a universal programming language and not specifically for dynamic website development. Server side includes. Server Side Includes (SSI) are used to insert bits of dynamic information inside of HTML file. Popular examples are the inclusion of the current date and time. SSI can also start CGI programs and include their output (for example, the number of times a file has been accessed) in the HTML file. SSI are only executed when a web browser calls the HTML file over a web server (e.g. with a URI of the type http://). Another condition is that the web server supports SSI. Not all web server do so, some only interpret a part of the instructions. In case the web server doesnt know SSI, the instructions wont function.

PAGE 38

26 To signal the web server that SSI are present in an HTML file, it has become standard to give them a special extension: .shtml, .shtm, or .sht. Most web servers will ignore SSI if they are written in a file ending with .html or .htm. PHP. HTML by itself cannot be used to generate dynamically generated content. A scripting language is needed for this purpose. JavaScript and CGI/Perl have already been discussed above, along with their respective disadvantages. PHP was developed to remedy some of these problems. PHP originally stood for Personal Home Page Tools. PHPs core concept is that PHP code resides directly in HTML files, as is the case for JavaScript and PHP. When a web browser calls the HTML file, the web server recognizes that the requested file contains PHP code and is more than a static HTML file. The web server proceeds by having the file translated by the PHP Interpreter, which is installed on the server. The Interpreter executes the PHP code embedded in the HTML and generates the final HTML code, which is sent back to the browser. Whatever can be done with CGI and Perl can be achieved with PHP. Some things are easier though, since the PHP Interpreter is better fitted to web publishing demands. It is, for example, possible to generate PDF files dynamically. PHP has enjoyed a wide success and is used by many websites. A simple example of PHP code in an HTML file is the following set of files. The first file (search.htm) simply contains a form, which calls a script called db_script.php upon submission. The second file is the db_script.php. We reprise therefore the same example as the one given for ASP. 1.File search.htm


PAGE 39

27 2.File db_script.php \n");?> PHP and its Interpreter are available for free. The software was developed by the PHP Group, a consortium of programmers [PHP03]. Java. Java is a platform-independent programming language developed by Sun Microsystems [SUN03]. The language is structurally and syntactically close to C and C++. Java was developed as a programming language for the Internet, but it turned out that Java is suitable for universal programming purposes. It did not reach the dominance in the Web that the Java developers were hoping for. Today, Java is particularly used in connection with on-line banking, on-line broking, and web-based chats. As far as animations, effects, and on-line plays is concerned, Java is less popular than Flash (described in the next Section) One kind of Java programs for the Internet is called applets. Java applets can only be executed when users have explicitly enabled their browser to support them, since they could possibly be used to change files on the users computer or even delete them.

PAGE 40

28 As far as the Client-Server model is concerned, Java can be used on both sides. Applets running in a browser are client-side. Oftentimes, those applets communicate with server-side programs. Consider for example a chat application. On the one hand there is an applet, which runs in the browser representing the chat interface to users. On the other hand, since chats usually involve more than one person, naturally some program must be running on the server to administer the chat participants. Another kind of Java program for the Internet is servlets. Servlets are Java classes that are typically used for tasks such as security checking, control over downloads and uploads. Java Server Pages (JSP) is yet another option similar to PHP, ASP, and CGI/Perl. The server page is an HTML file with embedded Java code. JSPs are a good choice for smaller web applications. Their disadvantage is that they become hard to maintain since code and HTML are intermingled. The example used for PHP and ASP can be rewritten for JSP as follows. Again, two files are needed, the first one (search.jsp) containing a from which calls the second file (db_script.jsp). 1.File search.htm <%@ page language = "java" import="java.sql.*" %> <%@ include file = "default_frameless.jsp" %>



PAGE 41

29
2.File db_script.jsp <%@ page language="java" import="java.sql.*, java.lang.*,java.net.*" %> <% /* set up database connection */ Class.forName("oracle.jdbc.driver.OracleDriver"); String user = "user"; String password = "secret"; Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@oracle:1521:oradb", user, password); Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); String searchName = request.getParameter("inpName"); /* run query */ ResultSet rs = stmt.executeQuery("select from Professor WHERE name LIKE '%"+searchName+"%'"); if (rs != null) { rs.last(); rs.beforeFirst(); } if (rs != null) { while (rs.next()) { String displayName = rs.getString("name"); %>

<%=displayName %> <% } /* end of while */ } /* end of if */ stmt.close(); conn.close(); %> Flash. With Flash, website developers can add multimedia effects to websites, as well as create applications such as games, simulations, or navigation. Flash is a binary format that can be included in HTML as a multimedia object. Alternatively, Flash files can be viewed directly the newer browser versions have a plug-in for Flash and can display it directly. Flash websites usually somewhat resemble a TV screen something is always in motion, light effects, and music is not unusual.

PAGE 42

30 When creating the so-called Flash-movies, one works with the Flash Authoring software, that lets website developers position graphics, text, and sound on a time line. Flashs authoring software is not useful for more complex applications. But Flash comes with an integrated programming language that can be used to solve more evolved problems. The main feature of Flash is that it is an extremely powerful tool to visualize content. Its authoring software is available for purchase from the Macromedia corporation [MAC03]. Flash-plugins to view Flash movies, however, are available for free. 2.1.5 Conclusion Since user interface is such a crucial part of the website, it is important to stick to well-established guidelines that were tested and that can be relied on. Since usability is the declared goal of web user interface, we will adhere to guidelines established by researchers in this area. Additionally, the new website shall be conform to the set of guidelines established by the University of Florida. As far as technology is concerned, Table 1 shows an overview of the technologies presented in this Section. The deciding factors on what technologies we consider for this project are, in descending order of importance: 1. whether a technology is available for free. If this is not the case, the technology is immediately ruled out. 2. the complexity of the technology. If the time that is needed to understand and put to use the technology exceeds the time limit for this thesis, the technology cannot be used. 3. whether the technology allows for a distinction between design and content. This means, how much is logic (as encoded in scripts) and presentation (e.g., the HTML) separated. When an HTML file that contains scripting logic is not viewable

PAGE 43

31 in a standard HTML editor such as FrontPage, it is an indicator that logic and design are not very well separated. We then rate the separation level to be low. 4. whether the technology adheres to UF guidelines. If a website technology is considered inappropriate by the University of Florida Web Administration group, it cannot qualify for the CISE website. 5. whether the technology is client-side or server side. This is an important factor when considering what part of the project the technology applies to. The last column in table 2.1.5 indicates whether the technology was deemed appropriate for the CISE website development or not. The choice was made depending on how well the technology fitted the requirements as listed above. Table 1 Overview of website implementation technologies Free Complexity Adherence To Guidelines Client/Server side Separation of design and content Considered appropriate for CISE website development HTML Low client low yes CSS Low client high yes JavaScript Low client high yes XML Low Doesnt apply high yes CGI/Perl Medium server low no ASP Medium server low no DHTML Low client medium yes SSI Low server low yes PHP Medium server low no Java Medium Server/client low no Flash Low client low no 2.2 Content Management Systems 2.2.1 Introduction The Internet offers a wide range of options for presenting information. Documents are available in different formats: HTML, XML, and sometimes-in form of text documents (txt, pdf, ps, doc). Multimedia data, such as audio data (mp3, wav) and image (jpg, gif) and video data (MPEG, Quicktime) also play an increasing role. Websites face

PAGE 44

32 the difficulties of integrating all of these different data formats. A web-site builder must address this problem when managing the content and structure of sites. Content Management Systems (CMS) were created to precisely help support this complex task. Researchers at AT&T, who developed the Strudel CMS [FER97] and its successor Tiramisu [ALW99], have suggested that management of a website involves three tasks: 1. Content: Selecting and managing the data available at the site, 2. Logic: Data has to be organized and structured in individual pages, and 3. Style: Design of the pages. Figure 2-2 Principle of website management Content could be managed by storing all data in a database or several databases. The data could then be retrieved through queries. Management of the logic refers to the definition of the site structure, i.e. the set of pages, the data contained in each page and the links between pages. Management of Style means the layout of the web pages. HTML is normally used for formatting the layout, but lacks some fundamental page-oriented formatting capabilities. Many software products exist to help website developers with the task of layout management. FrontPage and Dreamweaver are part of these so-called WYSIWYG (What you see is what you get) editors. This means that pages are displayed there exactly as they will be seen later on the Internet. WYSIWYG tools are an immense help when

PAGE 45

33 designing the look of a page. One could, for example, draw tables and drag-and-drop text boxes and other HTML elements in a page and the tool generates the corresponding HTML code. But is this sufficient for creating websites? Still, with every change to the look-and-feel of a site, one would have to modify every single HTML document. Since the links are hard-coded, every change would have to be manually edited. This applies to links within the site as well as links that lead to other web pages. The integrity that a site might have had when it was brand new and controlled by a few web page developers is easily lost as time passes by. This is visible to a site visitor when he discovers broken links, content that is out-of-date, and pages that look and act differently. Managing the look and organization of current, relevant content goes a long way toward looking trustworthy and professional. The use of a WYSIWYG tool is not of much help for these issues. Solving problems with outdated content and links both features traditionally thought of as "content management" a Web Content Management System could help present a positive user experience. Table 3-1 presents an overview of the areas, which can be improved, with the help of a CMS. Table 3-1 Overview of areas that can be improved using a CMS Area CMS Solution Consistent Look and feel across a site Templating: enforce design standards Site always shows current information Version and display new content; remove and archive old content, track broken links; eventually use of a database Content is high quality Workflow: pass content through review and approval cycles Site loads quickly and is always available Cache popular pages, deploy content to distributed servers Navigation is up-to-date and accurate Auto-index content,

PAGE 46

34 Throughout the writing of this thesis, the field of CM systems has seen an explosive growth. When we initially compiled a list of CMS that would come into consideration, 5 open source systems seemed to be most promising. When looking at websites that give an overview of CM systems today ([WEB03][CMS03]), one can easily find well over 50 products, many of them available for free. One german content management site [COM03] even lists 938 products (June 24 th 2003)! Clearly, it would not have been possible to test and evaluate each of these systems. We have compared the 5 systems that were initially listed and relatively quickly opted for one of them. When the decision was made, we have not decided to research any further into the new and upcoming systems, partly due to the fact that the chosen system turned out to be a very good fit for our requirements. In the following, we present the 5 CM systems we have originally taken into consideration. We will point out how each of the areas identified above logic, content, and style are being handled in the different systems. At the end of this Section, we have included a table comparing the major aspects of these systems. More detail is given on which system was chosen and what were the motives for doing so. 2.2.2 Strudel Strudel is a website development system created by AT&T Research [FER97]. Content is being stored either in a database, external files, or in Strudels internal data repository. All source data is converted into Strudels own format, a labeled directed graph and wrappers translate all data into the graph model, called the data graph. The website administrator declaratively specifies the sites structure using a site-definition query in StruQL, Strudels query language. The result of evaluating the site-definition query on the data graph is a site graph, which models both the sites content and

PAGE 47

35 structure. A site graph can be rendered as a browsable website by Strudels HTML generator, which produces HTML for every node in the site graph from a corresponding HTML template specified by the administrator. Since the HTML templates exist entirely independent of the content, we have a clear separation between the area of Content and Style. The area of Logic is being covered by the site-definition queries, which are independent of the HTML templates and the data residing in the databases. Advantages of the Strudel website management system are that there can be multiple views of the website with minimal effort only new queries need to be created, or the HTML templates changed. Strudel allows for information to be drawn from many sources such as relational databases, Excel spreadsheets, Word documents, text documents, and other HTML files. Figure 2.2.2 gives an overview of Strudels system architecture. The figure was taken from Strudels website [ATT03]. Figure 2-3 Strudel architecture

PAGE 48

36 2.2.3 OpenCMS OpenCms is an open source system that enables website builders to create and maintain websites. The software used to create the website is installed on a web server and is accessed via the Internet through a web browser. Different access permissions determine which actions users can perform and which components they see, i.e. users see only those files and directories that are relevant to them. OpenCms has an HTML editor, which is used to create content in the body. A template that ensures that the layout is uniform structures the body. OpenCms is only used to edit the body. This is how OpenCMS achieves a separation of Content and Style of a website, by assuming that the content is normally inserted in a body element. OpenCMS also supports Stylesheets to further separate content and layout. All of the files and folders of the different projects are not stored in the normal file system. OpenCms has a Virtual File System that holds the files and folders in a database. The OpenCms architecture allows using any SQL capable database that offers a JDBC connector. 2.2.4 Zope Zope (which stands for Z Object Publishing Environment") is an object-oriented web application server that is managed through a web interface. In Zope, one publishes "objects" which can be plain pages, structured content, documents, images, binary files, or folders. Instead of storing its basic documents in a relational database or file system (although developers can access both with freely available programs), Zope puts everything in its Zope Object Database (ZODB). This way, every entity in the system can have properties and methods, security settings, and managed transaction support (including rollback). Zope also has functionality for XML documents; one can import or create documents within Zope and format, query, and manipulate XML. Separation of

PAGE 49

37 content, style, and logic of web pages is done through the use of Zopes scripting languages DTML, Zope Page Templates, and Python Scripts. Content resides in a database or Page Templates, whereas Python Scripts define the logic. Page Templates and DTML are used to define the style of a webpage. The Zope framework is described in much greater detail in Chapter 3. 2.2.5 Ariadne Ariadne is a web application server and a content management system. It is entirely written in the PHP scripting language [ARI03]. Ariadne can be used in conjunction with Apache, the web server also used by the CISE Department, and the MySQL and PostgreSQL database systems. The separation of content, style, and logic is managed as follows: style is managed through Templates. They are defined over the web, in a browser and can be any kind of text type: html, xml, rtf, etc. Logic is managed through a scripting language PINP, which consists of a subset of PHP functions. Ariadne stores content in a structured object store built on top a relational database system. The object store is very similar to the file system of the operating system. It generates files and directories and navigation is done in the Ariadne browser. The store or the database contains all the information for the website. This information is combined with class descriptions to generate objects. As is the case in traditional object-oriented programming, objects have methods associated with them, which works on the information that is contained in the database. Content, logic, and style are merged to generate a webpage. Ariadne applies the user-defined templates (style) on these objects (content) to generate a webpage. Figure 2.2.5 gives an overview of Ariadnes architecture.

PAGE 50

38 Figure 2-4 Ariadnes system architecture 2.2.6 Cocoon Cocoon [COC03] was developed by the Apache Software Foundation as an open source project written in the Java language. In Cocoon, content is always stored in XML. The XML content is normally stored in files, but could also come from a relational or XML-database. The main idea is that XML-based data can be represented as needed in an HTML browser for a website, as PDF for printing purposes, as WML for cell phones, or RTF for use in office applications. Style is managed with XSLT. The advantage of using open standards such as XML and XSLT is that the data is not bound to a proprietary data format and proprietary systems, which are always bound to the current market and could disappear from one day to the next. Another strength of Cocoon is the simplicity, with which the same data can be represented in different output formats. Cocoons biggest disadvantage is the use of XSL. XSL is quite complex and cannot be mastered by someone who is used to working on the layout of websites with FrontPage and Photoshop, since some background in programming is required.

PAGE 51

39 2.2.7 Evaluation Table 3-2 gives an overview of the CM systems discussed in this chapter. The table includes the following information: Name of the product Web Server: does the product come with its own server, or does it integrate with existing web servers? This question is important since the CISE Department currently employs an Apache web server, and we assume that they intend to use that server in the future. Database: can the system be set up to query an existing RDBMS/ other database management system? Operating System: which operating system can the software be installed on? Input Document: what kind of document can be stored by the system? Output Document: what kind of document can be generated by the system? HTML Editor/ Generator: does the system come with an integrated HTML WYSIWYG editor, comparable to FrontPage or Dreamweaver? Access Rights Management: can many authors collaborate with this system? Programming Language used: what kind of languages will have to be learned by someone using the system? Documentation available: is documentation available on how the system is installed and used? User base: is there a community of developers to speak of? Installation: how hard and time-consuming will the installation be? Ruled out: due to which criterion was the system ruled out? We have applied the following criterions to each of the systems, and thus singled out the one winning system, which was able to fulfill all criterions:

PAGE 52

40 A. The system is not very well supported. A small user group and outdated or non-existent documentation indicate this. Another option is that the system belongs to the academic area is not yet fit for use in a concrete scenario. B. The development of applications with this system would be very complex and time consuming. This could be due to the fact that the system is using unpopular programming languages, which would require a lot of time to learn. C. The systems cannot be set up within the CISE environment. This could mean that the system does not allow a connection to an Oracle database, which is the one provided by the CISE Department, or that the system cannot be installed under one of the operating systems provided by CISE. Since the only operating system available for our usage is Solaris, this is an important factor. The CISE Department does provide Windows machines as well, however, administrator rights would be needed to install new software. The Solaris machines do not have this restriction. Of all systems, we have chosen Zope for the implementation of the new CISE Department website. In the following, some additional reasons are given as to why Zope is a good fit for our requirements. First and foremost, Zope is free of cost and distributed under an open-source license. This not only means that we can use Zope without having to pay for the software. It also means that as with most other open source software systems, the user community is fairly large many people have made the same decision of not spending money when something free can be tested first. Whenever the user community is large, it means that

PAGE 53

41 documentation must be available or is about to be created, and good support through mailing lists and web forums exist. This is definitely the case with Zope. Since there is a large community of application developers, new Zope add-on Products (more about this in Chapter 3) appear almost on a weekly basis. The quality of the product definitely increases when several developers are able to take a look at the source code (peer review). In open source systems, peer review is an important factor that ensures quality at a low price and the inclusion of new ideas are much easier to implement than in proprietary systems. Most closed-source, commercial tools do not let users extend, customize, and redistribute them. This is not the case with Zope. Another fact that arises from Zopes open source property is its continuity. Since there are many users and developers supporting this product, Zope is less likely to disappear from one day to the next than some proprietary CM software system, which is always dependent on the current market situation in the IT sector and thus constantly threatened by bankruptcy! Furthermore, Zope itself is an inclusive platform. It comes with all the necessary components to begin developing an application. No extra license software is needed to support Zope. It also turned out that Zope was very easy to install, since no extra software had to be installed to make Zope function. As stated in Chapter 4, one of the main requirements is the ease of use of the application. Ideally, no additional knowledge is needed when dealing with maintaining the CISE website. Zopes Management Interface is displayed in a web browser. The Internet Explorer, Mozilla, Netscape, OmniWeb, Konqueror, and Opera browsers are all known to be able to be used to display and manipulate Zope's development environment. Most everybody today knows how to use a web browser. One does not need to learn and

PAGE 54

42 get used to an entirely new IDE (Integrated Development Environment). What's more, developers can delegate duties to other developers through the web using the same interface. Very few other application servers, if any, deliver the same level of functionality. Zope allows teams of developers to collaborate easily. Collaborative environments require tools to allow users to work without interfering with each other, so Zope has Undo, Versions, History and other tools to help people work safely together and recover from mistakes. Many other application servers do not provide these kinds of features. Some tools do not scale as well as Zope does to handle large numbers of developers and users. Zope has a consistent, powerful user management system that can scale to many users with unique, easily managed privileges. Additionally, Zope runs on most popular microcomputer operating system platforms: Linux, Windows NT/2000/XP, Solaris, FreeBSD, NetBSD, OpenBSD, and Mac OS X. Zope even runs on Windows 98/ME (recommended only for development purposes, however). Many other application server platforms require that you run an operating system of their licensor's choosing. This gives the CISE Department a vast array of choices as to what operating system to install Zope on. Moreover, Zope can be extended using the interpreted Python scripting language. Python is popular and easy to learn, and it promotes rapid development. Many libraries are available for Python. Many other application servers must be extended using compiled languages such as Java, which cuts down on development speed. Many other application servers use less popular languages for which there are not as many ready-to-use library features.

PAGE 55

43 As described in Chapter 3, Zope and the programming language Python are entirely object-oriented. As opposed to scripting languages such as PHP and Perl, the object-orientation was not added as a feature after the language had existed for some years. Python, the base technology of Zope, was designed as an object-oriented language from scratch. If applied consequently, the OO-programming paradigm leads to better, more maintainable code. Whilst PHP was created for web applications, Python is more of a real programming language. This is an advantage when one has to implement functionality that is not directly related with web presentation. Zope is being developed since 1996 and has proven itself to be extremely reliable. The Zope website [ZOP03b] lists a number of impressive, reputable clients (Navy, Nasa, and Bank of America to name but a few). Another interesting aspect of Zope is the scalability. Zope Enterprise Objects can be added, which allow a site to increase capacity by adding computing resources to handle the load [EVE03].

PAGE 56

44 Table 3-2 Comparison of CMS Zope Cocoon OpenCMS Ariadne Strudel Web Server Apache Tomcat Own server (Zserver) Apache Tomcat Apache (1.3.19 + up) or MS IIS 5.0 Apache Tomcat Apache Tomcat Database Oracle, PostgreSQL, MySQL, Sybase, Interbase, DB2, any ODBC-compliant database, including SQL Server 2000 RDBMS, LDAP, Native XML Data bases MySQL (3.23.40 + up) or Oracle (8.1.7 + up), MS-SQL 7.0 MYSQL, PostgrSQL Relational Database (no further specification) Operating System Linux, Unix, Windows98/2000/ME/NT, MacOSX, FreeBSD, NetBSD, OpenBSD Windows 2000, Linux, Solaris Windows 98/2000/ME/NT, Linux, Solaris (2.7) Windows 2000. Linux, Unix, Windows98/2000/ME/NT Input Document XML, HTML XML, HTML XML, HTML HTML, XML, RTF XML Output Document PDF, HTML, TXT, DOC, PS XML, HTML, RTF, PDF, WAP, HTML, XML, TXT, DOC, PS HTML, XML HTML, XML, PDF HTML Editor/Generator NO No Editor but has HTML Generator YES HTML Editor No Editor but has HTML Generator Access Rights Management YES XRPM YES YES NO Programming Language Used Python, DTML Java, Servlets, XML and XSP Java PHP StruQL Documentation Available Online Help API available Zope Administrators Guide YES Online Help Under Development API available Documentation under construction (since 1999) User Base YES YES YES 8 companies Research Installation Detailed installation guide setup wizard for Windows YES HTML setup wizard Incomplete Installation guide Rough installation guide on website Ruled out B C B A

PAGE 57

CHAPTER 3 ZOPE The Z Object Publishing Environment (Zope) is a comprehensive web application development environment, web server, and content management system written in Python. In this chapter, we will explain Zope's purpose and audience in greater detail. Most of the information has been gathered from the Zope Book [LAT01]. 3.1 Introduction To understand the purpose of Zope, it is first of all necessary to understand what a web application is. We can make a distinction between a static and dynamic website. A dynamic website has also been termed a web application. To maintain a static website, there has to be a person with specific access rights, the Webmaster, in charge of manually updating the sites content. This entails manually visiting and updating the HTML that makes up each page. Normally, the Webmaster does so by updating a set of files on the web server (the machine that runs the website). Each of these files represents a single page. If a Webmaster had to change the look-and-feel of a static website he would have to visit and update every single file that composes the website. For a large website (such as the CISE site) this task can become non-trivial. It is also the case that the Webmaster might make mistakes and forgets to update or remove critical pages and links. Dynamic websites (or web applications) are also served over a web server. The difference to static websites is, however, that they are generated each time that a user requests the page. For example, a web application might query a database and generate 45

PAGE 58

46 some HTML to display the results of the database query in a page. Web applications are extremely common. Some popular examples of web applications are those that let users search the web, like Google; collaborate on projects, like SourceForge; buy items at an auction like eBay; communicate with other people over e-mail, like Hotmail; or view the latest news such as cnn.com. Users and browsers are usually not aware of the difference between contacting a web server which delivers a static website and a web server which delivers a web application. A framework, which allows people to construct a web application, is often called a web application server, or sometimes just an application server. A web application server typically allows a developer to create a web application using some common computer programming language. This is exactly the purpose of Zope. 3.2 Zope History In 1996 Jim Fulton (the current CTO of Zope Corporation, the distributors of Zope) had to teach a class on CGI programming, even though he knew only little about the subject. Common gateway interface (CGI) programming is a commonly used web development model that allows developers to construct dynamic websites (please refer to Chapter 2, Related Work, for more information on CGI). Fulton realized that there were several aspects of CGI based programming that he did not like, and so he wrote the core of Zope on the plane flight back from the class. Zope Corporation, which was then known as Digital Creations, then released three open source software packages to support web publishing, Bobo, Document Template, and BoboPOS. All of these packages were written in the Python programming language. All of them provided a web publishing facility, text templating, and an object database. Digital Creations had also developed a commercial application server based on their three

PAGE 59

47 open source components. This product was called Principia. Investor Hadar Pedhazur convinced Fulton in November of 1998 to open source Principia. Zope has evolved from the Principia components. According to the Zope website, the "Z" in Z Object Publishing Environment does not really mean anything in particular. Most of Zope is written in the Python scripting language, with performance-critical pieces written in C. 3.3 Zope s Fundamental Concepts This subsection lists the fundamental underlying concepts of the Zope framework. Zope is a framework. Zope combines several tools including a web server, an object database (ZODB), and two scripting languages: a tag-based scripting alternative, (DTML) analogous to XSP or JSP, and one in which special formatting attributes are embedded directly inside HTML tags, (Zope Page Templates or ZPT), for compatibility with standard HTML tools such as Dreamweaver, Netscape Composer, or FrontPage. We describe the scripting languages in greater detail in Section 3.7. It is possible to build websites by writing pure HTML or by encoding automation using Python (Perl is also supported). It is easy to connect to external databases such as Oracle or MySQL, an area we cover in Section 3.8. Zope can also be attached to Apache instead of the built-in Zope "Medusa" web server. Object orientation. Most web scripting languages are procedural, such as Perl, PHP, or ASP. Unlike these popular scripting languages, Zope is an object-oriented application server. Object orientation is a software development pattern that is used in many programming languages (C++, Java, Python, Eiffel, Modula-2, others). We give further details in Section 3.5.

PAGE 60

48 Website publishing. Zopes founders realized that the Web is fundamentally object-oriented. A URL to a Web resource is nothing but a path to an object in a set of containers. A way of sending messages to an object is provided with the HTTP protocol. The object structure of Zope is hierarchical. This means that a Zope site is typically composed of objects, which contain other objects (which in turn contain other objects, etc.). URLs map to objects in the hierarchical Zope environment based on their names. For example, the URL Research/index.htmlcould be used to access the Document object named index.htmllocated in the Folder object named Research. Zope's duty is to "publish" the objects one creates. This works as follows: say a web browser sends a request to the Zope server. The request specifies a URL in the form protocol://host:port/path?querystring,e.g. http://www.zope.org:8080/Resources?batch_start=100. Zope separates the URL into its component host, port, path, and query string portions ('http://www.zope.org', 8080, /Resources and ?batch_start=100, respectively). Zope then locates the object in its object database corresponding to the path ('/Resources'). It executes the object using the query string as a source of parameters that could alter the behavior of the object. This means that the object may behave differently depending on the values passed in the query string. If it is the case that executing the object returns a value, then the value is sent back to the browser. Normally, a given Zope object returns HTML, file data, or image data, which is interpreted by the browser and shown to the user.

PAGE 61

49 Mapping URLs to objects is not a new idea. Web servers like Apache and Microsoft's IIS do the same thing. They translate URLs to files and directories on a file system. Zope similarly maps URLs on to objects in its object database. A Zope object's URL is based on its path. It is composed of the ids of its containing Folders and the object's id, separated by slash characters. For example, if there is a Zope "Folder" object in the root folder called Schneider, then its path would be /Schneider. If Schneider is in a sub-folder called Professors then its URL would be /Professors/Schneider. There could also be other Folders in the Professors folder called Hammer and Dankel. One would access them through the web similarly: /Professors/Hammer /Professors/Dankel. The URL of an object is composed of its host, port, and path. So for the Zope object with the path /Schneider on the Zope server at http://localhost:8080, the URL would be http://localhost:8080/Schneider. Visiting a URL of a Zope object directly is termed calling the object through the web. This causes the object to be evaluated and the result of the evaluation is returned to the web browser. This is also where Zopes name stems from objects are published and presented in an appropriate format to the user. Zopes Web Management Interface. A web browser is all one needs to access the Zope Management Interface (ZMI) since all management and application development can be done completely through the web. The Zope management interface provides a

PAGE 62

50 familiar Windows Explorer-like view of the Zope object system. Screenshots can be found in Chapter 6. Through the management interface a developer can create Zope objects without requiring access to the file system of the web server. More on the ZMI can be found in Section 3.6. Security. Usually, web applications have more than one author. This can quickly become problematic. It is important to decide how much control every author should get. The question of how this will affect the security immediately arises. Suppose, an author has access to all files. What happens if the SQL code embedded in one of the files the author is working on exposes the database login (which is usually the case with ASP/JSP/PHP)? The author could get access to the database, which might not have been planned. The objects in Zope provide a much richer set of possible permissions than a conventional file-based system. Permissions vary by object type based on the capabilities of that object. It is therefore possible to implement strict security control such as setting access control so that authors can use "Z SQL Method" objects, but not change them or even view their source. One could also set restrictions so that a user can only create certain kinds of objects, for instance "Folders" and "DTML Documents" but not "SQL Methods" or other objects. Zope provides the capability to manage users through the web via "User Folders, which are special folders that contain user information. The ability to add new User Folders can be delegated to users within a subfolder. This allows delegating the creation and user management of subsections of the website to semi-trusted users without having to worry about those users changing the objects "above" (in the hierarchy) their folder.

PAGE 63

51 Native object persistence and transactions. The Zope Object Database (ZODB), a transactional object database, is in charge of storing all Zope objects. Each web request is treated as a separate transaction by the ZODB. Should an error occur in the application during a request, then any changes made during the request are automatically rolled back. The ZODB also provides multi-level undo, which allows a site manager to undo changes to the site with the click of a button. The Zope framework makes all of the details of persistence and transactions totally transparent to the application developer. We cover this area in more detail in Section 3.8 Acquisition. Acquisition is one of the most powerful aspects of Zope. The basic idea is that since Zope objects are contained inside other objects (such as Folders), objects can "acquire" attributes and behavior from their containers. The concept of acquisition works with all Zope objects. A commonly used SQL query or snippet of HTML, for example, can be defined in one Folder and objects in subfolders can use it automatically through acquisition. If the query needs to be changed, one only needs to change it in one place without worrying about all of the sub objects that use the query. This is particularly useful when compared to other scripting languages, which normally mingle SQL code, and HTML tags such as JSP, ASP, and PHP (see Section 2.1.4). When a query changes, the programmer needs to edit the query everywhere it is executed, which can become very tedious and time-consuming. Objects are acquired by starting at the current level in the containment hierarchy and searching upward. Therefore, it is easy to specialize areas of a site with a minimum of work. If, for example, one has a Folder named "Research" on a site containing research-related content, one could create a new header and footer document in the

PAGE 64

52 Research Folder that use a research-related look-and-feel. Content in the Research folder and its subfolders will then use the specialized research header and footer found in the "Research" folder rather than the header and footer from the root folder on the site. Extensibility. Zope is easily extensible. More advanced users can create new kinds of Zope objects, either by writing new Zope add-ons in Python or by building them completely through the Web. There are a set of Zope add-on products available on the Zope Corporations website that provide features like drop-in Web discussion topics, desktop data publishing, XML tools and e-commerce integration. Many of these products have been written by the highly active members of the Zope community, and most are also open source. To illustrate how active this community is, one only needs to take a look at the 757 Zope free products listed on Zopes website [ZOP03a] (date: July 9 th 2003)! 3.4 Zope Architecture Zope's fundamental components are shown in Figure 3. Zserver. Zope comes with a built-in web server that serves content to users. This web server also serves Zope content via FTP, WebDAV, and XML-RPC (a remote procedure call facility). Web server. In case one already has an existing web server, such as Apache or Microsoft IIS and one does not wish to use Zope's, Zope can be set up to work with an existing web server. Zope works with any other web server that supports the Common Gateway Interface (CGI). Zope core This is the engine, which coordinates everything, driving the management interface and object database. Object database. All objects are stored in Zope's object database.

PAGE 65

53 Relational database. Not all information has to be stored in Zope's object database. Zope works with other relational databases such as Oracle, PostgreSQL, Sybase, MySQL and others. File system. Zope works with documents and other files stored on the server's file system. ZClasses. Zope allows site managers to add new object types to Zope using the Zope Management Interface. ZClasses are these kinds of objects. Products. Zope also allows site managers to add new object types to Zope by installing "Product" files on their Zope server's file system. 3.5 Object Orientation in Zope As mentioned in the Fundamental Concepts Section above, Zope is an object-oriented development environment. Therefore, we need to explain attributes, methods, classes, and inheritance to gain full understanding of Zope. This chapter provides an overview of the fundamentals of object orientation from the perspective of a Zope developer. Objects. In an object-oriented application, programs designed around objects. Objects are self-contained "bundles" of data and logic. Both data and code are stored in one or more objects, each of which represents a particular "thing. In Zope, the Control_Panel is an object, Folders which one creates are objects, and even the Zope "root folder" is an object. When one uses the Zope "add list" to create a new item in the Zope Management Interface, one creates an object. People who extend Zope by creating Products define their own types of objects which are then entered in to the Zope "add list, allowing one to create objects from them. A product author might define a "Form"

PAGE 66

54 object or a "Weblog" object. Basically, anything that can be described using a noun can be modeled as an object. Figure 3 Zope Architecture Attributes. The data of an object is defined by its attributes. Typically, an object uses attributes to store elements that describe it. The attributes assigned to an object define the object's state. Properties in Zope are special kinds of web-editable object attributes.

PAGE 67

55 Methods. Methods define the set of actions that an object may perform. They are code definitions attached to an object, which typically perform an action based on the attributes belonging to the object on which the method is defined. Some objects in Zope are actually called "methods. For example, there are DTML Methods, SQL Methods, and External Methods. They are "bound" to their containing Folder object by default when called, and the logic that they contain normally makes reference to their containing Folder. Classes and instances. A class defines an object's behavior and acts as a constructor for an object. The objects that are constructed by a class are the instances. As an example, there could be a Research folder with an id attribute of Research, while another folder may have an id attribute of MyFolder, but they are both instances of the same class, and therefore behave identically. All of the objects that one deals with using the Zope management interface are instances of a class. Typically, if the class did not come by default with Zope, then it was defined in Zope Products, which are created by Zope developers and community members. Inheritance. Sometimes it is desirable for objects to share the same essential behavior, except for small deviations from each other. In Zope, inheritance is used extensively. For example, the Zope Image class inherits its behavior from the Zope "File" class, because images are really just another kind of file, and they share many behavior requirements. But the Image class adds a bit of behavior which allows it to render itself by printing an HTML tag instead of causing a file download. It does this by overriding the index_html method of the File class.

PAGE 68

56 Object lifetimes. Object instances have a specific lifetime. Either a programmer or a user of the system in which the objects live typically controls this lifetime. Instances of web-manageable objects in Zope like Files, Folders, DTML Methods, and such have a lifetime of from when a user creates them until she deletes them. These kinds of objects are also described as persistent objects. They are stored in the ZODB. Other object instances have different lifetimes. There are object instances in Zope, which last for a "programmer-controlled" period of time. For instance, the object that represents a web request in Zope (also called REQUEST), has a well-defined lifetime. Its lifetime lasts from the moment that the object publisher receives the request from a remote browser until the response is sent back to that browser. It is then destroyed automatically. Zope "session data" objects have another well-defined lifetime. These objects last from the time that a programmer creates one on behalf of the user via his code until the system (on behalf of the programmer or site administrator) deems it necessary to throw away the object in order to conserve space or indicate an "end" to the user's session. This is defined by default as 20 minutes of "inactivity" by the user for whom the object was created. 3.6 Zope Management Interface Upon logging in to Zope over a web browser, one is presented with the Zope Management Interface (ZMI). The ZMI is a management and development environment that allows users to control Zope, manipulate Zope objects, and develop web applications. The ZMI represents a view into the Zope object hierarchy. Almost every link or button in the ZMI represents an action that is taken against an object. Objects can be dropped in anywhere in the object hierarchy. Site managers can work with their objects

PAGE 69

57 by clicking on tabs that represent different "views" of an object. These views vary depending on the type of object. A "DTML Method" Zope object, for example, has an "Edit" tab which allows one to edit the document's source, while a "Database Connection" Zope object provides views that let one modify the connection string or caching parameters for the object. All objects also have a "Security" view that allows one to manage access control settings for that object. The Zope management interface is broken into three frames: The left frame is called the Navigator Frame. The user can navigate around Zope much like he would navigate around a file system with a file manager like the Windows Explorer. In this frame one sees the root folder and all of its subfolders. The root folder is in the upper left corner of the tree. The root folder is the "top" of Zope. Everything in Zope lives inside the root folder. Above the folder tree Zope shows login information in a frame (called Status Frame), i.e. which user is presently logged in. To manage a folder, the user must click on it and it will appear in the right-hand frame of the browser window. This frame is called the Workspace Frame. The workspace gives information about the current object, and lets one change it. Across the top of the screen are a number of tabs. Each tab takes the user to a different view of the current object. Each view lets the user perform a different management function on that object. 3.7 Zopes Scripting Languages 3.7.1 Python So far, we have made a distinction between logic, content, and style. This Section explains in more detail how this distinction is achieved in Zope. What is the difference between Logic and Style? Style formats and displays information, whereas Logic provides those actions which change objects, send messages, test conditions and respond to events. With Zope, style is handled with DTML or Page Templates, and logic is handled with Python scripts. Zope Script objects are objects that encapsulate a small chunk of code written in a programming language. Script objects first appeared in Zope 2.3 and are now the

PAGE 70

58 preferred way to write programming logic in Zope. Currently, Zope comes with Python-based Scripts, which are written in the Python language. There is a third-party extension to Zope, which allows users to write Perl-based Scripts in the Perl language. However, support for Perl based scripts has almost vanished, and products for this area are not actively under development any more. Python code comes in two variants for the Zope framework: Python Scripts and External Methods. Python scripts. Python, a general purpose scripting language, can be used to control Zope objects and perform other tasks. These Scripts give general purpose programming facilities within Zope. To create a Python-based Script one needs to choose Script (Python) from the Product add list in the Zope Management Interface. External methods. An External Method executes Python code like a Python Script does. However, this code is not stored in the ZODB but in a Python source file in the file system. As the file system is considered much safer than the web-editable ZODB, external methods are not restricted by Zope's security system. They can access the complete Python library, all Zope packages and modules and any attribute in objects, even private ones. Sometimes the security constraints imposed by scripts, DTML, and ZPT are too strict. This could be the case when, for example, one wants to read files from disk, or access the network, or use some advanced libraries for things like regular expressions or image processing. External Methods would be used in these cases. To create and edit External Methods the file system needs to be accessed. This makes editing these scripts more cumbersome since they cannot be edited right in a web

PAGE 71

59 browser. However, requiring access to the server's file system provides an important security control. If a user has access to a server's file system they already have the ability to harm Zope. So by requiring that unrestricted scripts be edited on the file system, Zope ensures that only people who are already trusted have access. External Method code is created and edited in files on the Zope server in the Extensions directory. This directory is located in the top-level Zope directory. To add an External Method in Zope, one needs choose External Method from the product add list in the Zope Management Interface. Calling Python scripts. There are two general ways to call a script and provide it with a context: by visiting a URL, and by calling the script from another script or template. The following Section explains how a Python Script is called by visiting a URL or from another script. The following Sections about DTML and Zope Page Templates detail how a Python Script is called, respectively. Calling Scripts from the web. A script can be called directly with a web browser by visiting its URL. A single script can be called on different objects by using different URLS. This works because Zope can determine the script's context by URL. This is a powerful feature that enables users to apply logic to objects like documents or folders without having to embed the actual code within the object. To call a script on an object from the web, one needs to visit the URL of the object, followed by the name of the script. This places the script in the context of your object. To call the add script on the Professor object inside the root folder one would visit the URL Professor/add.

PAGE 72

60 Arguments can be passed to a URL, too. They are appended as standard query strings: http://zope:8080/Professor/add?name=Schneider Calling Python scripts from a Python script. Calling scripts from other Python or Perl scripts works the same as calling scripts from DTML, except that script parameters must always be passed calling a script from Python. For example, here is how the updateInfo script might be called from within a Python script: newName='Schneider' context.update(name=newName, email="mschneid@cise.ufl.edu"). The context variable is used to tell Zope to find updateInfo by acquisition. 3.7.2 DTML DTML (Document Template Markup Language) is a templating facility, which supports the creation of dynamic HTML and text. It belongs to the family of a server-side scripting languages. This means that Zope executes DTML commands at the server, and the result of that execution is sent to the web browser. By contrast, client-side scripting languages like JavaScript are not processed by the server, but are rather sent to and executed by the web browser. DTML is used for scripting in two types of Zope objects, DTML Documents and DTML Methods. DTML is typically used in Zope to create dynamic web pages. For example, one might use DTML to create a web page, which "fills in" rows and cells of an HTML table contained within the page from data fetched out of a database. DTML is a tag-based presentation and scripting language. This means that tags (e.g. '') embedded in the HTML code cause parts of the page to be replaced with "computed" content. Typically, DTML is mixed with HTML as follows

PAGE 73

61

Hello World!

. The above DTML methods standard_html_header and standard_html_footer are either DTML documents or DTML methods. They would, in turn contain a mixture of DTML and HTML. The resulting page consists of the generated HTML only. The basic idea is that DTML Methods can act as templates tying reusable bits of content together into dynamic web pages. DTML is similar in function to "HTML-embedded" scripting languages such as JSP, ASP and PHP. It differs from these facilities by not allowing users to create "inline" Python statements (if... then.. else..) in the way that JSP or PHP will allow embedding a block of their respective language's code into an HTML page. DTML provides flow control and conditional logic by way of "special" HTML tags (, , ). It can also be compared to the web server facility of Server Side Includes (SSI), but with far more features and flexibility. Zope has a technology named Zope Presentation Templates, which has purpose similar to DTML. They are presented further in the next Section. DTML and ZPT are both scripting languages which allow users to create dynamic HTML. However, DTML is capable of creating dynamic text, which is not HTML, while ZPT is limited to creating text which is HTML (or XML). DTML also allows users to embed more extensive "logic" in the form of conditionals and flow-control than does ZPT. While the source to a ZPT page is almost always "well-formed" HTML through its lifetime, the source to DTML pages are not guaranteed to be "well-formed" HTML, and thus do not play well in many cases with external editing tools such as FrontPage or Dreamweaver.

PAGE 74

62 Calling Python scripts from DTML. Python scripts are called from DTML with the call tag. For example: . DTML will call the scriptName script, whether it is implemented in Perl, Python, or any other language. Other DTML objects and SQL Methods would be called the same way. If the scriptName script requires parameters, one can simply pass in any variables that are valid in the current DTML namespace. For example, if newName and newEmail are defined using , the variables can be passed as parameters like this: . 3.7.3 Zope page templates Page Templates are a web page generation tool. They help programmers and designers collaborate in producing dynamic web pages for Zope web applications. Designers can use them to maintain pages without having to abandon their layout tools. The goal of Page Templates is to allow designers and programmers to work together easily. A designer can use a WYSIWYG HTML editor to create a template, then a programmer can edit it to make it part of an application. If required, the designer can load the template back into his editor and make further changes to its structure and appearance. By taking reasonable steps to preserve the changes made by the programmer, the designer will not disrupt the application. Page Templates aim at this goal by adopting three principles: 1. Play nicely with editing tools. 2. What you see is very similar to what you get. 3. Keep code out of templates, except for structural logic. A Page Template is like a model of the pages that it will generate. In particular, it is a valid HTML page.

PAGE 75

63 Page Templates use the Template Attribute Language (TAL). TAL consists of special tag attributes. For example, a dynamic page title might look like this: Page Title. The tal:content attribute is a TAL statement. The name content indicates that it will set the text contained by the title tag, and the value "here/title" is an expression providing the text to insert into the tag. Since it has an XML namespace (the tal: part) most editing tools will not complain that they do not understand it, and will not remove it. It will not change the structure or appearance of the template when loaded into a WYSIWYG editor such as FrontPage or a web browser. This makes TAL quite unique, when compared to other scripting languages. Most popular scripting languages such as ASP, PHP, JSP, and CGI/Perl modify the HTML document in a way that a traditional HTML editor cannot correctly display it. This immediately means that design and content are not clearly separated any more. All TAL statements consist of tag attributes whose name starts with tal: and all TAL statements have values associated with them. The value of a TAL statement is shown inside quotes (e.g., here/title). To the HTML designer using a WYSIWYG tool, the dynamic title example is perfectly valid HTML, and shows up in their editor looking like a title should look like. In other words, Page Templates play nicely with editing tools. This example also demonstrates the principle that "What you see is very similar to what you get. When the template is viewed in an editor, the title text will act as a placeholder for the dynamic title text. The template provides an example of how generated documents will look.

PAGE 76

64 When this template is saved in Zope and viewed by a user, Zope turns the dummy content into dynamic content, replacing "Page Title" with whatever "here/title" resolves to. In this case, "here/title" resolves to the title of the object to which the template is applied. This substitution is done dynamically, when the template is viewed. 3.7.3.1 Path Expressions In the above example, here/title is a path expression. There are many other types of path expressions define by the TALES (TAL Expression Syntax) specification. The here/title path expression in the above example fetches the title property from the object to which the template is applied. Another common path expression is container/objectIds, which returns a list of Ids of the objects in the same folder as the template. Every path expression starts with a variable name. To get to sub-objects or properties, one has to add a slash (/) at the end of the variable name. In the following, some basic tal tags are explained. tal:replace. Zope replaces the entire tag with the value of the path expression. For example, would evaluate to the title being displayed in the normal format, not bold, because the entire tag was replaced. To place dynamic text inside of other text, one would usually use tal:replace on a span tag rather than on a bold tag. For example the code: The URL is http://www.example.com. would translate to (assuming that the id of the Page Template containing the line of code is simple_page):

PAGE 77

65 The URL is http://localhost:8080/simple_page. This is because the span tag is structural, not visual. tal:content. If the goal is to insert text into a tag but leave the tag itself alone, one would use the tal:content statement. To set the title of a page to the template's title property, one would write: The Title . Assuming that the title of the page template is Simple Page, the source of the rendered page would then be: Simple Page . As opposed to the tal:replace tag, the tag was not removed, it is only the content of the tag that has changed. tal:repeat. The repeat statement is used to generate loops. To illustrate with an example, repeat could be used to generate a list of the objects that are in the same folder as the template. One could create a table that has columns for the id and title of each object as follows: <table border="1" width="100%"> <tr> <th>Id</th> <th>Title</th> </tr> <tr tal:repeat="item container/objectValues"> <td tal:content="item/getId">Id</td> <td tal:content="item/title">Title</td> </tr> </table>. The tal:repeat statement on the table row means repeat this row for each item in the container's list of object values. The repeat statement puts the objects from the list into the item variable one at a time (item is called the repeat variable) and makes a copy <br /> <br /> PAGE 78<br /> <br /> 66 of the row using that variable. The value of item/getId in each row is the Id of the object for that row, and likewise item/title. The above could would for example translate to: <table border="1" width="100%"> <tr> <th>Id</th> <th>Title</th> </tr> <tr> <td>acl_users</td> <td>User Folder</td> </tr> <tr> <td>images</td> <td></td> </tr> <tr> <td>cise</td> <td></td> </tr> </table>. One can use any name for the repeat variable (item is only an example), as long as it starts with a letter and contains only letters, numbers, and underscores (_). The repeat variable is only defined in the repeat tag. If trying to access it above or below the tr tag one will get an error. tal:condition. This tag is useful for dynamically querying the environment and selectively inserting text depending on some condition. A tal:condition statement leaves the tag and its contents in place if its expression has a true value, but removes them if the value is false. Zope considers the number zero, a blank string, an empty list, and the built-in variable nothing to be false values. Nearly every other value is true, including non-zero numbers, and strings with anything in them, including spaces. tal:attributes. The tal:attributes tag replaces an attribute of an HTML tag with another value. A common use of this is to change links in <a href> statements. The following code: <a href="link" tal:attributes="href request/URL">Link</a> <br /> <br /> PAGE 79<br /> <br /> 67 would replace the link with the URL of the request, for example: <a href="http://rain.cise.ufl.edu:8080">Link</a>. tal:define. The tal:define attribute lets programmers define their own variables. One reason for doing so is to avoid having to write long expressions repeatedly in a template. Another is to avoid having to call expensive methods repeatedly. One could define a variable once within an element on a tag and then use it many times within elements which are enclosed by this tag. For example, this define statement declares a list as a variable and later tests it and repeats over it: <ul tal:define="items container/objectIds" tal:condition="items"> <li tal:repeat="item items"> <p tal:content="item">id</p> </li> </ul>. The tal:define statement creates the variable items, which can then be used anywhere inside the ul element. The first statement assigns the variable items and the second uses items in a condition to see whether it is false (in this case, an empty sequence) or true. If the items variable is false, then the ul element (and everything contained in the <ul>..</ul> tags) is not shown. The items variable in the above example is only visible from the beginning of the <ul> tag to its closing tag. By placing the keyword global in front of the variable name in combination with the span tag, one can make the definition last from the span tag to the bottom of the template: <span tal:define="global items container/objectIds"></span>. <br /> <br /> PAGE 80<br /> <br /> 68 3.7.3.2 Calling Python scripts from Page Templates There are two ways of calling a Python script from within a ZPT. The quick way is to call a script through the tal:define tag, for example: <span tal:define="dummy here/scriptName"/>. This example calls the scriptName method and assigns the result to the dummy variable. In a page template, here refers to the current context. It behaves much like the context variable in a Python-based Script. In other words, scriptName will be looked up by acquisition. If the script that is being called requires arguments, one must use a TALES python expression like so: <div tal:replace="python:here.scriptName(param='one')" />. Just as in Path Expressions, the here variable refers to the acquisition context the Page Template is called in. The python expression above is exactly like a line of code one might write in a Python Script. The only difference is the name of the variable used to get the acquisition context. Unfortunately, the different names used in ZPT and Python Scripts (context and here) evolved independently. The ZPT variable here is planned to become context in a future version of Zope, probably Zope 3. Another way of calling a script is through using a common pattern called the "form/action/response pattern. The form and response should be Page Templates and the action should be a script. The form template gathers the input and calls the action script. The action script should process the input and return a response template. This pattern is more flexible than the form/action pattern since it allows the script to return any of a number of different response objects For example here's a part of a form template: <br /> <br /> PAGE 81<br /> <br /> 69 <form action="action"> <input type="text" name="name"> <input type="text" name="age:int"> <input type="submit"> </form>. This form could be processed by this script: ## Script (Python) "action" ##parameters=name, age ## container.addPerson(name, age) return container.responseTemplate(). This script calls a method to process the input (addPerson) and then returns another template, the response (responseTemplate). One can render a Page Template from Python by calling it. The response template typically contains an acknowledgment that the form has been correctly processed. The action script can do all kinds of things. It can validate input, handle errors, send email, etc. Here is a sketch of how to validate input with a script: ## Script (Python) "action" ## if not context.validateData(request): # if there's a problem return the form page template # along with an error message return context.formTemplate(error_message='Invalid data') # otherwise return the thanks page return context.responseTemplate(). This script validates the form input and returns the form template with an error message if there's a problem. One can pass Page Templates extra information with keyword arguments. The keyword arguments are available to the template via the options built-in variable. So the formTemplate in this example might include a section like this: <span tal:condition="options/error_message | nothing"> Error: <b tal:content="options/error_message"> Error message goes here. </b></span>. <br /> <br /> PAGE 82<br /> <br /> 70 This example shows how to display an error message that is passed to the template via keyword arguments. The expression | nothing is used to handle the case where no error_message argument has been passed to the template. 3.7.3.3 Macros One important feature of Page Templates is the ability to reuse look and feel elements across many pages. With DTML, one can achieve so by inserting DTML methods such as the standard_html_header and the standard_html_footer. ZPT offers this functionality, but in a slightly different way. With Page Templates, one can create sites with a standard look and feel. No matter what the "content" of a page, it will have a standard header, sidebar, footer, and/or other page elements. This is a very common requirement for websites. The utility for reusing presentation elements across pages is called macros. Macros define a section of a page that can be reused in other pages. A macro can be an entire page, or just a chunk of a page such as a header or footer. After defining one or more macros in one Page Template, they are used in other Page Templates. Defining macros. Macros are defined with tag attributes similar to TAL statements. Macro tag attributes are called Macro Expansion Tag Attribute Language (METAL) statements. Here's an example macro definition: <b metal:define-macro="copyright"> Copyright 2003, <em>Rima Gerhard</em>. </b> This metal:define-macro statement defines a macro named copyright. The macro consists of the b element (including all contained elements). Macros defined in a Page Template are stored in the template's macros attribute. They are then used from other Page Templates by referring to them through the macros <br /> <br /> PAGE 83<br /> <br /> 71 attribute of the Page Template in which they are defined. For example, suppose the copyright macro is in a Page Template called master_page. Here is how to use copyright macro from another Page Template: <hr> <p metal:use-macro="container/master_page/macros/copyright"> Macro goes here </p>. In this Page Template, the p element will be completely replaced by the macro when Zope renders the page: <hr> <b> Copyright 2003, <em>Rima Gerhard</em>. </b>. If the macro changes (in the above example, if the copyright holder changes) then all Page Templates that use the macro will automatically reflect the change. Zope handles macros first when rendering Page Templates. Then Zope evaluates TAL expressions. For example, consider this macro: <p metal:define-macro="title" tal:content="template/title"> template's title </p>. When using this macro it will insert the title of the Page Template in which the macro is used, not the title of the template in which the macro is defined. In other words, when using a macro, it's like copying the text of a macro into a template and then rendering the template. When checking the Expand macros when editing option on the Page Template Edit view, then any macros will be expanded in the template's source. When editing in the ZMI, rather than using a WYSIWYG editing tool, it is more convenient not to expand macros when editing. This is the default for newly created templates. When using <br /> <br /> PAGE 84<br /> <br /> 72 WYSIWYG tools, however, it is often desirable to have the macros expanded in order to edit a complete page. Slots. Macros are much more useful when one has the option to override parts of them when using them. This can be done by defining slots in the macro that can be filled in when the template is used. For example, the following sidebar macro: <div metal:define-macro="sidebar"> Links <ul> <li><a href="/">Home</a></li> <li><a href="/research">Research</a></li> <li><a href="/projects">Projects</a></li> <li><a href="/contact">Contact Us</a></li> </ul> </div> can be extended by including some additional information in the sidebar on some pages. One way to accomplish this is with slots: <div metal:define-macro="sidebar"> Links <ul> <li><a href="/">Home</a></li> <li><a href="/research">Research</a></li> <li><a href="/projects">Projects</a></li> <li><a href="/contact">Contact Us</a></li> </ul> <span metal:define-slot="additional_info"></span> </div>. When using this macro the slot can be filled like so: <b metal:use-macro="container/master.html/macros/sidebar"> <p metal:fill-slot="additional_info"> Please visit our <a href="/labs">labs</a>. </p> </b>. When rendering this template the side bar will include the extra information that was provided in the slot: <div> Links <ul> <li><a href="/">Home</a></li> <li><a href="/research">Research</a></li> <li><a href="/projetcs">Projects</a></li> <li><a href="/contact">Contact Us</a></li> </ul> <p> Please visit our <a href="/labs">labs</a>. </p> </div>. <br /> <br /> PAGE 85<br /> <br /> 73 A common use of slot is to provide default presentation, which can be customized. In the slot example in the last section, the slot definition was just an empty element. However, default presentation can be provided in a slot definition. For example, consider this revised sidebar macro: <div metal:define-macro="sidebar"> <div metal:define-slot="links"> Links <ul> <li><a href="/">Home</a></li> <li><a href="/research">Research</a></li> <li><a href="/projects">Projects</a></li> <li><a href="/contact">Contact Us</a></li> </ul> </div> <span metal:define-slot="additional_info"></span> </div>. Now the sidebar is fully customizable. The links to redefine the sidebar links. However, if one chooses not to fill that slot then one will get the default links, which appear inside the slot. This technique can be taken further by defining slots inside of slots. Following is a sidebar macro that defines slots within slots: <div metal:define-macro="sidebar"> <div metal:define-slot="links"> Links <ul> <li><a href="/">Home</a></li> <li><a href="/products">Products</a></li> <li><a href="/support">Support</a></li> <li><a href="/contact">Contact Us</a></li> <span metal:define-slot="additional_links"></span> </ul> </div> <span metal:define-slot="additional_info"></span> </div>. If one wishes to customize the sidebar links one could either fill the links slot to completely override the links, or one could fill the additional_links slot to insert some extra links after the default links. Slots can be nested as deeply as desired. <br /> <br /> PAGE 86<br /> <br /> 74 Whole page macros. <html metal:define-macro="page"> <head> <title tal:content="here/title">The title

This is the body.

Copyright 2003 Rima Gerhard

. The above macro defines a page with two slots, and This macro can be used in templates for different types of content, or different parts of a site. For example here is how a template for research items might use this macro:

This page contains information about research conducted here.

. The above template redefines the body slot to contain information about a research project. The powerful thing about this approach is that one can now change the page macro and the research item template will be automatically updated. For example one could put the body of the page in a table and add a sidebar on the left and the research item template would automatically use these new presentation elements. This is a much more flexible solution to control page look and feel than the DTML standard_html_header and standard_html_footer solution.

PAGE 87

75 3.7.4 DTML vs. ZPT DTML can do things that Page Templates cannot, such as dynamically generate email messages (Page Templates can only generate HTML and XML), and so DTML is not a "dead end. The Zope Corporation website states, however, that it is probable that Page Templates will be used for almost all HTML/XML presentation by Zope Corporation and many members of the Zope community have abandoned DTML to work with ZPT instead. The Zope mailing list agreed that iputting logic in tag-attributes is such a good idea that it can be found in Java tag-libs and in the .NET framework. The language chosen for this project is therefore ZPT. 3.8 Connecting to a relational database with Zope 3.8.1 Difference between ZODB and a relational database The Zope Object Database (ZODB) is used to store all the pages, files, and other objects users create. It is fast and requires almost no setting up or maintenance. Like a file system, it is especially good at storing moderately sized binary objects such as graphics. Relational Databases work in a very different way. They are based on tables of data. Information in the table is stored in rows. The table's column layout is called the schema. A standard language, called the Structured Query Language (SQL) is used to query and change tables in relational databases. Relational databases and object databases are very different and each possesses its own strengths and weaknesses. Zope allows users to use either, providing the flexibility to choose the storage mechanism, which is best for the data. The most common reasons

PAGE 88

76 to use relational databases are to access an existing database or to share data with other applications. Most programming languages and thousands of software products work with relational databases. By using relational data with Zope we can retain all of Zope's benefits including security, dynamic presentation, and networking. The database we have used in our implementation is Oracle 9i. Oracle is arguably the most powerful and popular commercial relational database. A database can only be used if a Zope Database Adapter is available. We have used the DCOracle2 package from the Zope Corporation [KRO03]. 3.8.2 Z SQL Methods Z SQL Methods are Zope objects that execute SQL code through a Database Connection. Z SQL Methods can both query and change database data. Z SQL Methods can also contain more than one SQL command. A ZSQL Method has two functions: it generates SQL to send to the database and it converts the response from the database into an object. The characteristics of ZSQL methods are as follows: Generated SQL will take care of special characters that may need to be quoted or removed from the query. This speeds up code development. Results from the query are packaged into an easy to use object, which will make display or processing of the response very simple. Transactions are mediated (Transactions are discussed in more detail in Section 3.8.4). Examples of ZSQL methods. ZSQL methods can be used to query, update, or delete from the database. Examples of these operations are ZSQL methods containing the following body:

PAGE 89

77 Q1(list_all_research): select from Research Q2(insert_research): insert into Research (res_id, area, title, lab_id) values (, , , ) Q3(delete_research): delete from Research where res_id = Queries Q2 and Q3 take arguments. Just like Scripts, Z SQL Methods can take arguments. Arguments are used to construct SQL statements. Q2 and Q3 contain DTML that is evaluated when the method is called. This DTML can be used to modify the SQL code that is executed by the relational database. One way of providing the arguments is through calling a Z SQL Method without arguments from DTML or ZPT; the arguments are then automatically collected from the REQUEST. The other way is that Z SQL Methods can also be called with explicit arguments from DTML or Python (e.g., ). Yet another possibility of getting arguments is through Zopes mechanism of acquisition. Querying a relational database returns a sequence of results. The items in the sequence are called result rows. SQL query results are always a sequence. Even if the SQL query returns only one row, that row is the only item contained in a list of results. Somewhat predictably, as Zope is object oriented, SQL methods return a Result object. All the result rows are packaged up into one object. For all practical purposes, the result object can be thought of as rows in the database table that have been turned into Zope objects. These objects have attributes that match the schema of the database result.

PAGE 90

78 Result objects can be used from DTML to display the results of calling a Z SQL Method. For example, one might add a new DTML Method called listResearch with the following DTML content:
  • : , in the area of has a lab with ID
  • . This method calls the list_all_research Z SQL Method from DTML. The in tag is used to iterate over each Result object returned by the list_all_research Z SQL Method. The body of the in tag is a template that defines what gets rendered for each Result object in the sequence returned by list_all_research. In the case of a table with three research fields in it, listResearch might return HTML that looks like this, where the in tag rendered an HTML list item for each Result object returned by list_all_research.
  • 1: Spatio-temporal data modeling, in the Area of Database and Information Systems has a lab with ID 3.
  • 2: Knowledge Management, in the Area of Database and Information Systems has a lab with ID 4.
  • 3: Data Warehousing, in the Area of Database and Information Systems has a lab with ID 4.
  • An important difference between result objects and other Zope objects is that result objects are not persistent. They do not get created and permanently added to Zope. They exist for only a short period of time; just long enough for you to use them in a result page or to use their data for some other purpose. As soon as one is done with a request that uses result objects they go away, and the next time one calls a Z SQL Method one gets a new set of fresh result objects.

    PAGE 91

    79 In summary, the concept of dividing the database access from the HTML design template as declared in ZPT or DTML allows us to neatly differentiate between style and content, one of the goals of website development as declared in Chapter 2. 3.8.3 Caching Another functionality Zope provides in the area of relational database connectivity is caching results. Users can increase the performance of SQL queries with caching. Caching stores Z SQL Method results so that if users call the same method with the same arguments frequently, they will not have to connect to the database every time. Depending on the application, performance can be improved through caching. Zope users can manually edit the Maximum number of rows received field, which controls how much data to cache for each query. The Maximum number of results to cache field controls how many queries to cache. The Maximum time (in seconds) to cache results controls how long cached queries are saved for. In general, the larger these values are set, the greater is the performance increase, but the more memory Zope will consume. In general, it is advised to set the maximum results to cache to just high enough and the maximum time to cache to be just long enough for an application. For site with few hits one should cache results for longer, and for sites with lots of hits one should cache results for a shorter period of time. For machines with lots of memory one should increase the number of cached results. To disable caching one needs to set the cache time to zero seconds. For most queries, the default value of 1000 for the maximum number of rows retrieved will be adequate. For extremely large queries one may have to increase this number to retrieve all results.

    PAGE 92

    80 3.8.4 Transactions A transaction is a group of operations that can be undone all at once. As was mentioned in Section 3.4, all changes done to Zope are done within transactions. Transactions ensure data integrity. When using a system that is not transactional and one web actions changes ten objects, and then fails to change the eleventh, then data is now inconsistent. Transactions allow us to revert all the changes made during a request if an error occurs. Most commercial and open source relational databases support transactions. If the relational database supports transactions, Zope will make sure that they are tied to Zope transactions. This ensures data integrity across both Zope and the relational database. It is guaranteed that operations in this transaction are either all performed or none are performed even if these operations use a mix of Zope Object Database and external relational database.

    PAGE 93

    CHAPTER 4 REQUIREMENTS ANALYSIS In this chapter, project-relevant information gathered during an analysis phase is gathered. 4.1 Functional Requirements The functional requirements for this system are: 4. The new website should be based on widely spread and reliable web techniques such that most browsers can access the site. 5. The new website embedded in the CMS must adhere to the COE and UF Webadmin standards. 6. The data and the graphical user interface should be separated. This way, alternative front ends could be used and the DBMS could be exchanged. 7. Faculty members and other appointed staff should have the option to access certain areas of the site and create content. 8. Administrative tasks such as adapting the design and content and updating and maintaining the database shall be possible without further knowledge of a markupor programming language. 9. The database should be accessible over an easy-to-use graphical interface, providing forms for adding, updating, and deleting data in the database tables. Furthermore, there shall be forms for creating new tables in table. 10. The database transactions must be secure and the application should have multi-user functionality. 11. The application should be easily extendible (e.g., adding a calendar of events, a forum, etc.) The list of requirements proves that Zope is a good fit: as far as the first functional requirement is concerned, Zope allows for any kind of HTML code and client-side scripting languages (e.g., JavaScript, CSS, Frames, etc.). All static HTML is rendered as usual, Zope simply interprets any existing DTML code or Python Scripts and inserts the result in the HTML page. The third requirement is fulfilled within Zope through the use of style sheets and DTML methods or ZPT macros that can be included to build a page. The fourth 81

    PAGE 94

    82 requirement is also simplified with Zope since comes with a set of elaborate authentication and authorization mechanisms. Authentication means finding out who someone is, and authorization means determining what that someone can do. Zope provides separate facilities to manage the processes of identifying users and granting access to controlled actions. Zope is also able to handle transactions, which ensure data integrity. Zope transaction boundaries are demarcated by a single request. Zope will integrate with third party RDBMS that support transactions, by acting as a transaction authority via a two-phase-commit protocol, such that if Zope's transaction succeeds the RDBMS will commit. As far as requirement 8 is concerned, the extensibility of Zope is obvious since it offers a number of prefabricated extensions on the website. We have tested some of the available products and have found the installation process straightforward. This said, problems were encountered but the Zope mailing lists have always provided immediate feedback and help. We note that the functional requirements to not impose one single DBMS to use (Zope can be set up with Oracle, MySQL, postreSQL and many more). We could have therefore made the decision to store all data within the Z Object Database that comes with Zope. However, requirement 3 dictates that an RDBMS is preferable in case the DBMS is exchanged. 4.2 Non-Functional Requirements 1. A flexible database schema that allows for further changes and additions. 2. Consideration of data security. 3. Clear, and simple user interface for the maintenance staff. 4. Platform-Independence: the application should be available under any operating system, on any machine.

    PAGE 95

    83 CISE staff assigned with maintaining the CISE website are not necessarily a professional in the area of PCs and the Internet. Therefore, the GUI should have a simple, and clear layout. Since the application is web based, pure HTML is preferable to many graphical elements and strong usage of JavaScript. This is also important when we consider that the application should be compatible to all browser types (requirement 4). It might be the case that the maintenance person uses uncommon browsers (such as Mozilla or Opera or even old versions of Netscape or the Internet Explorer) or has strong security settings that disable Java/JavaScript/Cookies.

    PAGE 96

    CHAPTER 5 IMPLEMENTATION 5.1 Software and Hardware Specifications This Chapter details the specific hardware and software used for the implementation. First, the hardware is listed. Then, the software needed for the project, especially some add-on Zope products, is given. The development environment is the rain server of the CISE Department. It was manufactured by Sun Microsystems and the operating system distribution is Solaris 8 SPARC. Additionally, we are using the orcl Oracle 9i database instance. We have migrated to this instance after the department decided to deprecate the old oradb 8i instance. Zope resides in the research disk space /cise/research/SpaceTimeUncertainty/workspace/rima/. The version of Zope used for this project is Zope 2.6.0 Solaris 2.8 sparc. This was the current stable release at the time the project started. Ever since, a new version of Zope (2.6.1) can be downloaded from the Zope website [ZOP03a]. As far as Zope specific software is concerned (e.g., products), the following installations were added to the basic Zope installation: To connect to the Oracle database, it was necessary to install a database adaptor. The appropriate Oracle database adapter is DCOracle2 [KRO03]. The Photo Product [BIC03] was installed in order to be able to upload pictures and have certain photo versions created automatically. The Photo Product creates several version of an image, e.g. a thumbnail version, or an xsmall/small/medium/large/xlarge version. 84

    PAGE 97

    85 To use the Photo product, the Image Magick [IMA03] had to be installed as well. ImageMagick is a set of tools and libraries to read, write, and manipulate an image in many image formats including popular formats like TIFF, JPEG, PNG, PDF, PhotoCD, and GIF. ImageMagick can resize, rotate, sharpen, color reduce, or add special effects to an image. Version 5.5.7 was used. The ZStyleSheet Product was installed and tested [HAQ03]. It was used throughout the dtml-based implementation of the project, but after the switch to ZPT, its use was discontinued. However, the product still resides in Zope and could be used for future projects. All products except for Image Magick mentioned above reside in the /lib/python/Products directory of the Zope installation. Image Magick is installed under /cise/research/SpaceTimeUncertainty/workspace/rima. Zope comes with its own web server (as described in Chapter 3). Currently, this is the web server used for the website. It is listening to port 8080 on the rain server. Zope can also be set up to listen to the standard port 80. 5.2 Database Design The database ER diagram is shown in Figure 5-1. Not all of the entities identified in Figure 5-1 have been adapted for this project. The description of the chosen, website-relevant entities follows in alphabetical order. Administrative. This table stores information about employees of the CISE Department that work in the administrative field. This encompasses employees such as the secretaries, the graduate und undergraduate academic advisors, the graduate senior clerk as well as the graduate program assistant. A field in this table stores whether the employee is working with undergraduate students, graduate students, both, or none. The title field indicates the job title of the employee.

    PAGE 98

    86 Committees. The Committees table stores all departmental committees. The only information stored about a committee is its title and its email address, in case it exists (this field could be empty). Figure 5-1 ER diagram of CISE Department Event. Any upcoming event is stored in this table. Information about the presenter, their name, affiliation, as well as about the event itself (such as time, location, and content) are the attributes stored for an event. An event could be associated with up to one Professor, but it might not have any faculty involved with it. GradClass. The GradClass table stores general information about the graduate classes offered at CISE. It stores the title, course number, a description, the number of credit hours the class is worth, and whether the class is a core class for the CISE

    PAGE 99

    87 curriculum. The description also contains information about any prerequisites. The prerequisites might be other classes (undergraduate or graduate) or general prerequisites such as knowledge in the field of numerical analysis or proficiency in at least one programming language. OfferedGradClass. An offered graduate class stores information related to the specific instance of the graduate class. This includes the year, the semester, and a link to a web page, the class period and the room number. All of these fields could be left empty, in case the information does not exist. An offered graduate class is an instance of exactly one graduate class. Exactly one Professor can be teaching the class. OfferedUnderGradClass. Parallel to the offered graduate class, an offered undergraduate class stores information related to the specific instance of the undergraduate class. The year, the semester, a link to a web page, the class period, and the room number are stored in case they exist. An offered undergraduate class is an instance of exactly one undergraduate class. Exactly one Professor can be teaching the class. Organizations. The Organizations table stores information about the CISE related student organizations that operate at the University of Florida. The title, a link to their web page in case they have one, as well as a short description is stored for each student organization. Overall Links. This table records all links to outside web pages. Outside web pages are all web pages that are not stored on the CISE web server. For every such page, the link itself, the title, and the area that the link belongs to, are recorded.

    PAGE 100

    88 ProfCommittee. This table stores the relationship between a professor and a committee, i.e., their primary keys will appear as a tuple in this table when a professor is involved in a departmental committee. Additionally, a professor could hold a specific position in that committee (e.g., chair). Professor. The Professor table stores information about every professor teaching, researching, or otherwise active in the CISE Department. In addition to the personal and contact information such as their full name, office number, telephone number, email address, and degree, professors can enter details about their interests, which could be current or past research interests. The degree can be anything between M.S. or detailed information such as Ph.D., University of Pennsylvania, 1986. The title field holds the job title the professor holds at the CISE Department, e.g. Assistant Professor, Lecturer, etc. Finally, each professor has a password. This password is used by the professor to log in to the administrative area of the website and to update information about himself, his involvement in research and committees or the graduate/undergraduate classes that he is teaching. ProfResearch. Similarly to ProfCommittee, the ProfResearch table stores the relationship between a professor and a research area, i.e., their primary keys will appear as a tuple in this table when a professor is involved in a research area. Project. The Projects table stores all research projects that are currently active or have been active at the CISE Department. The data stored about a Project are the title, a link to a web page if existent, and a short description.

    PAGE 101

    89 Research. This table stores the research areas of the CISE Department. A research area consists of its research area name, a corresponding research lab if it exists, a link to a web page if one exists, and a short description. ResearchLab. This table stores the research labs and centers of the CISE Department. Information stored for a lab is the title, the link to a web page if there is one, and a descriptive text. A research lab can have one professor associated with it (the director of the research lab/center). Seminar. A seminar is a club or a group meeting taking place at regular intervals at the CISE Department. One Professor can be associated with it; that professor then is the coordinator of the seminar. Staff. The Staff table stores all employees of the CISE Department, whether they are work in the administrative area or the system administartion area. System. This table stores information about employees of the CISE Department that work in the system administration field. This encompasses employees such as the senior system programmer and the system maintenance staff. The title field indicates the job title of the employee. UnderGradClass. Similarly to the GradClass table, the UnderGradClass table stores general information about the undergraduate classes offered at CISE. It stores the title, course number, a description, the number of credit hours the class is worth, and whether the class is a prerequisite for a graduate class of the CISE curriculum. The description also contains information about any prerequisites for this class. The prerequisites might be other classes (undergraduate or graduate) or general prerequisites.

    PAGE 102

    90 5.3 Site Architecture 5.3.1 Folder Hierarchy One important step in the implementation of the website was to create the folder hierarchy. Since Zope maps the folder hierarchy directly to URL paths (see Chapter 3.3 for more information on this mapping is done), the hierarchy needed to be logical and also related to the schema of the underlying database. For the CISE website, the hierarchy of folders is as shown in figure 5-2 (only the first three levels are shown). Not visible in the site architecture figure below are the other folders located inside Zopes root folder. The root folder holds, among others, the Control Panel and acl_users (included by default), and the images, sql, and ciseZPT folders (included for this project). The images folder holds all images displayed throughout the site. The sql folder holds all ZSQL methods needed throughout the project. The site itself resides in the ciseZPT folder, which is in turn located inside Zopes root folder. To view the site, the required URL is http://rain.cise.ufl.edu:8080/ciseZPT. ciseZPT admin alumni dbAdmin employment events faculty graduate apply cen core courses csc

    PAGE 103

    91 das documents eng phd prereq international labs peoples projects prospective reports research seminars student_services academic_tutor_center courses sum03 organizations staff undergraduate bsms cen cis courses csc cse das minor policies sales seniors visitors Figure 5-2 Folder Hierarchy of website 5.3.2 Folder Properties Every folder in figure 5-2 has a specific function. The function is indicated by the folders properties. As in common in object-oriented programming, every object in Zope

    PAGE 104

    92 has a set of properties. Some properties are included by default, e.g. every object has a title, which could however be empty. The following properties have been defined in addition to the default folder properties: QuickLinks : ever folder that should be listed in the menu QuickLinks on the main CISE web page has the QuickLinks property (and it is set to the value true). This is the case for the folders with the IDs: employment, student_services, peoples, and events. Programs: : every folder that is included in the menu Programs on the main CISE web page has the Programs property (and it is set to the value true). This is the case for the following folders: graduate, undergraduate, faculty, visitors, and prospective. InformationFor: : ever folder that should be listed in the menu Information For on the main CISE web page has the InformationFor property (and it is set to the value true). This is the case for the folders with the Ids: international, seminars, reports, projects, labs, and research. The idea behind adding properties to some folders is that a Python script can be used to check all folders and return only the ones with the given property set. When a new folder is added to the Zope hierarchy, it can be made invisible to website visitors by not setting any properties. The Python script would then not return that particular folder. It will be shown on the website, however, when one of the above properties is added to the folder. This is convenient because a web developer doesnt have to manually include a link to a new folder (i.e., are of the site) in every HTML source code where the area is supposed to be added, but only has to set a property once. The Python script used to return folders with a given property set is shown in Code Listing 5-3. #this python script returns all folders situated in the root folder #that have a String property with a value of the parameter "property" #it does not return the calling folder itself #this script check the property def okToList(obj): if (hasattr(obj.aq_explicit,property) and (obj.getId()!='private')): return 1

    PAGE 105

    93 #this script gets all the folders in the root folder def list_top_folders(): # Find folders in the root folder with a menu_entry property objects=filter(okToList,context.getSiteRoot().objectValues()) return objects # Get list of top-level folders folder_list=list_top_folders() #construct dictionnary out = [ {'id':obj.getId(), 'obj':obj, 'url':obj.absolute_url(), 'title':obj.title_or_id() } for obj in folder_list ] return out Code Listing 5-3 Python Script getFolders When testing the Python Script with, for example, the property Programs, the script returns the following dictionary: [{'title': 'Research Areas', 'id': 'research', 'obj': , 'url': 'http://rain.cise.ufl.edu:8080/ciseZPT/research'}, {'title': 'Centers and Labs', 'id': 'labs', 'obj': , 'url': 'http://rain.cise.ufl.edu:8080/ciseZPT/labs'}, {'title': 'Projects', 'id': 'projects', 'obj': , 'url': 'http://rain.cise.ufl.edu:8080/ciseZPT/projects'}, {'title': 'Technical Reports', 'id': 'reports', 'obj': , 'url': 'http://rain.cise.ufl.edu:8080/ciseZPT/reports'}, {'title': 'Seminars', 'id': 'seminars', 'obj': , 'url': 'http://rain.cise.ufl.edu:8080/ciseZPT/seminars'}, {'title': 'International', 'id': 'international', 'obj': , 'url': 'http://rain.cise.ufl.edu:8080/ciseZPT/international'}]. As the example shows, every object has an absolute_url associated with its location within the Zope hierarchy. When the object moves to a different location, the abolute_url changes accordingly. This is convenient for web developers, since the link to a location does not have to be hard coded any more. One would simply insert a link to the abolute_url of an object, and the correct location would we resolved by Zope. Also, the above example shows that folders have an id as well as a title. The id could be short and could be not descriptive enough. Therefore, the title property was added whenever the id itself was not sufficient. This is for example the case for the research folder. The additional title Research Areas was added to clarify what type of information can be found in the folder.

    PAGE 106

    94 The following code listing illustrates the use of the python script from within a page template. The HTML code defines a table. The Python script getFolders is called to fill the rows of the table with folders that have the QuickLinks property set (see Code Listing 5-4).
    Permanent Link: http://ufdc.ufl.edu/UFE0001224/00001

    Material Information

    Title: Reimplementation of the Computer and Information Science and Engineering (CISE) department website ssing a content management system
    Physical Description: Mixed Material
    Creator: Gerhard, Rima ( Author, Primary )
    Publication Date: 2003
    Copyright Date: 2003

    Record Information

    Source Institution: University of Florida
    Holding Location: University of Florida
    Rights Management: All rights reserved by the source institution and holding location.
    System ID: UFE0001224:00001

    Permanent Link: http://ufdc.ufl.edu/UFE0001224/00001

    Material Information

    Title: Reimplementation of the Computer and Information Science and Engineering (CISE) department website ssing a content management system
    Physical Description: Mixed Material
    Creator: Gerhard, Rima ( Author, Primary )
    Publication Date: 2003
    Copyright Date: 2003

    Record Information

    Source Institution: University of Florida
    Holding Location: University of Florida
    Rights Management: All rights reserved by the source institution and holding location.
    System ID: UFE0001224:00001


    This item has the following downloads:


    Full Text











    REIMPLEMENTATION OF THE COMPUTER AND INFORMATION SCIENCE
    AND ENGINEERING (CISE) DEPARTMENT WEB SITE USING A CONTENT
    MANAGEMENT SYSTEM
















    By

    RIMA GERHARD


    A DISSERTATION PRESENTED TO THE GRADUATE SCHOOL
    OF THE UNIVERSITY OF FLORIDA IN PARTIAL FULFILLMENT
    OF THE REQUIREMENTS FOR THE DEGREE OF
    MASTER OF SCIENCE

    UNIVERSITY OF FLORIDA


    2003

































    Copyright 2003

    by

    Rima Gerhard

































    This document is dedicated to my family.















    ACKNOWLEDGMENTS

    I would like to thank Dr. Markus Schneider for being the chair of my committee

    and helping me with this thesis despite his busy schedule. I would also like to thank Dr.

    Joachim Hammer and Dr. Douglas Dankel for agreeing to serve on my committee. I

    would also like to thank Mr. John Bowers for his continuous assistance throughout my

    years in graduate school. Finally, I would like to thank my family and friends for their

    support.
















    TABLE OF CONTENTS
    Page

    A C K N O W L E D G M E N T S ................................................................................................. iv

    LIST OF TABLES .............................. ........... ... .. ...... .............. viii

    LIST OF FIGURES ......... ......................... ...... ........ ............ ix

    ABSTRACT .............. ................. .......... .............. xi

    CHAPTER

    1 IN TRODU CTION ................................................. ...... .................

    2 R E L A TE D W O R K .................................................................. ..... ....................... 4

    2.1 Web User Interface Design and Implementation .................................................5
    2.1.1 General User Interface Design Guidelines .............. ........... ................6... 6
    2.1.2 Specific Guidelines imposed by UF and the COE .....................................7
    2.1.3 Software Engineering M ethods for W ebsites ............................................11
    2.1.4 W ebsite Implem entation Technology......................................................12
    2.1.4.1 W eb publishing ...... ...... .. .... ............. ............ 13
    2.1.4.2 W eb technologies .................................. .......................... ......... 15
    2.1.5 C conclusion ................................ ........................................... 30
    2.2 Content M anagem ent System s ........................................ ........................ 31
    2 .2 .1 Introdu action ............................................................ 3 1
    2.2.2 Strudel .................. ..... ......... ................ 34
    2.2.3 OpenCM S ............................ ............................. ............... 36
    2.2.4 Zope ............... ......... ............... 36
    2 .2 .5 A ria d n e ................................................................................................. 3 7
    2 .2 .6 C o c o o n .................................................................................................. 3 8
    2 .2 .7 E v alu atio n ............................................................................................. 3 9

    3 Z O P E ................................................................4 5

    3.1 Introduction .............................................................................. ...... ................. 45
    3 .2 Z ope H history .................................................................................................. 46
    3.3 Zope' s Fundamental Concepts ................................ ............... 47
    3.4 Zope Architecture ................. ......... .................52
    3.5 Object Orientation in Zope ................. ......... .................... ............... 53
    3.6 Zope Management Interface ......................................................................... 56


    V









    3.7 Zope's Scripting Languages ........................................ ........................... 57
    3.7.1 Python ..... ........... .. ......... ................ 57
    3.7.2 DTM L ............................................................................. ......... .................60
    3.7.3 Zope Page Tem plates ........................................ ........................... 62
    3.7.3.1 P ath E expressions .............. .. ....... ................... ............... .... 64
    3.7.3.2 Calling Python scripts from Page Templates.............. ...............68
    3.7.3.3 M across ............................................................... ... ............70
    3.7.4 D TM L vs. ZPT .................. .......... .................................... ........ 75
    3.8 Connecting to a relational database with Zope.......................... ..... ............ 75
    3.8.1 Difference between ZODB and a relational database .............................75
    3.8.2 Z SQ L M ethods ...................... ...... ................ .. ....... .... ...........76
    3.8.3 Caching ............... ......... ................ 79
    3.8.4 Transactions............................................ 80

    4 REQUIREM ENTS ANALYSIS............................................................ ...............81

    4.1 Functional R equirem ents ............ ............................................... ............... 81
    4.2 Non-Functional Requirements.. .. ........................ ...................82

    5 IM PL E M E N T A T IO N ......................................................................... .................. 84

    5.1 Software and Hardware Specifications..................... ... ...................... 84
    5.2 D atab ase D design .............................. .......................... .. ........ .... ..... ...... 85
    5.3 Site Architecture ............ .... .......... .. ...... ............ ................ 90
    5.3.1 Folder H hierarchy .................. ........ ... ... .......... .. ............... 90
    5.3.2 Folder Properties ................................ .............. .................. ........ 91
    5.4 Definition Of The Website Style ... ......................... .................95
    5 .5 S Q L Q u e rie s ................................................................................................... 9 9
    5.6 User Groups ..... ...................... ............... 102
    5.6.1 Authentication to the dbAdm in area.................................... ............... 102
    5.6 .2 P professors ...................................................................103
    5.6.3 Database Administrator ............ ... ..... ..... .......... .. ............... 106
    5.6.4 Additional U sers and D elegation................................... ............... 106
    5.7 Database Administration Issues.....................................................108
    5.7.1 Form Checking w ith JavaScript .................................... ............... 108
    5.7.2 The dbAdmin Folders.......................... ......... .................. .. 112
    5.7.2.1 The Standard Folders ............ ............. .................... ............... 112
    5.7.2.2 The Professor Folder ................. ....... ...... ......... ........... ............... 117

    6 U SE R IN T E R FA C E ................................................................ .. .......................120

    6.1 Overview of Graphical User Interface..... .......... ...................................... 120
    6.2 D database A dm inistration GU I ........................................ ........................ 121

    7 CONCLUSION AND FUTURE WORK .....................................................125

    7.1 H ave the R equirem ents B een M et? ........................................ .....................125









    7 .2 C o n c lu sio n s .................................................................................................... 12 7

    8 LIST O F R EFEREN CE S.................................................. .............................. 129

    BIOGRAPHICAL SKETCH .............................................................. ...............133
















    LIST OF TABLES

    Table p

    1 Overview of website implementation technologies....................................................31

    3-1 Overview of areas that can be improved using a CMS ............................................33

    3-2 C om p arison of C M S ......................................................................... .....................44
















    LIST OF FIGURES

    Figure page

    2-1 Client/Server-side technologies ......................... .............................. ............. 15

    2-2 Principle of w ebsite m anagem ent..................................................... ...................32

    2-3 Strudel architecture....... .................................................................... ........... .. 35

    2-4 Ariadne's system architecture .................................. .....................................38

    3 Zope A architecture .......................... ........ .. ........... .. ............54

    5-1 ER diagram of CISE Departm ent ...................................................... .............. 86

    5-2 Folder H ierarchy of w ebsite ..................................................................... 91

    5-3 P ython Script getF older ..................................................................... ..................93

    5-4 Usage of getFolders from Page Template ............. .......................................94

    5-5 Generated Code from the getFolders script ................................. ................95

    5-6 The indexhtm l page m acro .............................................. .............................. 97

    5-7 Using the whole page macro in another page................................................98

    5-8 Calling a ZSQL method in embedded HTML ............. .........................100

    5-9 Form checking w ith Javascript ....................................................... ...... 110

    5-10 Objects inside ciseZPT/dbAdmin/Project ..................................... ...........112

    6-1 Z ope M anagem ent Interface......................................................................... ...... 120

    6-2 M ain CISE w ebsite .................. ...................................... .. .......... 121

    6-3 Logging in to the database adm inistration area....................................................... 122

    6-4 Screen presented to a database adm inistrator...........................................................122

    6-5 Screen presented to a professor ..................................................................... ...... 123










    6-6 Sam ple database dialog ............................................ ...................................... 123

    6-7 Security Management through-the-web ........................................... ....................124


























































    x















    Abstract of Thesis Presented to the Graduate School
    of the University of Florida in Partial Fulfillment of the
    Requirements for the Degree of Master of Science

    REIMPLEMENTATION OF THE COMPUTER AND INFORMATION SCIENCE
    AND ENGINEERING DEPARTMENT WEB SITE USING A CONTENT
    MANAGEMENT SYSTEM

    By

    Rima Gerhard

    August 2003

    Chair: Markus Schneider
    Major Department: Computer and Information Science and Engineering

    The maintenance of a website is a complex and time-consuming task. Many

    documents in different formats are published online by many different groups of people.

    The CISE Department hosts a website of medium size. This website has received a

    redesign in the summer of 2003. New content has been added and the integrity of the site

    has improved (i.e., broken links have been updated and the navigational structure has been

    reimplemented). Still, the website is mainly static, and with every update to the website

    profound knowledge of HTML is needed. This reduces the number of people that can

    work on the website to a very small group of web administrators. This situation quickly

    turns into a bottleneck. The website is difficult to manage in terms of ensuring

    consistency and supporting evolution.

    New tools for dynamic websites have emerged in the past year. There is, on the one

    hand, the group of server-side languages that allow for the creation of dynamic websites.

    On the other hand, there is the group of web content management systems (CMS). The









    main objective of such systems is to move the developer away from the level of HTML

    documents and to assist in the general maintenance problem of ensuring consistency of

    content, reference, and presentation. CM systems are especially useful when websites are

    frequently updated and several authors exist, as in the case of the CISE Department's site.

    Another feature of content management systems is that they allow for a separation of

    content, style, and logic.

    The goal of this thesis is to reorganize the Department's website using a web

    content management system and a database. All content is stored centrally in a database,

    which means that data are not stored in a redundant fashion any more. The layout and

    logic are being handled by the content management system. The resulting websiteO

    conforms to the policies and guidelines stated by the University of Florida's Web

    Administration group as well as the College of Engineering. The resulting system is easy

    to maintain even by people who lack fundamental HTML or programming logic. With

    the new system, it is easy to distribute and assign work among many users.














    CHAPTER 1
    INTRODUCTION

    The Internet steadily grows in size. This growth can be attributed to an ever-

    increasing amount of documents available on web servers. Due to the rising number of

    online documents, the management of websites becomes a difficult and time-consuming

    task. The Computer and Information Science and Engineering Department hosts a

    website and is currently experiencing the complexities involved in maintaining a current

    website of medium size. In the fall of 2002, when this project was initiated, an older

    version of the Computer and Information Science and Engineering Department website

    was in use. Many times website users were frustrated because they were not able to locate

    the information they are looking for. In the summer of 2003, a new website went online,

    which features a new design and some new capabilities. However, there is still no support

    for the frequent updates and developers need profound knowledge of HTML to publish

    content. Therefore, the number of possible authors is greatly restricted and most work

    falls back on the site's main administrators, a situation that quickly turns into a

    bottleneck. The website is difficult to manage in terms of ensuring consistency and

    supporting evolution.

    The main problem is that maintenance for a site of relatively medium size remains

    very complex and time-consuming. To support maintenance, a large variety of new

    products and tools for website engineering have been developed. These so-called web

    content management systems (CMS) range from full-scale enterprise platforms, large

    upper tier and mid-market packages to various forms of open-source tools. The main









    objective of such systems is to move the developer away from the level of HTML

    documents and to assist in the general maintenance problem of ensuring consistency of

    content, reference, and presentation. CM systems are especially useful when websites are

    frequently updated and several authors exist, as in the case of the Computer and

    Information Science and Engineering Department's site. In the course of this project,

    several CMS have reviewed. One of them fulfilled most requirements and was chosen for

    the implementation of the new website.

    The goal of this thesis is thus to reorganize the Department's website, according to

    the following constraints: first of all, content shall be separate from presentation. Second,

    the website should be conform to the policies and guidelines stated by the University of

    Florida's Web Administration group. Finally, website data shall be managed by a

    database and editing of content as well as creation of new documents shall be simplified.

    We begin in Chapter 2, with a description of related work. First of all, we will

    review general design principles and specific guidelines imposed by the University of

    Florida. Second, we review the major website implementation technologies available

    today and make a selection of the technologies deemed appropriate for the

    implementation of the new website. Third, we will list a number of existing open source

    content management systems. Chapter 2 concludes with which system was chosen along

    with the reasons for doing so. In Chapter 3, we will present an overview of Zope, the

    CMS chosen for this thesis. Chapter 4 identifies the requirements that have been fixed for

    the website. In Chapter 5, a description of the implementation follows. Chapter 6 will

    give an overview of the user interface of the final website. Chapter 7 states the conclusion









    for this project as well as what possible additional work could be undertaken in the

    future. The last chapter lists all references used throughout this thesis














    CHAPTER 2
    RELATED WORK

    In this Chapter, we will give an overview of the topics that are relevant for this

    project.

    The first area that is important for websites is the area of website design. Graphical

    User Interface (GUI) design methods are quite different from Web User Interface (WUI)

    design methods. Section 2.1.1 and 2.1.2 are dedicated to this area, detailing the guidelines

    for website design as imposed by the University and general design principles. Most

    work relevant for designing and evaluating user interfaces has come out of the Human-

    Computer Interaction (HCI) community.

    There is another meaning to the word "design." There is the graphical and user

    interface aspect of website design as treated in subsection 2.1.1 and 2.1.2. But there is

    also the design of the structure of the site. This area is closely related to the field of

    database design. Any database designer knows that a database needs a well-defined

    structure; otherwise, many maintenance problems will occur. Websites are certainly

    comparable to databases both provide (sometimes large) amounts of information that

    needs maintenance. Databases have design methods such as the well-known ER-diagram

    [CHE76]. Therefore, websites need design methods similar to the design methods

    developed for databases. We will present some related work in the area of website design

    methods, which are lately also referred to as "Hypermedia Development Methods", in

    subsection 2.1.3.









    Section 2.1.4 gives an overview of the website implementation technologies

    currently in use. In addition to giving a brief explanation of each technology, the choice

    is made whether the technology should be adopted for this project or not.

    The next area of related work is CM Systems. They were developed to support

    website builders in the task of managing the content, style and structure of a site. We

    have selected 5 systems, and describe their features in subsection 2.2. At the end of the

    section, a choice is made for one of the CMS.

    2.1 Web User Interface Design and Implementation

    Web User Interface Design refers to the area of the actual visual presentation of the

    website. This includes the graphical user interface. It defines the first impression a user

    gets after visiting a page, therefore, we will list related work of this area before we treat

    all other aspects of a website.

    The most important goal of WUI design is usability. Nielsen [NIEOO] defines

    usability as follows: "Usability is the measure of the quality of the user experience when

    interacting with something whether a website, a traditional software application, or any

    other device the user can operate in some way or another." In the context of the World

    Wide Web, this means, "how easy it is to find, understand and use the information

    displayed on a Website" [KEE98].

    To give some concrete examples, the following problems could be found on a

    website with poor usability: first of all, websites might suffer from information overload.

    Typically, a user does not want to browse through a lot of pages to find the piece of

    information that he is looking for. The attention span of a surfer is likely to be short.

    Second of all, ill-structured websites might lead the user to experience the lost-in-

    hyperspace syndrome. This syndrome appears when the navigation process is not very









    well structured and guided. It therefore becomes hard and time-consuming for the user to

    locate the desired information. The user is then said to be "lost" within the hierarchy of

    hypertext.

    The usability, appearance, accessibility and uniformity of a web pages projects the

    image of the CISE Department to students, alumni, visitors, and prospective employees.

    If a website has poor usability, it will discourage exploration and waste user time and

    leave a negative image of the CISE Department with the user. Therefore, it is important

    to adhere to methodologies for designing usable websites. There is a number of

    researchers who have treated the subject of graphical and user interface aspects of

    website design. Nielsen [NIEOO] has suggested methods for designing pages with good

    usability.

    Another alternative for most page designers is to provide them with a set of simple

    guidelines for designing pages. These guidelines should be based on fundamental

    principles of user interface design.

    2.1.1 General User Interface Design Guidelines

    The WWW hosts a wealth of guidelines for designing web pages. Conference

    articles that address the issue are few, however. Borges proposes simple design

    guidelines [BOR96][BOR98], such as

    * Verifying that links connect to existing pages,
    * Including the date the page was last modified, the mail address of the person that
    maintains the page and the URL address of the page on a footer,
    * Avoiding pages become overcrowded with links,
    * Keeping pages short (about a letter size page),
    * Providing clear navigation from anywhere to anywhere, and do it on every page,

    to name but a few. Most guidelines have a basic idea in common: the key to successful

    Website design is not sophistication, it is simplicity.









    2.1.2 Specific Guidelines imposed by UF and the COE

    The University of Florida Web Administration group has imposed a set of

    guidelines. Their guidelines can be broken up in two sets of policies. First, they propose

    the "Acceptable Use of Computing Resources Policy" which consists of general rules for

    web pages, e-mail, and University affiliation. The key idea here is that the following

    information must be readily accessible on the main page:

    * The name of the unit or group represented by the page;
    * A means of contacting the persons) responsible for maintaining the page content;
    * The date of last revision;
    * The university word mark; and
    * An active link to the UF home page.
    Second, they have formulated the Accessibility Recommendations for UF Websites

    - under the ADA (Americans with Disabilities Act), the University is required to

    accommodate individuals with disabilities. A similar, more expansive set of

    recommendations has been put forward by the W3 consortium [CHR99]. These

    documents encompass areas such as recommendations for colors (ensure that all

    information conveyed with color is also available without color, for example from

    context or markup), graphics (provide a text equivalent for every non-text element

    because Screen readers for the visually impaired will skip over images, image maps,

    buttons, bullets, etc. "Alt" tags give a written description of the image.) and language (use

    the clearest and simplest language appropriate for a site's content because screen readers

    will translate simple language more accurately than complex text).

    The Office of Public Relations of the University of Florida has put together a set of

    graphic policies for the University of Florida. To achieve a look, a consistent impression,

    they have defined rules concerning the University Word mark. A word mark, words used

    as a logo, provides a strong, distinctive graphic symbol unique to the University of









    Florida. The word mark consists of the seal (based on the state seal with the university

    motto and founding date), a word mark using the university's name and a positioned rule.

    The university mark should be used as a signature in visual presentations about the

    university, including websites. Furthermore, the University has established rules

    concerning colors and typeface. The official university colors are orange and blue. The

    exact shades for use on the web are Orange Hex={FF,4A,0} and Blue Hex= {00,21,A5}.

    The university's official typeface is Palatino (called Palatino, Book Antiqua, or other

    names by various companies).

    Finally, the College of Engineering (COE has established a "Web Page Guidance

    Document" [COL03] which outlines the common thematic and structural elements that

    will brand the web pages within the COE at the University of Florida. Websites subject to

    the requirements include those maintained by the COE and the Departments within the

    COE. The documents stated that departmental home pages should have a uniform layout

    comprised of the following three elements: a header, a left-side menu box, and footer.

    Other guidelines in this document include the following areas:

    Layout. Web pages shall be standardized upon a minimum 780-pixel width. The

    height of the page is variable to allow greater flexibility for the departments' free space.

    The intent is to have an effective presence over the broad range of browser and screen

    combinations present worldwide.

    Color Schemes. Each department can choose the color scheme for its website.

    Light lettering on dark backgrounds will be used for headers and footers. Menu boxes on

    home pages will be encapsulated in the same dark background color. The menus will be

    dark lettering on a light background. Above this menu box, but within the encapsulating









    "frame," a search box, contacts, sitemap, or other similarly appropriate links may be

    included at the department's discretion.

    Headers. Headers will be designed and used as the primary branding elements to

    instill a sense of community within the cyber-presence of the COE. Headers on home

    pages will consist of three components:

    1. The upper strip (height 35 pix) in which the COE and UF wordmarks are placed in
    left- and right justified positions, respectively.
    a. The UF wordmark should be 20 pixels high and 80 pixels wide. Graphics
    in the desired color scheme can be requested from UF Web
    Administration.
    b. The gator engineering wordmark should be 25 pixels high and 120 pixels
    wide
    2. A larger middle strip (height 45 pix) in which the text "Department of' (Arial 10
    bold) above the department name (Arial 30 bold max, smaller to incorporate longer
    department titles) appears both left and middle justified.
    3. A navigation bar (height 20 pix) below that having a prescribed font (Arial 16), but
    department defined functions

    Department names shall appear as "College of Engineering" for the COE and

    "Department of..." for the departments. No abbreviations shall be used.

    The upper strip for the home page header shall be the base for the subordinate page

    header. The name of the department will be superposed using a prescribed font (Arial 20)

    in a center-justified position. For subordinate pages "Department of' should be omitted

    so that longer named programs may be accommodated in a consistent manner. Each

    department shall maintain an option of including a strip for logos or section headers

    below this upper strip. Finally, an optional navigation bar of the same constraint as above

    will be immediately below that. These navigation bars may be section or even page

    dependent, according to the needs of the department.

    Left Justified Menu Box. Departmental home pages are required to have a left-

    side menu box (width 180 pix) that contains three sections: Quick Links, Information









    For, and Programs. The required links cannot be hidden in a drop-down or expandable

    menu, but if needed each required link can be extended with a drop-down or expandable

    menu. These sections are to be uniformly labeled for the departments using a prescribed

    font (Arial Bold 3, 16). Links (Arial 2, 12) within these sections are to be uniformly

    labeled, if used. These sections are outlined below. The ordering of items within them

    should be precisely followed. Optional items that a department wishes to add should

    follow the prescribed list.

    Quick Links
    ABC Directory (where ABC = departmental initials)
    College of Engineering
    Graduate School
    University of Florida
    Career Opportunities
    Other optional links
    Information For
    Prospective Students
    Undergraduate Students
    Graduate Students
    Alumni
    Visitors
    Faculty/Staff (optional)
    Corporate Partners (optional)
    Other optional links
    Programs
    Research
    International
    Centers (optional)
    Laboratories (optional)
    Other optional links
    The COE also provides 2 HTML templates for use by other COE Departments

    [COL03]. The template currently used by the CISE Department as well as in this project

    is based on the COE templates.









    2.1.3 Software Engineering Methods for Websites

    As mentioned in the introduction at the beginning of this chapter, databases have

    several similarities to websites. Both store information for users. Both need a structure to

    facilitate working with them. Both can suffer under maintenance problems such as

    redundancy, incompleteness, and inconsistency, if their structure was not designed

    properly. In order to avoid these problems, researchers have developed several

    hypermedia development methods: HDM [GAR93b], its successor HDM2 [GAR93a],

    OOHDM [SCH98], RMM [ISA95], W3DT [BN96], SOHDM [LEE98], and WSDM

    [DET98]. Koch has presented a comparative study of the most relevant methodologies

    for hypermedia and Web development [KOC01].

    Currently, websites are often developed ad-hoc. The original CISE website seemed

    to be no exception. The development style can be blamed for many of the inconsistencies

    and poor usability that the user experiences when surfing the site. The methods listed

    above assist the website designer in planning a site. They provide appropriate techniques,

    processes, and methodologies. They fall into the area of software engineering methods

    and can be compared to the methods created for designing databases such as the ER-

    method [CHE76].

    When websites are developed ad-hoc, the target audience of the site often

    experiences one or more of the following problems: first of all, information is needlessly

    repeated in several areas. On the previous CISE site, there was a textual description of the

    undergraduate classes offered in CISE under the area "Undergraduate Program" as well

    as in the link to the "CISE Graduate Brochure." Not only is the information redundant, it

    is also inconsistent to store the information in an area where on expects to find material

    relevant for graduate students.









    Second of all, websites tend to be incomplete when no design method was

    employed. The CISE website has some incomplete areas as well. To give only one

    example of this, consider an international student who seeks to pursue a degree in the

    CISE Department. When searching the previous CISE website, the student will not be

    able to find any information on what degrees from foreign countries will be accepted by

    UF. One might argue that such information does not have to be offered by the CISE

    website. However, that information might be provided elsewhere, on another site

    affiliated with UF. Even if the CISE Department does not host the information, it should

    at least link to it, to provide as much service to its target audience as possible.

    International students in general do not find very much information geared towards them.

    This is surprising since the population of graduate students in CISE is currently made up

    of more than 80% international students!

    Another problem arises from the incompleteness issue: the problem of broken

    links. A broken link leads to a user not finding the needed information. This will decrease

    the confidence of users and leave a negative over-all impression. Many broken links can

    be found on the current site, for example under the Student Organizations area. Three out

    of the seven student organizations listed have either dissolved or else changed their URL.

    We have not implemented a specific software engineering method in this project.

    This is due to the use of a database instead. The content management system used also

    solves the majority of the problems described above (broken links, redundancy,

    incompleteness).

    2.1.4 Website Implementation Technology

    In this Section, we present an overview of the technology available for website

    creation to date. Before however giving more detail of the implementation languages and









    technologies available to date, we will give some background on the mechanics of

    website publishing.

    2.1.4.1 Web publishing

    Most of today's web publishing is happening through the Hyper Text Transfer

    Protocol (HTTP), or its variant, the secure HTTPS, which combines HTTP and the

    Transport Layer Security (TLS) or the Secure Socket Layer (SSL). The inventor of HTTP

    is Tim Berners-Lee. He implemented the protocol in 1990 at CERN, the European Center

    for High-Energy Physics in Switzerland.

    HTTP's functionality is quite simple. A client is sending a request to a server. The

    server then processes that request and answers with a response. Both the request and

    response are sent as messages over a TCP connection. The Multi purpose Internet Mail

    Extension (MIME) format is used for these messages. A MIME message is made up of a

    body and a set of headers. For HTTP messages, the body is optional, and the message has

    been termed as the HTTP entity. Additionally, a response (or request) line is prepended to

    the message. The request line has information about the request method, the resource

    locator, and the protocol version. The resource locator identifies resources in a

    hierarchical structure (such as the file system). The resource itself could be anything from

    an HTML page, to an image, a file, or an application. The HTTP resource locator makes

    use of the URL syntax. The server must determine what resource is actually requested by

    the resource locator.

    The most popular request methods employed by HTTP are GET, PUT, POST, and

    HEAD. The GET method is used by a web browser to request a specific document. A

    web browser's job is to formulate the actual GET request, send it to the server, receive an

    HTML document in return, and finally display the HTML document according to the









    HTML instructions. We discuss HTML in further detail later in this chapter. The POST

    message is used by web browsers to send data to a web server. The web browser can

    attach the data to an HTTP request as the message body. The message body would

    normally be the URL String after the question mark (?), e.g.

    http://www.cise.ufl.edu/inde.html?name=Markus+Schneider&phone=1234567. As with

    the GET method, the browser is responsible for preparing the POST headers and request

    body. The PUT request sends information to the server that will be used to create a

    resource as specified by the resource locator. If the resource already exists at that

    location, it can be overwritten. The HEAD method is used to get information about a

    document. Since a much smaller of data is transferred (not the whole document itself),

    HEAD is a lot faster than GET. The HEAD method is often used by clients who use

    caching to determine whether a document has changed since the last time it was accessed

    by the client. A local, cached copy can be used again if it has not changed. If it has, the

    document needs to be retrieved again using the GET method.

    A final important property of HTTP is that it is a stateless protocol. This implies

    that a request must have enough information in it to process it. The web server does not

    have any saved state information from previous requests that might be useful when

    processing the current request. This feature of HTTP makes it quite complex to build web

    applications. User might expect from an application that it remembers their preferences

    and some facts from previous interactions. Many workarounds have been devised to cope

    with this limitation: cookies, session products, authentication headers, and hidden form

    variables. Future HTTP versions could quite possibly remove this limitation.









    2.1.4.2 Web technologies

    Before listing the web technologies available today, it is important to note the

    difference between client-side and server side technologies. Figure 2.1.4.2 shows how

    client-side and server-side languages differ when a website is called.

    The client-side is basically represented by the browser, the front-end of any

    website. The browser displays HTML sites in frames. Technologies that are termed

    "client-side" are downloaded along with the HTML code and are employed on the

    computer of the user (the "client").

    The server-side languages deal with resources of the server. Connections to

    databases are established, information between several users of an application is shared,

    or the file system of the server is being manipulated.

    Step I: Step 2:
    User requests Runtirme engine finds
    page source page in the
    web file
    Step 3:
    Runtirne engine
    produces HTML page;
    Step 5: T runs all server code
    Client interprets a wbi while creating page
    and displays HTML
    page, executing Step 4:
    c lient-side JaaScript Runtime engine sends
    statements page to client




    Figure 2-1 Client/Server-side technologies

    HTML/XHTML. The layout of text and images that show up in a user's web

    browser when the user visits a website is usually composed using a simple language

    known as Hyper Text Markup Language (HTML). When a user visits a typical website, a

    chunk of text that is "marked-up" with HTML is transferred between the web server and









    the user's browser. The browser interprets the chunk of text, showing text and images to

    the user. The chunk of text, which is transferred, is typically referred to as apage.

    With HTML, website developers can create headers, paragraphs of text, lists, and

    tables. They can create links, which refer a user to another website or other data in the

    web. HTML can be extended with CSS Style Sheets and JavaScript, which is discussed in

    the next Sections.

    HTML is actually a simpler and easier-to-use subset of the Standard Generalized

    Markup Language (SGML). The W3 Consortium [WOR03] is responsible for the

    standardization of HTML. No specific editor or software is needed to create HTML files.

    However, there are powerful programs for HTML editing. The CISE Department has

    purchased a license for Microsoft FrontPage [MF4], whose main feature is that pages can

    be created in Normal (WYSIWYG) View, or code can be written in HTML View.

    FrontPage users can, therefore, create websites without knowing any HTML. Also,

    FrontPage has HTML, ASP, and XML source-code preservation capabilities in that allow

    a user to import code created in a text editor or other HTML editing tool-without

    rearranging or changing it.

    XHTML is a new HTML derivate. In version 1.0, XHTML is a redefinition of

    HTML with the addition of XML.

    One of the most important features of HTML is the ability of defining links (short

    for "hyperlinks"). Links can refer to other pages within a site, or any address in the World

    Wide Web. This simple feature turns out to be quite powerful, since machines, that are

    physically miles apart, can now be reached through modern web browsers with nothing

    but a mouse click. The World Wide Web basically relies on this feature.









    One kind of web design that is possible with HTML is websites that are built based

    on "frames." There are many issues that must be considered before frames are

    implemented on a site. One problem arises with search engines. Search engines can link

    directly to framed content documents, but they cannot link to the combinations of frames

    for which those content documents were designed. Many framed content documents are

    difficult to use when accessed directly (outside their intended frameset), so there is little

    benefit if search engines offer links to them. Therefore, many search engines ignore

    frames completely and go about indexing more useful (non-framed) documents.

    Another issue is bookmarks. In current browsers, if a user bookmarks a page, the

    browser actually only bookmarks the parent frameset. When that user later calls up that

    bookmark, she will get the home page or equivalent. This can quickly become frustrating

    when a user realizes that she has to retrace their path through the site when the user calls

    up the bookmark.

    To conclude, the Accessibility Guidelines suggests to avoid using frames

    altogether. The reason for this is that there are still browsers out there that do not use

    frames, browsers that are brand new and make a conscious decision to not offer that

    traditional support. Some of these are browsers for the blind, or other handicapped users.

    CSS style sheets. Style sheets [BOS98] can be used to manage, update, and change

    the layout of large sites easily [BOS98]. With traditional HTML, the presentational

    information is scattered throughout the document. In CSS, the presentational information

    is collected in one place, and it is easy to read and edit. CSS collect the style information

    for an entire website into one file, which is in turn included in the header of all HTML









    files that the style should be applied to. The editing of that file affects the presentation of

    the entire site.

    The Extensible Style Language [CLA99] is supposed to replace CSS. XSL defines

    stylesheets, which in turn define how XML documents are being displayed in a web

    browser. Through transformations, an XML file can be turned into another XML file, i.e.

    by leaving out or adding on certain elements, or by changing the order of elements.

    Disadvantages of style sheets are that support is often limited, buggy, or sometimes

    completely nonexistent within certain versions of popular Web browsers. However,

    browser support is getting better with newer versions of web browsers.

    The University of Florida Web Administration also has their take on CSS. They

    simply recommend organizing documents so that they may be read without style sheets.

    For example, when an HTML document is rendered without associated style sheets, it

    must still be possible to read the document.

    JavaScript. JavaScript is a general-purpose programming language that, when

    used for Web documents, goes directly inside the HTML documents and is downloaded

    to the browser with the rest of the HTML tags and content. Scripts can make a page

    interactive. Traditional web pages tend to be lifeless and flat unless one adds animated

    images or more bandwidth-intensive content such as Java applets or other content

    requiring plug-ins to operate (ShockWave and Flash, for example).

    A popular example of the use of JavaScript found on the web is image rollovers:

    roll the cursor atop a graphic image and its appearance changes to a highlighted version.

    Other things JavaScript can be used for includes:

    * Automatically change a formatted date on a Web page
    * Cause a linked-to page to appear in a popup window









    Furthermore, interactive forms validation is an extremely useful application of

    JavaScript. While a user is entering data into form fields, scripts can examine the validity

    of the data, i.e., "Did the user type any letters into a phone number field?." JavaScript

    could be included on a web form to perform interactive error checking. This is useful for

    example for forms that transmit data to a database. Before inserting the actual data, one

    could check with JavaScript whether all fields of a form were filled out and whether they

    were filled with the right data type.

    XML. XML stands for Extendible Markup Language. It is a flexible way to create

    common information formats and share both the format and the data on the World Wide

    Web, intranets, and elsewhere. Any individual or group of individuals or companies that

    wants to share information in a consistent way can use XML. It is a formal

    recommendation from the World Wide Web Consortium [WOR03] and is similar to the

    Hypertext Markup Language. Both XML and HTML contain markup symbols to describe

    the contents of a page or file. HTML, as described above, describes the content of a Web

    page (mainly text and graphic images) only in terms of how it is to be displayed and

    interacted with. For example, the letter "p" placed within markup tags starts a new

    paragraph. XML describes the content in terms of what data is being described.

    XML-based files contain nothing but logic markup (also called semantic markup).

    A markup such as ... only contains information about the

    meaning of the data inside of the tag. It does not contain any information about how such

    data should be displayed. The data is entirely independent of the output medium (such as

    monitor, printer, ...) and does not include any formatting instructions. As opposed to

    HTML data, which is displayed by a browser using default values, a browser does not









    know how to display XML data per se. Therefore, before such data can be presented, one

    needs to specify the formatting with a using a style language.

    Two formatting languages are available for this purpose as of today: CSS and XSL.

    CSS, on the one hand, was already discussed above. It can be used to tell a web browser

    how to display elements of an XML file. XSL, on the other hand, is more powerful.

    Especially important is the transformation component XSLT, which transforms XML

    data into HTML on the server side. The advantage of this is that XML in combination

    with XSL can be used on old browser versions, which do not recognize pure XML. The

    disadvantage is that this only works within an HTTP environment. Furthermore, the web

    server needs to have a corresponding interface, that allows for the integration of an

    XSL/XSLT software module.

    XML is extensiblee" because, unlike HTML, the markup symbols are unlimited

    and self-defining. XML, as HTML, is also a subset of the Standard Generalized Markup

    Language. XML markup, for example, may appear within an HTML page.

    The major problem with XML is the capability of software to represent XML-

    based data adequately. Not all web browsers have the same capability of interpreting

    XML. The MS Internet Explorer interprets XML-based markup languages since product

    version 5.0, the Netscape browser since version 6.0. "Interprets" means that the browser

    is able to recognize XML data as such and can parse it. This does not mean, however,

    that the XML data is also displayed nicely formatting is done with CSS or XSL or

    translation with XSLT to HTML.

    Since the goal of a web designer is always to make the web page viewable in most

    browsers, it is not recommended at this point to use XML-based languages for web









    design. Clearly, when XML is used in combination with XSLT, this restriction does not

    apply.

    CGI. The Common Gateway Interface (CGI) is not a programming language. In

    fact, CGI applications can be written in just about any programming language in use

    today. CGI programmers write scripts and programs for the web that are called from

    HTML files. Actually, HTML and CGI communication works both ways: a CGI script

    could also transfer HTML code to a web browser.

    The difference to JavaScript is that those scripts or programs are not executed after

    the website has been transferred to the user's browser, but before the browser receives the

    data from the server. CGI scripts and CGI programs are so-called server-side scripts. A

    CGI script could, for example, query a database that is installed on the server machine

    and display the query results on the client browser with dynamically generated HTML.

    The CG Interface has to be supported by the web server software. Most of the time, a

    directory with the name cgi-bin is used for this purpose.

    There are no requirements for the language in which a CGI program is written.

    Since the program has to be executable on the server, the program must have been

    compiled to the operating system environment of the server. Alternatively, the server

    could have a runtime interpreter to execute the program. If the server is running on

    Linux, for example, the server machine is executing C programs that were compiled by a

    Linux-C-compiler to an executable file.

    Most of today's CGI programs, however, are not compiled programs, rather just

    scripts, that are executed by an Interpreter when called. The best-known and most

    popular Interpreter is the Perl Interpreter. The Perl-Interpreter is available for most









    operating systems as freeware and is installed on almost all servers in the web. More

    information about Perl itself follows later in this Chapter.

    Alternatives to a CGI applications are Microsoft's Active Server Page (ASP), JSP,

    and PHP in which a script embedded in a Web page is executed at the server before the

    page is sent. They are discussed in further detail in the next Section.

    ASP. ASP stands for Active Server Pages. It is another alternative to PHP and

    CGI/Perl. Consequently, ASP is used to create server-side dynamic websites. As opposed

    to CGI/Perl, scripting code in ASP is embedded in HTML code (as is the case with PHP

    and JavaScript). ASP is tightly coupled with the world of Microsoft and Windows, even

    though ASP exists for Linux and other Unix-based operating systems and the Apache

    web server is supported along with Microsoft web servers. However, the ASP integration

    is optimized for MS web servers and is therefore mostly used under Windows NT.

    ASP is not a scripting language, as opposed to PHP. It is considered an

    environment; the scripting languages that can be used within this environment are Jscript

    and VBScript (the standard).

    The principle of ASP is as follows: due to certain conventions the web server

    recognizes that a HTML file is an ASP file. The server then implements the script code

    contained in the file and sends the entire chunk of generated HTML code back to the

    calling browser.

    A simple example for ASP is given in the following two documents. The first one,

    "search.html," calls a script when an HTML form is submitted. The second script, called

    "db_script.asp," executes a database query and displays the result. VBScript was chosen

    for the implementation.











    1. File "search.htm"









    2.File "db_script.asp"
    <%@ LANGUAGE = "VBScript" %>
    <% SomeName = Request.Form("SomeName") %>


    <%= "You are looking for: & SomeName & "

    " %>

    <%
    Dim db conn, db query
    Set db conn = Server.CreateObject("ADODB.Connection")
    db conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data
    Source=D:\Inetpub\wwwroot\cise.mdb"
    Set db query = db conn.Execute("SELECT FROM Professor
    WHERE Name LIKE '%" & SomeName & "%'")

    Do While Not dbquery.eof
    Response.write db query.Fields("firstName")
    Response.write db query.Fields("lastName")
    Response.write dbquery.Fields("email")
    Response.write "
    "
    db query.MoveNext
    Loop
    dbquery.close
    db conn.close
    %>






    The ASP environment is available under a license and needs to be purchased.


    DHTML. Dynamic HTML (DHTML) is not a new language, it is rather an


    extension of HTML. It does not introduce any new HTML tags, however. It makes


    HTML "dynamic" by allowing website authors to alter elements of a website when it is


    displayed in a browser. Some content can change without, however, having to reload an


    entire page. A website therefore acts like an application that needs to be loaded only


    once. The interaction with the user decides what will happen on the screen next. To give


    a concrete example of DHTML, one could create a website where users can select one


    item from a drop down box. Depending on what item of the box was chosen, the website









    would then display another drop down box or a text field. This is just a simple example -

    more complex examples of DHTML include animated graphics that glide over the screen,

    dynamic sitemaps, or clock counting up seconds in real time.

    When programming DHTML, website creators need a profound knowledge of

    JavaScript to begin with. Some ready-made DHTML solutions are available on the web,

    but whenever a custom-made solution is needed, one needs to have a strong background

    in JavaScript programming.

    Another problem with DHTML is that the two most common web browsers, MS

    Internet Explorer and Netscape, are only able to interpret it since version 4.0 (in both

    cases). Unfortunately, DHTML is one of the areas where these two browsers have

    decided to implement entirely different strategies. When writing DHTML for both

    browsers, one often has to write twice as much code one version for each browser.

    Many features will only work with one of the browsers.

    Finally, the major disadvantage of DHTML is that it could pose problems for

    people with visual impairments. The Accessibility Recommendations for UF Websites by

    the University of Florida Web Administration does not state any explicit

    recommendations as far as DHTML is concerned, but it is safe to say that overly dynamic

    sites with moving elements would not be deemed acceptable.

    Perl. Perl stands for Practical Extraction and Report Language [PER03]. The

    language stems from the Unix operating system world and was first published in 1987.

    Perl was invented by its only creator, Larry Wall. Following the Unix philosophy, Perl is

    an open language. Since Version 5, Perl supports elements of object-oriented









    programming. It is a scripting language that really started becoming popular in

    conjunction with the CGI environment.

    Perl has reached a certain level of popularity for being the language of hackers.

    One can achieve complex instructions with just one line of code. The code itself seems

    almost unreadable to the uninitiated. The syntax is based on C. Files that contain Perl

    code aren't compiled to executable code. The Perl Interpreter is responsible for checking

    syntax and compiling Perl code whenever a file with Perl code is called. The obvious

    disadvantage is that due to this extra step, scripts don't execute as fast as compiled and

    linked scripts. The advantage is that scripts don't have to be compiled and linked for

    every new operating system environment. The scripts are therefore portable and can run

    anywhere as long as the Perl Interpreter is installed.

    The disadvantage of CGI in combination with Perl is that Perl Scripts are separate

    files, that reside (due to the CGI architecture) in different directories than the HTML

    files. Another problem is that Perl was devised as a universal programming language and

    not specifically for dynamic website development.

    Server side includes. Server Side Includes (SSI) are used to insert bits of dynamic

    information inside of HTML file. Popular examples are the inclusion of the current date

    and time. SSI can also start CGI programs and include their output (for example, the

    number of times a file has been accessed) in the HTML file.

    SSI are only executed when a web browser calls the HTML file over a web server

    (e.g. with a URI of the type http://...). Another condition is that the web server supports

    SSI. Not all web server do so, some only interpret a part of the instructions. In case the

    web server doesn't know SSI, the instructions won't function.










    To signal the web server that SSI are present in an HTML file, it has become

    standard to give them a special extension: .shtml, .shtm, or .sht. Most web servers will

    ignore SSI if they are written in a file ending with .html or .htm.

    PHP. HTML by itself cannot be used to generate dynamically generated content. A

    scripting language is needed for this purpose. JavaScript and CGI/Perl have already been

    discussed above, along with their respective disadvantages. PHP was developed to

    remedy some of these problems. PHP originally stood for Personal Home Page Tools.

    PHP's core concept is that PHP code resides directly in HTML files, as is the case for

    JavaScript and PHP. When a web browser calls the HTML file, the web server recognizes

    that the requested file contains PHP code and is more than a static HTML file. The web

    server proceeds by having the file translated by the PHP Interpreter, which is installed on

    the server. The Interpreter executes the PHP code embedded in the HTML and generates

    the final HTML code, which is sent back to the browser.

    Whatever can be done with CGI and Perl can be achieved with PHP. Some things

    are easier though, since the PHP Interpreter is better fitted to web publishing demands. It

    is, for example, possible to generate PDF files dynamically. PHP has enjoyed a wide

    success and is used by many websites. A simple example of PHP code in an HTML file is

    the following set of files. The first file ("search.htm") simply contains a form, which calls

    a script called "db_script.php" upon submission. The second file is the db_script.php. We

    reprise therefore the same example as the one given for ASP.


    1.File "search.htm"




















    2.File "db_script.php"


    \n");?>




    PHP and its Interpreter are available for free. The software was developed by the

    PHP Group, a consortium of programmers [PHP03].

    Java. Java is a platform-independent programming language developed by Sun

    Microsystems [SUN03]. The language is structurally and syntactically close to C and

    C++. Java was developed as a programming language for the Internet, but it turned out

    that Java is suitable for universal programming purposes. It did not reach the dominance

    in the Web that the Java developers were hoping for.

    Today, Java is particularly used in connection with on-line banking, on-line

    broking, and web-based chats. As far as animations, effects, and on-line plays is

    concerned, Java is less popular than Flash (described in the next Section)

    One kind of Java programs for the Internet is called applets. Java applets can only

    be executed when users have explicitly enabled their browser to support them, since they

    could possibly be used to change files on the user's computer or even delete them.











    As far as the Client-Server model is concerned, Java can be used on both sides.

    Applets running in a browser are client-side. Oftentimes, those applets communicate with

    server-side programs. Consider for example a chat application. On the one hand there is

    an applet, which runs in the browser representing the chat interface to users. On the other

    hand, since chats usually involve more than one person, naturally some program must be

    running on the server to administer the chat participants.

    Another kind of Java program for the Internet is servlets. Servlets are Java classes

    that are typically used for tasks such as security checking, control over downloads and

    uploads. Java Server Pages (JSP) is yet another option similar to PHP, ASP, and

    CGI/Perl. The server page is an HTML file with embedded Java code. JSPs are a good

    choice for smaller web applications. Their disadvantage is that they become hard to

    maintain since code and HTML are intermingled. The example used for PHP and ASP

    can be rewritten for JSP as follows. Again, two files are needed, the first one

    ("search.jsp") containing a from which calls the second file ("db_script.jsp").


    1.File "search.htm"




    <%@ page language = "java" import="java.sql.*" %>

    <%@ include file = "default frameless.jsp" %>






    onClick="submitForm(document.userInputForm.SomeName.value)">

















    2.File "dbscript.jsp"
    <%@ page language="java" import="java.sql.*, java.lang.*,java.net.*" %>



    <%
    /* set up database connection */
    Class.forName("oracle.jdbc.driver.OracleDriver");
    String user = "user";
    String password = "secret";
    Connection conn =
    DriverManager.getConnection("jdbc:oracle:thin:@oracle:1521:oradb", user,
    password);
    Statement stmt = conn.createStatement(ResultSet.TYPE SCROLL INSENSITIVE,
    ResultSet.CONCUR READ ONLY);
    String searchName = request.getParameter("inpName");
    /* run query */
    ResultSet rs = stmt.executeQuery("select from Professor WHERE name LIKE
    '%"+searchName+"%'") ;
    if (rs 1= null)
    {
    rs.last();
    rs.beforeFirst();
    }

    if (rs 1= null)
    while (rs.next())
    {
    String displayName = rs.getString("name");
    %>

    <%=displayName %>
    <0
    } /* end of while */
    } /* end of if */
    stmt.close() ;
    conn.close() ;
    0>





    Flash. With Flash, website developers can add multimedia effects to websites, as


    well as create applications such as games, simulations, or navigation. Flash is a binary


    format that can be included in HTML as a multimedia object. Alternatively, Flash files


    can be viewed directly the newer browser versions have a plug-in for Flash and can


    display it directly. Flash websites usually somewhat resemble a TV screen something is


    always in motion, light effects, and music is not unusual.









    When creating the so-called Flash-movies, one works with the Flash Authoring

    software, that lets website developer's position graphics, text, and sound on a time line.

    Flash's authoring software is not useful for more complex applications. But Flash

    comes with an integrated programming language that can be used to solve more evolved

    problems.

    The main feature of Flash is that it is an extremely powerful tool to visualize

    content. Its authoring software is available for purchase from the Macromedia

    corporation [MAC03]. Flash-plugins to view Flash movies, however, are available for

    free.

    2.1.5 Conclusion

    Since user interface is such a crucial part of the website, it is important to stick to

    well-established guidelines that were tested and that can be relied on. Since usability is

    the declared goal of web user interface, we will adhere to guidelines established by

    researchers in this area. Additionally, the new website shall be conform to the set of

    guidelines established by the University of Florida.

    As far as technology is concerned, Table 1 shows an overview of the technologies

    presented in this Section. The deciding factors on what technologies we consider for this

    project are, in descending order of importance:

    1. whether a technology is available for free. If this is not the case, the technology is
    immediately ruled out.

    2. the complexity of the technology. If the time that is needed to understand and put to
    use the technology exceeds the time limit for this thesis, the technology cannot be
    used.

    3. whether the technology allows for a distinction between design and content. This
    means, how much is logic (as encoded in scripts) and presentation (e.g., the
    HTML) separated. When an HTML file that contains scripting logic is not viewable









    in a standard HTML editor such as FrontPage, it is an indicator that logic and
    design are not very well separated. We then rate the separation level to be low.

    4. whether the technology adheres to UF guidelines. If a website technology is
    considered inappropriate by the University of Florida Web Administration group, it
    cannot qualify for the CISE website.

    5. whether the technology is client-side or server side. This is an important factor
    when considering what part of the project the technology applies to.

    The last column in table 2.1.5 indicates whether the technology was deemed

    appropriate for the CISE website development or not. The choice was made depending on

    how well the technology fitted the requirements as listed above.

    Table 1 Overview of website implementation technologies
    Free Complexity Adherence Client/Server Separation Considered
    To side of design appropriate
    Guidelines and for CISE
    content website
    development
    HTML V Low V client low yes
    CSS Low client high yes
    JavaScript V Low client high yes
    XML V Low V Doesn't high yes
    apply
    CGI/Perl Medium V server low no
    ASP Medium V server low no
    DHTML V Low client medium yes
    SSI Low V server low yes
    PHP / Medium V server low no
    Java Medium V Server/client low no
    Flash Low client low no


    2.2 Content Management Systems

    2.2.1 Introduction

    The Internet offers a wide range of options for presenting information. Documents

    are available in different formats: HTML, XML, and sometimes-in form of text

    documents (txt, pdf, ps, doc). Multimedia data, such as audio data (mp3, way) and image

    (jpg, gif) and video data (MPEG, Quicktime) also play an increasing role. Websites face









    the difficulties of integrating all of these different data formats. A web-site builder must

    address this problem when managing the content and structure of sites. Content

    Management Systems (CMS) were created to precisely help support this complex task.

    Researchers at AT&T, who developed the Strudel CMS [FER97] and its successor

    Tiramisu [ALW99], have suggested that management of a website involves three tasks:

    1. Content: Selecting and managing the data available at the site,

    2. Logic: Data has to be organized and structured in individual pages, and

    3. Style: Design of the pages.


    Management




    Logic Content Style

    Figure 2-2 Principle of website management

    Content could be managed by storing all data in a database or several databases.

    The data could then be retrieved through queries. Management of the logic refers to the

    definition of the site structure, i.e. the set of pages, the data contained in each page and

    the links between pages. Management of Style means the layout of the web pages. HTML

    is normally used for formatting the layout, but lacks some fundamental page-oriented

    formatting capabilities.

    Many software products exist to help website developers with the task of layout

    management. FrontPage and Dreamweaver are part of these so-called WYSIWYG (What

    you see is what you get) editors. This means that pages are displayed there exactly as

    they will be seen later on the Internet. WYSIWYG tools are an immense help when









    designing the look of a page. One could, for example, draw tables and drag-and-drop text

    boxes and other HTML elements in a page and the tool generates the corresponding

    HTML code. But is this sufficient for creating websites? Still, with every change to the

    look-and-feel of a site, one would have to modify every single HTML document. Since

    the links are hard-coded, every change would have to be manually edited. This applies to

    links within the site as well as links that lead to other web pages. The integrity that a site

    might have had when it was brand new and controlled by a few web page developers is

    easily lost as time passes by. This is visible to a site visitor when he discovers broken

    links, content that is out-of-date, and pages that look and act differently. Managing the

    look and organization of current, relevant content goes a long way toward looking

    trustworthy and professional. The use of a WYSIWYG tool is not of much help for these

    issues.

    Solving problems with outdated content and links both features traditionally

    thought of as "content management" a Web Content Management System could help

    present a positive user experience. Table 3-1 presents an overview of the areas, which can

    be improved, with the help of a CMS.

    Table 3-1 Overview of areas that can be improved using a CMS
    Area CMS Solution
    Consistent Look and feel across a site Templating: enforce design standards
    Site always shows current information Version and display new content; remove
    and archive old content, track broken links;
    eventually use of a database
    Content is high quality Workflow: pass content through review
    and approval cycles
    Site loads quickly and is always available Cache popular pages, deploy content to
    distributed servers
    Navigation is up-to-date and accurate Auto-index content, ...









    Throughout the writing of this thesis, the field of CM systems has seen an

    explosive growth. When we initially compiled a list of CMS that would come into

    consideration, 5 open source systems seemed to be most promising. When looking at

    websites that give an overview of CM systems today ([WEB03][CMS03]), one can easily

    find well over 50 products, many of them available for free. One german content

    management site [COM03] even lists 938 products (June 24th, 2003)!

    Clearly, it would not have been possible to test and evaluate each of these systems.

    We have compared the 5 systems that were initially listed and relatively quickly opted for

    one of them. When the decision was made, we have not decided to research any further

    into the new and upcoming systems, partly due to the fact that the chosen system turned

    out to be a very good fit for our requirements.

    In the following, we present the 5 CM systems we have originally taken into

    consideration. We will point out how each of the areas identified above logic, content,

    and style are being handled in the different systems. At the end of this Section, we have

    included a table comparing the major aspects of these systems. More detail is given on

    which system was chosen and what were the motives for doing so.

    2.2.2 Strudel

    Strudel is a website development system created by AT&T Research [FER97].

    Content is being stored either in a database, external files, or in Strudel's internal data

    repository. All source data is converted into Strudel's own format, a labeled directed

    graph and wrappers translate all data into the graph model, called the data graph. The

    website administrator declaratively specifies the site's structure using a site-definition

    query in StruQL, Strudel's query language. The result of evaluating the site-definition

    query on the data graph is a site graph, which models both the site's content and










    structure. A site graph can be rendered as a browsable website by Strudel's HTML

    generator, which produces HTML for every node in the site graph from a corresponding

    HTML template specified by the administrator. Since the HTML templates exist entirely

    independent of the content, we have a clear separation between the area of Content and

    Style. The area of Logic is being covered by the site-definition queries, which are

    independent of the HTML templates and the data residing in the databases. Advantages

    of the Strudel website management system are that there can be multiple views of the

    website with minimal effort only new queries need to be created, or the HTML

    templates changed. Strudel allows for information to be drawn from many sources such

    as relational databases, Excel spreadsheets, Word documents, text documents, and other

    HTML files. Figure 2.2.2 gives an overview of Strudel's system architecture. The figure

    was taken from Strudel's website [ATT03].


    SBrowsanbl. 1
    SWb.Site


    Site Generator


    SlqpPOfor F Multiple
    output langu~ages
    (HEU L, XML)
    Independent of
    output language

    Defines Web-sit
    content & structures


    Figure 2-3 Strudel architecture









    2.2.3 OpenCMS

    OpenCms is an open source system that enables website builders to create and

    maintain websites. The software used to create the website is installed on a web server

    and is accessed via the Internet through a web browser. Different access permissions

    determine which actions users can perform and which components they see, i.e. users see

    only those files and directories that are relevant to them. OpenCms has an HTML editor,

    which is used to create content in the body. A template that ensures that the layout is

    uniform structures the body. OpenCms is only used to edit the body. This is how

    OpenCMS achieves a separation of Content and Style of a website, by assuming that the

    content is normally inserted in a body element. OpenCMS also supports Stylesheets to

    further separate content and layout. All of the files and folders of the different projects

    are not stored in the normal file system. OpenCms has a Virtual File System that holds

    the files and folders in a database. The OpenCms architecture allows using any SQL

    capable database that offers a JDBC connector.

    2.2.4 Zope

    Zope (which stands for "Z Object Publishing Environment") is an object-oriented

    web application server that is managed through a web interface. In Zope, one publishes

    "objects" which can be plain pages, structured content, documents, images, binary files,

    or folders. Instead of storing its basic documents in a relational database or file system

    (although developers can access both with freely available programs), Zope puts

    everything in its Zope Object Database (ZODB). This way, every entity in the system

    can have properties and methods, security settings, and managed transaction support

    (including rollback). Zope also has functionality for XML documents; one can import or

    create documents within Zope and format, query, and manipulate XML. Separation of









    content, style, and logic of web pages is done through the use of Zope's scripting

    languages DTML, Zope Page Templates, and Python Scripts. Content resides in a

    database or Page Templates, whereas Python Scripts define the logic. Page Templates

    and DTML are used to define the style of a webpage. The Zope framework is described

    in much greater detail in Chapter 3.

    2.2.5 Ariadne

    Ariadne is a web application server and a content management system. It is entirely

    written in the PHP scripting language [ARI03]. Ariadne can be used in conjunction with

    Apache, the web server also used by the CISE Department, and the MySQL and

    PostgreSQL database systems.

    The separation of content, style, and logic is managed as follows: style is managed

    through Templates. They are defined over the web, in a browser and can be any kind of

    text type: html, xml, rtf, etc. Logic is managed through a scripting language "PINP,"

    which consists of a subset of PHP functions. Ariadne stores content in a structured object

    store built on top a relational database system. The object store is very similar to the file

    system of the operating system. It generates files and directories and navigation is done in

    the Ariadne browser. The store or the database contains all the information for the

    website. This information is combined with class descriptions to generate objects. As is

    the case in traditional object-oriented programming, objects have methods associated

    with them, which works on the information that is contained in the database.

    Content, logic, and style are merged to generate a webpage. Ariadne applies the

    user-defined templates (style) on these objects (content) to generate a webpage. Figure

    2.2.5 gives an overview of Ariadne's architecture.























    Figure 2-4 Ariadne's system architecture

    2.2.6 Cocoon

    Cocoon [COC03] was developed by the Apache Software Foundation as an open

    source project written in the Java language. In Cocoon, content is always stored in XML.

    The XML content is normally stored in files, but could also come from a relational or

    XML-database. The main idea is that XML-based data can be represented as needed in an

    HTML browser for a website, as PDF for printing purposes, as WML for cell phones, or

    RTF for use in office applications. Style is managed with XSLT. The advantage of using

    open standards such as XML and XSLT is that the data is not bound to a proprietary data

    format and proprietary systems, which are always bound to the current market and could

    disappear from one day to the next. Another strength of Cocoon is the simplicity, with

    which the same data can be represented in different output formats.

    Cocoon's biggest disadvantage is the use of XSL. XSL is quite complex and cannot

    be mastered by someone who is used to working on the layout of websites with

    FrontPage and Photoshop, since some background in programming is required.


    ~.;~l~,i i~.l~~~l~:l .~.i I









    2.2.7 Evaluation

    Table 3-2 gives an overview of the CM systems discussed in this chapter. The table

    includes the following information:

    * Name of the product

    * Web Server: does the product come with its own server, or does it integrate with
    existing web servers? This question is important since the CISE Department
    currently employs an Apache web server, and we assume that they intend to use
    that server in the future.

    * Database: can the system be set up to query an existing RDBMS/ other database
    management system?

    * Operating System: which operating system can the software be installed on?

    * Input Document: what kind of document can be stored by the system?

    * Output Document: what kind of document can be generated by the system?

    * HTML Editor/ Generator: does the system come with an integrated HTML
    WYSIWYG editor, comparable to FrontPage or Dreamweaver?

    * Access Rights Management: can many authors collaborate with this system?

    * Programming Language used: what kind of languages will have to be learned by
    someone using the system?

    * Documentation available: is documentation available on how the system is installed
    and used?

    * User base: is there a community of developers to speak of?

    * Installation: how hard and time-consuming will the installation be?

    * Ruled out: due to which criterion was the system ruled out?

    We have applied the following criterions to each of the systems, and thus singled

    out the one winning system, which was able to fulfill all criterions:









    A. The system is not very well supported. A small user group and outdated or

    non-existent documentation indicate this. Another option is that the system

    belongs to the academic area is not yet fit for use in a concrete scenario.

    B. The development of applications with this system would be very complex

    and time consuming. This could be due to the fact that the system is using

    unpopular programming languages, which would require a lot of time to

    learn.

    C. The systems cannot be set up within the CISE environment. This could

    mean that the system does not allow a connection to an Oracle database,

    which is the one provided by the CISE Department, or that the system

    cannot be installed under one of the operating systems provided by CISE.

    Since the only operating system available for our usage is Solaris, this is

    an important factor. The CISE Department does provide Windows

    machines as well, however, administrator rights would be needed to install

    new software. The Solaris machines do not have this restriction.

    Of all systems, we have chosen Zope for the implementation of the new CISE

    Department website. In the following, some additional reasons are given as to why Zope

    is a good fit for our requirements.

    First and foremost, Zope is free of cost and distributed under an open-source

    license. This not only means that we can use Zope without having to pay for the software.

    It also means that as with most other open source software systems, the user community

    is fairly large many people have made the same decision of not spending money when

    something free can be tested first. Whenever the user community is large, it means that









    documentation must be available or is about to be created, and good support through

    mailing lists and web forums exist. This is definitely the case with Zope. Since there is a

    large community of application developers, new Zope add-on "Products" (more about

    this in Chapter 3) appear almost on a weekly basis. The quality of the product definitely

    increases when several developers are able to take a look at the source code ("peer

    review"). In open source systems, peer review is an important factor that ensures quality

    at a low price and the inclusion of new ideas are much easier to implement than in

    proprietary systems. Most closed-source, commercial tools do not let users extend,

    customize, and redistribute them. This is not the case with Zope. Another fact that arises

    from Zope's open source property is its continuity. Since there are many users and

    developers supporting this product, Zope is less likely to disappear from one day to the

    next than some proprietary CM software system, which is always dependent on the

    current market situation in the IT sector and thus constantly threatened by bankruptcy!

    Furthermore, Zope itself is an inclusive platform. It comes with all the necessary

    components to begin developing an application. No extra license software is needed to

    support Zope. It also turned out that Zope was very easy to install, since no extra software

    had to be installed to make Zope function.

    As stated in Chapter 4, one of the main requirements is the ease of use of the

    application. Ideally, no additional knowledge is needed when dealing with maintaining

    the CISE website. Zope's Management Interface is displayed in a web browser. The

    Internet Explorer, Mozilla, Netscape, OmniWeb, Konqueror, and Opera browsers are all

    known to be able to be used to display and manipulate Zope's development environment.

    Most everybody today knows how to use a web browser. One does not need to learn and









    get used to an entirely new IDE (Integrated Development Environment). What's more,

    developers can delegate duties to other developers through the web using the same

    interface. Very few other application servers, if any, deliver the same level of

    functionality. Zope allows teams of developers to collaborate easily. Collaborative

    environments require tools to allow users to work without interfering with each other, so

    Zope has Undo, Versions, History and other tools to help people work safely together and

    recover from mistakes. Many other application servers do not provide these kinds of

    features. Some tools do not scale as well as Zope does to handle large numbers of

    developers and users. Zope has a consistent, powerful user management system that can

    scale to many users with unique, easily managed privileges.

    Additionally, Zope runs on most popular microcomputer operating system

    platforms: Linux, Windows NT/2000/XP, Solaris, FreeBSD, NetBSD, OpenBSD, and

    Mac OS X. Zope even runs on Windows 98/ME (recommended only for development

    purposes, however). Many other application server platforms require that you run an

    operating system of their licensor's choosing. This gives the CISE Department a vast

    array of choices as to what operating system to install Zope on.

    Moreover, Zope can be extended using the interpreted Python scripting language.

    Python is popular and easy to learn, and it promotes rapid development. Many libraries

    are available for Python. Many other application servers must be extended using

    compiled languages such as Java, which cuts down on development speed. Many other

    application servers use less popular languages for which there are not as many ready-to-

    use library features.









    As described in Chapter 3, Zope and the programming language Python are entirely

    object-oriented. As opposed to scripting languages such as PHP and Perl, the object-

    orientation was not added as a feature after the language had existed for some years.

    Python, the base technology of Zope, was designed as an object-oriented language from

    scratch. If applied consequently, the 00-programming paradigm leads to better, more

    maintainable code. Whilst PHP was created for web applications, Python is more of a

    "real" programming language. This is an advantage when one has to implement

    functionality that is not directly related with web presentation.

    Zope is being developed since 1996 and has proven itself to be extremely reliable.

    The Zope website [ZOP03b] lists a number of impressive, reputable clients (Navy, Nasa,

    and Bank of America to name but a few).

    Another interesting aspect of Zope is the scalability. Zope Enterprise Objects can

    be added, which allow a site to increase capacity by adding computing resources to

    handle the load [EVE03].









    Table 3-2 Comparison of CMS


    Zope Cocoon OpenCMS Ariadne Strudel

    Web Server Apache Tomcat Apache Apache (1.3.19 Apache Apache
    Own server (Zserver) Tomcat + up) or MS IIS Tomcat Tomcat
    5.0
    Database Oracle, PostgreSQL, RDBMS, MySQL (3.23.40 MYSQL, Relational
    MySQL, Sybase, LDAP, + up) or Oracle PostgrSQL Database (no
    Interbase, DB2, any Native (8.1.7 + up), further
    ODBC-compliant XML MS-SQL 7.0 specification)
    database, including SQL Data
    Server 2000 bases


    Operating Linux, Unix, Windows Windows Windows Linux, Unix,
    System Windows98/2000/ME/NT, 2000, 98/2000/ME/NT, 2000. Windows98/
    MacOSX, FreeBSD, Linux, Linux, Solaris 2000/ME/NT
    NetBSD, OpenBSD Solaris (2.7)
    Input Document XML, HTML XML, XML, HTML HTML, XML
    HTML XML, RTF
    Output PDF, HTML, TXT, DOC, XML, PDF, WAP, HTML, HTML,
    Document PS HTML, HTML, XML, XML XML, PDF
    RTF, TXT, DOC, PS
    HTML NO No Editor YES HTML No Editor
    Editor/Generator but has Editor but has
    HTML HTML
    Generator Generator

    Access Rights YES XRPM YES YES NO
    Management
    Programming Python, DTML Java, Java PHP StruQL
    Language Used Servlets,
    XML and
    XSP
    Documentation Online Help YES Online Help Under API available
    Available API available Development Documentati
    "Zope Administrators on under
    Guide" construction
    (since 1999)
    User Base YES YES YES 8 companies Research

    Installation Detailed installation guide YES HTML setup Incomplete Rough
    setup wizard for Windows wizard Installation installation
    guide guide on
    website
    Ruled out B C B A














    CHAPTER 3
    ZOPE

    The Z Object Publishing Environment (Zope) is a comprehensive web application

    development environment, web server, and content management system written in

    Python. In this chapter, we will explain Zope's purpose and audience in greater detail.

    Most of the information has been gathered from the Zope Book [LAT01].

    3.1 Introduction

    To understand the purpose of Zope, it is first of all necessary to understand what a

    web application is. We can make a distinction between a static and dynamic website. A

    dynamic website has also been termed a web application.

    To maintain a static website, there has to be a person with specific access rights, the

    Webmaster, in charge of manually updating the site's content. This entails manually

    visiting and updating the HTML that makes up each page. Normally, the Webmaster does

    so by updating a set of files on the web server (the machine that runs the website). Each

    of these files represents a single page. If a Webmaster had to change the look-and-feel of

    a static website he would have to visit and update every single file that composes the

    website. For a large website (such as the CISE site) this task can become non-trivial. It is

    also the case that the Webmaster might make mistakes and forgets to update or remove

    critical pages and links.

    Dynamic websites (or web applications) are also served over a web server. The

    difference to static websites is, however, that they are generated each time that a user

    requests the page. For example, a web application might query a database and generate









    some HTML to display the results of the database query in a page. Web applications are

    extremely common. Some popular examples of web applications are those that let users

    search the web, like Google; collaborate on projects, like SourceForge; buy items at an

    auction like eBay; communicate with other people over e-mail, like Hotmail; or view the

    latest news such as cnn.com. Users and browsers are usually not aware of the difference

    between contacting a web server which delivers a static website and a web server which

    delivers a web application.

    A framework, which allows people to construct a web application, is often called a

    web application server, or sometimes just an application server. A web application server

    typically allows a developer to create a web application using some common computer

    programming language. This is exactly the purpose of Zope.

    3.2 Zope History

    In 1996 Jim Fulton (the current CTO of Zope Corporation, the distributors of Zope)

    had to teach a class on CGI programming, even though he knew only little about the

    subject. Common gateway interface (CGI) programming is a commonly used web

    development model that allows developers to construct dynamic websites (please refer to

    Chapter 2, Related Work, for more information on CGI). Fulton realized that there were

    several aspects of CGI based programming that he did not like, and so he wrote the core

    of Zope on the plane flight back from the class.

    Zope Corporation, which was then known as Digital Creations, then released three

    open source software packages to support web publishing, Bobo, Document Template,

    and BoboPOS. All of these packages were written in the Python programming language.

    All of them provided a web publishing facility, text templating, and an object database.

    Digital Creations had also developed a commercial application server based on their three









    open source components. This product was called Principia. Investor Hadar Pedhazur

    convinced Fulton in November of 1998 to open source Principia. Zope has evolved from

    the Principia components.

    According to the Zope website, the "Z" in Z Object Publishing Environment does

    not really mean anything in particular. Most of Zope is written in the Python scripting

    language, with performance-critical pieces written in C.

    3.3 Zope' s Fundamental Concepts

    This subsection lists the fundamental underlying concepts of the Zope framework.

    Zope is a framework. Zope combines several tools including a web server, an

    object database (ZODB), and two scripting languages: a tag-based scripting alternative,

    (DTML) analogous to XSP or JSP, and one in which special formatting attributes are

    embedded directly inside HTML tags, (Zope Page Templates or ZPT), for compatibility

    with standard HTML tools such as Dreamweaver, Netscape Composer, or FrontPage. We

    describe the scripting languages in greater detail in Section 3.7. It is possible to build

    websites by writing pure HTML or by encoding automation using Python (Perl is also

    supported). It is easy to connect to external databases such as Oracle or MySQL, an area

    we cover in Section 3.8. Zope can also be attached to Apache instead of the built-in Zope

    "Medusa" web server.

    Object orientation. Most web scripting languages are procedural, such as Perl,

    PHP, or ASP. Unlike these popular scripting languages, Zope is an object-oriented

    application server. Object orientation is a software development pattern that is used in

    many programming languages (C++, Java, Python, Eiffel, Modula-2, others). We give

    further details in Section 3.5.









    Website publishing. Zope's founders realized that the Web is fundamentally

    object-oriented. A URL to a Web resource is nothing but a path to an object in a set of

    containers. A way of sending messages to an object is provided with the HTTP protocol.

    The object structure of Zope is hierarchical. This means that a Zope site is typically

    composed of objects, which contain other objects (which in turn contain other objects,

    etc.). URLs map to objects in the hierarchical Zope environment based on their names.

    For example, the URL "Research/index.html"could be used to access the Document

    object named "index.html"located in the Folder object named "Research."

    Zope's duty is to "publish" the objects one creates. This works as follows: say a

    web browser sends a request to the Zope server. The request specifies a URL in the form

    protocol://host:port/path?querystring,e.g.
    http://www.zope.org:8080/Resources?batch start=100.

    Zope separates the URL into its component "host," "port", "path", and "query

    string" portions (' http://www. zope .org', 8080, /Resources and

    ?batch_start=100, respectively).

    Zope then locates the object in its object database corresponding to the "path"

    ('/Resources '). It executes the object using the query string as a source of parameters

    that could alter the behavior of the object. This means that the object may behave

    differently depending on the values passed in the query string. If it is the case that

    executing the object returns a value, then the value is sent back to the browser. Normally,

    a given Zope object returns HTML, file data, or image data, which is interpreted by the

    browser and shown to the user.









    Mapping URLs to objects is not a new idea. Web servers like Apache and

    Microsoft's IIS do the same thing. They translate URLs to files and directories on a file

    system. Zope similarly maps URLs on to objects in its object database.

    A Zope object's URL is based on its "path." It is composed of the ids of its

    containing Folders and the object's id, separated by slash characters. For example, if

    there is a Zope "Folder" object in the root folder called Schneider, then its path would be

    /Schneider. If Schneider is in a sub-folder called Professors then its URL would be

    /Professors/Schneider.

    There could also be other Folders in the Professors folder called Hammer and

    Dankel. One would access them through the web similarly:



    /Professors/Hammer
    /Professors/Dankel.


    The URL of an object is composed of its host, port, and path. So for the Zope

    object with the path /Schneider on the Zope server at http://localhost:8080, the

    URL would be http://localhost:8080/Schneider. Visiting a URL of a Zope object

    directly is termed calling the object through the web. This causes the object to be

    evaluated and the result of the evaluation is returned to the web browser. This is also

    where Zope's name stems from "objects" are "published" and presented in an

    appropriate format to the user.

    Zope's Web Management Interface. A web browser is all one needs to access the

    Zope Management Interface (ZMI) since all management and application development

    can be done completely through the web. The Zope management interface provides a









    familiar Windows Explorer-like view of the Zope object system. Screenshots can be

    found in Chapter 6. Through the management interface a developer can create Zope

    objects without requiring access to the file system of the web server. More on the ZMI

    can be found in Section 3.6.

    Security. Usually, web applications have more than one author. This can quickly

    become problematic. It is important to decide how much control every author should get.

    The question of how this will affect the security immediately arises. Suppose, an author

    has access to all files. What happens if the SQL code embedded in one of the files the

    author is working on exposes the database login (which is usually the case with

    ASP/JSP/PHP)? The author could get access to the database, which might not have been

    planned.

    The objects in Zope provide a much richer set of possible permissions than a

    conventional file-based system. Permissions vary by object type based on the capabilities

    of that object. It is therefore possible to implement strict security control such as setting

    access control so that authors can use "Z SQL Method" objects, but not change them or

    even view their source. One could also set restrictions so that a user can only create

    certain kinds of objects, for instance "Folders" and "DTML Documents" but not "SQL

    Methods" or other objects.

    Zope provides the capability to manage users through the web via "User Folders,"

    which are special folders that contain user information. The ability to add new User

    Folders can be delegated to users within a subfolder. This allows delegating the creation

    and user management of subsections of the website to semi-trusted users without having

    to worry about those users changing the objects "above" (in the hierarchy) their folder.









    Native object persistence and transactions. The Zope Object Database (ZODB),

    a transactional object database, is in charge of storing all Zope objects. Each web request

    is treated as a separate transaction by the ZODB. Should an error occur in the application

    during a request, then any changes made during the request are automatically rolled back.

    The ZODB also provides multi-level undo, which allows a site manager to "undo"

    changes to the site with the click of a button. The Zope framework makes all of the

    details of persistence and transactions totally transparent to the application developer. We

    cover this area in more detail in Section 3.8

    Acquisition. Acquisition is one of the most powerful aspects of Zope. The basic

    idea is that since Zope objects are contained inside other objects (such as Folders),

    objects can "acquire" attributes and behavior from their containers.

    The concept of acquisition works with all Zope objects. A commonly used SQL

    query or snippet of HTML, for example, can be defined in one Folder and objects in

    subfolders can use it automatically through acquisition. If the query needs to be changed,

    one only needs to change it in one place without worrying about all of the sub objects that

    use the query. This is particularly useful when compared to other scripting languages,

    which normally mingle SQL code, and HTML tags such as JSP, ASP, and PHP (see

    Section 2.1.4). When a query changes, the programmer needs to edit the query

    everywhere it is executed, which can become very tedious and time-consuming.

    Objects are acquired by starting at the current level in the containment hierarchy

    and searching upward. Therefore, it is easy to specialize areas of a site with a minimum

    of work. If, for example, one has a Folder named "Research" on a site containing

    research-related content, one could create a new header and footer document in the









    Research Folder that use a research-related look-and-feel. Content in the Research folder

    and its subfolders will then use the specialized research header and footer found in the

    "Research" folder rather than the header and footer from the root folder on the site.

    Extensibility. Zope is easily extensible. More advanced users can create new kinds

    of Zope objects, either by writing new Zope add-ons in Python or by building them

    completely through the Web. There are a set of Zope add-on products available on the

    Zope Corporation's website that provide features like drop-in Web discussion topics,

    desktop data publishing, XML tools and e-commerce integration. Many of these products

    have been written by the highly active members of the Zope community, and most are

    also open source. To illustrate how active this community is, one only needs to take a

    look at the 757 Zope free products listed on Zope's website [ZOP03a] (date: July 9th

    2003)!

    3.4 Zope Architecture

    Zope's fundamental components are shown in Figure 3.

    Zserver. Zope comes with a built-in web server that serves content to users. This

    web server also serves Zope content via FTP, WebDAV, and XML-RPC (a remote

    procedure call facility).

    Web server. In case one already has an existing web server, such as Apache or

    Microsoft HS and one does not wish to use Zope's, Zope can be set up to work with an

    existing web server. Zope works with any other web server that supports the Common

    Gateway Interface (CGI).

    Zope core This is the engine, which coordinates everything, driving the

    management interface and object database.

    Object database. All objects are stored in Zope's object database.









    Relational database. Not all information has to be stored in Zope's object

    database. Zope works with other relational databases such as Oracle, PostgreSQL,

    Sybase, MySQL and others.

    File system. Zope works with documents and other files stored on the server's file

    system.

    ZClasses. Zope allows site managers to add new object types to Zope using the

    Zope Management Interface. ZClasses are these kinds of objects.

    Products. Zope also allows site managers to add new object types to Zope by

    installing "Product" files on their Zope server's file system.

    3.5 Object Orientation in Zope

    As mentioned in the Fundamental Concepts Section above, Zope is an object-

    oriented development environment. Therefore, we need to explain attributes, methods,

    classes, and inheritance to gain full understanding of Zope. This chapter provides an

    overview of the fundamentals of object orientation from the perspective of a Zope

    developer.

    Objects. In an object-oriented application, programs designed around objects.

    Objects are self-contained "bundles" of data and logic. Both data and code are stored in

    one or more objects, each of which represents a particular "thing." In Zope, the

    Control Panel is an object, Folders which one creates are objects, and even the Zope

    "root folder" is an object. When one uses the Zope "add list" to create a new item in the

    Zope Management Interface, one creates an object. People who extend Zope by creating

    Products define their own types of objects which are then entered in to the Zope "add

    list," allowing one to create objects from them. A product author might define a "Form"









    object or a "Weblog" object. Basically, anything that can be described using a noun can

    be modeled as an object.


    Figure 3 Zope Architecture

    Attributes. The data of an object is defined by its attributes. Typically, an object

    uses attributes to store elements that describe it. The attributes assigned to an object

    define the object's state. Properties in Zope are special kinds of web-editable object

    attributes.









    Methods. Methods define the set of actions that an object may perform. They are

    code definitions attached to an object, which typically perform an action based on the

    attributes belonging to the object on which the method is defined.

    Some objects in Zope are actually called "methods." For example, there are DTML

    Methods, SQL Methods, and External Methods. They are "bound" to their containing

    Folder object by default when called, and the logic that they contain normally makes

    reference to their containing Folder.

    Classes and instances. A class defines an object's behavior and acts as a

    constructor for an object. The objects that are constructed by a class are the instances. As

    an example, there could be a Research folder with an id attribute of Research, while

    another folder may have an id attribute of MyFolder, but they are both instances of the

    same class, and therefore behave identically. All of the objects that one deals with using

    the Zope management interface are instances of a class. Typically, if the class did not

    come by default with Zope, then it was defined in Zope Products, which are created by

    Zope developers and community members.

    Inheritance. Sometimes it is desirable for objects to share the same essential

    behavior, except for small deviations from each other. In Zope, inheritance is used

    extensively. For example, the Zope "Image" class inherits its behavior from the Zope

    "File" class, because images are really just another kind of file, and they share many

    behavior requirements. But the "Image" class adds a bit of behavior which allows it to

    "render itself" by printing an HTML tag instead of causing a file download. It does this

    by overriding the index_html method of the File class.









    Object lifetimes. Object instances have a specific lifetime. Either a programmer or

    a user of the system in which the objects "live" typically controls this lifetime.

    Instances of web-manageable objects in Zope like Files, Folders, DTML Methods,

    and such have a lifetime of from when a user creates them until she deletes them. These

    kinds of objects are also described as persistent objects. They are stored in the ZODB.

    Other object instances have different lifetimes. There are object instances in Zope,

    which last for a "programmer-controlled" period of time. For instance, the object that

    represents a web request in Zope (also called REQUEST), has a well-defined lifetime. Its

    lifetime lasts from the moment that the object publisher receives the request from a

    remote browser until the response is sent back to that browser. It is then destroyed

    automatically. Zope "session data" objects have another well-defined lifetime. These

    objects last from the time that a programmer creates one on behalf of the user via his

    code until the system (on behalf of the programmer or site administrator) deems it

    necessary to throw away the object in order to conserve space or indicate an "end" to the

    user's session. This is defined by default as 20 minutes of "inactivity" by the user for

    whom the object was created.

    3.6 Zope Management Interface

    Upon logging in to Zope over a web browser, one is presented with the Zope

    Management Interface (ZMI). The ZMI is a management and development environment

    that allows users to control Zope, manipulate Zope objects, and develop web

    applications.

    The ZMI represents a view into the Zope object hierarchy. Almost every link or

    button in the ZMI represents an action that is taken against an object. Objects can be

    dropped in anywhere in the object hierarchy. Site managers can work with their objects









    by clicking on tabs that represent different "views" of an object. These views vary

    depending on the type of object. A "DTML Method" Zope object, for example, has an

    "Edit" tab which allows one to edit the document's source, while a "Database

    Connection" Zope object provides views that let one modify the connection string or

    caching parameters for the object. All objects also have a "Security" view that allows one

    to manage access control settings for that object.

    The Zope management interface is broken into three frames:

    * The left frame is called the Navigator Frame. The user can navigate around Zope
    much like he would navigate around a file system with a file manager like the
    Windows Explorer. In this frame one sees the root folder and all of its subfolders.
    The root folder is in the upper left corer of the tree. The root folder is the "top" of
    Zope. Everything in Zope lives inside the root folder.
    * Above the folder tree Zope shows login information in a frame (called Status
    Frame), i.e. which user is presently logged in.
    * To manage a folder, the user must click on it and it will appear in the right-hand
    frame of the browser window. This frame is called the Workspace Frame. The
    workspace gives information about the current object, and lets one change it.
    Across the top of the screen are a number of tabs. Each tab takes the user to a
    different view of the current object. Each view lets the user perform a different
    management function on that object.

    3.7 Zope's Scripting Languages

    3.7.1 Python

    So far, we have made a distinction between logic, content, and style. This Section

    explains in more detail how this distinction is achieved in Zope. What is the difference

    between Logic and Style? Style formats and displays information, whereas Logic

    provides those actions which change objects, send messages, test conditions and respond

    to events. With Zope, style is handled with DTML or Page Templates, and logic is

    handled with Python scripts.

    Zope Script objects are objects that encapsulate a small chunk of code written in a

    programming language. Script objects first appeared in Zope 2.3 and are now the









    preferred way to write programming logic in Zope. Currently, Zope comes with Python-

    based Scripts, which are written in the Python language. There is a third-party extension

    to Zope, which allows users to write Perl-based Scripts in the Perl language. However,

    support for Perl based scripts has almost vanished, and products for this area are not

    actively under development any more.

    Python code comes in two variants for the Zope framework: Python Scripts and

    External Methods.

    Python scripts. Python, a general purpose scripting language, can be used to

    control Zope objects and perform other tasks. These Scripts give general purpose

    programming facilities within Zope. To create a Python-based Script one needs to choose

    Script (Python) from the Product add list in the Zope Management Interface.

    External methods. An External Method executes Python code like a Python Script

    does. However, this code is not stored in the ZODB but in a Python source file in the file

    system. As the file system is considered much safer than the web-editable ZODB,

    external methods are not restricted by Zope's security system. They can access the

    complete Python library, all Zope packages and modules and any attribute in objects,

    even private ones.

    Sometimes the security constraints imposed by scripts, DTML, and ZPT are too

    strict. This could be the case when, for example, one wants to read files from disk, or

    access the network, or use some advanced libraries for things like regular expressions or

    image processing. External Methods would be used in these cases.

    To create and edit External Methods the file system needs to be accessed. This

    makes editing these scripts more cumbersome since they cannot be edited right in a web









    browser. However, requiring access to the server's file system provides an important

    security control. If a user has access to a server's file system they already have the ability

    to harm Zope. So by requiring that unrestricted scripts be edited on the file system, Zope

    ensures that only people who are already trusted have access.

    External Method code is created and edited in files on the Zope server in the

    Extensions directory. This directory is located in the top-level Zope directory. To add an

    External Method in Zope, one needs choose External Method from the product add list in

    the Zope Management Interface.

    Calling Python scripts. There are two general ways to call a script and provide it

    with a context: by visiting a URL, and by calling the script from another script or

    template. The following Section explains how a Python Script is called by visiting a URL

    or from another script. The following Sections about DTML and Zope Page Templates

    detail how a Python Script is called, respectively.

    Calling Scripts from the web. A script can be called directly with a web browser

    by visiting its URL. A single script can be called on different objects by using different

    URLS. This works because Zope can determine the script's context by URL. This is a

    powerful feature that enables users to apply logic to objects like documents or folders

    without having to embed the actual code within the object.

    To call a script on an object from the web, one needs to visit the URL of the object,

    followed by the name of the script. This places the script in the context of your object. To

    call the add script on the Professor object inside the root folder one would visit the URL

    Professor/add.









    Arguments can be passed to a URL, too. They are appended as standard query

    strings:

    http://zope:8080/Professor/add?name=Schneider

    Calling Python scripts from a Python script. Calling scripts from other Python or

    Perl scripts works the same as calling scripts from DTML, except that script parameters

    must always be passed calling a script from Python. For example, here is how the

    updatelnfo script might be called from within a Python script:

    newName= 'Schneider'
    context.update(name=newName, email="mschneid@cise.ufl.edu").

    The context variable is used to tell Zope to find updatelnfo by acquisition.

    3.7.2 DTML

    DTML (Document Template Markup Language) is a templating facility, which

    supports the creation of dynamic HTML and text. It belongs to the family of a server-side

    scripting languages. This means that Zope executes DTML commands at the server, and

    the result of that execution is sent to the web browser. By contrast, client-side scripting

    languages like JavaScript are not processed by the server, but are rather sent to and

    executed by the web browser. DTML is used for scripting in two types of Zope objects,

    DTML Documents and DTML Methods.

    DTML is typically used in Zope to create dynamic web pages. For example, one

    might use DTML to create a web page, which "fills in" rows and cells of an HTML table

    contained within the page from data fetched out of a database.

    DTML is a tag-based presentation and scripting language. This means that tags

    (e.g. '') embedded in the HTML code cause parts of the page

    to be replaced with "computed" content. Typically, DTML is mixed with HTML as

    follows










    Hello Worldl
    .

    The above DTML methods standard html header and standard html footer are

    either DTML documents or DTML methods. They would, in turn contain a mixture of

    DTML and HTML. The resulting page consists of the generated HTML only. The basic

    idea is that DTML Methods can act as templates tying reusable bits of content together

    into dynamic web pages.

    DTML is similar in function to "HTML-embedded" scripting languages such as

    JSP, ASP and PHP. It differs from these facilities by not allowing users to create "inline"

    Python statements (if... then.. else..) in the way that JSP or PHP will allow embedding a

    block of their respective language's code into an HTML page. DTML provides flow

    control and conditional logic by way of "special" HTML tags (, ,

    ...). It can also be compared to the web server facility of Server Side Includes (SSI), but

    with far more features and flexibility.

    Zope has a technology named Zope Presentation Templates, which has purpose

    similar to DTML. They are presented further in the next Section. DTML and ZPT are

    both scripting languages which allow users to create dynamic HTML. However, DTML

    is capable of creating dynamic text, which is not HTML, while ZPT is limited to creating

    text which is HTML (or XML). DTML also allows users to embed more extensive

    "logic" in the form of conditionals and flow-control than does ZPT. While the source to a

    ZPT page is almost always "well-formed" HTML through its lifetime, the source to

    DTML pages are not guaranteed to be "well-formed" HTML, and thus do not play well in

    many cases with external editing tools such as FrontPage or Dreamweaver.









    Calling Python scripts from DTML. Python scripts are called from DTML with

    the call tag. For example:

    .
    DTML will call the scriptName script, whether it is implemented in Perl, Python,

    or any other language. Other DTML objects and SQL Methods would be called the same

    way.

    If the scriptName script requires parameters, one can simply pass in any variables

    that are valid in the current DTML namespace. For example, if newName and newEmail

    are defined using , the variables can be passed as parameters like this:

    .

    3.7.3 Zope page templates

    Page Templates are a web page generation tool. They help programmers and

    designers collaborate in producing dynamic web pages for Zope web applications.

    Designers can use them to maintain pages without having to abandon their layout tools.

    The goal of Page Templates is to allow designers and programmers to work

    together easily. A designer can use a WYSIWYG HTML editor to create a template, then

    a programmer can edit it to make it part of an application. If required, the designer can

    load the template back into his editor and make further changes to its structure and

    appearance. By taking reasonable steps to preserve the changes made by the programmer,

    the designer will not disrupt the application.

    Page Templates aim at this goal by adopting three principles:

    1. Play nicely with editing tools.
    2. What you see is very similar to what you get.
    3. Keep code out of templates, except for structural logic.
    A Page Template is like a model of the pages that it will generate. In particular, it is

    a valid HTML page.









    Page Templates use the Template Attribute Language (TAL). TAL consists of

    special tag attributes. For example, a dynamic page title might look like this:


    Page Title.
    The tal: content attribute is a TAL statement. The name content indicates that it

    will set the text contained by the title tag, and the value "here/title" is an

    expression providing the text to insert into the tag.

    Since it has an XML namespace (the tal: part) most editing tools will not

    complain that they do not understand it, and will not remove it. It will not change the

    structure or appearance of the template when loaded into a WYSIWYG editor such as

    FrontPage or a web browser. This makes TAL quite unique, when compared to other

    scripting languages. Most popular scripting languages such as ASP, PHP, JSP, and

    CGI/Perl modify the HTML document in a way that a traditional HTML editor cannot

    correctly display it. This immediately means that design and content are not clearly

    separated any more. All TAL statements consist of tag attributes whose name starts with

    tal: and all TAL statements have values associated with them. The value of a TAL

    statement is shown inside quotes (e.g., "here/title").

    To the HTML designer using a WYSIWYG tool, the dynamic title example is

    perfectly valid HTML, and shows up in their editor looking like a title should look like.

    In other words, Page Templates play nicely with editing tools.

    This example also demonstrates the principle that "What you see is very similar to

    what you get." When the template is viewed in an editor, the title text will act as a

    placeholder for the dynamic title text. The template provides an example of how

    generated documents will look.










    When this template is saved in Zope and viewed by a user, Zope turns the dummy

    content into dynamic content, replacing "Page Title" with whatever

    "here/title" resolves to. In this case, "here/title" resolves to the title of the

    object to which the template is applied. This substitution is done dynamically, when the

    template is viewed.

    3.7.3.1 Path Expressions

    In the above example, "here/title" is a path expression. There are many other types

    of path expressions define by the TALES (TAL Expression Syntax) specification. The

    "here/title" path expression in the above example fetches the title property from the

    object to which the template is applied. Another common path expression is

    container/objectlds, which returns a list of Ids of the objects in the same folder as the

    template.

    Every path expression starts with a variable name. To get to sub-objects or

    properties, one has to add a slash ('/') at the end of the variable name.

    In the following, some basic tal tags are explained.

    tal:replace. Zope replaces the entire tag with the value of the path expression.

    For example, would evaluate to the title being

    displayed in the normal format, not bold, because the entire tag was replaced. To

    place dynamic text inside of other text, one would usually use tal: replace on a span

    tag rather than on a bold tag. For example the code:


    The URL is http://www.example.com.

    would translate to (assuming that the id of the Page Template containing the line of

    code is "simplepage):












    The URL is http://localhost:8080/simple_page.

    .


    This is because the span tag is structural, not visual.

    tal:content. If the goal is to insert text into a tag but leave the tag itself alone, one

    would use the tal: content statement. To set the title of a page to the template's title

    property, one would write:


    The Title
    .
    Assuming that the title of the page template is "Simple Page," the source of the

    rendered page would then be:





    Simple Page
    .
    As opposed to the tal:replace tag, the tag was not removed, it is only the<br /> <br /> content of the tag that has changed.<br /> <br /> tal:repeat. The repeat statement is used to generate loops. To illustrate with an<br /> <br /> example, repeat could be used to generate a list of the objects that are in the same folder<br /> <br /> as the template. One could create a table that has columns for the id and title of each<br /> <br /> object as follows:<br /> <br /> <table border="l" width="100%"><br /> <tr><br /> <th>Id</th><br /> <th>Title</th><br /> </tr><br /> <tr tal:repeat="item container/objectValues"><br /> <td tal:content="item/getId">Id</td><br /> <td tal:content="item/title">Title</td><br /> </tr><br /> </table>.<br /> The tal: repeat statement on the table row means "repeat this row for each item<br /> <br /> in the container's list of object values." The repeat statement puts the objects from the list<br /> <br /> into the item variable one at a time (item is called the repeat variable) and makes a copy<br /> <br /> <br /> <br /><br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> of the row using that variable. The value of "item/getId" in each row is the Id of the<br /> <br /> object for that row, and likewise "item/title."<br /> <br /> The above could would for example translate to:<br /> <br /> <table border="l" width="100%"><br /> <tr><br /> <th>Id</th><br /> <th>Title</th><br /> </tr><br /> <tr><br /> <td>acl users</td><br /> <td>User Folder</td><br /> </tr><br /> <tr><br /> <td>images</td><br /> <td></td><br /> </tr><br /> <tr><br /> <td>cise</td><br /> <td></td><br /> </tr><br /> </table>.<br /> One can use any name for the repeat variable ("item" is only an example), as long<br /> <br /> as it starts with a letter and contains only letters, numbers, and underscores ("_"). The<br /> <br /> repeat variable is only defined in the repeat tag. If trying to access it above or below the<br /> <br /> tr tag one will get an error.<br /> <br /> tal:condition. This tag is useful for dynamically querying the environment and<br /> <br /> selectively inserting text depending on some condition. A tal: condition statement<br /> <br /> leaves the tag and its contents in place if its expression has a true value, but removes<br /> <br /> them if the value is false. Zope considers the number zero, a blank string, an empty list,<br /> <br /> and the built-in variable nothing to be false values. Nearly every other value is true,<br /> <br /> including non-zero numbers, and strings with anything in them, including spaces.<br /> <br /> tal:attributes. The tal:attributes tag replaces an attribute of an HTML tag with<br /> <br /> another value. A common use of this is to change links in <a href> statements. The<br /> <br /> following code:<br /> <br /> <a href="link" tal:attributes="href request/URL">Link</a><br /> <br /> <br /> <br /><br /> <br /> <br /> <br /> <br /> <br /> <br /> would replace the "link" with the URL of the request, for example:<br /> <br /> <a href="http://rain.cise.ufl.edu:8080">Link</a>.<br /> <br /> tal:define. The tal: define attribute lets programmers define their own variables.<br /> <br /> One reason for doing so is to avoid having to write long expressions repeatedly in a<br /> <br /> template. Another is to avoid having to call expensive methods repeatedly. One could<br /> <br /> define a variable once within an element on a tag and then use it many times within<br /> <br /> elements which are enclosed by this tag. For example, this define statement declares a list<br /> <br /> as a variable and later tests it and repeats over it:<br /> <br /> <br /> <ul tal:define="items container/objectIds"<br /> tal:condition="items"><br /> <li tal:repeat="item items"><br /> <p tal:content="item">id</p><br /> </li><br /> </ul>.<br /> <br /> <br /> The tal:define statement creates the variable items, which can then be used<br /> <br /> anywhere inside the ul element. The first statement assigns the variable items and the<br /> <br /> second uses items in a condition to see whether it is false (in this case, an empty<br /> <br /> sequence) or true. If the items variable is false, then the ul element (and everything<br /> <br /> contained in the <ul>..</ul> tags) is not shown.<br /> <br /> The items variable in the above example is only visible from the beginning of the<br /> <br /> <ul> tag to its closing tag. By placing the keyword global in front of the variable name<br /> <br /> in combination with the span tag, one can make the definition last from the span tag to<br /> <br /> the bottom of the template:<br /> <br /> <span tal:define="global items container/objectIds"></span>.<br /> <br /> <br /> <br /><br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> 3.7.3.2 Calling Python scripts from Page Templates<br /> <br /> There are two ways of calling a Python script from within a ZPT. The quick way is<br /> <br /> to call a script through the tal:define tag, for example:<br /> <br /> <span tal:define="dummy here/scriptName"/>.<br /> <br /> This example calls the scriptName method and assigns the result to the dummy<br /> <br /> variable. In a page template, here refers to the current context. It behaves much like the<br /> <br /> context variable in a Python-based Script. In other words, scriptName will be looked up<br /> <br /> by acquisition. If the script that is being called requires arguments, one must use a<br /> <br /> TALES python expression like so:<br /> <br /> <div tal:replace="python:here.scriptName(param='one')" />.<br /> <br /> Just as in Path Expressions, the here variable refers to the acquisition context the<br /> <br /> Page Template is called in. The python expression above is exactly like a line of code one<br /> <br /> might write in a Python Script. The only difference is the name of the variable used to get<br /> <br /> the acquisition context. Unfortunately, the different names used in ZPT and Python<br /> <br /> Scripts (context and here) evolved independently. The ZPT variable here is planned to<br /> <br /> become context in a future version of Zope, probably Zope 3.<br /> <br /> Another way of calling a script is through using a common pattern called the<br /> <br /> "form/action/response pattern." The form and response should be Page Templates and the<br /> <br /> action should be a script. The form template gathers the input and calls the action script.<br /> <br /> The action script should process the input and return a response template. This pattern is<br /> <br /> more flexible than the form/action pattern since it allows the script to return any of a<br /> <br /> number of different response objects<br /> <br /> For example here's a part of a form template:<br /> <br /> <br /> <br /><br /> <br /> <br /> <br /> <br /> <br /> <br /> <form action="action"><br /> <input type="text" name="name"><br /> <input type="text" name="age:int"><br /> <input type="submit"><br /> </form>.<br /> This form could be processed by this script:<br /> <br /> <br /> <br /> ## Script (Python) "action"<br /> ##parameters=name, age<br /> ##<br /> container.addPerson(name, age)<br /> return container.responseTemplate().<br /> This script calls a method to process the input ("addPerson") and then returns<br /> <br /> <br /> another template, the response ("responseTemplate"). One can render a Page Template<br /> <br /> <br /> from Python by calling it. The response template typically contains an acknowledgment<br /> <br /> <br /> that the form has been correctly processed.<br /> <br /> <br /> The action script can do all kinds of things. It can validate input, handle errors,<br /> <br /> <br /> send email, etc. Here is a sketch of how to validate input with a script:<br /> <br /> <br /> <br /> ## Script (Python) "action"<br /> ##<br /> if not context.validateData(request):<br /> # if there's a problem return the form page template<br /> # along with an error message<br /> return context.formTemplate(errormessage='Invalid data')<br /> <br /> # otherwise return the thanks page<br /> return context.responseTemplate().<br /> This script validates the form input and returns the form template with an error<br /> <br /> <br /> message if there's a problem. One can pass Page Templates extra information with<br /> <br /> <br /> keyword arguments. The keyword arguments are available to the template via the<br /> <br /> <br /> options built-in variable. So the formTemplate in this example might include a section<br /> <br /> like this:<br /> <br /> <br /> <br /> <span tal:condition="options/errormessage | nothing"><br /> Error: <b tal:content="options/error message"><br /> Error message goes here.<br /> </b></span>.<br /> <br /> <br /> <br /><br /> <br /> <br /> <br /> <br /> <br /> This example shows how to display an error message that is passed to the template<br /> <br /> via keyword arguments. The expression nothing" is used to handle the case where<br /> <br /> no errormessage argument has been passed to the template.<br /> <br /> 3.7.3.3 Macros<br /> <br /> One important feature of Page Templates is the ability to reuse look and feel<br /> <br /> elements across many pages. With DTML, one can achieve so by inserting DTML<br /> <br /> methods such as the standard html header and the standard html footer. ZPT offers this<br /> <br /> functionality, but in a slightly different way. With Page Templates, one can create sites<br /> <br /> with a standard look and feel. No matter what the "content" of a page, it will have a<br /> <br /> standard header, sidebar, footer, and/or other page elements. This is a very common<br /> <br /> requirement for websites.<br /> <br /> The utility for reusing presentation elements across pages is called macros. Macros<br /> <br /> define a section of a page that can be reused in other pages. A macro can be an entire<br /> <br /> page, or just a chunk of a page such as a header or footer. After defining one or more<br /> <br /> macros in one Page Template, they are used in other Page Templates.<br /> <br /> Defining macros. Macros are defined with tag attributes similar to TAL<br /> <br /> statements. Macro tag attributes are called Macro Expansion Tag Attribute Language<br /> <br /> (METAL) statements. Here's an example macro definition:<br /> <br /> <b metal:define-macro="copyright"><br /> Copyright 2003, <em>Rima Gerhard</em>.<br /> </b><br /> This metal: define-macro statement defines a macro named "copyright." The<br /> <br /> macro consists of the b element (including all contained elements).<br /> <br /> Macros defined in a Page Template are stored in the template's macros attribute.<br /> <br /> They are then used from other Page Templates by referring to them through the macros<br /> <br /> <br /> <br /><br /> <br /> <br /> <br /> <br /> <br /> <br /> attribute of the Page Template in which they are defined. For example, suppose the<br /> <br /> copyright macro is in a Page Template called "master_page." Here is how to use<br /> <br /> copyright macro from another Page Template:<br /> <br /> <br /> <br /> <hr><br /> <p metal:use-macro="container/master_page/macros/copyright"><br /> Macro goes here<br /> </P>.<br /> In this Page Template, the p element will be completely replaced by the macro<br /> <br /> when Zope renders the page:<br /> <br /> <hr><br /> <b><br /> Copyright 2003, <em>Rima Gerhard</em>.<br /> </b>.<br /> If the macro changes (in the above example, if the copyright holder changes) then<br /> <br /> all Page Templates that use the macro will automatically reflect the change.<br /> <br /> Zope handles macros first when rendering Page Templates. Then Zope evaluates<br /> <br /> TAL expressions. For example, consider this macro:<br /> <br /> <p metal:define-macro="title"<br /> tal:content="template/title"><br /> template's title<br /> </p>.<br /> <br /> <br /> When using this macro it will insert the title of the Page Template in which the<br /> <br /> macro is used, not the title of the template in which the macro is defined. In other words,<br /> <br /> when using a macro, it's like copying the text of a macro into a template and then<br /> <br /> rendering the template.<br /> <br /> When checking the Expand macros when editing option on the Page Template Edit<br /> <br /> view, then any macros will be expanded in the template's source. When editing in the<br /> <br /> ZMI, rather than using a WYSIWYG editing tool, it is more convenient not to expand<br /> <br /> macros when editing. This is the default for newly created templates. When using<br /> <br /> <br /> <br /><br /> <br /> <br /> <br /> <br /> 72<br /> <br /> <br /> <br /> WYSIWYG tools, however, it is often desirable to have the macros expanded in order to<br /> <br /> <br /> edit a complete page.<br /> <br /> <br /> Slots. Macros are much more useful when one has the option to override parts of<br /> <br /> <br /> them when using them. This can be done by defining slots in the macro that can be filled<br /> <br /> <br /> in when the template is used. For example, the following sidebar macro:<br /> <br /> <div metal:define-macro="sidebar"><br /> Links<br /> <ul><br /> <li><a href="/">Home</a></li><br /> <li><a href="/research">Research</a></li><br /> <li><a href="/projects">Projects</a></li><br /> <li><a href="/contact">Contact Us</a></li><br /> </ul><br /> </div><br /> can be extended by including some additional information in the sidebar on some<br /> <br /> <br /> pages. One way to accomplish this is with slots:<br /> <br /> <div metal:define-macro="sidebar"><br /> Links<br /> <ul><br /> <li><a href="/">Home</a></li><br /> <li><a href="/research">Research</a></li><br /> <li><a href="/projects">Projects</a></li><br /> <li><a href="/contact">Contact Us</a></li><br /> </ul><br /> <span metal:define-slot="additional info"></span><br /> </div>.<br /> When using this macro the slot can be filled like so:<br /> <br /> <b metal:use-macro="container/master.html/macros/sidebar"><br /> <p metal:fill-slot="additional info"><br /> Please visit our <a href="/labs">labs</a>.<br /> </p><br /> </b>.<br /> When rendering this template the side bar will include the extra information that<br /> <br /> <br /> was provided in the slot:<br /> <br /> <div><br /> Links<br /> <ul><br /> <li><a href="/">Home</a></li><br /> <li><a href="/research">Research</a></li><br /> <li><a href="/projetcs">Projects</a></li><br /> <li><a href="/contact">Contact Us</a></li><br /> </ul><br /> <p><br /> Please visit our <a href="/labs">labs</a>.<br /> </p><br /> </div>.<br /> <br /> <br /> <br /><br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> A common use of slot is to provide default presentation, which can be customized.<br /> <br /> <br /> In the slot example in the last section, the slot definition was just an empty span element.<br /> <br /> <br /> However, default presentation can be provided in a slot definition. For example, consider<br /> <br /> <br /> this revised sidebar macro:<br /> <br /> <div metal:define-macro="sidebar"><br /> <div metal:define-slot="links"><br /> Links<br /> <ul><br /> <li><a href="/">Home</a></li><br /> <li><a href="/research">Research</a></li><br /> <li><a href="/projects">Projects</a></li><br /> <li><a href="/contact">Contact Us</a></li><br /> </ul><br /> </div><br /> <span metal:define-slot="additionalinfo"></span><br /> </div>.<br /> Now the sidebar is fully customizable. The links slot could be filled to redefine the<br /> <br /> <br /> sidebar links. However, if one chooses not to fill that slot then one will get the default<br /> <br /> <br /> links, which appear inside the slot.<br /> <br /> <br /> This technique can be taken further by defining slots inside of slots. Following is a<br /> <br /> <br /> sidebar macro that defines slots within slots:<br /> <br /> <div metal:define-macro="sidebar"><br /> <div metal:define-slot="links"><br /> Links<br /> <ul><br /> <li><a href="/">Home</a></li><br /> <li><a href="/products">Products</a></li><br /> <li><a href="/support">Support</a></li><br /> <li><a href="/contact">Contact Us</a></li><br /> <span metal:define-slot="additional links"></span><br /> </ul><br /> </div><br /> <span metal:define-slot="additional info"></span><br /> </div>.<br /> If one wishes to customize the sidebar links one could either fill the links slot to<br /> <br /> <br /> completely override the links, or one could fill the additional_links slot to insert some<br /> <br /> <br /> extra links after the default links. Slots can be nested as deeply as desired.<br /> <br /> <br /> <br /><br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> Whole page macros. Macros can also be used to define entire pages. Here's an<br /> <br /> <br /> example macro that defines an entire page:<br /> <br /> <br /> <html metal:define-macro="page"><br /> <head><br /> <title tal:content="here/title">The title




    This is the body.




    Copyright 2003 Rima Gerhard





    .
    The above macro defines a page with two slots, body, and footer. This macro can be


    used in templates for different types of content, or different parts of a site. For example


    here is how a template for research items might use this macro:



    This page contains information about research conducted here.


    .
    The above template redefines the body slot to contain information about a research


    project.


    The powerful thing about this approach is that one can now change the page macro


    and the research item template will be automatically updated. For example one could put


    the body of the page in a table and add a sidebar on the left and the research item


    template would automatically use these new presentation elements.


    This is a much more flexible solution to control page look and feel than the DTML


    standard html header and standard html footer solution.









    3.7.4 DTML vs. ZPT

    DTML can do things that Page Templates cannot, such as dynamically generate

    email messages (Page Templates can only generate HTML and XML), and so DTML is

    not a "dead end." The Zope Corporation website states, however, that it is probable that

    Page Templates will be used for almost all HTML/XML presentation by Zope

    Corporation and many members of the Zope community have abandoned DTML to work

    with ZPT instead. The Zope mailing list agreed that in Zope 3, which will be the upcoming


    Zope release, DTML is only used in areas where an XML-like language is not necessary, such as


    ZSQL and Mail. The ZPT concept of putting logic in tag-attributes is such a good idea that it

    can be found in Java tag-libs and in the .NET framework. The language chosen for this

    project is therefore ZPT.

    3.8 Connecting to a relational database with Zope

    3.8.1 Difference between ZODB and a relational database

    The Zope Object Database (ZODB) is used to store all the pages, files, and other

    objects users create. It is fast and requires almost no setting up or maintenance. Like a file

    system, it is especially good at storing moderately sized binary objects such as graphics.

    Relational Databases work in a very different way. They are based on tables of

    data. Information in the table is stored in rows. The table's column layout is called the

    schema. A standard language, called the Structured Query Language (SQL) is used to

    query and change tables in relational databases.

    Relational databases and object databases are very different and each possesses its

    own strengths and weaknesses. Zope allows users to use either, providing the flexibility

    to choose the storage mechanism, which is best for the data. The most common reasons









    to use relational databases are to access an existing database or to share data with other

    applications. Most programming languages and thousands of software products work

    with relational databases.

    By using relational data with Zope we can retain all of Zope's benefits including

    security, dynamic presentation, and networking. The database we have used in our

    implementation is Oracle 9i. Oracle is arguably the most powerful and popular

    commercial relational database.

    A database can only be used if a Zope Database Adapter is available. We have used

    the DCOracle2 package from the Zope Corporation [KRO03].

    3.8.2 Z SQL Methods

    Z SQL Methods are Zope objects that execute SQL code through a Database

    Connection. Z SQL Methods can both query and change database data. Z SQL Methods

    can also contain more than one SQL command.

    A ZSQL Method has two functions: it generates SQL to send to the database and it

    converts the response from the database into an object.

    The characteristics of ZSQL methods are as follows: Generated SQL will take care

    of special characters that may need to be quoted or removed from the query. This speeds

    up code development. Results from the query are packaged into an easy to use object,

    which will make display or processing of the response very simple. Transactions are

    mediated (Transactions are discussed in more detail in Section 3.8.4).

    Examples of ZSQL methods. ZSQL methods can be used to query, update, or

    delete from the database. Examples of these operations are ZSQL methods containing the

    following body:










    Q1 ("list all research") : select from Research

    Q2 ("insertresearch") : insert into Research (res_id, area, title,
    lab id) values
    (,
    ,
    ,



    Q3 ("delete research") : delete from Research where res id = res id>
    Queries Q2 and Q3 take arguments. Just like Scripts, Z SQL Methods can take

    arguments. Arguments are used to construct SQL statements. Q2 and Q3 contain DTML

    that is evaluated when the method is called. This DTML can be used to modify the SQL

    code that is executed by the relational database.

    One way of providing the arguments is through calling a Z SQL Method without

    arguments from DTML or ZPT; the arguments are then automatically collected from the

    REQUEST. The other way is that Z SQL Methods can also be called with explicit

    arguments from DTML or Python (e.g.,
    expr= "research_by_id (res_id=42) >). Yet another possibility of getting

    arguments is through Zope's mechanism of acquisition.

    Querying a relational database returns a sequence of results. The items in the

    sequence are called result rows. SQL query results are always a sequence. Even if the

    SQL query returns only one row, that row is the only item contained in a list of results.

    Somewhat predictably, as Zope is object oriented, SQL methods return a Result

    object. All the result rows are packaged up into one object. For all practical purposes, the

    result object can be thought of as rows in the database table that have been turned into

    Zope objects. These objects have attributes that match the schema of the database result.










    Result objects can be used from DTML to display the results of calling a Z SQL

    Method. For example, one might add a new DTML Method called listResearch

    with the following DTML content:



  • : , in the area of
    has a lab with ID


  • .
    This method calls the list all research Z SQL Method from DTML. The

    in tag is used to iterate over each Result object returned by the list all research

    Z SQL Method.

    The body of the in tag is a template that defines what gets rendered for each Result

    object in the sequence returned by list all research. In the case of a table with three

    research fields in it, listResearch might return HTML that looks like this, where the in tag

    rendered an HTML list item for each Result object returned by 1list_all_research.



  • l: Spatio-temporal data modeling, in the Area of Database
    and Information Systems has a lab with ID 3.

  • 2: Knowledge Management, in the Area of Database and
    Information Systems has a lab with ID 4.

  • 3: Data Warehousing, in the Area of Database and
    Information Systems has a lab with ID 4.


  • An important difference between result objects and other Zope objects is that result

    objects are not persistent. They do not get created and permanently added to Zope. They

    exist for only a short period of time; just long enough for you to use them in a result page

    or to use their data for some other purpose. As soon as one is done with a request that

    uses result objects they go away, and the next time one calls a Z SQL Method one gets a

    new set of fresh result objects.









    In summary, the concept of dividing the database access from the HTML design

    template as declared in ZPT or DTML allows us to neatly differentiate between style and

    content, one of the goals of website development as declared in Chapter 2.

    3.8.3 Caching

    Another functionality Zope provides in the area of relational database connectivity

    is caching results. Users can increase the performance of SQL queries with caching.

    Caching stores Z SQL Method results so that if users call the same method with the same

    arguments frequently, they will not have to connect to the database every time.

    Depending on the application, performance can be improved through caching.

    Zope users can manually edit the Maximum number of rows received field, which

    controls how much data to cache for each query. The Maximum number of results to

    cache field controls how many queries to cache. The Maximum time (in seconds) to

    cache results controls how long cached queries are saved for. In general, the larger these

    values are set, the greater is the performance increase, but the more memory Zope will

    consume.

    In general, it is advised to set the maximum results to cache to just high enough and

    the maximum time to cache to be just long enough for an application. For site with few

    hits one should cache results for longer, and for sites with lots of hits one should cache

    results for a shorter period of time. For machines with lots of memory one should

    increase the number of cached results. To disable caching one needs to set the cache time

    to zero seconds. For most queries, the default value of 1000 for the maximum number of

    rows retrieved will be adequate. For extremely large queries one may have to increase

    this number to retrieve all results.









    3.8.4 Transactions

    A transaction is a group of operations that can be undone all at once. As was

    mentioned in Section 3.4, all changes done to Zope are done within transactions.

    Transactions ensure data integrity. When using a system that is not transactional and one

    web actions changes ten objects, and then fails to change the eleventh, then data is now

    inconsistent. Transactions allow us to revert all the changes made during a request if an

    error occurs.

    Most commercial and open source relational databases support transactions. If the

    relational database supports transactions, Zope will make sure that they are tied to Zope

    transactions. This ensures data integrity across both Zope and the relational database.

    It is guaranteed that operations in this transaction are either all performed or none

    are performed even if these operations use a mix of Zope Object Database and external

    relational database.














    CHAPTER 4
    REQUIREMENTS ANALYSIS

    In this chapter, project-relevant information gathered during an analysis phase is

    gathered.

    4.1 Functional Requirements

    The functional requirements for this system are:

    4. The new website should be based on widely spread and reliable web techniques
    such that most browsers can access the site.
    5. The new website embedded in the CMS must adhere to the COE and UF
    Webadmin standards.
    6. The data and the graphical user interface should be separated. This way, alternative
    front ends could be used and the DBMS could be exchanged.
    7. Faculty members and other appointed staff should have the option to access certain
    areas of the site and create content.
    8. Administrative tasks such as adapting the design and content and updating and
    maintaining the database shall be possible without further knowledge of a markup-
    or programming language.
    9. The database should be accessible over an easy-to-use graphical interface,
    providing forms for adding, updating, and deleting data in the database tables.
    Furthermore, there shall be forms for creating new tables in table.
    10. The database transactions must be secure and the application should have multi-
    user functionality.
    11. The application should be easily extendible (e.g., adding a calendar of events, a
    forum, etc.)
    The list of requirements proves that Zope is a good fit: as far as the first functional

    requirement is concerned, Zope allows for any kind of HTML code and client-side

    scripting languages (e.g., JavaScript, CSS, Frames, etc.). All static HTML is rendered as

    usual, Zope simply interprets any existing DTML code or Python Scripts and inserts the

    result in the HTML page.

    The third requirement is fulfilled within Zope through the use of style sheets and

    DTML methods or ZPT macros that can be included to build a page. The fourth









    requirement is also simplified with Zope since comes with a set of elaborate

    authentication and authorization mechanisms. Authentication means finding out who

    someone is, and authorization means determining what that someone can do. Zope

    provides separate facilities to manage the processes of identifying users and granting

    access to controlled actions. Zope is also able to handle transactions, which ensure data

    integrity. Zope transaction boundaries are demarcated by a single request. Zope will

    integrate with third party RDBMS that support transactions, by acting as a transaction

    authority via a two-phase-commit protocol, such that if Zope's transaction succeeds the

    RDBMS will commit.

    As far as requirement 8 is concerned, the extensibility of Zope is obvious since it

    offers a number of prefabricated extensions on the website. We have tested some of the

    available products and have found the installation process straightforward. This said,

    problems were encountered but the Zope mailing lists have always provided immediate

    feedback and help.


    We note that the functional requirements to not impose one single DBMS to use

    (Zope can be set up with Oracle, MySQL, postreSQL and many more). We could have

    therefore made the decision to store all data within the Z Object Database that comes

    with Zope. However, requirement 3 dictates that an RDBMS is preferable in case the

    DBMS is exchanged.

    4.2 Non-Functional Requirements

    1. A flexible database schema that allows for further changes and additions.
    2. Consideration of data security.
    3. Clear, and simple user interface for the maintenance staff
    4. Platform-Independence: the application should be available under any
    operating system, on any machine.









    CISE staff assigned with maintaining the CISE website are not necessarily a

    professional in the area of PCs and the Internet. Therefore, the GUI should have a simple,

    and clear layout. Since the application is web based, pure HTML is preferable to many

    graphical elements and strong usage of JavaScript. This is also important when we

    consider that the application should be compatible to all browser types (requirement 4). It

    might be the case that the maintenance person uses uncommon browsers (such as Mozilla

    or Opera or even old versions of Netscape or the Internet Explorer) or has strong security

    settings that disable Java/JavaScript/Cookies.














    CHAPTER 5
    IMPLEMENTATION

    5.1 Software and Hardware Specifications

    This Chapter details the specific hardware and software used for the

    implementation. First, the hardware is listed. Then, the software needed for the project,

    especially some add-on Zope products, is given.

    The development environment is the rain server of the CISE Department. It was

    manufactured by Sun Microsystems and the operating system distribution is Solaris 8

    SPARC.

    Additionally, we are using the "orcl" Oracle 9i database instance. We have

    migrated to this instance after the department decided to deprecate the old "oradb" 8i

    instance. Zope resides in the research disk space

    /cise/research/SpaceTimeUncertainty/workspace/rima/. The version of Zope used for this

    project is Zope 2.6.0 Solaris 2.8 sparc. This was the current stable release at the time the

    project started. Ever since, a new version of Zope (2.6.1) can be downloaded from the

    Zope website [ZOP03a].

    As far as Zope specific software is concerned (e.g., products), the following

    installations were added to the basic Zope installation:

    * To connect to the Oracle database, it was necessary to install a database adaptor.
    The appropriate Oracle database adapter is DCOracle2 [KRO03].
    * The Photo Product [BIC03] was installed in order to be able to upload pictures and
    have certain photo versions created automatically. The Photo Product creates
    several version of an image, e.g. a thumbnail version, or an
    xsmall/small/medium/large/xlarge version.









    * To use the Photo product, the Image Magick [IMA03] had to be installed as well.
    ImageMagick is a set of tools and libraries to read, write, and manipulate an image
    in many image formats including popular formats like TIFF, JPEG, PNG, PDF,
    PhotoCD, and GIF. ImageMagick can resize, rotate, sharpen, color reduce, or add
    special effects to an image. Version 5.5.7 was used.
    * The ZStyleSheet Product was installed and tested [HAQ03]. It was used throughout
    the dtml-based implementation of the project, but after the switch to ZPT, its use
    was discontinued. However, the product still resides in Zope and could be used for
    future projects.
    All products except for Image Magick mentioned above reside in the

    /lib/python/Products directory of the Zope installation.

    Image Magick is installed under

    /cise/research/SpaceTimeUncertainty/workspace/rima.

    Zope comes with its own web server (as described in Chapter 3). Currently, this is

    the web server used for the website. It is listening to port 8080 on the rain server. Zope

    can also be set up to listen to the standard port 80.

    5.2 Database Design

    The database ER diagram is shown in Figure 5-1.

    Not all of the entities identified in Figure 5-1 have been adapted for this project.

    The description of the chosen, website-relevant entities follows in alphabetical order.

    Administrative. This table stores information about employees of the CISE

    Department that work in the administrative field. This encompasses employees such as

    the secretaries, the graduate und undergraduate academic advisors, the graduate senior

    clerk as well as the graduate program assistant. A field in this table stores whether the

    employee is working with undergraduate students, graduate students, both, or none. The

    title field indicates the job title of the employee.









    Committees. The Committees table stores all departmental committees. The only

    information stored about a committee is its title and its email address, in case it exists

    (this field could be empty).


    Figure 5-1 ER diagram of CISE Department

    Event. Any upcoming event is stored in this table. Information about the presenter,

    their name, affiliation, as well as about the event itself (such as time, location, and

    content) are the attributes stored for an event. An event could be associated with up to

    one Professor, but it might not have any faculty involved with it.

    GradClass. The GradClass table stores general information about the graduate

    classes offered at CISE. It stores the title, course number, a description, the number of

    credit hours the class is worth, and whether the class is a core class for the CISE









    curriculum. The description also contains information about any prerequisites. The

    prerequisites might be other classes (undergraduate or graduate) or general prerequisites

    such as "knowledge in the field of numerical analysis" or "proficiency in at least one

    programming language."

    OfferedGradClass. An offered graduate class stores information related to the

    specific instance of the graduate class. This includes the year, the semester, and a link to

    a web page, the class period and the room number. All of these fields could be left empty,

    in case the information does not exist. An offered graduate class is an instance of exactly

    one graduate class. Exactly one Professor can be teaching the class.

    OfferedUnderGradClass. Parallel to the offered graduate class, an offered

    undergraduate class stores information related to the specific instance of the

    undergraduate class. The year, the semester, a link to a web page, the class period, and

    the room number are stored in case they exist. An offered undergraduate class is an

    instance of exactly one undergraduate class. Exactly one Professor can be teaching the

    class.

    Organizations. The Organizations table stores information about the CISE related

    student organizations that operate at the University of Florida. The title, a link to their

    web page in case they have one, as well as a short description is stored for each student

    organization.

    Overall Links. This table records all links to outside web pages. Outside web

    pages are all web pages that are not stored on the CISE web server. For every such page,

    the link itself, the title, and the area that the link belongs to, are recorded.









    ProfCommittee. This table stores the relationship between a professor and a

    committee, i.e., their primary keys will appear as a tuple in this table when a professor is

    involved in a departmental committee. Additionally, a professor could hold a specific

    position in that committee (e.g., "chair").

    Professor. The Professor table stores information about every professor teaching,

    researching, or otherwise active in the CISE Department. In addition to the personal and

    contact information such as their full name, office number, telephone number, email

    address, and degree, professors can enter details about their interests, which could be

    current or past research interests. The degree can be anything between "M.S." or detailed

    information such as "Ph.D., University of Pennsylvania, 1986." The title field holds the

    job title the professor holds at the CISE Department, e.g. "Assistant Professor,"

    "Lecturer," etc. Finally, each professor has a password. This password is used by the

    professor to log in to the administrative area of the website and to update information

    about himself, his involvement in research and committees or the graduate/undergraduate

    classes that he is teaching.

    ProfResearch. Similarly to ProfCommittee, the ProfResearch table stores the

    relationship between a professor and a research area, i.e., their primary keys will appear

    as a tuple in this table when a professor is involved in a research area.

    Project. The Projects table stores all research projects that are currently active or

    have been active at the CISE Department. The data stored about a Project are the title, a

    link to a web page if existent, and a short description.




    Code Listing 5-4 Usage of getFolders from Page Template When Code Listing 5-4 is viewed through a web browser, Zope interprets the Python script and generates the HTML code in Code Listing 5-5.
    Code Listing 5-5 Generated Code from the getFolders script This concept of giving properties to folders has been applied throughout the implementation of the website. Whenever there had to be a difference between visible (to website visitors) and internal folders, they have been marked with a property, which is then checked by the getFolders Python Script before the folder is displayed. Another script that deals with folder properties is the breadcrumbs script. In the top area of the site, a breadcrumbs navigation shows the current location in the site. It walks the REQUEST.PARENTS list of parents and creates a hyperlink for each parent. It stops at the ciseZPT folder. If the folder has a nickname property, the nickname will be displayed. Otherwise, it will display the Id of the Folder. The script used to generate the links follows: links=[] for parent in context.REQUEST.PARENTS[:-1]: if parent.hasProperty('nickname'): links.insert(0, """%s""" % (parent.absolute_url(), parent.getProperty('nickname'))) else: links.insert(0, """%s""" % (parent.absolute_url(), parent.getId())) if parent.getId() == "ciseZPT": break return "/".join(links). 5.4 Definition Of The Website Style The User Interface is largely dictated by the guidelines from the COE (as outlined in Section 2.1.2), leaving almost no creativity of design to the author. In addition, the look of the new version of the CISE has been adapted. This decision has been made

    PAGE 108

    96 because a totally new look would have been confusing to users who are by now familiar with the new CISE website. The use of Macros has been explained in Chapter 3.7.2 (Zope Page Templates). The CISE website has been created to use one general design template. Code Listing 5-6 illustrates how the site has been set up with macros and slots that can be filled with content by other page templates referencing this macro. The page template has been defined in the index_html page template within the ciseZPT folder (i.e., the main page template displayed to visitors of the site).
    ...
    ...
    ...
    ...


    PAGE 109

    97
    ...
    ...
    ...
    Code Listing 5-6 The index_html page macro The Code Listing in 5-6 only shows the logical slot and macro layout of the site. The actual look (i.e., the HTML code part) has been removed. When reusing the whole page macro defined above, one simply needs to reference it in the page template using it. For example, consider the research folder. When displaying information about the research areas active at the CISE Department, we want to keep the same look and feel as the main CISE web page. Code Listing 5-7 shows how this is achieved.


    PAGE 110

    98
    Research related content will be displayed on this page.
    Code Listing 5-7 Using the whole page macro in another page The first line indicates which macro shall be used. By filling certain slots, we override the code that would otherwise be inserted by the page macro. In the research folder, for example, we do not wish to show the welcome_strip image that can be seen on the main page. Therefore, in the slot welcome_strip, we replace the content. The same counts for the body_title, body_message, and events slot. By filling them with basically nothing, we override the content. The body content, however, has been filled to contain the line Research related content will be displayed on this page. When displaying this web page in a browser, the look and feel of the main page has been reused consistently. The convenience of this approach is that web developers do not have to retype whole chunks of HTML just to get the same look and feel on different pages. All one has to do is reuse the macro and fill slots that change from one page to another. The root/ciseZPT/index_html/macros/page whole page macro is the one mostly used throughout all CISE web pages. Only the undergraduate students are has been modified to use a slightly different macro. The undergraduate macro differs from the traditional root/ciseZPT/index_html/macros/page whole page macro by adding an extra notice at the end of each page:

    PAGE 111

    99

    Interested students should contact a CISE Academic Advisor or visit the
    CISE Student Services Center
    E405 CSE Building
    . This extra bit of information is found on most pages in the undergraduate area (in particular on all pages containing information about degree programs). The pages that use this macro contain the following line rather than the normal macro. The slot that holds the main body content has been renamed to undergrad_body, so the pages include the following line where body content is inserted:
    . 5.5 SQL Queries SQL queries serve the following purposes on the site: Display information: SQL queries are called to query the database. The result is embedded in HTML code for direct display on the site. These queries are typically of the structure SELECT FROM Update information: SQL queries are called to update values stored in the database. These queries usually are of the UPDATE Professor SET WHERE format Add information: SQL methods insert data in the database (INSERT INTO Professor() VALUES ) Delete information: When data has become obsolete, SQL queries are called to delete it (DELETE FROM Professor WHERE )

    PAGE 112

    100 Most of the queries of the first category reside in sql folder inside Zopes root folder. The reason behind this choice is that the queries are frequently reused in different parts (and thus, folders) of the web page. Due to Zopes Acquisition mechanism (see Section 3.3), the ZSQL methods are inherited in any subfolder of the root folder. Queries of type 2, 3, and 4 are locally declared in the folder where they are needed. The maintenance of the database is entirely residing in the dbAmin folder located inside the ciseZPT folder. Every table in the database is represented with a folder, which holds all operations that can be performed on a table. Since the updating, adding, and deleting differ from one table to another, the corresponding SQL queries are stored locally within the folder for the table, rather than in a central place such as the sql folder.
    Name Phone Office
    Beck, Sullivan (352) 392-1057 314E CSE
    Code Listing 5-8 Calling a ZSQL method in embedded HTML

    PAGE 113

    101 Queries of type 1 are usually included in a format resembling the one in Code Listing 5-8, taken from the index_html page template of the ciseZPT/peoples/office folder. Code Listing 5-8 illustrates how the ZSQL method is called from within a page template. The ZSQL method is called allAdministrativeStaff and is one of the methods that is located in the root/sql folder. To get a good looking result web page, the result rows are alternating in color. This is achieved through a call to the Python test method. The odd repeat variable is true for odd-indexed repetitions (1, 3, 5, ...). Whenever odd is true (i.e., for every other row), the background color attribute is set to white, otherwise, the color is #CDD4DE. Another SELECT query frequently used throughout the site is the ZSQL method selectOverallLinksByTitle. All links that lead to external pages are stored in the OverallLinks table of the database. Whenever the link is used on the site, the link is not hard coded as in traditional HTML pages. The problem with hard-coded links is that they arent guaranteed to be consistent. A link can appear at several areas throughout the site. The idea was to retrieve the actual link from the database whenever it is used, so that only one link has to be kept updated (which is the one in the database). As long as the database is kept current, all links on the website will be up-to-date as well. This was implemented with the following tal statement: XXX. XXX in the above code snippet would in reality be the name of the link that is to be retrieved (e.g., Undergraduate Catalogs, College of Engineering, Critical Dates, etc).

    PAGE 114

    102 Queries of type 2, 3, and 4 are further explained in the Section 5.6.1. 5.6 User Groups 5.6.1 Authentication to the dbAdmin area The database administration can be performed by a set of people. The first user group that has the privilege to perform database operations are the Database Administrators, who have the right to modify every table in the database. The second group of people who are allowed to perform some database administration are the professors of the CISE Department. In the following section, we explain what action can be performed by whom. Whenever database operations are performed, the person wishing to perform the update has to point their browser to the /ciseZPT/dbAdmin ( http://rain.cise.ufl.edu:8080/ciseZPT/dbAdmin ) page, which is not linked from the CISE main page since the idea is that only a certain group of people is allowed to perform database operations. As soon as the page is being accessed, Zope requires the user to log in, since this part of the site has been set to restricted access. This means that for the index_html page of the dbAdmin folder, the View permission has been set to allow certain authenticated users only (rather than the default Anonymous). Before the index_html page is displayed, Zope prompts the user to log in by presenting an authentication dialog. Once the dialog has been "filled out" and submitted, Zope will look for the user account represented by this set of credentials. Zope identifies a user by examining the username and password provided during the entry into the authentication dialog. If Zope finds a user within one of its user databases with the username provided, the user is identified. Once a user has been identified, authentication may or may not happen. Authentication

    PAGE 115

    103 succeeds if the password provided by the user in the dialog matches the password registered for that user in the database. Different things can happen with respect to being prompted for authentication credentials in response to a request for a protected resource depending on the current state of a login session. If the user has not yet logged in, Zope will prompt the user for a username and password. If the user is logged in but the account under which he is logged in does not have sufficient privilege to perform the action he has requested, Zope will prompt him for a different username and password. If he is logged in and the account under which he has logged in does have sufficient privileges to perform the requested action, the action will be performed. If a user cannot be authenticated because he provides a nonexistent username or an incorrect password to an existing authentication dialog, Zope re-prompts the user for authentication information as necessary until the user either "gets it right" or gives up. 5.6.2 Professors Professors an perform some limited database maintenance. To achieve this, we have added a user folder called acl_users inside the dbAdmin folder. There is already a user folder in Zopes root folder called acl_users as well, but Zope can contain multiple user folders at different locations in the object database hierarchy. A Zope user cannot access protected resources above the user folder in which their account is defined. The location of a user's account information determines the scope of the user's access. The users defined inside the acl_users folder of dbAdmin may only access protected resources within the dbAdmin folder and within subfolders of that subfolder, and so on. Zope users have roles that define what kinds of actions they can take. Roles define classes of users such as Manager, Anonymous, and Authenticated. These roles are

    PAGE 116

    104 controlled by the Zope system administrator. Users may have more than one role, and may have a different set of roles in different contexts. Zope objects have permissions which describe what can be done with them such as View, Delete objects, and Manage properties. Roles are similar to UNIX groups in that they abstract groups of users. And like UNIX groups, each Zope user can have one or more roles. Roles make it easier for administrators to manage security. Instead of forcing an administrator to specifically define the actions allowed by each user in a context, the administrator can define different security policies for different user roles in a context. Since roles are classes of users, he needn't associate the policy directly with a user. Instead, he may associate the policy with one of the user's roles. Zope comes with four built-in roles: Manager. This role is used for users who perform standard Zope management functions such as creating and edit Zope folders and documents. Anonymous. The Zope Anonymous user has this role. This role should be authorized to view public resources. In general this role should not be allowed to change Zope objects. Owner. This role is assigned automatically to users in the context of objects they create. Authenticated. This role is assigned automatically to users whom have provided valid authentication credentials. This role means that Zope "knows" who a particular user is. When Users are logged in they are considered to also have the Authenticated role, regardless of other roles.

    PAGE 117

    105 We have defined a global role for Professors called prof. Roles can be used at the level at which they are defined and "below" in the object hierarchy. For example, since we created a role in the ciseZPT folder, that role cannot be used outside of the ciseZPT folder and any of its superfolders and super objects. All Professors of the CISE Department have already been added as users with the role prof. The login and password have been set to the current login of a professor. As soon as the professor logs in for the first time, it is advisable that he or she change the password. The login cannot be altered. The permissions that have been granted to the prof role are very limited. User logged in with the prof role cannot add, change, view, or delete any of the objects located in the root folder. This security setting is inherited in all subfolders of the root folder. There are only two exceptions to this rule. The first exception to this rule has been set in the /ciseZPT/peoples/photos folder. Since Professors can upload their own photos, the permissions for Photo objects are not acquired, but explicitly set. For the users with the role prof the following actions are allowed: create class instances, delete objects (since when a new photo is added for a professor, the old one is deleted first), and add Photos. The second exception has been set in the /ciseZPT/dbAdmin/acl_users folder. The reason that users with the prof role have special permissions in this folder is that Professors are able to change their password over the web interface. When the password changes, the acl_user folder has to be accessed and the password for the user needs to be altered. The corresponding permission is called Manage users, which has been enabled for Manager, Owner, and prof roles.

    PAGE 118

    106 5.6.3 Database Administrator The admin user has been set up to have the Manager role (explained above). The Manager allows the viewing of all objects as well as their modification and object creation. As far as the maintenance of the database is concerned, the administrator is allowed to perform actions on all tables described in Section 6.2 (i.e., Administrative, Committees, Event, GradClass, OfferedGradClass, OfferedUnderGradClass, Organizations, Overall Links, ProfCommittee, Professor, ProfResearch, Project, Research, ResearchLab, Seminar, Staff, System, and UnderGradClass). For each of the tables, the database administrator is presented with two choices: he can either view the list of all rows currently stored in a table, or add a new row to the table. When viewing the list of rows, he can either edit or delete one of the rows. When editing a row, the administrator can modify all columns except for the column representing the primary key. When deleting a row, the ZSQL method is setup such that not only the given row is deleted, but also all rows where the primary key of the deleted row appears as a foreign key. When, for example, a professor is deleted, the ZSQL method contains the following delete commands: DELETE FROM ProfResearch WHERE Prof_ID = DELETE FROM ProfCommittee WHERE Prof_ID = DELETE FROM Seminar WHERE Prof_ID = DELETE FROM Professor WHERE Prof_ID = . The can be used to separate several SQL statements in a ZSQL query. 5.6.4 Additional Users and Delegation That official CISE website is maintained by more than one webmaster. This setup can be achieved easily with Zope, since multiple user folders can be contained at

    PAGE 119

    107 different locations. A Zope user cannot access protected resources above the user folder in which their account is defined. The location of a user's account information determines the scope of the user's access. The following scenario illustrates how this would be handled. Consider the case of a user folder at ciseZPT/research/acl_users. Suppose the user XY is defined in this user folder. This user cannot access protected Zope resources above the folder at /ciseZPT/research. Effectively XY's view of protected resources in the Zope site is limited to things in the ciseZPT/research folder and below. Regardless of the roles assigned to XY, the user cannot access protected resources above his location. If XY was defined as having the Manager role, he would be able to go directly to /ciseZPT/research/manage to manage his resources, but could not access /ciseZPT/manage at all. To access the Zope Management Interface as a Manager user who is not defined in the root user folder, Zope uses the URL to the folder which contains his user folder plus manage. For example, if XY above has the Manager role as defined within a user folder in the ciseZPT/research folder, he would be able to access the Zope Management Interface by visiting http://zopeserver/ciseZPT/research/manage. Of course, any user may access any resource which is not protected, so a user's creation location is not at all relevant with respect to unprotected resources. The user's location only matters when he attempts to use objects in a way that requires authentication and authorization, such as the objects which compose the Zope Management Interface.

    PAGE 120

    108 It is straightforward to delegate responsibilities to site managers using this technique. One of the most common Zope management patterns is to place related objects in a folder together and then create a user folder in that folder to define people who are responsible for those objects. By doing so, the responsibilities for these object are safely delegated to these users. For example, suppose user XY is responsible for maintaining the research area of the CISE website. The information about research is stored in the research folder of the Zope site. When an update to the research area has to be done, e.g., a new subsection needs to be added, the XY user doesn't have to ask the web master to update the site, he or she can update their own section of the site without bothering anyone else. Additionally, XY cannot log into any folder above the research folder, which means XY cannot manage any objects other than those in the research folder. This process of delegation could be used for different areas of the site. By delegating different areas of a Zope site to different users, the burden of site administration is taken off of a small group of managers and is spread around to different specific groups of users. This information and more on delegation and security can be found in the Zope Book [LAT01]. 5.7 Database Administration Issues 5.7.1 Form Checking with JavaScript Whenever HTML based forms are used, a user could enter any kind of data in the form without any default error-checking being performed on the form. This could lead to problems with the database when a form issued to add or edit rows in the database. Some fields need to be filled out, and sometimes it is important that a column is filled with a specific data type (e.g., an integer). JavaScript can be used to check form entries before

    PAGE 121

    109 the form action is called. When form data is missing or of the wrong type, the form action can be prevented. The Code Listing 5-9 illustrates how form checking was implemented for the database update forms:

    Add



    PAGE 122

    110
    First Name
    Middle Name
    Last Name
    Email
    Webpage
    Telephone Number
    Office Number
    Degree
    Login
    Password
    Title
    Research Interests
    Photo
    Code Listing 5-9 Form checking with Javascript This code is used to add a new Professor. The form has some input fields and a submit button to send the form. The part that differs from a regular form is the onSubmit=return chkFormular() part of the tag. The event handler

    PAGE 123

    111 for onSubmit is called when a user clicks on the submit button. The JavaScript function chkFormular, located just above the form, is then called. If the function finds an error, it return the false value, otherwise it returns true. When false is returned, the form action is not called. The chkFormular function itself uses a series of if statements to determine whether a field is empty. A check such as f(document.f.firstName.value == "") tests whether the corresponding form input field (the field with the name firstName in the form with the name f) contains a value by comparing it with the empty string . Other forms in this project check whether the input field has been filled with an integer rather than a String. This test is done with the isNaN (is not a number) built-in JavaScript function: if (isNaN(document.f.year.value ). Three instructions follow for each check that fails. First of all, a message is displayed on the screen using the alert() built-in function. The message contains information about the problem encountered and tells the user how to fix it. Second, the focus() method is used to position the cursor in the field where the problem was encountered. This way, the user has the option to correct the flawed or missing input right away. Thirdly and lastly, the last instruction returns false. As a result of this, the form action is not executed. The form action (action=addScript) is calling a Python Script located on the server. The JavaScript function has been adapted from material found in the SELFHTML online tutorial [MUE03].

    PAGE 124

    112 5.7.2 The dbAdmin Folders 5.7.2.1 The Standard Folders As mentioned before, the folders in the dbAdmin folder contain all HTML forms, ZSQL methods, and Python script needed for a given table. Most folders contains methods with the same name but different content. Those folders are described in the this section. The Professor folder is different since, as explained above, Professors can log in and edit their data. It is be described in the next Section. Figure 5-10 contains an overview of the objects located in every dbAdmin folder: add 1 Kb 2003-06-22 15:15 addSQL 2003-06-07 15:36 delete 1 Kb 2003-06-07 15:26 deleteSQL 2003-06-07 15:30 1 Kb 2003-06-07 15:26 listAll 1 Kb 2003-06-21 15:15 selectOne 2003-06-07 15:30 1 Kb 2003-06-22 15:17 updateSQL index_html update Figure 5-10 Objects inside ciseZPT/dbAdmin/Project An explanation of the content of these objects follows. index_html Page Template. This page template is essentially the same for almost all folders of dbAdmin. It simply presents two options: the list of all rows of the table, or the form to add a new row. This is displayed in the body slot of the page macro:


    PAGE 125

    113
    . listAll Page Template. The listAll Page Template is also the same for most tables. It calls a ZSQL method which returns all rows of a table in alphabetical order. For each entry, a link is added that leads to the update or the delete page template. The primary key of the current row is appended as a parameter for each link:

    Add a new item
    . delete Page Template. Called from the listAll page template, this Page Template receives as a parameter the primary key of the row that is to be deleted. A call to the ZSQL method deleteSQL is done, and then the ZPT displays a message confirming the deletion. The option to add a row or to return to the list of rows is added. This page template is the same for almost every folder.

    deleted!

    . add Page Template. The add Page Template consists of a form where the row data is entered. The form action is usually the Page Template itself (add). A condition is evaluated. If the Page Template is called after a submit, a call to the addSQL ZSQL

    PAGE 126

    114 method is made. If the Page Template is not called after a submit, the form with all input fields is shown (
    ). As explained in Section 5.7.1, a JavaScript function is called to check the form input before the actual SQL method is executed. This Page Template is different for every table of the database. The input values are passed to the ZSQL methods over the REQUEST.

    Add

    Project Title
    Webpage
    Description

    You have added title

    PAGE 127

    115 to the database.

    . update Page Template. The update page template is essentially the same as the add page template. The only difference is that it is called from the listAll page template and therefore needs to display one particular table row that is to be edited. The primary key of the row was passed over the REQUEST. To retrieve all data from the table row, a call to the selectOne ZSQL is made. The values from result are then pre-filled into the input fields with tal:content= python:inData[0].columnname. As for the add page template, it is evaluated whether the page template is called after a submit.

    Update item

    Title
    Webpage
    Description


    PAGE 128

    116

    You have updated title in the database.

    . addSQL ZSQL method. This method is customized for every folder. It contains an SQL command similar to the following: insert into Project(title, linktowebpage, description) values ( , , ). Some tables have integers as primary key. The idea behind this was to auto_increment the primary key whenever a new tuple is inserted. Unfortunately, this is not supported by Oracle. The following workaround was used: every table that has an integer primary also has a corresponding Oracle sequence. Whenever a new row is added, the addSQL calls the nextval python script (), located in the root folder so that it can be inherited everywhere. The nextval script receives the name of the sequence to fetch from and returns the next value (return sequence + ".NEXTVAL"). selectOne ZSQL method. Again, this is one of the methods that had to be customized for every folder. The ZSQL method receives a primary key over the REQUEST and returns the matching row, e.g., for the Project table with primary key title: SELECT FROM Project WHERE title = .

    PAGE 129

    117 deleteSQL ZSQL method. This ZSQL method is called from the listAll page template. Similar to the selectOne ZSQL method, deleteSQL is different for every folder and receives the primary key of the tuple to delete over the REQUEST: DELETE FROM Project WHERE title = . 5.7.2.2 The Professor Folder The Professor folder is different from the other folder located in dbAdmin. First of all, when logging in to the dbAdmin area, a different set of options is displayed in the index_html of dbAdmin, depending on who has logged in:

    Welcome, , to the Database Administrator Area!

    You are logged in as a Professor.
    Here, you have the option to add, delete, and update the underlying database. Please select the area that you wish to update from the following list.

    PAGE 130

    118
    . As the code listing above shows, when a Professor is logged in (), the folders listed are only the ones visible to Professors(python:here.getDBFolders('Prof')"). The link to each folder is modified such that the primary key of the Professor currently logged in is passed as a parameter to the link (tal:define="url string:${item/url}?Prof_ID=${Prof_ID}). When a regular administrator is logged in, the links to folders are also modified to contain the Prof_ID parameter, but it is set to 0 to indicate that no Professor is logged in (tal:define="url string:${item/url}?Prof_ID=0"). This parameter is now retrieved in the Professor folder. Different screens are displayed depending on whether a Professor is logged in or not. The comparison is done with the following condition statement: . Professor Photos. Another difference to regular dbAdmin folders is the fact that a photo is stored for each Professor. Because of well-known problems with storing BLOBs in Oracle, Photos are stored centrally in the Zope Object database (in / ciseZPT / peoples / photos ). The Photo and PhotoFolder product [BIC03] have been installed for this purpose. Whenever a new Photo is added to the PhotoFolder, two display sizes are generated by the Image Magick program [IMA03]: thumbnail (128 x 128) and xsmall (200 x 200). The createPhoto Python script in the Professor folder handles the photo creation: # move to photofolder p = context.ciseZPT.peoples.photos #if( not p ): raise AssertionError, 'No Place to store Photos' the_id = request.form['Prof_ID'] the_title = request.form['Prof_ID'] the_file = request.form['the_file']

    PAGE 131

    119 p.manage_delObjects(the_title) p.manage_addProduct['Photo'].manage_addPhoto( the_id, the_title, the_file) The script deletes any photo that was saved for the Professor. This is why when a new Professor is added, a default photo needs to be specified (which can later be overridden). Professor user in acl_user folder. When a new Professor is added to the database, a new user should also be added in the acl_user folder of dbAdmin. The login is the name that the user will be using to login to the dbAdmin area. The following lines in a Python script take care of adding a user with the role prof. lo = request.form['login'] p = request.form['password'] #add user in acl_users context.acl_users.userFolderAddUser(lo, p, ['prof'], []). Professors can also change their password over an update form. The update of the database is preformed with a regular ZSQL method. The roles for a Professor and the login however, cannot be changed. The update of the password of the user in the user folder is achieved with the following lines in a Python script: p = request.form['password'] lo = request.form['login'] #set password if new one was given if p != "": user = context.acl_users.getUser(lo) uid = user.getId() roles = user.getRoles() domains = user.getDomains() context.acl_users.userFolderEditUser(uid, p, roles, domains).

    PAGE 132

    CHAPTER 6 USER INTERFACE 6.1 Overview of Graphical User Interface The Zope Management interface when an administrator is logged into the ciseZPT folder is shown in Figure 6-1. When viewing the index_html document of ciseZPT, the view of Figure 6-2 is produced on the screen. Figure 6-1 Zope Management Interface 120

    PAGE 133

    121 Figure 6-2 Main CISE website 6.2 Database Administration GUI When a user tries to log in to the database admin area (/ciseZPT/dbAdmin), the Zope login dialog appears on the screen. A screenshot of this can be seen in Figure 6-3. If an admin logs in, the dbAdmin screens presents the full set of options available, as Figure 6-4 illustrates. If a Professor logs in, the dbAdmin shows less options for update, as Figure 6-5 shows. A sample database dialog is shown in Figure 6-6. It is the page that lets a user add a new offered graduate class to the database. The other database dialogs have a similar design.

    PAGE 134

    122 Figure 6-3 Logging in to the database administration area Figure 6-4 Screen presented to a database administrator

    PAGE 135

    123 Figure 6-5 Screen presented to a professor Figure 6-6 Sample database dialog

    PAGE 136

    124 Security Settings. Figure 6-7 below shows how security settings are managed over Zopes Management Interface. The screenshot shows the security setting for the ciseZPT/peoples/photos folder. Permissions are rows and roles are columns. Checkboxes are used to indicate where roles are assigned permissions. When a role is assigned to a permission, users with the given role will be able to perform tasks associated with the permission on this item. When the Acquire permission settings checkbox is selected then the containing objects permission settings are used. The screenshot shows how the prof role has been explicitly enabled to Add Photos(as well as Authenticated, Manager, and Owner). Figure 6-7 Security Management through-the-web

    PAGE 137

    CHAPTER 7 CONCLUSION AND FUTURE WORK 7.1 Have the Requirements Been Met? The first requirement, (The new web site should be based on widely spread and reliable web techniques such that most browsers can access the site) has been met. Since Zope interprets all contained DTML/ZPT/Python code, all that is output is HTML code. No proprietary data formats (Flash,etc.) has been used. The second requirement, adherence to the COE and UF Webadmin Guidelines, has been mostly fulfilled. An exception to this is the use of JavaScript needed for form checking, which is not recommended by the UF Webadmin committee. Style sheets have also been used, but the site is still viewable even when the style sheets are disabled. The third requirement was the separation of data and the graphical user interface. This is achieved through Zopes own technologies such as ZPT and Python scripts. The fourth requirement (Faculty members should have the option to access certain areas of the site and create content) as well as the sixth requirement (The database should be accessible over an easy-to-use graphical interface, providing forms for adding, updating and deleting data in the database tables. Furthermore, there shall be forms for creating new tables in table.) is achieved through the dbAdmin area, where Professor can log in and edit and add data in the database. It is currently not the case that a non-Zope-programmer can easily add new tables in the database. Future work is therefore possible in this area. 125

    PAGE 138

    126 The fifth requirement was that administrative tasks such as adapting the layout, design and content and updating and maintaining the database shall be possible without further knowledge of a markupor programming language. Again, Zope provides the solution to this requirement through ZPT, which can be edited in WYSIWYG editors without further knowledge of HTML. The seventh and eight requirement (The database transactions must be secure and the application should have multi-user functionality; the application should be easily extendible) are achieved through Zope: transactions and multi-user functionality as well as add-on products are both area of the Zope framework described in Chapter 3. Especially the fourth requirement of taking the burden of web-site maintenance off of the shoulders of one single web developer was of importance. Zope itself offers functionality to set up several users and assign them areas of responsibility. In addition to that, the project uses an Oracle database. As long as the data in the database is kept up-to-date, the information displayed on the web site will be up-to-date, as well. To simplify the database maintenance for non-technical users, the web site contains a set of online dialogs that can be understood and used by anyone, without requiring any knowledge of the happenings behind the scene (such as the HTML, SQL, Python scripts, etc. involved). This aspect of database administration can therefore be handled by anybody with an Internet connection and a browser. If new areas have to be added to the site, however, a user with programming knowledge and a good understanding of Zope should be assigned to the task. It is not possible to completely eliminate the need for one person with technical background. The question whether this would be possible with other CM systems remains open. If design changes had to be implemented, the job could be handed

    PAGE 139

    127 over to a professional web designer or anyone able to use a WYSIWYG tools such as FrontPage. The design created would then have to be reviewed by a Zope programmer (who would add Zope Page Template tal statements to the HTML). This at least eliminated the need for the web programmer to also be a good web designer. 7.2 Conclusions The goal for this thesis was the redesign and reimplementation of the CISE Departments web site using a content management system. When researching possible implementation strategies, the Zope Framework was encountered. Zope fulfilled the requirements that were formulated, and its open source nature made it an ideal candidate for future use. When first working with Zope, the DTML scripting language was used. Most of the site was implemented when it was discovered that the newer, more powerful technology called ZPTs was a better fit and also strongly recommended by the Zope community. Since the goal of this project was to be up to date with current technologies so that it could be easily extended in the future, we have migrated the entire site to the new ZPT language. The old implementation still resides in the Zope instance for future reference. The project has lasted for about 10 months (October 2002 July 2003). The community support by fellow Zope developers, administrators, and users that actually help each other and share information, tips and tricks has been very impressive. Zope has proved itself an outstanding tools for the creation of dynamic web applications. This is not only the authors personal opinion Zopes ever-growing customer list [ZOP03b], including many illustrious names proves that his viewpoint is shared by many others. In addition to this, the existence of many Zope products is a very fascinating environment

    PAGE 140

    128 for developers. It would take several months to explore all the possibilities of add-on products that can be downloaded for free. If the department were to decide to use the project developed in this thesis, it would be first of all recommendable to install the latest Zope version [ZOP03a]. It appears that the latest Zope version (Zope 3) will be released in the near future. To reuse the code written for this thesis in a new installation, all one would have to do is simply copy the zope-directory/var/data.fs from the old Zope to the new Zope. All work contained in the current Z Object database is contained in Zopes data.fs. However, once the data has been copied over, one still has to copy all products installed in the old Zope version (they are not stored in Zopes data.fs). The products needed for this project have been listed in Section 5.1. Finally, one would have to decide whether Zopes own web server would be used or the Apache web server. Zope can serve content through it's own web server, or Apache can communicate with it over a certain protocol called PCGI. Using Zope and Apache with PCGI, one can serve some sites content from Apache and some from Zope. Tutorials on the web explain how this setup is done in detail [ROE03].

    PAGE 141

    LIST OF REFERENCES [ARI03] Ariadne. Ariadne World Wide Website, http://ariadne.muze.nl/ 2003, last accessed 07/18/03. [ATT03] AT&T Research Labs. Strudel World Wide Website, http://www.research.att.com/~mff/strudel/doc/ 2003, last accessed 07/18/03. [BIC03] R. Bickers. Photo Product, http://www.zope.org/Members/rbickers/Photo 2003, last accessed 07/18/03. [BOR96] J. A. Borges, I. Morales, and N. J. Rodriguez. Guidelines for Designing Usable World Wide Web Pages Proceedings of ACM CHI 96 Conference on Human Factors in Computing Systems, pp. 277-278, Vancouver, ACM Press, 1996. [BOR98] J. A. Borges, I. Morales, and N. J. Rodriguez. Page Design Guidelines Developed Through Usability Testing-Human Factors and Web Development, Lawrence Erlbaum Associates Publishers, Mahwah, NJ, USA, 1998. [BOS98] B. Bos, H. W. Lie, C. Lilley, and I. Jacobs. Cascading Style Sheets Level 2 Specification 1998. [CHE76] P. P. Chen. The Entity-Relationship Model: Towards a Unified View of Data. ACM Transactions on Database Systems, pp. 471-522, 1976. [CHR99] W. Chrisholm, G. Vanderheiden, and I. Jacobs. Web Content Accessibility Guidelines 1.0 1999. [CLA99] J. Clark. XSL Transformations (XSLT specification) World Wide Web Consortium, 1999. [CMS03] CMS-List, CMS-List World Wide Website, http://cms-list.org/ 2003, last accessed 07/18/03. 129

    PAGE 142

    130 [COC03] Cocoon, Cocoon World Wide Website, http://cocoon.apache.org/, 2003, last accessed 07/18/03. [COM03] Content Manager. Content Manager World Wide Website, http://www.contentmanager.de 2003, last accessed 07/18/03. [COL03] College of Engineering. The College of Engineerings Departmental Branding Documentation, http://www.eng.ufl.edu/graphics/, 2003, last accessed 05/12/03. [DET98] O. De Troyer. Designing Well-Structured Websites: Lessons to Be Learned from Database Schema Methodology. International Conference on Conceptual Modelling/the Entity Relationship Approach, pp. 51-64, 1998. [EVE03] P. Everitt. Zope Enterprise Objects, http://www.zope.org/Products/ZEO/ZEOFactSheet 2003, last accessed 07/18/03. [FER97] M. F. Fernandez, D.Florescu, J. Kang, A.Y. Levy and D. Suciu. Catching the Boat with Strudel: Experiences with a Web-Site Management System SIGMOD Conference, pp. 1-22, 1997. [GAR93a] F. Garzotto, L. Mainetti, and P. Paolini. Navigation patterns in hypermedia databases. Proceedings of the 26th Hawai International Conference on System Science, Maui, pp. 370-379, IEEE Computer Society Press, 1993. [GAR93b] F. Garzotto, P. Paolini, and D. Schwabe. HDM A Model-Based Approach to Hypertext Application Design, ACM Transactions on Information Systems, pp.1-26, 1993. [HAQ03] Haqa. Zope Cascading StyleSheets, http://www.zope.org/Members/haqa/ZStyleSheet/ 2003, last accessed 07/18/03. [IMA03] ImageMagick, Image Magick World Wide Website, http://www.imagemagick.com/ 2003, last accessed 07/18/03. [ISA95] T. Isakowitz, E. A. Stohr, P. Balasubramanian. RMM: A Methodology for Structured Hypermedia Design Communications of the ACM 38(8), pp.34-43, 1995.

    PAGE 143

    131 [KEE98] B. Keevil. Measuring the Usability Index of Your Web Site SIGDOC98: Scaling the Heights: The Future of Information Technology, 1998. [KOC01] N. Koch. A Comparative Study of Methods for Hypermedia Development, Technical Report 9905, LudwigMaximilians-Universitaet Muenchen, 2001. [KRO03] M. Kromer. DCOracle2, http://www.zope.org/Members/matt/dco2 2003, last accessed 05/14/03. [LAT01] A. Latteier and M. Pelletier, The Zope Book, SAMS, New York City, 2001. [LEE98] H. Lee, C. Lee, and C. Yoo. A Scenario-Based Object-Oriented Methodology for Developing Hypermedia Information Systems, Proceedings Of HICSS 36, Kohala Coast, IEEE Computer Society Press, 1998. [MAC03] Macromedia. Macromedia World Wide Website, http://www.macromedia.com/ 2003, last accessed 07/18/03. [MUE03] S. Muenz. Selfhtml: Version 8.0, http://selfhtml.teamone.de/ 2003, last accessed 07/18/03. [NIE00] J. Nielsen. Designing Web Usability: The Practice of Simplicity. New Riders Publishing, Indianapolis, 2000. [PER03] Perl. Perl World Wide Website, http://www.perl.com/, last accessed 07/18/03. [PHP03] PHP. PHP World Wide Website, http://www.php.net/, 2003, last accessed 07/18/03. [ROE03] M. Roeder. Setting up Zope with Apache using PCGI, http://zdp.zope.org/projects/zbook/book/VII/IntegraWebServers/IntegraUnix/IntegraApacheDrafts/953556353 2003, last accessed 07/18/03.

    PAGE 144

    132 [SCH98] D. Schwabe and G. Rossi. Developing hypermedia applications using OOHDM. Proceedings of Workshop on Hypermedia development Process, Methods and Models, Pittsburgh, ACM,1998. [SUN03] Sun Microsystems, Java World Wide Website, http://java.sun.com/ last accessed 07/18/03. [WEB03] Webcms. Webcms World Wider Website, http://www.webcms.org/ 2003, last accessed 07/18/03. [WOR03] World Wide Web Consortium. W3 Website, http://www.w3.org/, 2003, last accessed 07/18/03. [ZOP03a] Zope Corporation. Zope World Wide Website. http://www.zope.org, 2003, last accessed 07/18/03. [ZOP03b] Zope Corporation. Zope Client List World Wide Website, http://www.zope.com/ZopeClientList 2003, last accessed 07/18/03.

    PAGE 145

    BIOGRAPHICAL SKETCH Rima A. Gerhard was born in the state of Virginia in the United States of America on October 24 th 1979. She was brought up in Germany and France and completed her Higher Secondary Certification at the German School of Paris, France. She then went on to complete her bacherlors degree in computer engineering at the University of Ulm, in Ulm, Germany. Soon after that, she joined the Computer and Information Science and Engineering Department at the University of Florida in Fall 2001. Her industrial work experience includes an internships at d+s online AG in Weinheim, Germany, as well as an internship at the Space and Naval Warfare Systems Center in San Diego, California. Her areas of interest include content management systems, web site pubishing and databases. 133