14
XML und Zope Nik Klever [email protected] Abstract: Zope ist ein Open Source Middlewareprodukt, welches auf der Skriptspra- che Python aufbaut. Zope ist als Applikationsserver sowohl ein Webserver mit einem webbasiertem Interface als auch eine objektorientierte Datenbank. Parsed XML ist ein auf dem Python Expat aufbauender XML Parser der als Produkt f¨ ur Zope entwi- ckelt wurde und die standardisierte DOM-Schnittstelle enth¨ alt. Zusammen mit Page Templates, einer auf Attributen basierten Erweiterung von XHTML wird hiermit f¨ ur Zope die Basis zu einer reinen XML Verarbeitung mit XHTML Anzeige gelegt. Als Beispiel wird eine einfache Anwendung f¨ ur eine dynamische HTML Navigation aus XML Slide Dokumenten aufgezeigt. 1 Einleitung Zope [Lat00] ist ein Open Source Middlewareprodukt, welches auf der Skriptsprache Py- thon [van02] aufbaut. Zope ist als Applikationsserver sowohl ein Webserver mit einem webbasiertem Interface als auch eine objektorientierte Datenbank. Dabei wird aber die Integration bestehender relationaler Datenbanken sowie die Unterst¨ utzung von Skript- sprachen wie Python und Perl nicht vernachl¨ assigt. Applikationsserver. Mit Zope selbst wurde urspr¨ unglich eine eigene Markupsprache DTML - Document Template Markup Language - entwickelt, die allerdings ihre Wurzel in HTML hat und daher die Strikt- heit von XML vermissen l¨ asst. Ein interessanter Aspekt von Zope ist die Produktschnitt- stelle: auf dem Zope Kern wurden im Laufe der Zeit verschiedenste Produkte mit unter- schiedlichsten Aufgaben entwickelt. Umfangreiche Produkte aus den Bereichen Webshop- Anwendungen [Bee02], Content Management Systeme [Inf02] und Workow Frameworks [Iuv02] sind ebenso darunter wie kleinere Anwendungen f¨ ur Bildergalerien und Abstim- mungen [Pro02]. Parsed XML ist ein auf dem Python Expat aufbauender XML Parser der als Produkt f¨ ur Zope entwickelt wurde und die standardisierte DOM-Schnittstelle enth¨ alt. Zusammen mit Page Templates, einer auf Attributen basierten Erweiterung von XHTML [Pem00] wird hiermit f¨ ur Zope die Basis zu einer reinen XML Verarbeitung mit XHTML Anzeige gelegt. Im folgenden werden anhand eines Beispiels die notwendigen Grundla- gen und Schritte dargelegt, um mit Zope diese XML Verarbeitung durchf¨ uhren zu k ¨ onnen. Als Beispiel wird eine einfache Anwendung f¨ ur eine dynamische HTML Navigation aus XML Slide Dokumenten aufgezeigt. Dabei sind die Slides einfache XML Dokumente mit einem beliebigen Body aus HTML Inhalt. 57

XML und Zope - subs.emis.derelationaler Datenbanken und unterst¨utzt verschiedene Skriptsprachen wie Python, Perl, PHP sowie die Zope-eigene Skriptsprache DTML. und andere. Die Architektur

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: XML und Zope - subs.emis.derelationaler Datenbanken und unterst¨utzt verschiedene Skriptsprachen wie Python, Perl, PHP sowie die Zope-eigene Skriptsprache DTML. und andere. Die Architektur

XML und Zope

Nik Klever

klevermultimediafh-augsburgde

Abstract Zope ist ein Open Source Middlewareprodukt welches auf der Skriptspra-che Python aufbaut Zope ist als Applikationsserver sowohl ein Webserver mit einemwebbasiertem Interface als auch eine objektorientierte Datenbank Parsed XML istein auf dem Python Expat aufbauender XML Parser der als Produkt fur Zope entwi-ckelt wurde und die standardisierte DOM-Schnittstelle enthalt Zusammen mit PageTemplates einer auf Attributen basierten Erweiterung von XHTML wird hiermit furZope die Basis zu einer reinen XML Verarbeitung mit XHTML Anzeige gelegt AlsBeispiel wird eine einfache Anwendung fur eine dynamische HTML Navigation ausXML Slide Dokumenten aufgezeigt

1 Einleitung

Zope [Lat00] ist ein Open Source Middlewareprodukt welches auf der Skriptsprache Py-thon [van02] aufbaut Zope ist als Applikationsserver sowohl ein Webserver mit einemwebbasiertem Interface als auch eine objektorientierte Datenbank Dabei wird aber dieIntegration bestehender relationaler Datenbanken sowie die Unterstutzung von Skript-sprachen wie Python und Perl nicht vernachlassigt Applikationsserver Mit Zope selbstwurde ursprunglich eine eigene Markupsprache DTML - Document Template MarkupLanguage - entwickelt die allerdings ihre Wurzel in HTML hat und daher die Strikt-heit von XML vermissen lasst Ein interessanter Aspekt von Zope ist die Produktschnitt-stelle auf dem Zope Kern wurden im Laufe der Zeit verschiedenste Produkte mit unter-schiedlichsten Aufgaben entwickelt Umfangreiche Produkte aus den Bereichen Webshop-Anwendungen [Bee02] Content Management Systeme [Inf02] und Workflow Frameworks[Iuv02] sind ebenso darunter wie kleinere Anwendungen fur Bildergalerien und Abstim-mungen [Pro02] Parsed XML ist ein auf dem Python Expat aufbauender XML Parser derals Produkt fur Zope entwickelt wurde und die standardisierte DOM-Schnittstelle enthaltZusammen mit Page Templates einer auf Attributen basierten Erweiterung von XHTML[Pem00] wird hiermit fur Zope die Basis zu einer reinen XML Verarbeitung mit XHTMLAnzeige gelegt Im folgenden werden anhand eines Beispiels die notwendigen Grundla-gen und Schritte dargelegt um mit Zope diese XML Verarbeitung durchfuhren zu konnenAls Beispiel wird eine einfache Anwendung fur eine dynamische HTML Navigation ausXML Slide Dokumenten aufgezeigt Dabei sind die Slides einfache XML Dokumente miteinem beliebigen Body aus HTML Inhalt

57

2 Zope

Python als Skriptsprache wurde 1990 als Pendant zu Perl von Guido van Rossum mitdem Ziel entwickelt sowohl die Lesbarkeit von Programmen als auch die Objektorien-tierung bereits im Kernel zu integrieren Die Lesbarkeit von Pythonprogammen basiertdarauf dass die Blockstruktur nicht wie bei den meisten bekannten Programmiersprachenauf einer Klammerung basiert sondern auf der Einruckung Ein Block beginnt mit einerEinruckung und endet mit der Ausruckung damit werden Pythonprogamme ubersicht-licher und lesbarer fur externe Programmierer Nahere Informationen zu Python konnenunter [van02] nachgelesen werden Zope wurde 1996 von Jim Fulton als Antwort auf diebestehenden Sicherheitsprobleme und fehlende Objektorientierung in der CGI [CGI02]Programmierung entwickelt Mit Python als Grundlage konnte die Objektorientierung vonvornherein integriert werden Nur einige wenige zeitkritische Teile wurden in C geschrie-ben um die Performance von Zope als Webserver zu verbessern Die Eigenschaften vonZope als Applikationsserver kann man folgendermaszligen zusammenfassen Zope ist einWebserver (der aber nicht benutzt werden muss) besitzt eine webbasierte Schnittstelleenthalt sowohl eine integrierte Objektdatenbank als auch Schnittstellen zur Einbindungrelationaler Datenbanken und unterstutzt verschiedene Skriptsprachen wie Python PerlPHP sowie die Zope-eigene Skriptsprache DTML und andere Die Architektur von Zopebaut auf 4 Schichten auf dem ZServer als Webserver dem ZPublisher fur die Abarbeitungder Requests auf die Objekte (durch den Zope Object Request Broker - ZORB) und denZusammenbau der Objekte dem ZFramework als Schnittstelle zu den Zope Produkten undZODB die Zope Object Database (s Bild 1 nach [Aye00])

3 Page Templates

Die Trennung von Layout und Struktur die sich immer mehr in der Internetgemeinde mitXML [Bra98] CSS [Bos98] und XSL [Adl00] durchsetzt konnte jedoch mit der Zopeeigenen Skriptsprache DTML nicht in der Art und Weise verwirklicht werden wie es ur-sprunglich geplant war DTML ist zum einen nicht wohlgeformt und zum zweiten wird dasLayout einer HTML auf mehrere Objekte ausgelagert sodass insbesondere die Erstellungeines Internet Seiten Layouts mit einem HTML Editor nicht ohne weitere Umformungenin DTML umsetzbar ist Aus diesem Grund wurden 2001 Page Templates als Zope Pro-dukt eingefuhrt die diese Problematik umgehen Page Templates bauen auf zwei MarkupLanguages der Template Attribute Language - TAL - und der Macro Extension TemplateAttribute Language - METAL - auf Beide Markup Languages definieren keine eigenenTags wie bei DTML sondern nur Attribute die auf XHTML Tags angewendet werdenDie Eindeutigkeit der Attribute und die Einbindung in XHTML wird dabei durch die Ver-wendung von Namespace-Prefixes sichergestellt TAL wird dabei mit dem Namespace

xmlnstal=httpxmlzopeorgnamespacestal

und METAL analog mit dem Namespace

58

Abbildung 1 Zope Architektur

xmlnsmetal=httpxmlzopeorgnamespacesmetal

verknupft Der Vorteil der Verwendung von Page Templates liegt dabei auf der Hand Jederbeliebige HTML Editor ist nun von Designern fur die Entwicklung des Internet-Layoutsverwendbar um die HTML Datei danach als Page Template als ein einziges Objekt einfachin Zope einbinden zu konnen Die Logik und Dynamik der entsprechenden Anwendungwird anschliessend mit den TAL- und METAL-Attributen eingebaut Weitere Entwick-lungszyklen sind ebenfalls unproblematisch da die zusatzlichen Attribute von den HTMLEditoren nicht interpretiert und verandert werden

31 Template Attribute Language

Die Template Attribute Language beruht im wesentlichen auf den Attributen content re-place und attributes welche Inhalte von Tags gesamte Tags und Attribute von Tags er-

59

setzen sowie den Attributen define condition und repeat welche Variablen definierenBedingungen abfragen und Schleifen abhandeln Als Beispiel sei hier die Ersetzung deshref-Attributes eines normalen XHTML Anchor Tags vorgefuhrt

lta href=samplelinkhtmltalattributes=href heresubabsolute_urlgt

In diesem Beispiel wird der vom Designer beispielhaft vorgegebene Link im href-Attributdurch einen Ausdruck heresubabsolute url ersetzt Dabei wurde das Schlussel-wort here verwendet welches sich auf den jeweiligen Context in der Zope-Objekthier-archie bezieht sub ist ein entsprechendes Objekt in diesem Context und absolute urleine Methode des Objektmanagers die an alle Objekte vererbt wird und die absolute URLdes entsprechenden Objektes zuruckliefert Ganz ahnlich wird in dem folgenden Beispielder Inhalt des XHTML Paragraph Tags ersetzt

ltp talcontent=structure heregetStorygtmarked ltbgtupltbgt content goes here

ltpgt

Hier wird der Inhalt dieses Tags also marked ltbgtupltbgt content goes hereersetzt durch das Ergebnis welches die Methode getStory aus dem aktuellen Contexthere zuruckliefert Dabei wird die Struktur des Inhalts durch das Schlusselwortstructure beibehalten was bedeutet dass entsprechende XHTML oder XML-Tagsinterpretiert werden und nicht als XML-Entities umschrieben werden Bei der Verwen-dung der Attribute repeat und condition die den Ablauf beeinflussen sehen die Beispielefolgendermassen aus

lttr talrepeat=item pythonrange(10)gtlttd bgcolor=000000

talcondition=repeatitemeventalattributes=bgcolor stringrsquoDCDCDCrsquotalcontent=repeatitemnumbergtEven Numberlttdgt

lttd bgcolor=000000talcondition=repeatitemoddtalattributes=bgcolor stringrsquo000000rsquotalcontent=repeatitemnumbergtOdd Numberlttdgt

lttrgt

In diesem Beispiel werden 10 Zeilen mit einer Spalte erzeugt die jeweils abwechslendgrau fur die geraden Zahlen und weiss fur die ungeraden Zahlen unterlegt sind rangeist dabei eine interne Python Funktion und repeat ein Schlusselwort welches sich auf dasRepeat-Objekt bezieht von dem die Methoden even odd und number fur jeden Schleifen-durchlauf item geerbt werden

60

32 Macro Extension Template Attribute Language

Die Macro Extension Template Attribute Language wird dazu verwendet um immer wie-der auftauchende Ablaufe und Ausdrucke umfangreicherer Art zu definieren und wieder-zuverwenden Hierfur sind die vier Attribute define-macro use-macro define-slot und fill-slot geschaffen worden Als Beispiel sei hier ein einfaches Copyright vorgefuhrt

ltp metaldefine-macro=copyrightgtCopyright 2001ltemgtFoo Bar and Associatesltemgt Inc

ltpgt

Der Aufruf dieses Macros lautet dann folgendermassen

ltb metalusemacro=containermaster_pagemacroscopyrightgt

Macro goes hereltbgt

wobei das Bold-Tag komplett durch das Paragraph-Tag ersetzt wird Die beiden anderenAttribute konnen zusatzlich dazu verwendet werden um slots innerhalb von Macros zudefinieren die dann noch zusatzlich uberschrieben werden konnen

4 Parsed XML

Die Verarbeitung von XML Dokumenten benotigt einen entsprechenden XML Parser Esliegt in einer einheitlichen Umgebung auf der Hand den Vorgang des Parsens durch ei-ne entsprechend integrierte Schnittstelle herzustellen Im Zope Produkt Parsed XML[Faa02] wird diese Schnittstelle zur Verfugung gestellt Im Gegensatz zu dem ProduktPage Templates welches bereits Eingang in die Zope Kern Distribution gefunden hat istParsed XML ein zusatzliches Produkt fur das auch das XML Paket fur Python pyXMLzusatzlich installiert werden muss Parsed XML stellt eine der W3C DOM Level 2 Spe-zifikation [Le 00] entsprechende Schnittstelle (DOM API) fur den Zugriff auf den XMLDOM Baum zur Verfugung Zusatzlich zu der vom W3C definierten DOM Level 2 APIwird in dem Parsed XML Produkt eine weitere API zur Verfugung gestellt die Manage-ableDOM API Diese Schnittstelle berucksichtigt mittels Proxy Objekten die zusatzlichenEigenschaften von Zope wie Management Publishing Traverseability und Security Ei-genschaften die in der W3C API nicht enthalten sind Diese Eigenschaften werden uberdie Python Klassen DOMManageable DOMPublishable DOMTraverseable und DOMIOerstellt und verwaltet Die DOM Level 2 API wird hier nicht vorgefuhrt da sie an anderenStellen in aller Ausfuhrlichkeit erwahnt wird [Le 00] In einer Zope Umgebung in der einwesentlicher Mehrwert auf die Zope Funktionalitaten wie Management Publizieren Tra-versabilitat und Sicherheit gelegt ist ist derzeit Parsed XML der einzig mogliche Weg umXML Dokumente zu parsen

61

Abbildung 2 Architektur des Beispiels

5 Beispiel Dynamische HTML Navigation aus XML Dokumenten

Als Beispiel fur die Anwendung der oben beschriebenen Produkte innerhalb von Zo-pe wird eine dynamische HTML Navigation aus XSD Slide Dokumenten zusammenge-stellt Die Architektur dazu ist in Abbildung 2 abgebildet Grundlage dieser dynamischeHTML Navigation bildet das XML Schema [Fal01] [Tho01] [Bir01] [Bai02] Dokumentslidesxsd (siehe Anhang A) mit dem zum Beispiel folgende XML Dokument Instanzverknupft werden kann

ltxml version=10 encoding=iso-8859-1gtltslide xmlns=httpwwwexamplecomslidesgtlttitlegtDer Titel des VortragslttitlegtltsubtitlegtDer Untertitel des VortragsltsubtitlegtltauthorgtDer Autor des VortragsltcompanygtDie Firma des Autorsltcompanygt

ltauthorgt

62

ltbodygtltslidegt

Werden nun entsprechende Parsed XML Dokumente in einem Ordered Folder abgelegt sobilden diese Dokumente die Menge aller Slides die uber das Page Templateslideshtml (siehe Anhang B) aufgerufen werden In diesem Page Template wird uberden Aufruf des Macros layout ein Default Template aus dem Page Template Dokumentlayouthtml (siehe Anhang C) vorgelegt und die entsprechenden Macro-Slotsnavigationpage header und main aus diesem Template werden durch die obigen fill-slot Be-reiche uberschrieben Das Default Page Template layouthtml ist dabei die HTMLVorlage die von einem HTML Designer als Grundlage fur ein Layout mit jedem HTMLEditor bearbeitet werden kann Der einzige Hinweis dass hier auch Logik eingebaut istsind die drei metalblock Elemente die entsprechende Slots definieren die von dem ei-gentlich aufgerufenen Page Template Dokument slideshtml uberschrieben werdenkonnen

Die Navigation wird dabei uber ein Python Skript geregelt welches eine simple Schleifeuber alle Parsed XML Objekte in dem Ordered Folder legt und die von dem derzeitigenObjekt sowohl das Vorganger Objekt als auch das Nachfolger Objekt berechnet

Die Umwandlung des XML Inhalts aus den Parsed XML Dokumenten erfolgt in demPython Skript xmlnode und wird uber das DOM Level 12 Interface Node und dessenAttribute nodeName nodeType childNodes und firstChild angesprochen

def xmlnode(node name)return the content of a slide document instanceaccording to the second argumentresult = for child in nodechildNodesif childnodeName == nameif len(childchildNodes) = 1if childnodeName == rsquobodyrsquofor i in childchildNodesresult = result + str(i)

return resultelif childnodeName == rsquoauthorrsquoresult = result + str(childfirstChild) + rsquonrsquofor i in childchildNodesif inodeName == rsquocompanyrsquoresult = result + str(ifirstChild)

return resultelif childfirstChildnodeType == nodeTEXT_NODEreturn str(childfirstChilddata)

else

63

return None

Als Beispiel kann die folgende Abbildung 3 eines Vortrags uber Online Graphics withSVG [Kle02] angesehen werden

Abbildung 3 HTML Slide erzeugt aus XML Schema Dokument mittels Parsed XML und PageTem-plates auf Zope

6 Ergebnis

Auch wenn der Open Source Web- und Application-Server Software Zope noch nicht alsreiner XML Webserver betitelt werden kann so ist eine Verarbeitung von XML Dokumen-ten mit einer XHTML Anzeige auch moglich ohne die geschlossene Umgebung von Zopezu verlassen Dafur sind jedoch noch die Zope Produkte (Programmpakete) Parsed XMLund Page Templates notwendig Parsed XML ist ein auf dem Python Expat aufbauenderXML Parser mit einer standardisierten DOM-Schnittstelle der die Eigenschaften von Zo-pe ubernimmt und als API anbietet Zusammen mit Page Templates einer auf Attributenbasierten Erweiterung von XHTML wird somit fur Zope die Basis zur XML Verarbeitungund XHTML Anzeige gelegt Mit dieser Methode XML Dokumente in Zope zu verar-beiten wird eine Moglichkeit geschaffen die Flexibilitat und Erweiterbarkeit von Zope

64

auch bei der XML-Verarbeitung auszunutzen Die vorgezeigte Methode wird mit einemBeispiel einer einfachen Anwendung fur eine dynamische HTML Navigation aus XMLDokumenten mit einer Struktur fur Slides dargestellt

Literatur

[Adl00] Adler etal Extensible Stylesheet Language httpwwww3orgTRxsl 2000

[Aye00] Ayeva et al Zope Book Project httpzdpzopeorgprojectszbook 2000

[Bai02] Baier etal XML Schema Teil 0 1 2 httpwwwedition-w3cde 2002

[Bee02] httpwwwbeehivede 2002

[Bir01] Biron etal XML Schema Part 2 Datatypes httpwwww3orgTRxmlschema-2 2001

[Bos98] Bos etal Cascading Style Sheets httpwwww3orgTRREC-CSS2 1998

[Bra98] Bray etal Extensible Markup Language httpwwww3orgTRREC-xml 1998

[CGI02] httphoohooncsauiuceducaiinterfacehtml 2002

[Faa02] Faassen Parsed XML httpwwwzopeorgmembersfassenParsedXML 2002

[Fal01] Fallside XML Schema Part 0 Primer httpwwww3orgTRxmlschema-0 2001

[Inf02] httpwwwinfraecom 2002

[Iuv02] httpwwwiuvenocom 2002

