Nano-World
The interdisciplinary Virtual
Laboratory on Nanoscience
Ein Projekt des Virtuellen Campus
T. Gyalog, M. Guggisberg, R. Schneider,
Ch. Freiburghaus, P. Fornaro, B. Willi
H. Burkhart, H.-J. Güntherodt
Universität Basel
Fachhochschule beider Basel
Scuola universitaria della svizzera italiana
Centre Suisse de Micro-technique et
d‘Electronique
Universität Bern
Universität Fribourg
Aufgaben des Portals
Informations + Wissensverwaltung
Aufgabenteilung
Schnittstelle für neue Dienste
Mehrsprachigkeit
Hierarchie und verschiedener Berechtigungen
Wartbarkeit (Backup, XML, usw.)
Sicherheit
Server Software: Zope
http://www.zope.org
Installation
Auf NT trivial
Starten mit:start.bat
Auschalten via Netz
Python
www.python.org
Zope
Module
Squis.dot
Funktions-Schema
JDK 1.2
Client
Web
Server
Servlet
Container
Database
Zope
Database
Objektstruktur von Zope
Vererbung
Dynamische HTML-
Generierung
Globale
Layoutdefinition
www.nanoworld.unibas.ch
site_header
leftbox
body_de_html
rightbox
Layout & Mehrsprachigkeit
Eingabe Interface
Zentrale Änderung
Wartung
Inhalt eines Ordners
anzeigen
<dtml-in expr="objectValues('Folder')">
<li> <a href="&dtml-absolute_url;"><dtml-var title></a><br> </li>
</dtml-in>
Erweiterung
<dtml-if directory_items>
<dtml-in directory_items>
<li>
<A href="<dtml-var site_url ><dtml-var urlname>"><dtml-var
name></A></li>
</dtml-in>
<dtml-else>
<dtml-in expr="objectValues('Folder')">
<li>
<a href="&dtml-absolute_url;"><dtml-var title></a><br></li>
</dtml-in>
</dtml-if>
XML
Product XML Document
Einfügen: Ein neues XML Dokument erstellen.
Das XML Dokument
ist somit in die Zope
Datenbank integriert
und kann mit eigenen
Funktionen
manipuliert werden
XML
Ausgabe
Zope dtml-method
<dtml-var standard_html_header>
<h2>Q</h2>
<p><dtml-var "text_content('question')"></p>
<h2>A</h2>
<p><dtml-var "text_content('answer')"></p>
<dtml-var standard_html_footer>
XML
XML
Bsp. 2
Alle Fragen anzeigen:
<dtml-var standard_html_header>
<h2><dtml-var "getAttribute('title')"></h2>
<dtml-in "getElementsByTagName('entry')">
<p><a href="<dtml-var absolute_url>/viewEntry">
<dtml-var "text_content('question')"></a></p>
</dtml-in>
<dtml-var standard_html_footer>
XML
Kommunikation
Mail, Fax, SMS
Kommunikation
Mail, Fax, SMS
Kommunikation
Mail, Fax, SMS
Kalender
dtml-calendar
<dtml-calendar>
<dtml-call "setCalendar('valign','top')">
<dtml-let d="date.Date()"
hasdate="hasProperty(d)"
dprop="getProperty(d)">
<dtml-if "AUTHENTICATED_USER.getUserName()=='guggi'">
<a href="index_html/editCalPropForm?prop=<dtml-var d>&propval=<dtml-var dprop url_quote>">
<dtml-var "date.dd()">
</a>
<dtml-else>
<dtml-var "date.dd()">
</dtml-if>
<br>
<dtml-if "hasdate==1">
<dtml-var dprop>
</dtml-if>
</dtml-let>
</dtml-calendar>
Externe Methode
Perl oder Python muss im Ordner Extension stehen
Bsp: editCalendarProperty.py
def editCalendarProperty(self,REQUEST,RESPONSE):
if ( self.hasProperty(REQUEST['prop']) ):
self.manage_changeProperties({ REQUEST['prop'] :
REQUEST['propval'] })
else:
self.manage_addProperty(REQUEST['prop'], REQUEST['propval'],
'string')
return REQUEST.RESPONSE.redirect(REQUEST['BASE2'])
Futur
Authentication via SQL Databank
User tracking
RPC-XML
Parsed XML
– Webtest (Semesterarbeit)
Testen neuer Module
– Bsp. Meerkat news service
– Bsp. Portal Toolkit
REQUEST
<dtml-var "REQUEST">
Nur PC‘s
<dtml-if "_.string.find(HTTP_USER_AGENT,'Win') == -1">
<dtml-else>
Integration von
Flashobjekten
Flash
Formular zum Cookie setzen
<FORM NAME="formular" METHOD="POST"
ACTION="report"><P>
Name: <INPUT TYPE="TEXT" NAME="qkey" SIZE=30
MAXLENGTH=30><BR>
Value: <INPUT TYPE="TEXT" NAME="qvalue" SIZE=30
MAXLENGTH=30><BR>
<INPUT TYPE="submit" VALUE="Submit">
</Form>
Formular auswerten
Cookie setzen
<p>
Das Cokie ist plaziert !!!
<dtml-call "RESPONSE.setCookie(_['qkey'],_['qvalue'],
expires='Wed, 19 Feb 2020 14:26:00 GMT')">
</p>
Cookie lesen
<p>
das Cokie heisst:<BR>
<dtml-in expr="REQUEST.cookies.keys()">
<dtml-var sequence-item> --> <dtml-var
expr="REQUEST.cookies.get(_['sequence-item'])"><br>
</dtml-in>
</p>
Variablen setzen
<dtml-call "REQUEST.set('geprueft','')">
<dtml-in z-sqlmeth size=1>
<dtml-call "REQUEST.set('geprueft','ok')">
…..
</dtml-in>
<dtml-if "geprueft!='ok'">
Externe Methoden
save in Extension Folder of Zope
def helloWorld(self):
""" hier kommt nur eine Ausgabe """
return 'Nano-World'
aus addlist
external method
<dtml-var sayhello>
Python
ganze, komplexe, Gleitkomma Zahlen
Listen, Dictionaries (assoziative Felder)
objektorientiert Klassen wie c++
Exceptions
Class
class Stadt(Gemeinde):
def __init__(self,name,seit):
Gemeinde.__init__(self,name)
self.stadtrecht=seit
def zieht_um(self, von, leute):
for mensch in leute:
von.zieht_aus(mensch)
self.zieht_ein(mensch)
Berlin=Stadt(´Berlin´,1234);
Polimorph
class Stadtstaat(Stadt, Land):
def __init__(self,name,seit, parlamentsgr):
Stadt.__init__(self,name,seit)
Land.__init__(self,parlamentsgr)