[Kle02] Klever Online Graphics with SVG httpxmlfh-augsburgdeSVGICL2002 2002

[Lat00] Latteier Pelletier The Zope Book httpwwwzopeorgdocumentation 2000

[LeH00] LeHors et al Document Object Model (DOM) Level 2 Core Specificationhttpwwww3orgTRDOM-Level-2-Core 2000

[Pem00] Pemberton et al XHTML 10 The Extensible HyperText Markup Languagehttpwwww3orgTR2000REC-xhtml1-20000126 2000

[Pro02] httpwwwzopeorgproductsall products 2002

[Tho01] Thompson etal XML Schema Part 1 Structures httpwwww3orgTRxmlschema-12001

[vR02] vRossum Drake Python Reference Manual httpwwwpythonorg 2002

65

Anhang A XML Schema Dokument slidesxsd

ltschema xmlnsxsd=httpwwww3org2001XMLSchemaxmlns=httpwwwexamplecomslidestargetNamespace=httpwwwexamplecomslideselementFormDefault=unqualifiedattributeFormDefault=unqualifiedgt

ltxsdelement name=slidegtltxsdcomplexTypegtltxsdsequencegtltxsdelement name=title type=xsdstringgtltxsdelement name=subtitle type=xsdstring

minOccurs=0gtltxsdelement name=author minOccurs=0gtltxsdcomplexType mixed=truegtltxsdsequencegtltxsdelement name=company type=xsdstring

minOccurs=0gtltxsdsequencegtltxsdcomplexTypegt

ltxsdelementgtltxsdelement name=body minOccurs=0gtltxsdcomplexType mixed=truegtltxsdsequencegtltxsdany namespace=httpwwww3org1999xhtml

minOccurs=0 maxOccurs=unboundedprocessContents=laxgt

ltxsdsequencegtltxsdanyAttribute

namespace=httpwwww3org1999xhtmlgtltxsdcomplexTypegt

ltxsdelementgtltxsdsequencegt

ltxsdcomplexTypegtltxsdelementgt

ltxsdschemagt

Anhang B Page Template Dokument slideshtml

ltxml version=10 encoding=iso-8859-1gtltDOCTYPE HTML PUBLIC

-W3CDTD HTML 401 TransitionalENhttpwwww3orgTRhtml4strictdtdgt

66

lthtml xmlns=httpwwww3org1999xhtml lang=enxmllang=enxmlnstal=httpxmlzopeorgnamespacestalxmlnsmetal=httpxmlzopeorgnamespacesmetaltaldefine=global thisSlideId requestslideglobal thisSlide pythongetattr(herethisSlideId)metaluse-macro=containerlayouthtmlmacroslayoutgt

ltheadgtltdiv metalfill-slot=style talomit-tag=gtltlink talcondition=python

modules[rsquostringrsquo]find(request[rsquoHTTP_USER_AGENTrsquo]rsquoGecko2002rsquo) = -1 rel=stylesheettype=textcsshref=standard_style_mozillacss gt

ltlink talcondition=pythonmodules[rsquostringrsquo]find(request[rsquoHTTP_USER_AGENTrsquo]rsquoWindowsrsquo) = -1 rel=stylesheet type=textcsshref=standard_style_windowscss gtltdivgt

ltheadgt

ltbodygtltdiv class=navigation metalfill-slot=navigation

taldefine=thisSlideId requestslidecurrent pythonstr(hereabsolute_url())+rsquoslides_htmlslide=rsquogt

lttd class=externgtlta href=prev talattributes=href

pythoncurrent+herenavigate(rsquoprevrsquothisSlideId)gtltimg src=prevpng alt=previous gtltagtlttdgt

lttd class=externgtlta href=top talattributes=href

pythoncurrent+herenavigate(rsquotoprsquothisSlideId)gtltimg src=toppng alt=top gtltagtlttdgt

lttd class=externgtlta href=next talattributes=href

pythoncurrent+herenavigate(rsquonextrsquothisSlideId)gtltimg src=nextpng alt=next gtltagtlttdgtltdivgt

ltdiv metalfill-slot=page_header talomit-tag=taldefine=thisSlideId requestslidethisSlide pythongetattr(herethisSlideId)gt

lth1 talcontent=pythonherexmlnode(thisSlidersquotitlersquo)gt

content titlelth1gt

67

lth2 talcondition=pythonherexmlnode(thisSlidersquosubtitlersquo)talcontent=pythonherexmlnode(thisSlidersquosubtitlersquo)talon-error=nothinggtoptional subtitlelth2gt

ltdivgtltdiv metalfill-slot=main class=margins

talomit-tag= taldefine=thisSlideId requestslidethisSlide pythongetattr(herethisSlideId)gt

ltspan class=titletalcondition=pythonthisSlideId==rsquoTitlersquogt

ltemgtltpre class=title

talcontent=pythonherexmlnode(thisSlidersquoauthorrsquo)

talon-error=nothinggtoptional authorltpregtltemgtltspangt

ltspan talcondition=pythonherexmlnode(thisSlidersquobodyrsquo)talreplace=structure

pythonherexmlnode(thisSlidersquobodyrsquo)talon-error=nothinggtoptional bodyltspangt

ltdivgtltbodygt

lthtmlgt

Anhang C Page Template Dokument layouthtml

ltxml version=10 encoding=iso-8859-1gtltDOCTYPE html PUBLIC -W3CDTD XHTML 11EN

httpwwww3orgTRxhtml11DTDxhtml11dtdgtlthtml xmlns=httpwwww3org1999xhtml

lang=de xmllang=dexmlnstal=httpxmlzopeorgnamespacestalxmlnsmetal=httpxmlzopeorgnamespacesmetalmetaldefine-macro=layoutgt

lthead metaldefine-slot=headgtltmeta http-equiv=Content-Type

content=texthtml charset=iso-8859-1 gtlttitlegtltspan talreplace=containertitlegtContext title

68

ltspangtltspan talcondition=containertitle

talreplace=string - gt - ltspangtltspan talreplace=heretitlegtThe titleltspangt

lttitlegtltlink metaldefine-slot=style rel=stylesheet

href=standard_style_netscapecsstype=textcss gt

ltheadgt

ltbodygtlttable class=externgtlttbodygtlttr class=externgtlttd class=externgtlta href=httpwwwfh-augsburgdegtltimg src=fha_logo alt=FH Augsburg gt

ltagtlttdgtlttd class=externgtlttdgt

lttrgtlttr valign=top class=externgtlttd class=externgtlttable class=externgtltcaptiongtltcaptiongtlttbodygtlttr class=navigationgtltmetalblock define-slot=navigationgtlttd class=navigationgtlta href=prevgt

ltimg src=prevpng alt=previous gtltagtlttdgt

lttd class= navigation gtlta href=topgt

ltimg src=toppng alt=top gtltagtlttdgt

lttd class= navigation gtlta href=nextgt

ltimg src=nextpng alt=next gtltagtlttdgt

ltmetalblockgtlttrgtlttbodygt

lttablegtlttdgtlttd class=page_headergt

69

ltmetalblock define-slot=page_headergtlth1gtpage titlelth1gtlth2gtand subtitle will be herelth2gt

ltmetalblockgtlttdgt

lttrgtlttr class=externgtlttd class=externgtlttdgtlttd class=maingtltmetalblock define-slot=maingtltulgtltligtmainltligtltligtinformationltligtltligtwillltligtltligtbe hereltligtltulgt

ltmetalblockgtlttdgt

lttrgtlttbodygt

lttablegtltbodygtlthtmlgt

70

Page 2: XML und Zope - subs.emis.derelationaler Datenbanken und unterst¨utzt verschiedene Skriptsprachen wie Python, Perl, PHP sowie die Zope-eigene Skriptsprache DTML. und andere. Die Architektur

2 Zope

Python als Skriptsprache wurde 1990 als Pendant zu Perl von Guido van Rossum mitdem Ziel entwickelt sowohl die Lesbarkeit von Programmen als auch die Objektorien-tierung bereits im Kernel zu integrieren Die Lesbarkeit von Pythonprogammen basiertdarauf dass die Blockstruktur nicht wie bei den meisten bekannten Programmiersprachenauf einer Klammerung basiert sondern auf der Einruckung Ein Block beginnt mit einerEinruckung und endet mit der Ausruckung damit werden Pythonprogamme ubersicht-licher und lesbarer fur externe Programmierer Nahere Informationen zu Python konnenunter [van02] nachgelesen werden Zope wurde 1996 von Jim Fulton als Antwort auf diebestehenden Sicherheitsprobleme und fehlende Objektorientierung in der CGI [CGI02]Programmierung entwickelt Mit Python als Grundlage konnte die Objektorientierung vonvornherein integriert werden Nur einige wenige zeitkritische Teile wurden in C geschrie-ben um die Performance von Zope als Webserver zu verbessern Die Eigenschaften vonZope als Applikationsserver kann man folgendermaszligen zusammenfassen Zope ist einWebserver (der aber nicht benutzt werden muss) besitzt eine webbasierte Schnittstelleenthalt sowohl eine integrierte Objektdatenbank als auch Schnittstellen zur Einbindungrelationaler Datenbanken und unterstutzt verschiedene Skriptsprachen wie Python PerlPHP sowie die Zope-eigene Skriptsprache DTML und andere Die Architektur von Zopebaut auf 4 Schichten auf dem ZServer als Webserver dem ZPublisher fur die Abarbeitungder Requests auf die Objekte (durch den Zope Object Request Broker - ZORB) und denZusammenbau der Objekte dem ZFramework als Schnittstelle zu den Zope Produkten undZODB die Zope Object Database (s Bild 1 nach [Aye00])

3 Page Templates

Die Trennung von Layout und Struktur die sich immer mehr in der Internetgemeinde mitXML [Bra98] CSS [Bos98] und XSL [Adl00] durchsetzt konnte jedoch mit der Zopeeigenen Skriptsprache DTML nicht in der Art und Weise verwirklicht werden wie es ur-sprunglich geplant war DTML ist zum einen nicht wohlgeformt und zum zweiten wird dasLayout einer HTML auf mehrere Objekte ausgelagert sodass insbesondere die Erstellungeines Internet Seiten Layouts mit einem HTML Editor nicht ohne weitere Umformungenin DTML umsetzbar ist Aus diesem Grund wurden 2001 Page Templates als Zope Pro-dukt eingefuhrt die diese Problematik umgehen Page Templates bauen auf zwei MarkupLanguages der Template Attribute Language - TAL - und der Macro Extension TemplateAttribute Language - METAL - auf Beide Markup Languages definieren keine eigenenTags wie bei DTML sondern nur Attribute die auf XHTML Tags angewendet werdenDie Eindeutigkeit der Attribute und die Einbindung in XHTML wird dabei durch die Ver-wendung von Namespace-Prefixes sichergestellt TAL wird dabei mit dem Namespace

xmlnstal=httpxmlzopeorgnamespacestal

und METAL analog mit dem Namespace

58

Abbildung 1 Zope Architektur

xmlnsmetal=httpxmlzopeorgnamespacesmetal

verknupft Der Vorteil der Verwendung von Page Templates liegt dabei auf der Hand Jederbeliebige HTML Editor ist nun von Designern fur die Entwicklung des Internet-Layoutsverwendbar um die HTML Datei danach als Page Template als ein einziges Objekt einfachin Zope einbinden zu konnen Die Logik und Dynamik der entsprechenden Anwendungwird anschliessend mit den TAL- und METAL-Attributen eingebaut Weitere Entwick-lungszyklen sind ebenfalls unproblematisch da die zusatzlichen Attribute von den HTMLEditoren nicht interpretiert und verandert werden

31 Template Attribute Language

Die Template Attribute Language beruht im wesentlichen auf den Attributen content re-place und attributes welche Inhalte von Tags gesamte Tags und Attribute von Tags er-

59

setzen sowie den Attributen define condition und repeat welche Variablen definierenBedingungen abfragen und Schleifen abhandeln Als Beispiel sei hier die Ersetzung deshref-Attributes eines normalen XHTML Anchor Tags vorgefuhrt

lta href=samplelinkhtmltalattributes=href heresubabsolute_urlgt

In diesem Beispiel wird der vom Designer beispielhaft vorgegebene Link im href-Attributdurch einen Ausdruck heresubabsolute url ersetzt Dabei wurde das Schlussel-wort here verwendet welches sich auf den jeweiligen Context in der Zope-Objekthier-archie bezieht sub ist ein entsprechendes Objekt in diesem Context und absolute urleine Methode des Objektmanagers die an alle Objekte vererbt wird und die absolute URLdes entsprechenden Objektes zuruckliefert Ganz ahnlich wird in dem folgenden Beispielder Inhalt des XHTML Paragraph Tags ersetzt

ltp talcontent=structure heregetStorygtmarked ltbgtupltbgt content goes here

ltpgt

Hier wird der Inhalt dieses Tags also marked ltbgtupltbgt content goes hereersetzt durch das Ergebnis welches die Methode getStory aus dem aktuellen Contexthere zuruckliefert Dabei wird die Struktur des Inhalts durch das Schlusselwortstructure beibehalten was bedeutet dass entsprechende XHTML oder XML-Tagsinterpretiert werden und nicht als XML-Entities umschrieben werden Bei der Verwen-dung der Attribute repeat und condition die den Ablauf beeinflussen sehen die Beispielefolgendermassen aus

lttr talrepeat=item pythonrange(10)gtlttd bgcolor=000000

talcondition=repeatitemeventalattributes=bgcolor stringrsquoDCDCDCrsquotalcontent=repeatitemnumbergtEven Numberlttdgt

lttd bgcolor=000000talcondition=repeatitemoddtalattributes=bgcolor stringrsquo000000rsquotalcontent=repeatitemnumbergtOdd Numberlttdgt

lttrgt

In diesem Beispiel werden 10 Zeilen mit einer Spalte erzeugt die jeweils abwechslendgrau fur die geraden Zahlen und weiss fur die ungeraden Zahlen unterlegt sind rangeist dabei eine interne Python Funktion und repeat ein Schlusselwort welches sich auf dasRepeat-Objekt bezieht von dem die Methoden even odd und number fur jeden Schleifen-durchlauf item geerbt werden

60

32 Macro Extension Template Attribute Language

Die Macro Extension Template Attribute Language wird dazu verwendet um immer wie-der auftauchende Ablaufe und Ausdrucke umfangreicherer Art zu definieren und wieder-zuverwenden Hierfur sind die vier Attribute define-macro use-macro define-slot und fill-slot geschaffen worden Als Beispiel sei hier ein einfaches Copyright vorgefuhrt

ltp metaldefine-macro=copyrightgtCopyright 2001ltemgtFoo Bar and Associatesltemgt Inc

ltpgt

Der Aufruf dieses Macros lautet dann folgendermassen

ltb metalusemacro=containermaster_pagemacroscopyrightgt

Macro goes hereltbgt

wobei das Bold-Tag komplett durch das Paragraph-Tag ersetzt wird Die beiden anderenAttribute konnen zusatzlich dazu verwendet werden um slots innerhalb von Macros zudefinieren die dann noch zusatzlich uberschrieben werden konnen

4 Parsed XML

Die Verarbeitung von XML Dokumenten benotigt einen entsprechenden XML Parser Esliegt in einer einheitlichen Umgebung auf der Hand den Vorgang des Parsens durch ei-ne entsprechend integrierte Schnittstelle herzustellen Im Zope Produkt Parsed XML[Faa02] wird diese Schnittstelle zur Verfugung gestellt Im Gegensatz zu dem ProduktPage Templates welches bereits Eingang in die Zope Kern Distribution gefunden hat istParsed XML ein zusatzliches Produkt fur das auch das XML Paket fur Python pyXMLzusatzlich installiert werden muss Parsed XML stellt eine der W3C DOM Level 2 Spe-zifikation [Le 00] entsprechende Schnittstelle (DOM API) fur den Zugriff auf den XMLDOM Baum zur Verfugung Zusatzlich zu der vom W3C definierten DOM Level 2 APIwird in dem Parsed XML Produkt eine weitere API zur Verfugung gestellt die Manage-ableDOM API Diese Schnittstelle berucksichtigt mittels Proxy Objekten die zusatzlichenEigenschaften von Zope wie Management Publishing Traverseability und Security Ei-genschaften die in der W3C API nicht enthalten sind Diese Eigenschaften werden uberdie Python Klassen DOMManageable DOMPublishable DOMTraverseable und DOMIOerstellt und verwaltet Die DOM Level 2 API wird hier nicht vorgefuhrt da sie an anderenStellen in aller Ausfuhrlichkeit erwahnt wird [Le 00] In einer Zope Umgebung in der einwesentlicher Mehrwert auf die Zope Funktionalitaten wie Management Publizieren Tra-versabilitat und Sicherheit gelegt ist ist derzeit Parsed XML der einzig mogliche Weg umXML Dokumente zu parsen

61

Abbildung 2 Architektur des Beispiels

5 Beispiel Dynamische HTML Navigation aus XML Dokumenten

Als Beispiel fur die Anwendung der oben beschriebenen Produkte innerhalb von Zo-pe wird eine dynamische HTML Navigation aus XSD Slide Dokumenten zusammenge-stellt Die Architektur dazu ist in Abbildung 2 abgebildet Grundlage dieser dynamischeHTML Navigation bildet das XML Schema [Fal01] [Tho01] [Bir01] [Bai02] Dokumentslidesxsd (siehe Anhang A) mit dem zum Beispiel folgende XML Dokument Instanzverknupft werden kann

ltxml version=10 encoding=iso-8859-1gtltslide xmlns=httpwwwexamplecomslidesgtlttitlegtDer Titel des VortragslttitlegtltsubtitlegtDer Untertitel des VortragsltsubtitlegtltauthorgtDer Autor des VortragsltcompanygtDie Firma des Autorsltcompanygt

ltauthorgt

62

ltbodygtltslidegt

Werden nun entsprechende Parsed XML Dokumente in einem Ordered Folder abgelegt sobilden diese Dokumente die Menge aller Slides die uber das Page Templateslideshtml (siehe Anhang B) aufgerufen werden In diesem Page Template wird uberden Aufruf des Macros layout ein Default Template aus dem Page Template Dokumentlayouthtml (siehe Anhang C) vorgelegt und die entsprechenden Macro-Slotsnavigationpage header und main aus diesem Template werden durch die obigen fill-slot Be-reiche uberschrieben Das Default Page Template layouthtml ist dabei die HTMLVorlage die von einem HTML Designer als Grundlage fur ein Layout mit jedem HTMLEditor bearbeitet werden kann Der einzige Hinweis dass hier auch Logik eingebaut istsind die drei metalblock Elemente die entsprechende Slots definieren die von dem ei-gentlich aufgerufenen Page Template Dokument slideshtml uberschrieben werdenkonnen

Die Navigation wird dabei uber ein Python Skript geregelt welches eine simple Schleifeuber alle Parsed XML Objekte in dem Ordered Folder legt und die von dem derzeitigenObjekt sowohl das Vorganger Objekt als auch das Nachfolger Objekt berechnet

Die Umwandlung des XML Inhalts aus den Parsed XML Dokumenten erfolgt in demPython Skript xmlnode und wird uber das DOM Level 12 Interface Node und dessenAttribute nodeName nodeType childNodes und firstChild angesprochen

def xmlnode(node name)return the content of a slide document instanceaccording to the second argumentresult = for child in nodechildNodesif childnodeName == nameif len(childchildNodes) = 1if childnodeName == rsquobodyrsquofor i in childchildNodesresult = result + str(i)

return resultelif childnodeName == rsquoauthorrsquoresult = result + str(childfirstChild) + rsquonrsquofor i in childchildNodesif inodeName == rsquocompanyrsquoresult = result + str(ifirstChild)

return resultelif childfirstChildnodeType == nodeTEXT_NODEreturn str(childfirstChilddata)

else

63

return None

Als Beispiel kann die folgende Abbildung 3 eines Vortrags uber Online Graphics withSVG [Kle02] angesehen werden

Abbildung 3 HTML Slide erzeugt aus XML Schema Dokument mittels Parsed XML und PageTem-plates auf Zope

6 Ergebnis

Auch wenn der Open Source Web- und Application-Server Software Zope noch nicht alsreiner XML Webserver betitelt werden kann so ist eine Verarbeitung von XML Dokumen-ten mit einer XHTML Anzeige auch moglich ohne die geschlossene Umgebung von Zopezu verlassen Dafur sind jedoch noch die Zope Produkte (Programmpakete) Parsed XMLund Page Templates notwendig Parsed XML ist ein auf dem Python Expat aufbauenderXML Parser mit einer standardisierten DOM-Schnittstelle der die Eigenschaften von Zo-pe ubernimmt und als API anbietet Zusammen mit Page Templates einer auf Attributenbasierten Erweiterung von XHTML wird somit fur Zope die Basis zur XML Verarbeitungund XHTML Anzeige gelegt Mit dieser Methode XML Dokumente in Zope zu verar-beiten wird eine Moglichkeit geschaffen die Flexibilitat und Erweiterbarkeit von Zope

64

auch bei der XML-Verarbeitung auszunutzen Die vorgezeigte Methode wird mit einemBeispiel einer einfachen Anwendung fur eine dynamische HTML Navigation aus XMLDokumenten mit einer Struktur fur Slides dargestellt

Literatur

[Adl00] Adler etal Extensible Stylesheet Language httpwwww3orgTRxsl 2000

[Aye00] Ayeva et al Zope Book Project httpzdpzopeorgprojectszbook 2000

[Bai02] Baier etal XML Schema Teil 0 1 2 httpwwwedition-w3cde 2002

[Bee02] httpwwwbeehivede 2002

[Bir01] Biron etal XML Schema Part 2 Datatypes httpwwww3orgTRxmlschema-2 2001

[Bos98] Bos etal Cascading Style Sheets httpwwww3orgTRREC-CSS2 1998

[Bra98] Bray etal Extensible Markup Language httpwwww3orgTRREC-xml 1998

[CGI02] httphoohooncsauiuceducaiinterfacehtml 2002

[Faa02] Faassen Parsed XML httpwwwzopeorgmembersfassenParsedXML 2002

[Fal01] Fallside XML Schema Part 0 Primer httpwwww3orgTRxmlschema-0 2001

[Inf02] httpwwwinfraecom 2002

[Iuv02] httpwwwiuvenocom 2002

[Kle02] Klever Online Graphics with SVG httpxmlfh-augsburgdeSVGICL2002 2002

[Lat00] Latteier Pelletier The Zope Book httpwwwzopeorgdocumentation 2000

[LeH00] LeHors et al Document Object Model (DOM) Level 2 Core Specificationhttpwwww3orgTRDOM-Level-2-Core 2000

[Pem00] Pemberton et al XHTML 10 The Extensible HyperText Markup Languagehttpwwww3orgTR2000REC-xhtml1-20000126 2000

[Pro02] httpwwwzopeorgproductsall products 2002

[Tho01] Thompson etal XML Schema Part 1 Structures httpwwww3orgTRxmlschema-12001

[vR02] vRossum Drake Python Reference Manual httpwwwpythonorg 2002

65

Anhang A XML Schema Dokument slidesxsd

ltschema xmlnsxsd=httpwwww3org2001XMLSchemaxmlns=httpwwwexamplecomslidestargetNamespace=httpwwwexamplecomslideselementFormDefault=unqualifiedattributeFormDefault=unqualifiedgt

ltxsdelement name=slidegtltxsdcomplexTypegtltxsdsequencegtltxsdelement name=title type=xsdstringgtltxsdelement name=subtitle type=xsdstring

minOccurs=0gtltxsdelement name=author minOccurs=0gtltxsdcomplexType mixed=truegtltxsdsequencegtltxsdelement name=company type=xsdstring

minOccurs=0gtltxsdsequencegtltxsdcomplexTypegt

ltxsdelementgtltxsdelement name=body minOccurs=0gtltxsdcomplexType mixed=truegtltxsdsequencegtltxsdany namespace=httpwwww3org1999xhtml

minOccurs=0 maxOccurs=unboundedprocessContents=laxgt

ltxsdsequencegtltxsdanyAttribute

namespace=httpwwww3org1999xhtmlgtltxsdcomplexTypegt

ltxsdelementgtltxsdsequencegt

ltxsdcomplexTypegtltxsdelementgt

ltxsdschemagt

Anhang B Page Template Dokument slideshtml

ltxml version=10 encoding=iso-8859-1gtltDOCTYPE HTML PUBLIC

-W3CDTD HTML 401 TransitionalENhttpwwww3orgTRhtml4strictdtdgt

66

lthtml xmlns=httpwwww3org1999xhtml lang=enxmllang=enxmlnstal=httpxmlzopeorgnamespacestalxmlnsmetal=httpxmlzopeorgnamespacesmetaltaldefine=global thisSlideId requestslideglobal thisSlide pythongetattr(herethisSlideId)metaluse-macro=containerlayouthtmlmacroslayoutgt

ltheadgtltdiv metalfill-slot=style talomit-tag=gtltlink talcondition=python

modules[rsquostringrsquo]find(request[rsquoHTTP_USER_AGENTrsquo]rsquoGecko2002rsquo) = -1 rel=stylesheettype=textcsshref=standard_style_mozillacss gt

ltlink talcondition=pythonmodules[rsquostringrsquo]find(request[rsquoHTTP_USER_AGENTrsquo]rsquoWindowsrsquo) = -1 rel=stylesheet type=textcsshref=standard_style_windowscss gtltdivgt

ltheadgt

ltbodygtltdiv class=navigation metalfill-slot=navigation

taldefine=thisSlideId requestslidecurrent pythonstr(hereabsolute_url())+rsquoslides_htmlslide=rsquogt

lttd class=externgtlta href=prev talattributes=href

pythoncurrent+herenavigate(rsquoprevrsquothisSlideId)gtltimg src=prevpng alt=previous gtltagtlttdgt

lttd class=externgtlta href=top talattributes=href

pythoncurrent+herenavigate(rsquotoprsquothisSlideId)gtltimg src=toppng alt=top gtltagtlttdgt

lttd class=externgtlta href=next talattributes=href

pythoncurrent+herenavigate(rsquonextrsquothisSlideId)gtltimg src=nextpng alt=next gtltagtlttdgtltdivgt

ltdiv metalfill-slot=page_header talomit-tag=taldefine=thisSlideId requestslidethisSlide pythongetattr(herethisSlideId)gt

lth1 talcontent=pythonherexmlnode(thisSlidersquotitlersquo)gt

content titlelth1gt

67

lth2 talcondition=pythonherexmlnode(thisSlidersquosubtitlersquo)talcontent=pythonherexmlnode(thisSlidersquosubtitlersquo)talon-error=nothinggtoptional subtitlelth2gt

ltdivgtltdiv metalfill-slot=main class=margins

talomit-tag= taldefine=thisSlideId requestslidethisSlide pythongetattr(herethisSlideId)gt

ltspan class=titletalcondition=pythonthisSlideId==rsquoTitlersquogt

ltemgtltpre class=title

talcontent=pythonherexmlnode(thisSlidersquoauthorrsquo)

talon-error=nothinggtoptional authorltpregtltemgtltspangt

ltspan talcondition=pythonherexmlnode(thisSlidersquobodyrsquo)talreplace=structure

pythonherexmlnode(thisSlidersquobodyrsquo)talon-error=nothinggtoptional bodyltspangt

ltdivgtltbodygt

lthtmlgt

Anhang C Page Template Dokument layouthtml

ltxml version=10 encoding=iso-8859-1gtltDOCTYPE html PUBLIC -W3CDTD XHTML 11EN

httpwwww3orgTRxhtml11DTDxhtml11dtdgtlthtml xmlns=httpwwww3org1999xhtml

lang=de xmllang=dexmlnstal=httpxmlzopeorgnamespacestalxmlnsmetal=httpxmlzopeorgnamespacesmetalmetaldefine-macro=layoutgt

lthead metaldefine-slot=headgtltmeta http-equiv=Content-Type

content=texthtml charset=iso-8859-1 gtlttitlegtltspan talreplace=containertitlegtContext title

68

ltspangtltspan talcondition=containertitle

talreplace=string - gt - ltspangtltspan talreplace=heretitlegtThe titleltspangt

lttitlegtltlink metaldefine-slot=style rel=stylesheet

href=standard_style_netscapecsstype=textcss gt

ltheadgt

ltbodygtlttable class=externgtlttbodygtlttr class=externgtlttd class=externgtlta href=httpwwwfh-augsburgdegtltimg src=fha_logo alt=FH Augsburg gt

ltagtlttdgtlttd class=externgtlttdgt

lttrgtlttr valign=top class=externgtlttd class=externgtlttable class=externgtltcaptiongtltcaptiongtlttbodygtlttr class=navigationgtltmetalblock define-slot=navigationgtlttd class=navigationgtlta href=prevgt

ltimg src=prevpng alt=previous gtltagtlttdgt

lttd class= navigation gtlta href=topgt

ltimg src=toppng alt=top gtltagtlttdgt

lttd class= navigation gtlta href=nextgt

ltimg src=nextpng alt=next gtltagtlttdgt

ltmetalblockgtlttrgtlttbodygt

lttablegtlttdgtlttd class=page_headergt

69

ltmetalblock define-slot=page_headergtlth1gtpage titlelth1gtlth2gtand subtitle will be herelth2gt

ltmetalblockgtlttdgt

lttrgtlttr class=externgtlttd class=externgtlttdgtlttd class=maingtltmetalblock define-slot=maingtltulgtltligtmainltligtltligtinformationltligtltligtwillltligtltligtbe hereltligtltulgt

ltmetalblockgtlttdgt

lttrgtlttbodygt

lttablegtltbodygtlthtmlgt

70

Page 3: XML und Zope - subs.emis.derelationaler Datenbanken und unterst¨utzt verschiedene Skriptsprachen wie Python, Perl, PHP sowie die Zope-eigene Skriptsprache DTML. und andere. Die Architektur

Abbildung 1 Zope Architektur

xmlnsmetal=httpxmlzopeorgnamespacesmetal

verknupft Der Vorteil der Verwendung von Page Templates liegt dabei auf der Hand Jederbeliebige HTML Editor ist nun von Designern fur die Entwicklung des Internet-Layoutsverwendbar um die HTML Datei danach als Page Template als ein einziges Objekt einfachin Zope einbinden zu konnen Die Logik und Dynamik der entsprechenden Anwendungwird anschliessend mit den TAL- und METAL-Attributen eingebaut Weitere Entwick-lungszyklen sind ebenfalls unproblematisch da die zusatzlichen Attribute von den HTMLEditoren nicht interpretiert und verandert werden

31 Template Attribute Language

Die Template Attribute Language beruht im wesentlichen auf den Attributen content re-place und attributes welche Inhalte von Tags gesamte Tags und Attribute von Tags er-

59

setzen sowie den Attributen define condition und repeat welche Variablen definierenBedingungen abfragen und Schleifen abhandeln Als Beispiel sei hier die Ersetzung deshref-Attributes eines normalen XHTML Anchor Tags vorgefuhrt

lta href=samplelinkhtmltalattributes=href heresubabsolute_urlgt

In diesem Beispiel wird der vom Designer beispielhaft vorgegebene Link im href-Attributdurch einen Ausdruck heresubabsolute url ersetzt Dabei wurde das Schlussel-wort here verwendet welches sich auf den jeweiligen Context in der Zope-Objekthier-archie bezieht sub ist ein entsprechendes Objekt in diesem Context und absolute urleine Methode des Objektmanagers die an alle Objekte vererbt wird und die absolute URLdes entsprechenden Objektes zuruckliefert Ganz ahnlich wird in dem folgenden Beispielder Inhalt des XHTML Paragraph Tags ersetzt

ltp talcontent=structure heregetStorygtmarked ltbgtupltbgt content goes here

ltpgt

Hier wird der Inhalt dieses Tags also marked ltbgtupltbgt content goes hereersetzt durch das Ergebnis welches die Methode getStory aus dem aktuellen Contexthere zuruckliefert Dabei wird die Struktur des Inhalts durch das Schlusselwortstructure beibehalten was bedeutet dass entsprechende XHTML oder XML-Tagsinterpretiert werden und nicht als XML-Entities umschrieben werden Bei der Verwen-dung der Attribute repeat und condition die den Ablauf beeinflussen sehen die Beispielefolgendermassen aus

lttr talrepeat=item pythonrange(10)gtlttd bgcolor=000000

talcondition=repeatitemeventalattributes=bgcolor stringrsquoDCDCDCrsquotalcontent=repeatitemnumbergtEven Numberlttdgt

lttd bgcolor=000000talcondition=repeatitemoddtalattributes=bgcolor stringrsquo000000rsquotalcontent=repeatitemnumbergtOdd Numberlttdgt

lttrgt

In diesem Beispiel werden 10 Zeilen mit einer Spalte erzeugt die jeweils abwechslendgrau fur die geraden Zahlen und weiss fur die ungeraden Zahlen unterlegt sind rangeist dabei eine interne Python Funktion und repeat ein Schlusselwort welches sich auf dasRepeat-Objekt bezieht von dem die Methoden even odd und number fur jeden Schleifen-durchlauf item geerbt werden

60

32 Macro Extension Template Attribute Language

Die Macro Extension Template Attribute Language wird dazu verwendet um immer wie-der auftauchende Ablaufe und Ausdrucke umfangreicherer Art zu definieren und wieder-zuverwenden Hierfur sind die vier Attribute define-macro use-macro define-slot und fill-slot geschaffen worden Als Beispiel sei hier ein einfaches Copyright vorgefuhrt

ltp metaldefine-macro=copyrightgtCopyright 2001ltemgtFoo Bar and Associatesltemgt Inc

ltpgt

Der Aufruf dieses Macros lautet dann folgendermassen

ltb metalusemacro=containermaster_pagemacroscopyrightgt

Macro goes hereltbgt

wobei das Bold-Tag komplett durch das Paragraph-Tag ersetzt wird Die beiden anderenAttribute konnen zusatzlich dazu verwendet werden um slots innerhalb von Macros zudefinieren die dann noch zusatzlich uberschrieben werden konnen

4 Parsed XML

Die Verarbeitung von XML Dokumenten benotigt einen entsprechenden XML Parser Esliegt in einer einheitlichen Umgebung auf der Hand den Vorgang des Parsens durch ei-ne entsprechend integrierte Schnittstelle herzustellen Im Zope Produkt Parsed XML[Faa02] wird diese Schnittstelle zur Verfugung gestellt Im Gegensatz zu dem ProduktPage Templates welches bereits Eingang in die Zope Kern Distribution gefunden hat istParsed XML ein zusatzliches Produkt fur das auch das XML Paket fur Python pyXMLzusatzlich installiert werden muss Parsed XML stellt eine der W3C DOM Level 2 Spe-zifikation [Le 00] entsprechende Schnittstelle (DOM API) fur den Zugriff auf den XMLDOM Baum zur Verfugung Zusatzlich zu der vom W3C definierten DOM Level 2 APIwird in dem Parsed XML Produkt eine weitere API zur Verfugung gestellt die Manage-ableDOM API Diese Schnittstelle berucksichtigt mittels Proxy Objekten die zusatzlichenEigenschaften von Zope wie Management Publishing Traverseability und Security Ei-genschaften die in der W3C API nicht enthalten sind Diese Eigenschaften werden uberdie Python Klassen DOMManageable DOMPublishable DOMTraverseable und DOMIOerstellt und verwaltet Die DOM Level 2 API wird hier nicht vorgefuhrt da sie an anderenStellen in aller Ausfuhrlichkeit erwahnt wird [Le 00] In einer Zope Umgebung in der einwesentlicher Mehrwert auf die Zope Funktionalitaten wie Management Publizieren Tra-versabilitat und Sicherheit gelegt ist ist derzeit Parsed XML der einzig mogliche Weg umXML Dokumente zu parsen

61

Abbildung 2 Architektur des Beispiels

5 Beispiel Dynamische HTML Navigation aus XML Dokumenten

Als Beispiel fur die Anwendung der oben beschriebenen Produkte innerhalb von Zo-pe wird eine dynamische HTML Navigation aus XSD Slide Dokumenten zusammenge-stellt Die Architektur dazu ist in Abbildung 2 abgebildet Grundlage dieser dynamischeHTML Navigation bildet das XML Schema [Fal01] [Tho01] [Bir01] [Bai02] Dokumentslidesxsd (siehe Anhang A) mit dem zum Beispiel folgende XML Dokument Instanzverknupft werden kann

ltxml version=10 encoding=iso-8859-1gtltslide xmlns=httpwwwexamplecomslidesgtlttitlegtDer Titel des VortragslttitlegtltsubtitlegtDer Untertitel des VortragsltsubtitlegtltauthorgtDer Autor des VortragsltcompanygtDie Firma des Autorsltcompanygt

ltauthorgt

62

ltbodygtltslidegt

Werden nun entsprechende Parsed XML Dokumente in einem Ordered Folder abgelegt sobilden diese Dokumente die Menge aller Slides die uber das Page Templateslideshtml (siehe Anhang B) aufgerufen werden In diesem Page Template wird uberden Aufruf des Macros layout ein Default Template aus dem Page Template Dokumentlayouthtml (siehe Anhang C) vorgelegt und die entsprechenden Macro-Slotsnavigationpage header und main aus diesem Template werden durch die obigen fill-slot Be-reiche uberschrieben Das Default Page Template layouthtml ist dabei die HTMLVorlage die von einem HTML Designer als Grundlage fur ein Layout mit jedem HTMLEditor bearbeitet werden kann Der einzige Hinweis dass hier auch Logik eingebaut istsind die drei metalblock Elemente die entsprechende Slots definieren die von dem ei-gentlich aufgerufenen Page Template Dokument slideshtml uberschrieben werdenkonnen

Die Navigation wird dabei uber ein Python Skript geregelt welches eine simple Schleifeuber alle Parsed XML Objekte in dem Ordered Folder legt und die von dem derzeitigenObjekt sowohl das Vorganger Objekt als auch das Nachfolger Objekt berechnet

Die Umwandlung des XML Inhalts aus den Parsed XML Dokumenten erfolgt in demPython Skript xmlnode und wird uber das DOM Level 12 Interface Node und dessenAttribute nodeName nodeType childNodes und firstChild angesprochen

def xmlnode(node name)return the content of a slide document instanceaccording to the second argumentresult = for child in nodechildNodesif childnodeName == nameif len(childchildNodes) = 1if childnodeName == rsquobodyrsquofor i in childchildNodesresult = result + str(i)

return resultelif childnodeName == rsquoauthorrsquoresult = result + str(childfirstChild) + rsquonrsquofor i in childchildNodesif inodeName == rsquocompanyrsquoresult = result + str(ifirstChild)

return resultelif childfirstChildnodeType == nodeTEXT_NODEreturn str(childfirstChilddata)

else

63

return None

Als Beispiel kann die folgende Abbildung 3 eines Vortrags uber Online Graphics withSVG [Kle02] angesehen werden

Abbildung 3 HTML Slide erzeugt aus XML Schema Dokument mittels Parsed XML und PageTem-plates auf Zope

6 Ergebnis

Auch wenn der Open Source Web- und Application-Server Software Zope noch nicht alsreiner XML Webserver betitelt werden kann so ist eine Verarbeitung von XML Dokumen-ten mit einer XHTML Anzeige auch moglich ohne die geschlossene Umgebung von Zopezu verlassen Dafur sind jedoch noch die Zope Produkte (Programmpakete) Parsed XMLund Page Templates notwendig Parsed XML ist ein auf dem Python Expat aufbauenderXML Parser mit einer standardisierten DOM-Schnittstelle der die Eigenschaften von Zo-pe ubernimmt und als API anbietet Zusammen mit Page Templates einer auf Attributenbasierten Erweiterung von XHTML wird somit fur Zope die Basis zur XML Verarbeitungund XHTML Anzeige gelegt Mit dieser Methode XML Dokumente in Zope zu verar-beiten wird eine Moglichkeit geschaffen die Flexibilitat und Erweiterbarkeit von Zope

64

auch bei der XML-Verarbeitung auszunutzen Die vorgezeigte Methode wird mit einemBeispiel einer einfachen Anwendung fur eine dynamische HTML Navigation aus XMLDokumenten mit einer Struktur fur Slides dargestellt

Literatur

[Adl00] Adler etal Extensible Stylesheet Language httpwwww3orgTRxsl 2000

[Aye00] Ayeva et al Zope Book Project httpzdpzopeorgprojectszbook 2000

[Bai02] Baier etal XML Schema Teil 0 1 2 httpwwwedition-w3cde 2002

[Bee02] httpwwwbeehivede 2002

[Bir01] Biron etal XML Schema Part 2 Datatypes httpwwww3orgTRxmlschema-2 2001

[Bos98] Bos etal Cascading Style Sheets httpwwww3orgTRREC-CSS2 1998

[Bra98] Bray etal Extensible Markup Language httpwwww3orgTRREC-xml 1998

[CGI02] httphoohooncsauiuceducaiinterfacehtml 2002

[Faa02] Faassen Parsed XML httpwwwzopeorgmembersfassenParsedXML 2002

[Fal01] Fallside XML Schema Part 0 Primer httpwwww3orgTRxmlschema-0 2001

[Inf02] httpwwwinfraecom 2002

[Iuv02] httpwwwiuvenocom 2002

[Kle02] Klever Online Graphics with SVG httpxmlfh-augsburgdeSVGICL2002 2002

[Lat00] Latteier Pelletier The Zope Book httpwwwzopeorgdocumentation 2000

[LeH00] LeHors et al Document Object Model (DOM) Level 2 Core Specificationhttpwwww3orgTRDOM-Level-2-Core 2000

[Pem00] Pemberton et al XHTML 10 The Extensible HyperText Markup Languagehttpwwww3orgTR2000REC-xhtml1-20000126 2000

[Pro02] httpwwwzopeorgproductsall products 2002

[Tho01] Thompson etal XML Schema Part 1 Structures httpwwww3orgTRxmlschema-12001

[vR02] vRossum Drake Python Reference Manual httpwwwpythonorg 2002

65

Anhang A XML Schema Dokument slidesxsd

ltschema xmlnsxsd=httpwwww3org2001XMLSchemaxmlns=httpwwwexamplecomslidestargetNamespace=httpwwwexamplecomslideselementFormDefault=unqualifiedattributeFormDefault=unqualifiedgt

ltxsdelement name=slidegtltxsdcomplexTypegtltxsdsequencegtltxsdelement name=title type=xsdstringgtltxsdelement name=subtitle type=xsdstring

minOccurs=0gtltxsdelement name=author minOccurs=0gtltxsdcomplexType mixed=truegtltxsdsequencegtltxsdelement name=company type=xsdstring

minOccurs=0gtltxsdsequencegtltxsdcomplexTypegt

ltxsdelementgtltxsdelement name=body minOccurs=0gtltxsdcomplexType mixed=truegtltxsdsequencegtltxsdany namespace=httpwwww3org1999xhtml

minOccurs=0 maxOccurs=unboundedprocessContents=laxgt

ltxsdsequencegtltxsdanyAttribute

namespace=httpwwww3org1999xhtmlgtltxsdcomplexTypegt

ltxsdelementgtltxsdsequencegt

ltxsdcomplexTypegtltxsdelementgt

ltxsdschemagt

Anhang B Page Template Dokument slideshtml

ltxml version=10 encoding=iso-8859-1gtltDOCTYPE HTML PUBLIC

-W3CDTD HTML 401 TransitionalENhttpwwww3orgTRhtml4strictdtdgt

66

lthtml xmlns=httpwwww3org1999xhtml lang=enxmllang=enxmlnstal=httpxmlzopeorgnamespacestalxmlnsmetal=httpxmlzopeorgnamespacesmetaltaldefine=global thisSlideId requestslideglobal thisSlide pythongetattr(herethisSlideId)metaluse-macro=containerlayouthtmlmacroslayoutgt

ltheadgtltdiv metalfill-slot=style talomit-tag=gtltlink talcondition=python

modules[rsquostringrsquo]find(request[rsquoHTTP_USER_AGENTrsquo]rsquoGecko2002rsquo) = -1 rel=stylesheettype=textcsshref=standard_style_mozillacss gt

ltlink talcondition=pythonmodules[rsquostringrsquo]find(request[rsquoHTTP_USER_AGENTrsquo]rsquoWindowsrsquo) = -1 rel=stylesheet type=textcsshref=standard_style_windowscss gtltdivgt

ltheadgt

ltbodygtltdiv class=navigation metalfill-slot=navigation

taldefine=thisSlideId requestslidecurrent pythonstr(hereabsolute_url())+rsquoslides_htmlslide=rsquogt

lttd class=externgtlta href=prev talattributes=href

pythoncurrent+herenavigate(rsquoprevrsquothisSlideId)gtltimg src=prevpng alt=previous gtltagtlttdgt

lttd class=externgtlta href=top talattributes=href

pythoncurrent+herenavigate(rsquotoprsquothisSlideId)gtltimg src=toppng alt=top gtltagtlttdgt

lttd class=externgtlta href=next talattributes=href

pythoncurrent+herenavigate(rsquonextrsquothisSlideId)gtltimg src=nextpng alt=next gtltagtlttdgtltdivgt

ltdiv metalfill-slot=page_header talomit-tag=taldefine=thisSlideId requestslidethisSlide pythongetattr(herethisSlideId)gt

lth1 talcontent=pythonherexmlnode(thisSlidersquotitlersquo)gt

content titlelth1gt

67

lth2 talcondition=pythonherexmlnode(thisSlidersquosubtitlersquo)talcontent=pythonherexmlnode(thisSlidersquosubtitlersquo)talon-error=nothinggtoptional subtitlelth2gt

ltdivgtltdiv metalfill-slot=main class=margins

talomit-tag= taldefine=thisSlideId requestslidethisSlide pythongetattr(herethisSlideId)gt

ltspan class=titletalcondition=pythonthisSlideId==rsquoTitlersquogt

ltemgtltpre class=title

talcontent=pythonherexmlnode(thisSlidersquoauthorrsquo)

talon-error=nothinggtoptional authorltpregtltemgtltspangt

ltspan talcondition=pythonherexmlnode(thisSlidersquobodyrsquo)talreplace=structure

pythonherexmlnode(thisSlidersquobodyrsquo)talon-error=nothinggtoptional bodyltspangt

ltdivgtltbodygt

lthtmlgt

Anhang C Page Template Dokument layouthtml

ltxml version=10 encoding=iso-8859-1gtltDOCTYPE html PUBLIC -W3CDTD XHTML 11EN

httpwwww3orgTRxhtml11DTDxhtml11dtdgtlthtml xmlns=httpwwww3org1999xhtml

lang=de xmllang=dexmlnstal=httpxmlzopeorgnamespacestalxmlnsmetal=httpxmlzopeorgnamespacesmetalmetaldefine-macro=layoutgt

lthead metaldefine-slot=headgtltmeta http-equiv=Content-Type

content=texthtml charset=iso-8859-1 gtlttitlegtltspan talreplace=containertitlegtContext title

68

ltspangtltspan talcondition=containertitle

talreplace=string - gt - ltspangtltspan talreplace=heretitlegtThe titleltspangt

lttitlegtltlink metaldefine-slot=style rel=stylesheet

href=standard_style_netscapecsstype=textcss gt

ltheadgt

ltbodygtlttable class=externgtlttbodygtlttr class=externgtlttd class=externgtlta href=httpwwwfh-augsburgdegtltimg src=fha_logo alt=FH Augsburg gt

ltagtlttdgtlttd class=externgtlttdgt

lttrgtlttr valign=top class=externgtlttd class=externgtlttable class=externgtltcaptiongtltcaptiongtlttbodygtlttr class=navigationgtltmetalblock define-slot=navigationgtlttd class=navigationgtlta href=prevgt

ltimg src=prevpng alt=previous gtltagtlttdgt

lttd class= navigation gtlta href=topgt

ltimg src=toppng alt=top gtltagtlttdgt

lttd class= navigation gtlta href=nextgt

ltimg src=nextpng alt=next gtltagtlttdgt

ltmetalblockgtlttrgtlttbodygt

lttablegtlttdgtlttd class=page_headergt

69

ltmetalblock define-slot=page_headergtlth1gtpage titlelth1gtlth2gtand subtitle will be herelth2gt

ltmetalblockgtlttdgt

lttrgtlttr class=externgtlttd class=externgtlttdgtlttd class=maingtltmetalblock define-slot=maingtltulgtltligtmainltligtltligtinformationltligtltligtwillltligtltligtbe hereltligtltulgt

ltmetalblockgtlttdgt

lttrgtlttbodygt

lttablegtltbodygtlthtmlgt

70

Page 4: XML und Zope - subs.emis.derelationaler Datenbanken und unterst¨utzt verschiedene Skriptsprachen wie Python, Perl, PHP sowie die Zope-eigene Skriptsprache DTML. und andere. Die Architektur

setzen sowie den Attributen define condition und repeat welche Variablen definierenBedingungen abfragen und Schleifen abhandeln Als Beispiel sei hier die Ersetzung deshref-Attributes eines normalen XHTML Anchor Tags vorgefuhrt

lta href=samplelinkhtmltalattributes=href heresubabsolute_urlgt

In diesem Beispiel wird der vom Designer beispielhaft vorgegebene Link im href-Attributdurch einen Ausdruck heresubabsolute url ersetzt Dabei wurde das Schlussel-wort here verwendet welches sich auf den jeweiligen Context in der Zope-Objekthier-archie bezieht sub ist ein entsprechendes Objekt in diesem Context und absolute urleine Methode des Objektmanagers die an alle Objekte vererbt wird und die absolute URLdes entsprechenden Objektes zuruckliefert Ganz ahnlich wird in dem folgenden Beispielder Inhalt des XHTML Paragraph Tags ersetzt

ltp talcontent=structure heregetStorygtmarked ltbgtupltbgt content goes here

ltpgt

Hier wird der Inhalt dieses Tags also marked ltbgtupltbgt content goes hereersetzt durch das Ergebnis welches die Methode getStory aus dem aktuellen Contexthere zuruckliefert Dabei wird die Struktur des Inhalts durch das Schlusselwortstructure beibehalten was bedeutet dass entsprechende XHTML oder XML-Tagsinterpretiert werden und nicht als XML-Entities umschrieben werden Bei der Verwen-dung der Attribute repeat und condition die den Ablauf beeinflussen sehen die Beispielefolgendermassen aus

lttr talrepeat=item pythonrange(10)gtlttd bgcolor=000000

talcondition=repeatitemeventalattributes=bgcolor stringrsquoDCDCDCrsquotalcontent=repeatitemnumbergtEven Numberlttdgt

lttd bgcolor=000000talcondition=repeatitemoddtalattributes=bgcolor stringrsquo000000rsquotalcontent=repeatitemnumbergtOdd Numberlttdgt

lttrgt

In diesem Beispiel werden 10 Zeilen mit einer Spalte erzeugt die jeweils abwechslendgrau fur die geraden Zahlen und weiss fur die ungeraden Zahlen unterlegt sind rangeist dabei eine interne Python Funktion und repeat ein Schlusselwort welches sich auf dasRepeat-Objekt bezieht von dem die Methoden even odd und number fur jeden Schleifen-durchlauf item geerbt werden

60

32 Macro Extension Template Attribute Language

Die Macro Extension Template Attribute Language wird dazu verwendet um immer wie-der auftauchende Ablaufe und Ausdrucke umfangreicherer Art zu definieren und wieder-zuverwenden Hierfur sind die vier Attribute define-macro use-macro define-slot und fill-slot geschaffen worden Als Beispiel sei hier ein einfaches Copyright vorgefuhrt

ltp metaldefine-macro=copyrightgtCopyright 2001ltemgtFoo Bar and Associatesltemgt Inc

ltpgt

Der Aufruf dieses Macros lautet dann folgendermassen

ltb metalusemacro=containermaster_pagemacroscopyrightgt

Macro goes hereltbgt

wobei das Bold-Tag komplett durch das Paragraph-Tag ersetzt wird Die beiden anderenAttribute konnen zusatzlich dazu verwendet werden um slots innerhalb von Macros zudefinieren die dann noch zusatzlich uberschrieben werden konnen

4 Parsed XML

Die Verarbeitung von XML Dokumenten benotigt einen entsprechenden XML Parser Esliegt in einer einheitlichen Umgebung auf der Hand den Vorgang des Parsens durch ei-ne entsprechend integrierte Schnittstelle herzustellen Im Zope Produkt Parsed XML[Faa02] wird diese Schnittstelle zur Verfugung gestellt Im Gegensatz zu dem ProduktPage Templates welches bereits Eingang in die Zope Kern Distribution gefunden hat istParsed XML ein zusatzliches Produkt fur das auch das XML Paket fur Python pyXMLzusatzlich installiert werden muss Parsed XML stellt eine der W3C DOM Level 2 Spe-zifikation [Le 00] entsprechende Schnittstelle (DOM API) fur den Zugriff auf den XMLDOM Baum zur Verfugung Zusatzlich zu der vom W3C definierten DOM Level 2 APIwird in dem Parsed XML Produkt eine weitere API zur Verfugung gestellt die Manage-ableDOM API Diese Schnittstelle berucksichtigt mittels Proxy Objekten die zusatzlichenEigenschaften von Zope wie Management Publishing Traverseability und Security Ei-genschaften die in der W3C API nicht enthalten sind Diese Eigenschaften werden uberdie Python Klassen DOMManageable DOMPublishable DOMTraverseable und DOMIOerstellt und verwaltet Die DOM Level 2 API wird hier nicht vorgefuhrt da sie an anderenStellen in aller Ausfuhrlichkeit erwahnt wird [Le 00] In einer Zope Umgebung in der einwesentlicher Mehrwert auf die Zope Funktionalitaten wie Management Publizieren Tra-versabilitat und Sicherheit gelegt ist ist derzeit Parsed XML der einzig mogliche Weg umXML Dokumente zu parsen

61

Abbildung 2 Architektur des Beispiels

5 Beispiel Dynamische HTML Navigation aus XML Dokumenten

Als Beispiel fur die Anwendung der oben beschriebenen Produkte innerhalb von Zo-pe wird eine dynamische HTML Navigation aus XSD Slide Dokumenten zusammenge-stellt Die Architektur dazu ist in Abbildung 2 abgebildet Grundlage dieser dynamischeHTML Navigation bildet das XML Schema [Fal01] [Tho01] [Bir01] [Bai02] Dokumentslidesxsd (siehe Anhang A) mit dem zum Beispiel folgende XML Dokument Instanzverknupft werden kann

ltxml version=10 encoding=iso-8859-1gtltslide xmlns=httpwwwexamplecomslidesgtlttitlegtDer Titel des VortragslttitlegtltsubtitlegtDer Untertitel des VortragsltsubtitlegtltauthorgtDer Autor des VortragsltcompanygtDie Firma des Autorsltcompanygt

ltauthorgt

62

ltbodygtltslidegt

Werden nun entsprechende Parsed XML Dokumente in einem Ordered Folder abgelegt sobilden diese Dokumente die Menge aller Slides die uber das Page Templateslideshtml (siehe Anhang B) aufgerufen werden In diesem Page Template wird uberden Aufruf des Macros layout ein Default Template aus dem Page Template Dokumentlayouthtml (siehe Anhang C) vorgelegt und die entsprechenden Macro-Slotsnavigationpage header und main aus diesem Template werden durch die obigen fill-slot Be-reiche uberschrieben Das Default Page Template layouthtml ist dabei die HTMLVorlage die von einem HTML Designer als Grundlage fur ein Layout mit jedem HTMLEditor bearbeitet werden kann Der einzige Hinweis dass hier auch Logik eingebaut istsind die drei metalblock Elemente die entsprechende Slots definieren die von dem ei-gentlich aufgerufenen Page Template Dokument slideshtml uberschrieben werdenkonnen

Die Navigation wird dabei uber ein Python Skript geregelt welches eine simple Schleifeuber alle Parsed XML Objekte in dem Ordered Folder legt und die von dem derzeitigenObjekt sowohl das Vorganger Objekt als auch das Nachfolger Objekt berechnet

Die Umwandlung des XML Inhalts aus den Parsed XML Dokumenten erfolgt in demPython Skript xmlnode und wird uber das DOM Level 12 Interface Node und dessenAttribute nodeName nodeType childNodes und firstChild angesprochen

def xmlnode(node name)return the content of a slide document instanceaccording to the second argumentresult = for child in nodechildNodesif childnodeName == nameif len(childchildNodes) = 1if childnodeName == rsquobodyrsquofor i in childchildNodesresult = result + str(i)

return resultelif childnodeName == rsquoauthorrsquoresult = result + str(childfirstChild) + rsquonrsquofor i in childchildNodesif inodeName == rsquocompanyrsquoresult = result + str(ifirstChild)

return resultelif childfirstChildnodeType == nodeTEXT_NODEreturn str(childfirstChilddata)

else

63

return None

Als Beispiel kann die folgende Abbildung 3 eines Vortrags uber Online Graphics withSVG [Kle02] angesehen werden

Abbildung 3 HTML Slide erzeugt aus XML Schema Dokument mittels Parsed XML und PageTem-plates auf Zope

6 Ergebnis

Auch wenn der Open Source Web- und Application-Server Software Zope noch nicht alsreiner XML Webserver betitelt werden kann so ist eine Verarbeitung von XML Dokumen-ten mit einer XHTML Anzeige auch moglich ohne die geschlossene Umgebung von Zopezu verlassen Dafur sind jedoch noch die Zope Produkte (Programmpakete) Parsed XMLund Page Templates notwendig Parsed XML ist ein auf dem Python Expat aufbauenderXML Parser mit einer standardisierten DOM-Schnittstelle der die Eigenschaften von Zo-pe ubernimmt und als API anbietet Zusammen mit Page Templates einer auf Attributenbasierten Erweiterung von XHTML wird somit fur Zope die Basis zur XML Verarbeitungund XHTML Anzeige gelegt Mit dieser Methode XML Dokumente in Zope zu verar-beiten wird eine Moglichkeit geschaffen die Flexibilitat und Erweiterbarkeit von Zope

64

auch bei der XML-Verarbeitung auszunutzen Die vorgezeigte Methode wird mit einemBeispiel einer einfachen Anwendung fur eine dynamische HTML Navigation aus XMLDokumenten mit einer Struktur fur Slides dargestellt

Literatur

[Adl00] Adler etal Extensible Stylesheet Language httpwwww3orgTRxsl 2000

[Aye00] Ayeva et al Zope Book Project httpzdpzopeorgprojectszbook 2000

[Bai02] Baier etal XML Schema Teil 0 1 2 httpwwwedition-w3cde 2002

[Bee02] httpwwwbeehivede 2002

[Bir01] Biron etal XML Schema Part 2 Datatypes httpwwww3orgTRxmlschema-2 2001

[Bos98] Bos etal Cascading Style Sheets httpwwww3orgTRREC-CSS2 1998

[Bra98] Bray etal Extensible Markup Language httpwwww3orgTRREC-xml 1998

[CGI02] httphoohooncsauiuceducaiinterfacehtml 2002

[Faa02] Faassen Parsed XML httpwwwzopeorgmembersfassenParsedXML 2002

[Fal01] Fallside XML Schema Part 0 Primer httpwwww3orgTRxmlschema-0 2001

[Inf02] httpwwwinfraecom 2002

[Iuv02] httpwwwiuvenocom 2002

[Kle02] Klever Online Graphics with SVG httpxmlfh-augsburgdeSVGICL2002 2002

[Lat00] Latteier Pelletier The Zope Book httpwwwzopeorgdocumentation 2000

[LeH00] LeHors et al Document Object Model (DOM) Level 2 Core Specificationhttpwwww3orgTRDOM-Level-2-Core 2000

[Pem00] Pemberton et al XHTML 10 The Extensible HyperText Markup Languagehttpwwww3orgTR2000REC-xhtml1-20000126 2000

[Pro02] httpwwwzopeorgproductsall products 2002

[Tho01] Thompson etal XML Schema Part 1 Structures httpwwww3orgTRxmlschema-12001

[vR02] vRossum Drake Python Reference Manual httpwwwpythonorg 2002

65

Anhang A XML Schema Dokument slidesxsd

ltschema xmlnsxsd=httpwwww3org2001XMLSchemaxmlns=httpwwwexamplecomslidestargetNamespace=httpwwwexamplecomslideselementFormDefault=unqualifiedattributeFormDefault=unqualifiedgt

ltxsdelement name=slidegtltxsdcomplexTypegtltxsdsequencegtltxsdelement name=title type=xsdstringgtltxsdelement name=subtitle type=xsdstring

minOccurs=0gtltxsdelement name=author minOccurs=0gtltxsdcomplexType mixed=truegtltxsdsequencegtltxsdelement name=company type=xsdstring

minOccurs=0gtltxsdsequencegtltxsdcomplexTypegt

ltxsdelementgtltxsdelement name=body minOccurs=0gtltxsdcomplexType mixed=truegtltxsdsequencegtltxsdany namespace=httpwwww3org1999xhtml

minOccurs=0 maxOccurs=unboundedprocessContents=laxgt

ltxsdsequencegtltxsdanyAttribute

namespace=httpwwww3org1999xhtmlgtltxsdcomplexTypegt

ltxsdelementgtltxsdsequencegt

ltxsdcomplexTypegtltxsdelementgt

ltxsdschemagt

Anhang B Page Template Dokument slideshtml

ltxml version=10 encoding=iso-8859-1gtltDOCTYPE HTML PUBLIC

-W3CDTD HTML 401 TransitionalENhttpwwww3orgTRhtml4strictdtdgt

66

lthtml xmlns=httpwwww3org1999xhtml lang=enxmllang=enxmlnstal=httpxmlzopeorgnamespacestalxmlnsmetal=httpxmlzopeorgnamespacesmetaltaldefine=global thisSlideId requestslideglobal thisSlide pythongetattr(herethisSlideId)metaluse-macro=containerlayouthtmlmacroslayoutgt

ltheadgtltdiv metalfill-slot=style talomit-tag=gtltlink talcondition=python

modules[rsquostringrsquo]find(request[rsquoHTTP_USER_AGENTrsquo]rsquoGecko2002rsquo) = -1 rel=stylesheettype=textcsshref=standard_style_mozillacss gt

ltlink talcondition=pythonmodules[rsquostringrsquo]find(request[rsquoHTTP_USER_AGENTrsquo]rsquoWindowsrsquo) = -1 rel=stylesheet type=textcsshref=standard_style_windowscss gtltdivgt

ltheadgt

ltbodygtltdiv class=navigation metalfill-slot=navigation

taldefine=thisSlideId requestslidecurrent pythonstr(hereabsolute_url())+rsquoslides_htmlslide=rsquogt

lttd class=externgtlta href=prev talattributes=href

pythoncurrent+herenavigate(rsquoprevrsquothisSlideId)gtltimg src=prevpng alt=previous gtltagtlttdgt

lttd class=externgtlta href=top talattributes=href

pythoncurrent+herenavigate(rsquotoprsquothisSlideId)gtltimg src=toppng alt=top gtltagtlttdgt

lttd class=externgtlta href=next talattributes=href

pythoncurrent+herenavigate(rsquonextrsquothisSlideId)gtltimg src=nextpng alt=next gtltagtlttdgtltdivgt

ltdiv metalfill-slot=page_header talomit-tag=taldefine=thisSlideId requestslidethisSlide pythongetattr(herethisSlideId)gt

lth1 talcontent=pythonherexmlnode(thisSlidersquotitlersquo)gt

content titlelth1gt

67

lth2 talcondition=pythonherexmlnode(thisSlidersquosubtitlersquo)talcontent=pythonherexmlnode(thisSlidersquosubtitlersquo)talon-error=nothinggtoptional subtitlelth2gt

ltdivgtltdiv metalfill-slot=main class=margins

talomit-tag= taldefine=thisSlideId requestslidethisSlide pythongetattr(herethisSlideId)gt

ltspan class=titletalcondition=pythonthisSlideId==rsquoTitlersquogt

ltemgtltpre class=title

talcontent=pythonherexmlnode(thisSlidersquoauthorrsquo)

talon-error=nothinggtoptional authorltpregtltemgtltspangt

ltspan talcondition=pythonherexmlnode(thisSlidersquobodyrsquo)talreplace=structure

pythonherexmlnode(thisSlidersquobodyrsquo)talon-error=nothinggtoptional bodyltspangt

ltdivgtltbodygt

lthtmlgt

Anhang C Page Template Dokument layouthtml

ltxml version=10 encoding=iso-8859-1gtltDOCTYPE html PUBLIC -W3CDTD XHTML 11EN

httpwwww3orgTRxhtml11DTDxhtml11dtdgtlthtml xmlns=httpwwww3org1999xhtml

lang=de xmllang=dexmlnstal=httpxmlzopeorgnamespacestalxmlnsmetal=httpxmlzopeorgnamespacesmetalmetaldefine-macro=layoutgt

lthead metaldefine-slot=headgtltmeta http-equiv=Content-Type

content=texthtml charset=iso-8859-1 gtlttitlegtltspan talreplace=containertitlegtContext title

68

ltspangtltspan talcondition=containertitle

talreplace=string - gt - ltspangtltspan talreplace=heretitlegtThe titleltspangt

lttitlegtltlink metaldefine-slot=style rel=stylesheet

href=standard_style_netscapecsstype=textcss gt

ltheadgt

ltbodygtlttable class=externgtlttbodygtlttr class=externgtlttd class=externgtlta href=httpwwwfh-augsburgdegtltimg src=fha_logo alt=FH Augsburg gt

ltagtlttdgtlttd class=externgtlttdgt

lttrgtlttr valign=top class=externgtlttd class=externgtlttable class=externgtltcaptiongtltcaptiongtlttbodygtlttr class=navigationgtltmetalblock define-slot=navigationgtlttd class=navigationgtlta href=prevgt

ltimg src=prevpng alt=previous gtltagtlttdgt

lttd class= navigation gtlta href=topgt

ltimg src=toppng alt=top gtltagtlttdgt

lttd class= navigation gtlta href=nextgt

ltimg src=nextpng alt=next gtltagtlttdgt

ltmetalblockgtlttrgtlttbodygt

lttablegtlttdgtlttd class=page_headergt

69

ltmetalblock define-slot=page_headergtlth1gtpage titlelth1gtlth2gtand subtitle will be herelth2gt

ltmetalblockgtlttdgt

lttrgtlttr class=externgtlttd class=externgtlttdgtlttd class=maingtltmetalblock define-slot=maingtltulgtltligtmainltligtltligtinformationltligtltligtwillltligtltligtbe hereltligtltulgt

ltmetalblockgtlttdgt

lttrgtlttbodygt

lttablegtltbodygtlthtmlgt

70

Page 5: XML und Zope - subs.emis.derelationaler Datenbanken und unterst¨utzt verschiedene Skriptsprachen wie Python, Perl, PHP sowie die Zope-eigene Skriptsprache DTML. und andere. Die Architektur

32 Macro Extension Template Attribute Language

Die Macro Extension Template Attribute Language wird dazu verwendet um immer wie-der auftauchende Ablaufe und Ausdrucke umfangreicherer Art zu definieren und wieder-zuverwenden Hierfur sind die vier Attribute define-macro use-macro define-slot und fill-slot geschaffen worden Als Beispiel sei hier ein einfaches Copyright vorgefuhrt

ltp metaldefine-macro=copyrightgtCopyright 2001ltemgtFoo Bar and Associatesltemgt Inc

ltpgt

Der Aufruf dieses Macros lautet dann folgendermassen

ltb metalusemacro=containermaster_pagemacroscopyrightgt

Macro goes hereltbgt

wobei das Bold-Tag komplett durch das Paragraph-Tag ersetzt wird Die beiden anderenAttribute konnen zusatzlich dazu verwendet werden um slots innerhalb von Macros zudefinieren die dann noch zusatzlich uberschrieben werden konnen

4 Parsed XML

Die Verarbeitung von XML Dokumenten benotigt einen entsprechenden XML Parser Esliegt in einer einheitlichen Umgebung auf der Hand den Vorgang des Parsens durch ei-ne entsprechend integrierte Schnittstelle herzustellen Im Zope Produkt Parsed XML[Faa02] wird diese Schnittstelle zur Verfugung gestellt Im Gegensatz zu dem ProduktPage Templates welches bereits Eingang in die Zope Kern Distribution gefunden hat istParsed XML ein zusatzliches Produkt fur das auch das XML Paket fur Python pyXMLzusatzlich installiert werden muss Parsed XML stellt eine der W3C DOM Level 2 Spe-zifikation [Le 00] entsprechende Schnittstelle (DOM API) fur den Zugriff auf den XMLDOM Baum zur Verfugung Zusatzlich zu der vom W3C definierten DOM Level 2 APIwird in dem Parsed XML Produkt eine weitere API zur Verfugung gestellt die Manage-ableDOM API Diese Schnittstelle berucksichtigt mittels Proxy Objekten die zusatzlichenEigenschaften von Zope wie Management Publishing Traverseability und Security Ei-genschaften die in der W3C API nicht enthalten sind Diese Eigenschaften werden uberdie Python Klassen DOMManageable DOMPublishable DOMTraverseable und DOMIOerstellt und verwaltet Die DOM Level 2 API wird hier nicht vorgefuhrt da sie an anderenStellen in aller Ausfuhrlichkeit erwahnt wird [Le 00] In einer Zope Umgebung in der einwesentlicher Mehrwert auf die Zope Funktionalitaten wie Management Publizieren Tra-versabilitat und Sicherheit gelegt ist ist derzeit Parsed XML der einzig mogliche Weg umXML Dokumente zu parsen

61

Abbildung 2 Architektur des Beispiels

5 Beispiel Dynamische HTML Navigation aus XML Dokumenten

Als Beispiel fur die Anwendung der oben beschriebenen Produkte innerhalb von Zo-pe wird eine dynamische HTML Navigation aus XSD Slide Dokumenten zusammenge-stellt Die Architektur dazu ist in Abbildung 2 abgebildet Grundlage dieser dynamischeHTML Navigation bildet das XML Schema [Fal01] [Tho01] [Bir01] [Bai02] Dokumentslidesxsd (siehe Anhang A) mit dem zum Beispiel folgende XML Dokument Instanzverknupft werden kann

ltxml version=10 encoding=iso-8859-1gtltslide xmlns=httpwwwexamplecomslidesgtlttitlegtDer Titel des VortragslttitlegtltsubtitlegtDer Untertitel des VortragsltsubtitlegtltauthorgtDer Autor des VortragsltcompanygtDie Firma des Autorsltcompanygt

ltauthorgt

62

ltbodygtltslidegt

Werden nun entsprechende Parsed XML Dokumente in einem Ordered Folder abgelegt sobilden diese Dokumente die Menge aller Slides die uber das Page Templateslideshtml (siehe Anhang B) aufgerufen werden In diesem Page Template wird uberden Aufruf des Macros layout ein Default Template aus dem Page Template Dokumentlayouthtml (siehe Anhang C) vorgelegt und die entsprechenden Macro-Slotsnavigationpage header und main aus diesem Template werden durch die obigen fill-slot Be-reiche uberschrieben Das Default Page Template layouthtml ist dabei die HTMLVorlage die von einem HTML Designer als Grundlage fur ein Layout mit jedem HTMLEditor bearbeitet werden kann Der einzige Hinweis dass hier auch Logik eingebaut istsind die drei metalblock Elemente die entsprechende Slots definieren die von dem ei-gentlich aufgerufenen Page Template Dokument slideshtml uberschrieben werdenkonnen

Die Navigation wird dabei uber ein Python Skript geregelt welches eine simple Schleifeuber alle Parsed XML Objekte in dem Ordered Folder legt und die von dem derzeitigenObjekt sowohl das Vorganger Objekt als auch das Nachfolger Objekt berechnet

Die Umwandlung des XML Inhalts aus den Parsed XML Dokumenten erfolgt in demPython Skript xmlnode und wird uber das DOM Level 12 Interface Node und dessenAttribute nodeName nodeType childNodes und firstChild angesprochen

def xmlnode(node name)return the content of a slide document instanceaccording to the second argumentresult = for child in nodechildNodesif childnodeName == nameif len(childchildNodes) = 1if childnodeName == rsquobodyrsquofor i in childchildNodesresult = result + str(i)

return resultelif childnodeName == rsquoauthorrsquoresult = result + str(childfirstChild) + rsquonrsquofor i in childchildNodesif inodeName == rsquocompanyrsquoresult = result + str(ifirstChild)

return resultelif childfirstChildnodeType == nodeTEXT_NODEreturn str(childfirstChilddata)

else

63

return None

Als Beispiel kann die folgende Abbildung 3 eines Vortrags uber Online Graphics withSVG [Kle02] angesehen werden

Abbildung 3 HTML Slide erzeugt aus XML Schema Dokument mittels Parsed XML und PageTem-plates auf Zope

6 Ergebnis

Auch wenn der Open Source Web- und Application-Server Software Zope noch nicht alsreiner XML Webserver betitelt werden kann so ist eine Verarbeitung von XML Dokumen-ten mit einer XHTML Anzeige auch moglich ohne die geschlossene Umgebung von Zopezu verlassen Dafur sind jedoch noch die Zope Produkte (Programmpakete) Parsed XMLund Page Templates notwendig Parsed XML ist ein auf dem Python Expat aufbauenderXML Parser mit einer standardisierten DOM-Schnittstelle der die Eigenschaften von Zo-pe ubernimmt und als API anbietet Zusammen mit Page Templates einer auf Attributenbasierten Erweiterung von XHTML wird somit fur Zope die Basis zur XML Verarbeitungund XHTML Anzeige gelegt Mit dieser Methode XML Dokumente in Zope zu verar-beiten wird eine Moglichkeit geschaffen die Flexibilitat und Erweiterbarkeit von Zope

64

auch bei der XML-Verarbeitung auszunutzen Die vorgezeigte Methode wird mit einemBeispiel einer einfachen Anwendung fur eine dynamische HTML Navigation aus XMLDokumenten mit einer Struktur fur Slides dargestellt

Literatur

[Adl00] Adler etal Extensible Stylesheet Language httpwwww3orgTRxsl 2000

[Aye00] Ayeva et al Zope Book Project httpzdpzopeorgprojectszbook 2000

[Bai02] Baier etal XML Schema Teil 0 1 2 httpwwwedition-w3cde 2002

[Bee02] httpwwwbeehivede 2002

[Bir01] Biron etal XML Schema Part 2 Datatypes httpwwww3orgTRxmlschema-2 2001

[Bos98] Bos etal Cascading Style Sheets httpwwww3orgTRREC-CSS2 1998

[Bra98] Bray etal Extensible Markup Language httpwwww3orgTRREC-xml 1998

[CGI02] httphoohooncsauiuceducaiinterfacehtml 2002

[Faa02] Faassen Parsed XML httpwwwzopeorgmembersfassenParsedXML 2002

[Fal01] Fallside XML Schema Part 0 Primer httpwwww3orgTRxmlschema-0 2001

[Inf02] httpwwwinfraecom 2002

[Iuv02] httpwwwiuvenocom 2002

[Kle02] Klever Online Graphics with SVG httpxmlfh-augsburgdeSVGICL2002 2002

[Lat00] Latteier Pelletier The Zope Book httpwwwzopeorgdocumentation 2000

[LeH00] LeHors et al Document Object Model (DOM) Level 2 Core Specificationhttpwwww3orgTRDOM-Level-2-Core 2000

[Pem00] Pemberton et al XHTML 10 The Extensible HyperText Markup Languagehttpwwww3orgTR2000REC-xhtml1-20000126 2000

[Pro02] httpwwwzopeorgproductsall products 2002

[Tho01] Thompson etal XML Schema Part 1 Structures httpwwww3orgTRxmlschema-12001

[vR02] vRossum Drake Python Reference Manual httpwwwpythonorg 2002

65

Anhang A XML Schema Dokument slidesxsd

ltschema xmlnsxsd=httpwwww3org2001XMLSchemaxmlns=httpwwwexamplecomslidestargetNamespace=httpwwwexamplecomslideselementFormDefault=unqualifiedattributeFormDefault=unqualifiedgt

ltxsdelement name=slidegtltxsdcomplexTypegtltxsdsequencegtltxsdelement name=title type=xsdstringgtltxsdelement name=subtitle type=xsdstring

minOccurs=0gtltxsdelement name=author minOccurs=0gtltxsdcomplexType mixed=truegtltxsdsequencegtltxsdelement name=company type=xsdstring

minOccurs=0gtltxsdsequencegtltxsdcomplexTypegt

ltxsdelementgtltxsdelement name=body minOccurs=0gtltxsdcomplexType mixed=truegtltxsdsequencegtltxsdany namespace=httpwwww3org1999xhtml

minOccurs=0 maxOccurs=unboundedprocessContents=laxgt

ltxsdsequencegtltxsdanyAttribute

namespace=httpwwww3org1999xhtmlgtltxsdcomplexTypegt

ltxsdelementgtltxsdsequencegt

ltxsdcomplexTypegtltxsdelementgt

ltxsdschemagt

Anhang B Page Template Dokument slideshtml

ltxml version=10 encoding=iso-8859-1gtltDOCTYPE HTML PUBLIC

-W3CDTD HTML 401 TransitionalENhttpwwww3orgTRhtml4strictdtdgt

66

lthtml xmlns=httpwwww3org1999xhtml lang=enxmllang=enxmlnstal=httpxmlzopeorgnamespacestalxmlnsmetal=httpxmlzopeorgnamespacesmetaltaldefine=global thisSlideId requestslideglobal thisSlide pythongetattr(herethisSlideId)metaluse-macro=containerlayouthtmlmacroslayoutgt

ltheadgtltdiv metalfill-slot=style talomit-tag=gtltlink talcondition=python

modules[rsquostringrsquo]find(request[rsquoHTTP_USER_AGENTrsquo]rsquoGecko2002rsquo) = -1 rel=stylesheettype=textcsshref=standard_style_mozillacss gt

ltlink talcondition=pythonmodules[rsquostringrsquo]find(request[rsquoHTTP_USER_AGENTrsquo]rsquoWindowsrsquo) = -1 rel=stylesheet type=textcsshref=standard_style_windowscss gtltdivgt

ltheadgt

ltbodygtltdiv class=navigation metalfill-slot=navigation

taldefine=thisSlideId requestslidecurrent pythonstr(hereabsolute_url())+rsquoslides_htmlslide=rsquogt

lttd class=externgtlta href=prev talattributes=href

pythoncurrent+herenavigate(rsquoprevrsquothisSlideId)gtltimg src=prevpng alt=previous gtltagtlttdgt

lttd class=externgtlta href=top talattributes=href

pythoncurrent+herenavigate(rsquotoprsquothisSlideId)gtltimg src=toppng alt=top gtltagtlttdgt

lttd class=externgtlta href=next talattributes=href

pythoncurrent+herenavigate(rsquonextrsquothisSlideId)gtltimg src=nextpng alt=next gtltagtlttdgtltdivgt

ltdiv metalfill-slot=page_header talomit-tag=taldefine=thisSlideId requestslidethisSlide pythongetattr(herethisSlideId)gt

lth1 talcontent=pythonherexmlnode(thisSlidersquotitlersquo)gt

content titlelth1gt

67

lth2 talcondition=pythonherexmlnode(thisSlidersquosubtitlersquo)talcontent=pythonherexmlnode(thisSlidersquosubtitlersquo)talon-error=nothinggtoptional subtitlelth2gt

ltdivgtltdiv metalfill-slot=main class=margins

talomit-tag= taldefine=thisSlideId requestslidethisSlide pythongetattr(herethisSlideId)gt

ltspan class=titletalcondition=pythonthisSlideId==rsquoTitlersquogt

ltemgtltpre class=title

talcontent=pythonherexmlnode(thisSlidersquoauthorrsquo)

talon-error=nothinggtoptional authorltpregtltemgtltspangt

ltspan talcondition=pythonherexmlnode(thisSlidersquobodyrsquo)talreplace=structure

pythonherexmlnode(thisSlidersquobodyrsquo)talon-error=nothinggtoptional bodyltspangt

ltdivgtltbodygt

lthtmlgt

Anhang C Page Template Dokument layouthtml

ltxml version=10 encoding=iso-8859-1gtltDOCTYPE html PUBLIC -W3CDTD XHTML 11EN

httpwwww3orgTRxhtml11DTDxhtml11dtdgtlthtml xmlns=httpwwww3org1999xhtml

lang=de xmllang=dexmlnstal=httpxmlzopeorgnamespacestalxmlnsmetal=httpxmlzopeorgnamespacesmetalmetaldefine-macro=layoutgt

lthead metaldefine-slot=headgtltmeta http-equiv=Content-Type

content=texthtml charset=iso-8859-1 gtlttitlegtltspan talreplace=containertitlegtContext title

68

ltspangtltspan talcondition=containertitle

talreplace=string - gt - ltspangtltspan talreplace=heretitlegtThe titleltspangt

lttitlegtltlink metaldefine-slot=style rel=stylesheet

href=standard_style_netscapecsstype=textcss gt

ltheadgt

ltbodygtlttable class=externgtlttbodygtlttr class=externgtlttd class=externgtlta href=httpwwwfh-augsburgdegtltimg src=fha_logo alt=FH Augsburg gt

ltagtlttdgtlttd class=externgtlttdgt

lttrgtlttr valign=top class=externgtlttd class=externgtlttable class=externgtltcaptiongtltcaptiongtlttbodygtlttr class=navigationgtltmetalblock define-slot=navigationgtlttd class=navigationgtlta href=prevgt

ltimg src=prevpng alt=previous gtltagtlttdgt

lttd class= navigation gtlta href=topgt

ltimg src=toppng alt=top gtltagtlttdgt

lttd class= navigation gtlta href=nextgt

ltimg src=nextpng alt=next gtltagtlttdgt

ltmetalblockgtlttrgtlttbodygt

lttablegtlttdgtlttd class=page_headergt

69

ltmetalblock define-slot=page_headergtlth1gtpage titlelth1gtlth2gtand subtitle will be herelth2gt

ltmetalblockgtlttdgt

lttrgtlttr class=externgtlttd class=externgtlttdgtlttd class=maingtltmetalblock define-slot=maingtltulgtltligtmainltligtltligtinformationltligtltligtwillltligtltligtbe hereltligtltulgt

ltmetalblockgtlttdgt

lttrgtlttbodygt

lttablegtltbodygtlthtmlgt

70

Page 6: XML und Zope - subs.emis.derelationaler Datenbanken und unterst¨utzt verschiedene Skriptsprachen wie Python, Perl, PHP sowie die Zope-eigene Skriptsprache DTML. und andere. Die Architektur

Abbildung 2 Architektur des Beispiels

5 Beispiel Dynamische HTML Navigation aus XML Dokumenten

Als Beispiel fur die Anwendung der oben beschriebenen Produkte innerhalb von Zo-pe wird eine dynamische HTML Navigation aus XSD Slide Dokumenten zusammenge-stellt Die Architektur dazu ist in Abbildung 2 abgebildet Grundlage dieser dynamischeHTML Navigation bildet das XML Schema [Fal01] [Tho01] [Bir01] [Bai02] Dokumentslidesxsd (siehe Anhang A) mit dem zum Beispiel folgende XML Dokument Instanzverknupft werden kann

ltxml version=10 encoding=iso-8859-1gtltslide xmlns=httpwwwexamplecomslidesgtlttitlegtDer Titel des VortragslttitlegtltsubtitlegtDer Untertitel des VortragsltsubtitlegtltauthorgtDer Autor des VortragsltcompanygtDie Firma des Autorsltcompanygt

ltauthorgt

62

ltbodygtltslidegt

Werden nun entsprechende Parsed XML Dokumente in einem Ordered Folder abgelegt sobilden diese Dokumente die Menge aller Slides die uber das Page Templateslideshtml (siehe Anhang B) aufgerufen werden In diesem Page Template wird uberden Aufruf des Macros layout ein Default Template aus dem Page Template Dokumentlayouthtml (siehe Anhang C) vorgelegt und die entsprechenden Macro-Slotsnavigationpage header und main aus diesem Template werden durch die obigen fill-slot Be-reiche uberschrieben Das Default Page Template layouthtml ist dabei die HTMLVorlage die von einem HTML Designer als Grundlage fur ein Layout mit jedem HTMLEditor bearbeitet werden kann Der einzige Hinweis dass hier auch Logik eingebaut istsind die drei metalblock Elemente die entsprechende Slots definieren die von dem ei-gentlich aufgerufenen Page Template Dokument slideshtml uberschrieben werdenkonnen

Die Navigation wird dabei uber ein Python Skript geregelt welches eine simple Schleifeuber alle Parsed XML Objekte in dem Ordered Folder legt und die von dem derzeitigenObjekt sowohl das Vorganger Objekt als auch das Nachfolger Objekt berechnet

Die Umwandlung des XML Inhalts aus den Parsed XML Dokumenten erfolgt in demPython Skript xmlnode und wird uber das DOM Level 12 Interface Node und dessenAttribute nodeName nodeType childNodes und firstChild angesprochen

def xmlnode(node name)return the content of a slide document instanceaccording to the second argumentresult = for child in nodechildNodesif childnodeName == nameif len(childchildNodes) = 1if childnodeName == rsquobodyrsquofor i in childchildNodesresult = result + str(i)

return resultelif childnodeName == rsquoauthorrsquoresult = result + str(childfirstChild) + rsquonrsquofor i in childchildNodesif inodeName == rsquocompanyrsquoresult = result + str(ifirstChild)

return resultelif childfirstChildnodeType == nodeTEXT_NODEreturn str(childfirstChilddata)

else

63

return None

Als Beispiel kann die folgende Abbildung 3 eines Vortrags uber Online Graphics withSVG [Kle02] angesehen werden

Abbildung 3 HTML Slide erzeugt aus XML Schema Dokument mittels Parsed XML und PageTem-plates auf Zope

6 Ergebnis

Auch wenn der Open Source Web- und Application-Server Software Zope noch nicht alsreiner XML Webserver betitelt werden kann so ist eine Verarbeitung von XML Dokumen-ten mit einer XHTML Anzeige auch moglich ohne die geschlossene Umgebung von Zopezu verlassen Dafur sind jedoch noch die Zope Produkte (Programmpakete) Parsed XMLund Page Templates notwendig Parsed XML ist ein auf dem Python Expat aufbauenderXML Parser mit einer standardisierten DOM-Schnittstelle der die Eigenschaften von Zo-pe ubernimmt und als API anbietet Zusammen mit Page Templates einer auf Attributenbasierten Erweiterung von XHTML wird somit fur Zope die Basis zur XML Verarbeitungund XHTML Anzeige gelegt Mit dieser Methode XML Dokumente in Zope zu verar-beiten wird eine Moglichkeit geschaffen die Flexibilitat und Erweiterbarkeit von Zope

64

auch bei der XML-Verarbeitung auszunutzen Die vorgezeigte Methode wird mit einemBeispiel einer einfachen Anwendung fur eine dynamische HTML Navigation aus XMLDokumenten mit einer Struktur fur Slides dargestellt

Literatur

[Adl00] Adler etal Extensible Stylesheet Language httpwwww3orgTRxsl 2000

[Aye00] Ayeva et al Zope Book Project httpzdpzopeorgprojectszbook 2000

[Bai02] Baier etal XML Schema Teil 0 1 2 httpwwwedition-w3cde 2002

[Bee02] httpwwwbeehivede 2002

[Bir01] Biron etal XML Schema Part 2 Datatypes httpwwww3orgTRxmlschema-2 2001

[Bos98] Bos etal Cascading Style Sheets httpwwww3orgTRREC-CSS2 1998

[Bra98] Bray etal Extensible Markup Language httpwwww3orgTRREC-xml 1998

[CGI02] httphoohooncsauiuceducaiinterfacehtml 2002

[Faa02] Faassen Parsed XML httpwwwzopeorgmembersfassenParsedXML 2002

[Fal01] Fallside XML Schema Part 0 Primer httpwwww3orgTRxmlschema-0 2001

[Inf02] httpwwwinfraecom 2002

[Iuv02] httpwwwiuvenocom 2002

[Kle02] Klever Online Graphics with SVG httpxmlfh-augsburgdeSVGICL2002 2002

[Lat00] Latteier Pelletier The Zope Book httpwwwzopeorgdocumentation 2000

[LeH00] LeHors et al Document Object Model (DOM) Level 2 Core Specificationhttpwwww3orgTRDOM-Level-2-Core 2000

[Pem00] Pemberton et al XHTML 10 The Extensible HyperText Markup Languagehttpwwww3orgTR2000REC-xhtml1-20000126 2000

[Pro02] httpwwwzopeorgproductsall products 2002

[Tho01] Thompson etal XML Schema Part 1 Structures httpwwww3orgTRxmlschema-12001

[vR02] vRossum Drake Python Reference Manual httpwwwpythonorg 2002

65

Anhang A XML Schema Dokument slidesxsd

ltschema xmlnsxsd=httpwwww3org2001XMLSchemaxmlns=httpwwwexamplecomslidestargetNamespace=httpwwwexamplecomslideselementFormDefault=unqualifiedattributeFormDefault=unqualifiedgt

ltxsdelement name=slidegtltxsdcomplexTypegtltxsdsequencegtltxsdelement name=title type=xsdstringgtltxsdelement name=subtitle type=xsdstring

minOccurs=0gtltxsdelement name=author minOccurs=0gtltxsdcomplexType mixed=truegtltxsdsequencegtltxsdelement name=company type=xsdstring

minOccurs=0gtltxsdsequencegtltxsdcomplexTypegt

ltxsdelementgtltxsdelement name=body minOccurs=0gtltxsdcomplexType mixed=truegtltxsdsequencegtltxsdany namespace=httpwwww3org1999xhtml

minOccurs=0 maxOccurs=unboundedprocessContents=laxgt

ltxsdsequencegtltxsdanyAttribute

namespace=httpwwww3org1999xhtmlgtltxsdcomplexTypegt

ltxsdelementgtltxsdsequencegt

ltxsdcomplexTypegtltxsdelementgt

ltxsdschemagt

Anhang B Page Template Dokument slideshtml

ltxml version=10 encoding=iso-8859-1gtltDOCTYPE HTML PUBLIC

-W3CDTD HTML 401 TransitionalENhttpwwww3orgTRhtml4strictdtdgt

66

lthtml xmlns=httpwwww3org1999xhtml lang=enxmllang=enxmlnstal=httpxmlzopeorgnamespacestalxmlnsmetal=httpxmlzopeorgnamespacesmetaltaldefine=global thisSlideId requestslideglobal thisSlide pythongetattr(herethisSlideId)metaluse-macro=containerlayouthtmlmacroslayoutgt

ltheadgtltdiv metalfill-slot=style talomit-tag=gtltlink talcondition=python

modules[rsquostringrsquo]find(request[rsquoHTTP_USER_AGENTrsquo]rsquoGecko2002rsquo) = -1 rel=stylesheettype=textcsshref=standard_style_mozillacss gt

ltlink talcondition=pythonmodules[rsquostringrsquo]find(request[rsquoHTTP_USER_AGENTrsquo]rsquoWindowsrsquo) = -1 rel=stylesheet type=textcsshref=standard_style_windowscss gtltdivgt

ltheadgt

ltbodygtltdiv class=navigation metalfill-slot=navigation

taldefine=thisSlideId requestslidecurrent pythonstr(hereabsolute_url())+rsquoslides_htmlslide=rsquogt

lttd class=externgtlta href=prev talattributes=href

pythoncurrent+herenavigate(rsquoprevrsquothisSlideId)gtltimg src=prevpng alt=previous gtltagtlttdgt

lttd class=externgtlta href=top talattributes=href

pythoncurrent+herenavigate(rsquotoprsquothisSlideId)gtltimg src=toppng alt=top gtltagtlttdgt

lttd class=externgtlta href=next talattributes=href

pythoncurrent+herenavigate(rsquonextrsquothisSlideId)gtltimg src=nextpng alt=next gtltagtlttdgtltdivgt

ltdiv metalfill-slot=page_header talomit-tag=taldefine=thisSlideId requestslidethisSlide pythongetattr(herethisSlideId)gt

lth1 talcontent=pythonherexmlnode(thisSlidersquotitlersquo)gt

content titlelth1gt

67

lth2 talcondition=pythonherexmlnode(thisSlidersquosubtitlersquo)talcontent=pythonherexmlnode(thisSlidersquosubtitlersquo)talon-error=nothinggtoptional subtitlelth2gt

ltdivgtltdiv metalfill-slot=main class=margins

talomit-tag= taldefine=thisSlideId requestslidethisSlide pythongetattr(herethisSlideId)gt

ltspan class=titletalcondition=pythonthisSlideId==rsquoTitlersquogt

ltemgtltpre class=title

talcontent=pythonherexmlnode(thisSlidersquoauthorrsquo)

talon-error=nothinggtoptional authorltpregtltemgtltspangt

ltspan talcondition=pythonherexmlnode(thisSlidersquobodyrsquo)talreplace=structure

pythonherexmlnode(thisSlidersquobodyrsquo)talon-error=nothinggtoptional bodyltspangt

ltdivgtltbodygt

lthtmlgt

Anhang C Page Template Dokument layouthtml

ltxml version=10 encoding=iso-8859-1gtltDOCTYPE html PUBLIC -W3CDTD XHTML 11EN

httpwwww3orgTRxhtml11DTDxhtml11dtdgtlthtml xmlns=httpwwww3org1999xhtml

lang=de xmllang=dexmlnstal=httpxmlzopeorgnamespacestalxmlnsmetal=httpxmlzopeorgnamespacesmetalmetaldefine-macro=layoutgt

lthead metaldefine-slot=headgtltmeta http-equiv=Content-Type

content=texthtml charset=iso-8859-1 gtlttitlegtltspan talreplace=containertitlegtContext title

68

ltspangtltspan talcondition=containertitle

talreplace=string - gt - ltspangtltspan talreplace=heretitlegtThe titleltspangt

lttitlegtltlink metaldefine-slot=style rel=stylesheet

href=standard_style_netscapecsstype=textcss gt

ltheadgt

ltbodygtlttable class=externgtlttbodygtlttr class=externgtlttd class=externgtlta href=httpwwwfh-augsburgdegtltimg src=fha_logo alt=FH Augsburg gt

ltagtlttdgtlttd class=externgtlttdgt

lttrgtlttr valign=top class=externgtlttd class=externgtlttable class=externgtltcaptiongtltcaptiongtlttbodygtlttr class=navigationgtltmetalblock define-slot=navigationgtlttd class=navigationgtlta href=prevgt

ltimg src=prevpng alt=previous gtltagtlttdgt

lttd class= navigation gtlta href=topgt

ltimg src=toppng alt=top gtltagtlttdgt

lttd class= navigation gtlta href=nextgt

ltimg src=nextpng alt=next gtltagtlttdgt

ltmetalblockgtlttrgtlttbodygt

lttablegtlttdgtlttd class=page_headergt

69

ltmetalblock define-slot=page_headergtlth1gtpage titlelth1gtlth2gtand subtitle will be herelth2gt

ltmetalblockgtlttdgt

lttrgtlttr class=externgtlttd class=externgtlttdgtlttd class=maingtltmetalblock define-slot=maingtltulgtltligtmainltligtltligtinformationltligtltligtwillltligtltligtbe hereltligtltulgt

ltmetalblockgtlttdgt

lttrgtlttbodygt

lttablegtltbodygtlthtmlgt

70

Page 7: XML und Zope - subs.emis.derelationaler Datenbanken und unterst¨utzt verschiedene Skriptsprachen wie Python, Perl, PHP sowie die Zope-eigene Skriptsprache DTML. und andere. Die Architektur

ltbodygtltslidegt

Werden nun entsprechende Parsed XML Dokumente in einem Ordered Folder abgelegt sobilden diese Dokumente die Menge aller Slides die uber das Page Templateslideshtml (siehe Anhang B) aufgerufen werden In diesem Page Template wird uberden Aufruf des Macros layout ein Default Template aus dem Page Template Dokumentlayouthtml (siehe Anhang C) vorgelegt und die entsprechenden Macro-Slotsnavigationpage header und main aus diesem Template werden durch die obigen fill-slot Be-reiche uberschrieben Das Default Page Template layouthtml ist dabei die HTMLVorlage die von einem HTML Designer als Grundlage fur ein Layout mit jedem HTMLEditor bearbeitet werden kann Der einzige Hinweis dass hier auch Logik eingebaut istsind die drei metalblock Elemente die entsprechende Slots definieren die von dem ei-gentlich aufgerufenen Page Template Dokument slideshtml uberschrieben werdenkonnen

Die Navigation wird dabei uber ein Python Skript geregelt welches eine simple Schleifeuber alle Parsed XML Objekte in dem Ordered Folder legt und die von dem derzeitigenObjekt sowohl das Vorganger Objekt als auch das Nachfolger Objekt berechnet

Die Umwandlung des XML Inhalts aus den Parsed XML Dokumenten erfolgt in demPython Skript xmlnode und wird uber das DOM Level 12 Interface Node und dessenAttribute nodeName nodeType childNodes und firstChild angesprochen

def xmlnode(node name)return the content of a slide document instanceaccording to the second argumentresult = for child in nodechildNodesif childnodeName == nameif len(childchildNodes) = 1if childnodeName == rsquobodyrsquofor i in childchildNodesresult = result + str(i)

return resultelif childnodeName == rsquoauthorrsquoresult = result + str(childfirstChild) + rsquonrsquofor i in childchildNodesif inodeName == rsquocompanyrsquoresult = result + str(ifirstChild)

return resultelif childfirstChildnodeType == nodeTEXT_NODEreturn str(childfirstChilddata)

else

63

return None

Als Beispiel kann die folgende Abbildung 3 eines Vortrags uber Online Graphics withSVG [Kle02] angesehen werden

Abbildung 3 HTML Slide erzeugt aus XML Schema Dokument mittels Parsed XML und PageTem-plates auf Zope

6 Ergebnis

Auch wenn der Open Source Web- und Application-Server Software Zope noch nicht alsreiner XML Webserver betitelt werden kann so ist eine Verarbeitung von XML Dokumen-ten mit einer XHTML Anzeige auch moglich ohne die geschlossene Umgebung von Zopezu verlassen Dafur sind jedoch noch die Zope Produkte (Programmpakete) Parsed XMLund Page Templates notwendig Parsed XML ist ein auf dem Python Expat aufbauenderXML Parser mit einer standardisierten DOM-Schnittstelle der die Eigenschaften von Zo-pe ubernimmt und als API anbietet Zusammen mit Page Templates einer auf Attributenbasierten Erweiterung von XHTML wird somit fur Zope die Basis zur XML Verarbeitungund XHTML Anzeige gelegt Mit dieser Methode XML Dokumente in Zope zu verar-beiten wird eine Moglichkeit geschaffen die Flexibilitat und Erweiterbarkeit von Zope

64

auch bei der XML-Verarbeitung auszunutzen Die vorgezeigte Methode wird mit einemBeispiel einer einfachen Anwendung fur eine dynamische HTML Navigation aus XMLDokumenten mit einer Struktur fur Slides dargestellt

Literatur

[Adl00] Adler etal Extensible Stylesheet Language httpwwww3orgTRxsl 2000

[Aye00] Ayeva et al Zope Book Project httpzdpzopeorgprojectszbook 2000

[Bai02] Baier etal XML Schema Teil 0 1 2 httpwwwedition-w3cde 2002

[Bee02] httpwwwbeehivede 2002

[Bir01] Biron etal XML Schema Part 2 Datatypes httpwwww3orgTRxmlschema-2 2001

[Bos98] Bos etal Cascading Style Sheets httpwwww3orgTRREC-CSS2 1998

[Bra98] Bray etal Extensible Markup Language httpwwww3orgTRREC-xml 1998

[CGI02] httphoohooncsauiuceducaiinterfacehtml 2002

[Faa02] Faassen Parsed XML httpwwwzopeorgmembersfassenParsedXML 2002

[Fal01] Fallside XML Schema Part 0 Primer httpwwww3orgTRxmlschema-0 2001

[Inf02] httpwwwinfraecom 2002

[Iuv02] httpwwwiuvenocom 2002

[Kle02] Klever Online Graphics with SVG httpxmlfh-augsburgdeSVGICL2002 2002

[Lat00] Latteier Pelletier The Zope Book httpwwwzopeorgdocumentation 2000

[LeH00] LeHors et al Document Object Model (DOM) Level 2 Core Specificationhttpwwww3orgTRDOM-Level-2-Core 2000

[Pem00] Pemberton et al XHTML 10 The Extensible HyperText Markup Languagehttpwwww3orgTR2000REC-xhtml1-20000126 2000

[Pro02] httpwwwzopeorgproductsall products 2002

[Tho01] Thompson etal XML Schema Part 1 Structures httpwwww3orgTRxmlschema-12001

[vR02] vRossum Drake Python Reference Manual httpwwwpythonorg 2002

65

Anhang A XML Schema Dokument slidesxsd

ltschema xmlnsxsd=httpwwww3org2001XMLSchemaxmlns=httpwwwexamplecomslidestargetNamespace=httpwwwexamplecomslideselementFormDefault=unqualifiedattributeFormDefault=unqualifiedgt

ltxsdelement name=slidegtltxsdcomplexTypegtltxsdsequencegtltxsdelement name=title type=xsdstringgtltxsdelement name=subtitle type=xsdstring

minOccurs=0gtltxsdelement name=author minOccurs=0gtltxsdcomplexType mixed=truegtltxsdsequencegtltxsdelement name=company type=xsdstring

minOccurs=0gtltxsdsequencegtltxsdcomplexTypegt

ltxsdelementgtltxsdelement name=body minOccurs=0gtltxsdcomplexType mixed=truegtltxsdsequencegtltxsdany namespace=httpwwww3org1999xhtml

minOccurs=0 maxOccurs=unboundedprocessContents=laxgt

ltxsdsequencegtltxsdanyAttribute

namespace=httpwwww3org1999xhtmlgtltxsdcomplexTypegt

ltxsdelementgtltxsdsequencegt

ltxsdcomplexTypegtltxsdelementgt

ltxsdschemagt

Anhang B Page Template Dokument slideshtml

ltxml version=10 encoding=iso-8859-1gtltDOCTYPE HTML PUBLIC

-W3CDTD HTML 401 TransitionalENhttpwwww3orgTRhtml4strictdtdgt

66

lthtml xmlns=httpwwww3org1999xhtml lang=enxmllang=enxmlnstal=httpxmlzopeorgnamespacestalxmlnsmetal=httpxmlzopeorgnamespacesmetaltaldefine=global thisSlideId requestslideglobal thisSlide pythongetattr(herethisSlideId)metaluse-macro=containerlayouthtmlmacroslayoutgt

ltheadgtltdiv metalfill-slot=style talomit-tag=gtltlink talcondition=python

modules[rsquostringrsquo]find(request[rsquoHTTP_USER_AGENTrsquo]rsquoGecko2002rsquo) = -1 rel=stylesheettype=textcsshref=standard_style_mozillacss gt

ltlink talcondition=pythonmodules[rsquostringrsquo]find(request[rsquoHTTP_USER_AGENTrsquo]rsquoWindowsrsquo) = -1 rel=stylesheet type=textcsshref=standard_style_windowscss gtltdivgt

ltheadgt

ltbodygtltdiv class=navigation metalfill-slot=navigation

taldefine=thisSlideId requestslidecurrent pythonstr(hereabsolute_url())+rsquoslides_htmlslide=rsquogt

lttd class=externgtlta href=prev talattributes=href

pythoncurrent+herenavigate(rsquoprevrsquothisSlideId)gtltimg src=prevpng alt=previous gtltagtlttdgt

lttd class=externgtlta href=top talattributes=href

pythoncurrent+herenavigate(rsquotoprsquothisSlideId)gtltimg src=toppng alt=top gtltagtlttdgt

lttd class=externgtlta href=next talattributes=href

pythoncurrent+herenavigate(rsquonextrsquothisSlideId)gtltimg src=nextpng alt=next gtltagtlttdgtltdivgt

ltdiv metalfill-slot=page_header talomit-tag=taldefine=thisSlideId requestslidethisSlide pythongetattr(herethisSlideId)gt

lth1 talcontent=pythonherexmlnode(thisSlidersquotitlersquo)gt

content titlelth1gt

67

lth2 talcondition=pythonherexmlnode(thisSlidersquosubtitlersquo)talcontent=pythonherexmlnode(thisSlidersquosubtitlersquo)talon-error=nothinggtoptional subtitlelth2gt

ltdivgtltdiv metalfill-slot=main class=margins

talomit-tag= taldefine=thisSlideId requestslidethisSlide pythongetattr(herethisSlideId)gt

ltspan class=titletalcondition=pythonthisSlideId==rsquoTitlersquogt

ltemgtltpre class=title

talcontent=pythonherexmlnode(thisSlidersquoauthorrsquo)

talon-error=nothinggtoptional authorltpregtltemgtltspangt

ltspan talcondition=pythonherexmlnode(thisSlidersquobodyrsquo)talreplace=structure

pythonherexmlnode(thisSlidersquobodyrsquo)talon-error=nothinggtoptional bodyltspangt

ltdivgtltbodygt

lthtmlgt

Anhang C Page Template Dokument layouthtml

ltxml version=10 encoding=iso-8859-1gtltDOCTYPE html PUBLIC -W3CDTD XHTML 11EN

httpwwww3orgTRxhtml11DTDxhtml11dtdgtlthtml xmlns=httpwwww3org1999xhtml

lang=de xmllang=dexmlnstal=httpxmlzopeorgnamespacestalxmlnsmetal=httpxmlzopeorgnamespacesmetalmetaldefine-macro=layoutgt

lthead metaldefine-slot=headgtltmeta http-equiv=Content-Type

content=texthtml charset=iso-8859-1 gtlttitlegtltspan talreplace=containertitlegtContext title

68

ltspangtltspan talcondition=containertitle

talreplace=string - gt - ltspangtltspan talreplace=heretitlegtThe titleltspangt

lttitlegtltlink metaldefine-slot=style rel=stylesheet

href=standard_style_netscapecsstype=textcss gt

ltheadgt

ltbodygtlttable class=externgtlttbodygtlttr class=externgtlttd class=externgtlta href=httpwwwfh-augsburgdegtltimg src=fha_logo alt=FH Augsburg gt

ltagtlttdgtlttd class=externgtlttdgt

lttrgtlttr valign=top class=externgtlttd class=externgtlttable class=externgtltcaptiongtltcaptiongtlttbodygtlttr class=navigationgtltmetalblock define-slot=navigationgtlttd class=navigationgtlta href=prevgt

ltimg src=prevpng alt=previous gtltagtlttdgt

lttd class= navigation gtlta href=topgt

ltimg src=toppng alt=top gtltagtlttdgt

lttd class= navigation gtlta href=nextgt

ltimg src=nextpng alt=next gtltagtlttdgt

ltmetalblockgtlttrgtlttbodygt

lttablegtlttdgtlttd class=page_headergt

69

ltmetalblock define-slot=page_headergtlth1gtpage titlelth1gtlth2gtand subtitle will be herelth2gt

ltmetalblockgtlttdgt

lttrgtlttr class=externgtlttd class=externgtlttdgtlttd class=maingtltmetalblock define-slot=maingtltulgtltligtmainltligtltligtinformationltligtltligtwillltligtltligtbe hereltligtltulgt

ltmetalblockgtlttdgt

lttrgtlttbodygt

lttablegtltbodygtlthtmlgt

70

Page 8: XML und Zope - subs.emis.derelationaler Datenbanken und unterst¨utzt verschiedene Skriptsprachen wie Python, Perl, PHP sowie die Zope-eigene Skriptsprache DTML. und andere. Die Architektur

return None

Als Beispiel kann die folgende Abbildung 3 eines Vortrags uber Online Graphics withSVG [Kle02] angesehen werden

Abbildung 3 HTML Slide erzeugt aus XML Schema Dokument mittels Parsed XML und PageTem-plates auf Zope

6 Ergebnis

Auch wenn der Open Source Web- und Application-Server Software Zope noch nicht alsreiner XML Webserver betitelt werden kann so ist eine Verarbeitung von XML Dokumen-ten mit einer XHTML Anzeige auch moglich ohne die geschlossene Umgebung von Zopezu verlassen Dafur sind jedoch noch die Zope Produkte (Programmpakete) Parsed XMLund Page Templates notwendig Parsed XML ist ein auf dem Python Expat aufbauenderXML Parser mit einer standardisierten DOM-Schnittstelle der die Eigenschaften von Zo-pe ubernimmt und als API anbietet Zusammen mit Page Templates einer auf Attributenbasierten Erweiterung von XHTML wird somit fur Zope die Basis zur XML Verarbeitungund XHTML Anzeige gelegt Mit dieser Methode XML Dokumente in Zope zu verar-beiten wird eine Moglichkeit geschaffen die Flexibilitat und Erweiterbarkeit von Zope

64

auch bei der XML-Verarbeitung auszunutzen Die vorgezeigte Methode wird mit einemBeispiel einer einfachen Anwendung fur eine dynamische HTML Navigation aus XMLDokumenten mit einer Struktur fur Slides dargestellt

Literatur

[Adl00] Adler etal Extensible Stylesheet Language httpwwww3orgTRxsl 2000

[Aye00] Ayeva et al Zope Book Project httpzdpzopeorgprojectszbook 2000

[Bai02] Baier etal XML Schema Teil 0 1 2 httpwwwedition-w3cde 2002

[Bee02] httpwwwbeehivede 2002

[Bir01] Biron etal XML Schema Part 2 Datatypes httpwwww3orgTRxmlschema-2 2001

[Bos98] Bos etal Cascading Style Sheets httpwwww3orgTRREC-CSS2 1998

[Bra98] Bray etal Extensible Markup Language httpwwww3orgTRREC-xml 1998

[CGI02] httphoohooncsauiuceducaiinterfacehtml 2002

[Faa02] Faassen Parsed XML httpwwwzopeorgmembersfassenParsedXML 2002

[Fal01] Fallside XML Schema Part 0 Primer httpwwww3orgTRxmlschema-0 2001

[Inf02] httpwwwinfraecom 2002

[Iuv02] httpwwwiuvenocom 2002

[Kle02] Klever Online Graphics with SVG httpxmlfh-augsburgdeSVGICL2002 2002

[Lat00] Latteier Pelletier The Zope Book httpwwwzopeorgdocumentation 2000

[LeH00] LeHors et al Document Object Model (DOM) Level 2 Core Specificationhttpwwww3orgTRDOM-Level-2-Core 2000

[Pem00] Pemberton et al XHTML 10 The Extensible HyperText Markup Languagehttpwwww3orgTR2000REC-xhtml1-20000126 2000

[Pro02] httpwwwzopeorgproductsall products 2002

[Tho01] Thompson etal XML Schema Part 1 Structures httpwwww3orgTRxmlschema-12001

[vR02] vRossum Drake Python Reference Manual httpwwwpythonorg 2002

65

Anhang A XML Schema Dokument slidesxsd

ltschema xmlnsxsd=httpwwww3org2001XMLSchemaxmlns=httpwwwexamplecomslidestargetNamespace=httpwwwexamplecomslideselementFormDefault=unqualifiedattributeFormDefault=unqualifiedgt

ltxsdelement name=slidegtltxsdcomplexTypegtltxsdsequencegtltxsdelement name=title type=xsdstringgtltxsdelement name=subtitle type=xsdstring

minOccurs=0gtltxsdelement name=author minOccurs=0gtltxsdcomplexType mixed=truegtltxsdsequencegtltxsdelement name=company type=xsdstring

minOccurs=0gtltxsdsequencegtltxsdcomplexTypegt

ltxsdelementgtltxsdelement name=body minOccurs=0gtltxsdcomplexType mixed=truegtltxsdsequencegtltxsdany namespace=httpwwww3org1999xhtml

minOccurs=0 maxOccurs=unboundedprocessContents=laxgt

ltxsdsequencegtltxsdanyAttribute

namespace=httpwwww3org1999xhtmlgtltxsdcomplexTypegt

ltxsdelementgtltxsdsequencegt

ltxsdcomplexTypegtltxsdelementgt

ltxsdschemagt

Anhang B Page Template Dokument slideshtml

ltxml version=10 encoding=iso-8859-1gtltDOCTYPE HTML PUBLIC

-W3CDTD HTML 401 TransitionalENhttpwwww3orgTRhtml4strictdtdgt

66

lthtml xmlns=httpwwww3org1999xhtml lang=enxmllang=enxmlnstal=httpxmlzopeorgnamespacestalxmlnsmetal=httpxmlzopeorgnamespacesmetaltaldefine=global thisSlideId requestslideglobal thisSlide pythongetattr(herethisSlideId)metaluse-macro=containerlayouthtmlmacroslayoutgt

ltheadgtltdiv metalfill-slot=style talomit-tag=gtltlink talcondition=python

modules[rsquostringrsquo]find(request[rsquoHTTP_USER_AGENTrsquo]rsquoGecko2002rsquo) = -1 rel=stylesheettype=textcsshref=standard_style_mozillacss gt

ltlink talcondition=pythonmodules[rsquostringrsquo]find(request[rsquoHTTP_USER_AGENTrsquo]rsquoWindowsrsquo) = -1 rel=stylesheet type=textcsshref=standard_style_windowscss gtltdivgt

ltheadgt

ltbodygtltdiv class=navigation metalfill-slot=navigation

taldefine=thisSlideId requestslidecurrent pythonstr(hereabsolute_url())+rsquoslides_htmlslide=rsquogt

lttd class=externgtlta href=prev talattributes=href

pythoncurrent+herenavigate(rsquoprevrsquothisSlideId)gtltimg src=prevpng alt=previous gtltagtlttdgt

lttd class=externgtlta href=top talattributes=href

pythoncurrent+herenavigate(rsquotoprsquothisSlideId)gtltimg src=toppng alt=top gtltagtlttdgt

lttd class=externgtlta href=next talattributes=href

pythoncurrent+herenavigate(rsquonextrsquothisSlideId)gtltimg src=nextpng alt=next gtltagtlttdgtltdivgt

ltdiv metalfill-slot=page_header talomit-tag=taldefine=thisSlideId requestslidethisSlide pythongetattr(herethisSlideId)gt

lth1 talcontent=pythonherexmlnode(thisSlidersquotitlersquo)gt

content titlelth1gt

67

lth2 talcondition=pythonherexmlnode(thisSlidersquosubtitlersquo)talcontent=pythonherexmlnode(thisSlidersquosubtitlersquo)talon-error=nothinggtoptional subtitlelth2gt

ltdivgtltdiv metalfill-slot=main class=margins

talomit-tag= taldefine=thisSlideId requestslidethisSlide pythongetattr(herethisSlideId)gt

ltspan class=titletalcondition=pythonthisSlideId==rsquoTitlersquogt

ltemgtltpre class=title

talcontent=pythonherexmlnode(thisSlidersquoauthorrsquo)

talon-error=nothinggtoptional authorltpregtltemgtltspangt

ltspan talcondition=pythonherexmlnode(thisSlidersquobodyrsquo)talreplace=structure

pythonherexmlnode(thisSlidersquobodyrsquo)talon-error=nothinggtoptional bodyltspangt

ltdivgtltbodygt

lthtmlgt

Anhang C Page Template Dokument layouthtml

ltxml version=10 encoding=iso-8859-1gtltDOCTYPE html PUBLIC -W3CDTD XHTML 11EN

httpwwww3orgTRxhtml11DTDxhtml11dtdgtlthtml xmlns=httpwwww3org1999xhtml

lang=de xmllang=dexmlnstal=httpxmlzopeorgnamespacestalxmlnsmetal=httpxmlzopeorgnamespacesmetalmetaldefine-macro=layoutgt

lthead metaldefine-slot=headgtltmeta http-equiv=Content-Type

content=texthtml charset=iso-8859-1 gtlttitlegtltspan talreplace=containertitlegtContext title

68

ltspangtltspan talcondition=containertitle

talreplace=string - gt - ltspangtltspan talreplace=heretitlegtThe titleltspangt

lttitlegtltlink metaldefine-slot=style rel=stylesheet

href=standard_style_netscapecsstype=textcss gt

ltheadgt

ltbodygtlttable class=externgtlttbodygtlttr class=externgtlttd class=externgtlta href=httpwwwfh-augsburgdegtltimg src=fha_logo alt=FH Augsburg gt

ltagtlttdgtlttd class=externgtlttdgt

lttrgtlttr valign=top class=externgtlttd class=externgtlttable class=externgtltcaptiongtltcaptiongtlttbodygtlttr class=navigationgtltmetalblock define-slot=navigationgtlttd class=navigationgtlta href=prevgt

ltimg src=prevpng alt=previous gtltagtlttdgt

lttd class= navigation gtlta href=topgt

ltimg src=toppng alt=top gtltagtlttdgt

lttd class= navigation gtlta href=nextgt

ltimg src=nextpng alt=next gtltagtlttdgt

ltmetalblockgtlttrgtlttbodygt

lttablegtlttdgtlttd class=page_headergt

69

ltmetalblock define-slot=page_headergtlth1gtpage titlelth1gtlth2gtand subtitle will be herelth2gt

ltmetalblockgtlttdgt

lttrgtlttr class=externgtlttd class=externgtlttdgtlttd class=maingtltmetalblock define-slot=maingtltulgtltligtmainltligtltligtinformationltligtltligtwillltligtltligtbe hereltligtltulgt

ltmetalblockgtlttdgt

lttrgtlttbodygt

lttablegtltbodygtlthtmlgt

70

Page 9: XML und Zope - subs.emis.derelationaler Datenbanken und unterst¨utzt verschiedene Skriptsprachen wie Python, Perl, PHP sowie die Zope-eigene Skriptsprache DTML. und andere. Die Architektur

auch bei der XML-Verarbeitung auszunutzen Die vorgezeigte Methode wird mit einemBeispiel einer einfachen Anwendung fur eine dynamische HTML Navigation aus XMLDokumenten mit einer Struktur fur Slides dargestellt

Literatur

[Adl00] Adler etal Extensible Stylesheet Language httpwwww3orgTRxsl 2000

[Aye00] Ayeva et al Zope Book Project httpzdpzopeorgprojectszbook 2000

[Bai02] Baier etal XML Schema Teil 0 1 2 httpwwwedition-w3cde 2002

[Bee02] httpwwwbeehivede 2002

[Bir01] Biron etal XML Schema Part 2 Datatypes httpwwww3orgTRxmlschema-2 2001

[Bos98] Bos etal Cascading Style Sheets httpwwww3orgTRREC-CSS2 1998

[Bra98] Bray etal Extensible Markup Language httpwwww3orgTRREC-xml 1998

[CGI02] httphoohooncsauiuceducaiinterfacehtml 2002

[Faa02] Faassen Parsed XML httpwwwzopeorgmembersfassenParsedXML 2002

[Fal01] Fallside XML Schema Part 0 Primer httpwwww3orgTRxmlschema-0 2001

[Inf02] httpwwwinfraecom 2002

[Iuv02] httpwwwiuvenocom 2002

[Kle02] Klever Online Graphics with SVG httpxmlfh-augsburgdeSVGICL2002 2002

[Lat00] Latteier Pelletier The Zope Book httpwwwzopeorgdocumentation 2000

[LeH00] LeHors et al Document Object Model (DOM) Level 2 Core Specificationhttpwwww3orgTRDOM-Level-2-Core 2000

[Pem00] Pemberton et al XHTML 10 The Extensible HyperText Markup Languagehttpwwww3orgTR2000REC-xhtml1-20000126 2000

[Pro02] httpwwwzopeorgproductsall products 2002

[Tho01] Thompson etal XML Schema Part 1 Structures httpwwww3orgTRxmlschema-12001

[vR02] vRossum Drake Python Reference Manual httpwwwpythonorg 2002

65

Anhang A XML Schema Dokument slidesxsd

ltschema xmlnsxsd=httpwwww3org2001XMLSchemaxmlns=httpwwwexamplecomslidestargetNamespace=httpwwwexamplecomslideselementFormDefault=unqualifiedattributeFormDefault=unqualifiedgt

ltxsdelement name=slidegtltxsdcomplexTypegtltxsdsequencegtltxsdelement name=title type=xsdstringgtltxsdelement name=subtitle type=xsdstring

minOccurs=0gtltxsdelement name=author minOccurs=0gtltxsdcomplexType mixed=truegtltxsdsequencegtltxsdelement name=company type=xsdstring

minOccurs=0gtltxsdsequencegtltxsdcomplexTypegt

ltxsdelementgtltxsdelement name=body minOccurs=0gtltxsdcomplexType mixed=truegtltxsdsequencegtltxsdany namespace=httpwwww3org1999xhtml

minOccurs=0 maxOccurs=unboundedprocessContents=laxgt

ltxsdsequencegtltxsdanyAttribute

namespace=httpwwww3org1999xhtmlgtltxsdcomplexTypegt

ltxsdelementgtltxsdsequencegt

ltxsdcomplexTypegtltxsdelementgt

ltxsdschemagt

Anhang B Page Template Dokument slideshtml

ltxml version=10 encoding=iso-8859-1gtltDOCTYPE HTML PUBLIC

-W3CDTD HTML 401 TransitionalENhttpwwww3orgTRhtml4strictdtdgt

66

lthtml xmlns=httpwwww3org1999xhtml lang=enxmllang=enxmlnstal=httpxmlzopeorgnamespacestalxmlnsmetal=httpxmlzopeorgnamespacesmetaltaldefine=global thisSlideId requestslideglobal thisSlide pythongetattr(herethisSlideId)metaluse-macro=containerlayouthtmlmacroslayoutgt

ltheadgtltdiv metalfill-slot=style talomit-tag=gtltlink talcondition=python

modules[rsquostringrsquo]find(request[rsquoHTTP_USER_AGENTrsquo]rsquoGecko2002rsquo) = -1 rel=stylesheettype=textcsshref=standard_style_mozillacss gt

ltlink talcondition=pythonmodules[rsquostringrsquo]find(request[rsquoHTTP_USER_AGENTrsquo]rsquoWindowsrsquo) = -1 rel=stylesheet type=textcsshref=standard_style_windowscss gtltdivgt

ltheadgt

ltbodygtltdiv class=navigation metalfill-slot=navigation

taldefine=thisSlideId requestslidecurrent pythonstr(hereabsolute_url())+rsquoslides_htmlslide=rsquogt

lttd class=externgtlta href=prev talattributes=href

pythoncurrent+herenavigate(rsquoprevrsquothisSlideId)gtltimg src=prevpng alt=previous gtltagtlttdgt

lttd class=externgtlta href=top talattributes=href

pythoncurrent+herenavigate(rsquotoprsquothisSlideId)gtltimg src=toppng alt=top gtltagtlttdgt

lttd class=externgtlta href=next talattributes=href

pythoncurrent+herenavigate(rsquonextrsquothisSlideId)gtltimg src=nextpng alt=next gtltagtlttdgtltdivgt

ltdiv metalfill-slot=page_header talomit-tag=taldefine=thisSlideId requestslidethisSlide pythongetattr(herethisSlideId)gt

lth1 talcontent=pythonherexmlnode(thisSlidersquotitlersquo)gt

content titlelth1gt

67

lth2 talcondition=pythonherexmlnode(thisSlidersquosubtitlersquo)talcontent=pythonherexmlnode(thisSlidersquosubtitlersquo)talon-error=nothinggtoptional subtitlelth2gt

ltdivgtltdiv metalfill-slot=main class=margins

talomit-tag= taldefine=thisSlideId requestslidethisSlide pythongetattr(herethisSlideId)gt

ltspan class=titletalcondition=pythonthisSlideId==rsquoTitlersquogt

ltemgtltpre class=title

talcontent=pythonherexmlnode(thisSlidersquoauthorrsquo)

talon-error=nothinggtoptional authorltpregtltemgtltspangt

ltspan talcondition=pythonherexmlnode(thisSlidersquobodyrsquo)talreplace=structure

pythonherexmlnode(thisSlidersquobodyrsquo)talon-error=nothinggtoptional bodyltspangt

ltdivgtltbodygt

lthtmlgt

Anhang C Page Template Dokument layouthtml

ltxml version=10 encoding=iso-8859-1gtltDOCTYPE html PUBLIC -W3CDTD XHTML 11EN

httpwwww3orgTRxhtml11DTDxhtml11dtdgtlthtml xmlns=httpwwww3org1999xhtml

lang=de xmllang=dexmlnstal=httpxmlzopeorgnamespacestalxmlnsmetal=httpxmlzopeorgnamespacesmetalmetaldefine-macro=layoutgt

lthead metaldefine-slot=headgtltmeta http-equiv=Content-Type

content=texthtml charset=iso-8859-1 gtlttitlegtltspan talreplace=containertitlegtContext title

68

ltspangtltspan talcondition=containertitle

talreplace=string - gt - ltspangtltspan talreplace=heretitlegtThe titleltspangt

lttitlegtltlink metaldefine-slot=style rel=stylesheet

href=standard_style_netscapecsstype=textcss gt

ltheadgt

ltbodygtlttable class=externgtlttbodygtlttr class=externgtlttd class=externgtlta href=httpwwwfh-augsburgdegtltimg src=fha_logo alt=FH Augsburg gt

ltagtlttdgtlttd class=externgtlttdgt

lttrgtlttr valign=top class=externgtlttd class=externgtlttable class=externgtltcaptiongtltcaptiongtlttbodygtlttr class=navigationgtltmetalblock define-slot=navigationgtlttd class=navigationgtlta href=prevgt

ltimg src=prevpng alt=previous gtltagtlttdgt

lttd class= navigation gtlta href=topgt

ltimg src=toppng alt=top gtltagtlttdgt

lttd class= navigation gtlta href=nextgt

ltimg src=nextpng alt=next gtltagtlttdgt

ltmetalblockgtlttrgtlttbodygt

lttablegtlttdgtlttd class=page_headergt

69

ltmetalblock define-slot=page_headergtlth1gtpage titlelth1gtlth2gtand subtitle will be herelth2gt

ltmetalblockgtlttdgt

lttrgtlttr class=externgtlttd class=externgtlttdgtlttd class=maingtltmetalblock define-slot=maingtltulgtltligtmainltligtltligtinformationltligtltligtwillltligtltligtbe hereltligtltulgt

ltmetalblockgtlttdgt

lttrgtlttbodygt

lttablegtltbodygtlthtmlgt

70

Page 10: XML und Zope - subs.emis.derelationaler Datenbanken und unterst¨utzt verschiedene Skriptsprachen wie Python, Perl, PHP sowie die Zope-eigene Skriptsprache DTML. und andere. Die Architektur

Anhang A XML Schema Dokument slidesxsd

ltschema xmlnsxsd=httpwwww3org2001XMLSchemaxmlns=httpwwwexamplecomslidestargetNamespace=httpwwwexamplecomslideselementFormDefault=unqualifiedattributeFormDefault=unqualifiedgt

ltxsdelement name=slidegtltxsdcomplexTypegtltxsdsequencegtltxsdelement name=title type=xsdstringgtltxsdelement name=subtitle type=xsdstring

minOccurs=0gtltxsdelement name=author minOccurs=0gtltxsdcomplexType mixed=truegtltxsdsequencegtltxsdelement name=company type=xsdstring

minOccurs=0gtltxsdsequencegtltxsdcomplexTypegt

ltxsdelementgtltxsdelement name=body minOccurs=0gtltxsdcomplexType mixed=truegtltxsdsequencegtltxsdany namespace=httpwwww3org1999xhtml

minOccurs=0 maxOccurs=unboundedprocessContents=laxgt

ltxsdsequencegtltxsdanyAttribute

namespace=httpwwww3org1999xhtmlgtltxsdcomplexTypegt

ltxsdelementgtltxsdsequencegt

ltxsdcomplexTypegtltxsdelementgt

ltxsdschemagt

Anhang B Page Template Dokument slideshtml

ltxml version=10 encoding=iso-8859-1gtltDOCTYPE HTML PUBLIC

-W3CDTD HTML 401 TransitionalENhttpwwww3orgTRhtml4strictdtdgt

66

lthtml xmlns=httpwwww3org1999xhtml lang=enxmllang=enxmlnstal=httpxmlzopeorgnamespacestalxmlnsmetal=httpxmlzopeorgnamespacesmetaltaldefine=global thisSlideId requestslideglobal thisSlide pythongetattr(herethisSlideId)metaluse-macro=containerlayouthtmlmacroslayoutgt

ltheadgtltdiv metalfill-slot=style talomit-tag=gtltlink talcondition=python

modules[rsquostringrsquo]find(request[rsquoHTTP_USER_AGENTrsquo]rsquoGecko2002rsquo) = -1 rel=stylesheettype=textcsshref=standard_style_mozillacss gt

ltlink talcondition=pythonmodules[rsquostringrsquo]find(request[rsquoHTTP_USER_AGENTrsquo]rsquoWindowsrsquo) = -1 rel=stylesheet type=textcsshref=standard_style_windowscss gtltdivgt

ltheadgt

ltbodygtltdiv class=navigation metalfill-slot=navigation

taldefine=thisSlideId requestslidecurrent pythonstr(hereabsolute_url())+rsquoslides_htmlslide=rsquogt

lttd class=externgtlta href=prev talattributes=href

pythoncurrent+herenavigate(rsquoprevrsquothisSlideId)gtltimg src=prevpng alt=previous gtltagtlttdgt

lttd class=externgtlta href=top talattributes=href

pythoncurrent+herenavigate(rsquotoprsquothisSlideId)gtltimg src=toppng alt=top gtltagtlttdgt

lttd class=externgtlta href=next talattributes=href

pythoncurrent+herenavigate(rsquonextrsquothisSlideId)gtltimg src=nextpng alt=next gtltagtlttdgtltdivgt

ltdiv metalfill-slot=page_header talomit-tag=taldefine=thisSlideId requestslidethisSlide pythongetattr(herethisSlideId)gt

lth1 talcontent=pythonherexmlnode(thisSlidersquotitlersquo)gt

content titlelth1gt

67

lth2 talcondition=pythonherexmlnode(thisSlidersquosubtitlersquo)talcontent=pythonherexmlnode(thisSlidersquosubtitlersquo)talon-error=nothinggtoptional subtitlelth2gt

ltdivgtltdiv metalfill-slot=main class=margins

talomit-tag= taldefine=thisSlideId requestslidethisSlide pythongetattr(herethisSlideId)gt

ltspan class=titletalcondition=pythonthisSlideId==rsquoTitlersquogt

ltemgtltpre class=title

talcontent=pythonherexmlnode(thisSlidersquoauthorrsquo)

talon-error=nothinggtoptional authorltpregtltemgtltspangt

ltspan talcondition=pythonherexmlnode(thisSlidersquobodyrsquo)talreplace=structure

pythonherexmlnode(thisSlidersquobodyrsquo)talon-error=nothinggtoptional bodyltspangt

ltdivgtltbodygt

lthtmlgt

Anhang C Page Template Dokument layouthtml

ltxml version=10 encoding=iso-8859-1gtltDOCTYPE html PUBLIC -W3CDTD XHTML 11EN

httpwwww3orgTRxhtml11DTDxhtml11dtdgtlthtml xmlns=httpwwww3org1999xhtml

lang=de xmllang=dexmlnstal=httpxmlzopeorgnamespacestalxmlnsmetal=httpxmlzopeorgnamespacesmetalmetaldefine-macro=layoutgt

lthead metaldefine-slot=headgtltmeta http-equiv=Content-Type

content=texthtml charset=iso-8859-1 gtlttitlegtltspan talreplace=containertitlegtContext title

68

ltspangtltspan talcondition=containertitle

talreplace=string - gt - ltspangtltspan talreplace=heretitlegtThe titleltspangt

lttitlegtltlink metaldefine-slot=style rel=stylesheet

href=standard_style_netscapecsstype=textcss gt

ltheadgt

ltbodygtlttable class=externgtlttbodygtlttr class=externgtlttd class=externgtlta href=httpwwwfh-augsburgdegtltimg src=fha_logo alt=FH Augsburg gt

ltagtlttdgtlttd class=externgtlttdgt

lttrgtlttr valign=top class=externgtlttd class=externgtlttable class=externgtltcaptiongtltcaptiongtlttbodygtlttr class=navigationgtltmetalblock define-slot=navigationgtlttd class=navigationgtlta href=prevgt

ltimg src=prevpng alt=previous gtltagtlttdgt

lttd class= navigation gtlta href=topgt

ltimg src=toppng alt=top gtltagtlttdgt

lttd class= navigation gtlta href=nextgt

ltimg src=nextpng alt=next gtltagtlttdgt

ltmetalblockgtlttrgtlttbodygt

lttablegtlttdgtlttd class=page_headergt

69

ltmetalblock define-slot=page_headergtlth1gtpage titlelth1gtlth2gtand subtitle will be herelth2gt

ltmetalblockgtlttdgt

lttrgtlttr class=externgtlttd class=externgtlttdgtlttd class=maingtltmetalblock define-slot=maingtltulgtltligtmainltligtltligtinformationltligtltligtwillltligtltligtbe hereltligtltulgt

ltmetalblockgtlttdgt

lttrgtlttbodygt

lttablegtltbodygtlthtmlgt

70

Page 11: XML und Zope - subs.emis.derelationaler Datenbanken und unterst¨utzt verschiedene Skriptsprachen wie Python, Perl, PHP sowie die Zope-eigene Skriptsprache DTML. und andere. Die Architektur

lthtml xmlns=httpwwww3org1999xhtml lang=enxmllang=enxmlnstal=httpxmlzopeorgnamespacestalxmlnsmetal=httpxmlzopeorgnamespacesmetaltaldefine=global thisSlideId requestslideglobal thisSlide pythongetattr(herethisSlideId)metaluse-macro=containerlayouthtmlmacroslayoutgt

ltheadgtltdiv metalfill-slot=style talomit-tag=gtltlink talcondition=python

modules[rsquostringrsquo]find(request[rsquoHTTP_USER_AGENTrsquo]rsquoGecko2002rsquo) = -1 rel=stylesheettype=textcsshref=standard_style_mozillacss gt

ltlink talcondition=pythonmodules[rsquostringrsquo]find(request[rsquoHTTP_USER_AGENTrsquo]rsquoWindowsrsquo) = -1 rel=stylesheet type=textcsshref=standard_style_windowscss gtltdivgt

ltheadgt

ltbodygtltdiv class=navigation metalfill-slot=navigation

taldefine=thisSlideId requestslidecurrent pythonstr(hereabsolute_url())+rsquoslides_htmlslide=rsquogt

lttd class=externgtlta href=prev talattributes=href

pythoncurrent+herenavigate(rsquoprevrsquothisSlideId)gtltimg src=prevpng alt=previous gtltagtlttdgt

lttd class=externgtlta href=top talattributes=href

pythoncurrent+herenavigate(rsquotoprsquothisSlideId)gtltimg src=toppng alt=top gtltagtlttdgt

lttd class=externgtlta href=next talattributes=href

pythoncurrent+herenavigate(rsquonextrsquothisSlideId)gtltimg src=nextpng alt=next gtltagtlttdgtltdivgt

ltdiv metalfill-slot=page_header talomit-tag=taldefine=thisSlideId requestslidethisSlide pythongetattr(herethisSlideId)gt

lth1 talcontent=pythonherexmlnode(thisSlidersquotitlersquo)gt

content titlelth1gt

67

lth2 talcondition=pythonherexmlnode(thisSlidersquosubtitlersquo)talcontent=pythonherexmlnode(thisSlidersquosubtitlersquo)talon-error=nothinggtoptional subtitlelth2gt

ltdivgtltdiv metalfill-slot=main class=margins

talomit-tag= taldefine=thisSlideId requestslidethisSlide pythongetattr(herethisSlideId)gt

ltspan class=titletalcondition=pythonthisSlideId==rsquoTitlersquogt

ltemgtltpre class=title

talcontent=pythonherexmlnode(thisSlidersquoauthorrsquo)

talon-error=nothinggtoptional authorltpregtltemgtltspangt

ltspan talcondition=pythonherexmlnode(thisSlidersquobodyrsquo)talreplace=structure

pythonherexmlnode(thisSlidersquobodyrsquo)talon-error=nothinggtoptional bodyltspangt

ltdivgtltbodygt

lthtmlgt

Anhang C Page Template Dokument layouthtml

ltxml version=10 encoding=iso-8859-1gtltDOCTYPE html PUBLIC -W3CDTD XHTML 11EN

httpwwww3orgTRxhtml11DTDxhtml11dtdgtlthtml xmlns=httpwwww3org1999xhtml

lang=de xmllang=dexmlnstal=httpxmlzopeorgnamespacestalxmlnsmetal=httpxmlzopeorgnamespacesmetalmetaldefine-macro=layoutgt

lthead metaldefine-slot=headgtltmeta http-equiv=Content-Type

content=texthtml charset=iso-8859-1 gtlttitlegtltspan talreplace=containertitlegtContext title

68

ltspangtltspan talcondition=containertitle

talreplace=string - gt - ltspangtltspan talreplace=heretitlegtThe titleltspangt

lttitlegtltlink metaldefine-slot=style rel=stylesheet

href=standard_style_netscapecsstype=textcss gt

ltheadgt

ltbodygtlttable class=externgtlttbodygtlttr class=externgtlttd class=externgtlta href=httpwwwfh-augsburgdegtltimg src=fha_logo alt=FH Augsburg gt

ltagtlttdgtlttd class=externgtlttdgt

lttrgtlttr valign=top class=externgtlttd class=externgtlttable class=externgtltcaptiongtltcaptiongtlttbodygtlttr class=navigationgtltmetalblock define-slot=navigationgtlttd class=navigationgtlta href=prevgt

ltimg src=prevpng alt=previous gtltagtlttdgt

lttd class= navigation gtlta href=topgt

ltimg src=toppng alt=top gtltagtlttdgt

lttd class= navigation gtlta href=nextgt

ltimg src=nextpng alt=next gtltagtlttdgt

ltmetalblockgtlttrgtlttbodygt

lttablegtlttdgtlttd class=page_headergt

69

ltmetalblock define-slot=page_headergtlth1gtpage titlelth1gtlth2gtand subtitle will be herelth2gt

ltmetalblockgtlttdgt

lttrgtlttr class=externgtlttd class=externgtlttdgtlttd class=maingtltmetalblock define-slot=maingtltulgtltligtmainltligtltligtinformationltligtltligtwillltligtltligtbe hereltligtltulgt

ltmetalblockgtlttdgt

lttrgtlttbodygt

lttablegtltbodygtlthtmlgt

70

Page 12: XML und Zope - subs.emis.derelationaler Datenbanken und unterst¨utzt verschiedene Skriptsprachen wie Python, Perl, PHP sowie die Zope-eigene Skriptsprache DTML. und andere. Die Architektur

lth2 talcondition=pythonherexmlnode(thisSlidersquosubtitlersquo)talcontent=pythonherexmlnode(thisSlidersquosubtitlersquo)talon-error=nothinggtoptional subtitlelth2gt

ltdivgtltdiv metalfill-slot=main class=margins

talomit-tag= taldefine=thisSlideId requestslidethisSlide pythongetattr(herethisSlideId)gt

ltspan class=titletalcondition=pythonthisSlideId==rsquoTitlersquogt

ltemgtltpre class=title

talcontent=pythonherexmlnode(thisSlidersquoauthorrsquo)

talon-error=nothinggtoptional authorltpregtltemgtltspangt

ltspan talcondition=pythonherexmlnode(thisSlidersquobodyrsquo)talreplace=structure

pythonherexmlnode(thisSlidersquobodyrsquo)talon-error=nothinggtoptional bodyltspangt

ltdivgtltbodygt

lthtmlgt

Anhang C Page Template Dokument layouthtml

ltxml version=10 encoding=iso-8859-1gtltDOCTYPE html PUBLIC -W3CDTD XHTML 11EN

httpwwww3orgTRxhtml11DTDxhtml11dtdgtlthtml xmlns=httpwwww3org1999xhtml

lang=de xmllang=dexmlnstal=httpxmlzopeorgnamespacestalxmlnsmetal=httpxmlzopeorgnamespacesmetalmetaldefine-macro=layoutgt

lthead metaldefine-slot=headgtltmeta http-equiv=Content-Type

content=texthtml charset=iso-8859-1 gtlttitlegtltspan talreplace=containertitlegtContext title

68

ltspangtltspan talcondition=containertitle

talreplace=string - gt - ltspangtltspan talreplace=heretitlegtThe titleltspangt

lttitlegtltlink metaldefine-slot=style rel=stylesheet

href=standard_style_netscapecsstype=textcss gt

ltheadgt

ltbodygtlttable class=externgtlttbodygtlttr class=externgtlttd class=externgtlta href=httpwwwfh-augsburgdegtltimg src=fha_logo alt=FH Augsburg gt

ltagtlttdgtlttd class=externgtlttdgt

lttrgtlttr valign=top class=externgtlttd class=externgtlttable class=externgtltcaptiongtltcaptiongtlttbodygtlttr class=navigationgtltmetalblock define-slot=navigationgtlttd class=navigationgtlta href=prevgt

ltimg src=prevpng alt=previous gtltagtlttdgt

lttd class= navigation gtlta href=topgt

ltimg src=toppng alt=top gtltagtlttdgt

lttd class= navigation gtlta href=nextgt

ltimg src=nextpng alt=next gtltagtlttdgt

ltmetalblockgtlttrgtlttbodygt

lttablegtlttdgtlttd class=page_headergt

69

ltmetalblock define-slot=page_headergtlth1gtpage titlelth1gtlth2gtand subtitle will be herelth2gt

ltmetalblockgtlttdgt

lttrgtlttr class=externgtlttd class=externgtlttdgtlttd class=maingtltmetalblock define-slot=maingtltulgtltligtmainltligtltligtinformationltligtltligtwillltligtltligtbe hereltligtltulgt

ltmetalblockgtlttdgt

lttrgtlttbodygt

lttablegtltbodygtlthtmlgt

70

Page 13: XML und Zope - subs.emis.derelationaler Datenbanken und unterst¨utzt verschiedene Skriptsprachen wie Python, Perl, PHP sowie die Zope-eigene Skriptsprache DTML. und andere. Die Architektur

ltspangtltspan talcondition=containertitle

talreplace=string - gt - ltspangtltspan talreplace=heretitlegtThe titleltspangt

lttitlegtltlink metaldefine-slot=style rel=stylesheet

href=standard_style_netscapecsstype=textcss gt

ltheadgt

ltbodygtlttable class=externgtlttbodygtlttr class=externgtlttd class=externgtlta href=httpwwwfh-augsburgdegtltimg src=fha_logo alt=FH Augsburg gt

ltagtlttdgtlttd class=externgtlttdgt

lttrgtlttr valign=top class=externgtlttd class=externgtlttable class=externgtltcaptiongtltcaptiongtlttbodygtlttr class=navigationgtltmetalblock define-slot=navigationgtlttd class=navigationgtlta href=prevgt

ltimg src=prevpng alt=previous gtltagtlttdgt

lttd class= navigation gtlta href=topgt

ltimg src=toppng alt=top gtltagtlttdgt

lttd class= navigation gtlta href=nextgt

ltimg src=nextpng alt=next gtltagtlttdgt

ltmetalblockgtlttrgtlttbodygt

lttablegtlttdgtlttd class=page_headergt

69

ltmetalblock define-slot=page_headergtlth1gtpage titlelth1gtlth2gtand subtitle will be herelth2gt

ltmetalblockgtlttdgt

lttrgtlttr class=externgtlttd class=externgtlttdgtlttd class=maingtltmetalblock define-slot=maingtltulgtltligtmainltligtltligtinformationltligtltligtwillltligtltligtbe hereltligtltulgt

ltmetalblockgtlttdgt

lttrgtlttbodygt

lttablegtltbodygtlthtmlgt

70

Page 14: XML und Zope - subs.emis.derelationaler Datenbanken und unterst¨utzt verschiedene Skriptsprachen wie Python, Perl, PHP sowie die Zope-eigene Skriptsprache DTML. und andere. Die Architektur

ltmetalblock define-slot=page_headergtlth1gtpage titlelth1gtlth2gtand subtitle will be herelth2gt

ltmetalblockgtlttdgt

lttrgtlttr class=externgtlttd class=externgtlttdgtlttd class=maingtltmetalblock define-slot=maingtltulgtltligtmainltligtltligtinformationltligtltligtwillltligtltligtbe hereltligtltulgt

ltmetalblockgtlttdgt

lttrgtlttbodygt

lttablegtltbodygtlthtmlgt

70