PfI-Homepage Inhalt
ECE Bid Pro: Ein- und Ausgabeformat
Bid Pro erhält als Eingabe ein XML-Dokument, dass dieser DTD
entsprechen muss.
<!ELEMENT bids (bid)*> <!ELEMENT bid (auctionid, user, amount)> <!ELEMENT auctionid (#PCDATA)> <!ELEMENT user (#PCDATA)> <!ELEMENT amount (#PCDATA)>Diese DTD als Textdatei
<!ELEMENT bidproresults (winner)*> <!ELEMENT winner (auctionid, user, amount)> <!ELEMENT auctionid (#PCDATA)> <!ELEMENT user (#PCDATA)> <!ELEMENT amount (#PCDATA)>Diese DTD als Textdatei
<?xml version="1.0" ?> <!DOCTYPE bids SYSTEM "/afs/informatik.uni-tuebingen.de/home/knauel/Sites/pfi-0506/ece/share/bidpro-input.dtd">Die Benutzung von ECE Bid Pro ist denkbar einfach. ECE Bid Pro ist ein Programm für die Kommandozeile und wird mit einem Parameter gestartet: Dem Pfad zur Eingabedatei.
Eine Schnittstelle zur Bimasuun
Die Bimasuun erstellt automatisch eine Liste von
Angeboten. Da die Bimasuun mit den Ausmaßen 5,5x7,5x9 m und
dem Gewicht von 1,4 Tonnen ziemlich schwierig zu
transportieren ist, hat R. Winter einen Simulator zur
Verfügung gestellt. Dieser Simulator hat diesselbe
Schnittstelle, die auch die Bimasuun-Anbindungs-Bibliothek
bietet.Die Schnittstelle besteht aus der Funktion
bimasuun-get-offers, die keine Parameter hat.
Das ausführbare bimasunn.scm Skript kapselt
die Schnittstelle und ruft die der Funktion
bimasuun-get-offers auf. Der Rückgabewert ist eine
Liste von Angeboten, die auf der Standardeingabe
ausgegeben wird. Ein Angebot ist wiederrum eine Liste,
die aus den folgenden Elementen besteht:
(anfangspunkt endpunkt verbindungsart kapazitaet mindestgebot)anfangspunkt und endpunkt sind Strings, verbindungsart ist entweder das Symbol 'satellite oder 'groundlink. kapazitaet und mindestgebot sind Integerzahlen.
Dokumentation zu Surflets und XML-Dokumente in Scheme
Eine "How to SUrflet Server" Dokumentation findest du hier.
Eine ausführliche Beschreibung wie XML-Dokumente in Scheme
gelesen, geschrieben und repräsentiert sind, findet sich My own SXML.
XML-Dokumente einlesen und speichern
In diesem kleinen Beispiel wird die folgende XML-Datei
gelesen, um einen Eintrag erweitert und wieder
gespeichert. Dies ist die ursprüngliche XML-Datei:
<?xml version="1.0" ?>
<!DOCTYPE band SYSTEM "band.dtd">
<band>
<member>
<name>Ozzy Osbourne</name>
<instrument>vocals</instrument>
</member>
<member>
<name>Bill Ward</name>
<instrument>drums</instrument>
</member>
<member>
<name>Geezer Butler</name>
<instrument>bass</instrument>
</member>
</band>
band.xml als Textdatei
(*TOP* (*PI* xml "version=\"1.0\"")
(band (member (name "Ozzy Osbourne") (instrument "vocals"))
(member (name "Bill Ward") (instrument "drums"))
(member (name "Geezer Butler") (instrument "bass"))
(member (name "Tony Iommi") (instrument "guitar"))))
(define-structure surflet surflet-interface
(open surflets
xml-i/o
scheme-with-scsh)
(begin
(define filename "band.xml")
(define (add-tony xexpr)
`(*TOP*
(,(car (cdr xexpr))) ;;da steht die PI drin
(band
,@(append (cdr (car (cddr xexpr)))
'((member
(name "Tony Iommi")
(instrument "guitar")))))))
(define (update-xml-file filename)
(write-xml-to-file
filename (add-tony (read-xml-from-file filename))))
(define (main req)
(update-xml-file filename)
(send-html/finish
(cddr (read-xml-from-file filename))))))
Dieses Programm als TextdateiHTML-Frames
HTML-Frames sind eine Möglichkeit das Browserfenster
aufzuteilen, so dass mehrere HTML-Dokumente nebeneinander im
selben Fenster dargestellt werden. Ein sogenanntes
Frameset bestimmt dabei, wie die Aufteilung des
Browserfensters erfolgt. In den einzelnen Teilbereichen, den
Frames können nun HTML-Dokumente dargestellt
werden. Im Frameset wird ebenfalls festgelegt, welche
HTML-Dokument in welchem Frame dargestellt wird.
SelfHTML
enthält eine sehr gute Einführung in dieses Thema. Der offizielle
HTML-Standard enthält natürlich auch ein Kapitel über
Frames.
XSL-Stylesheets debuggen
Kommt es während der XSL-Transformationen zu einem Fehler,
so erhält der Benutzer keine Fehlermeldung -- für den
Entwickler ein echter Horror. Für die Entwicklung ist ein
XSL-Prozessor wünschenswert, der aussagekräftigere
Fehlermeldungen liefert. Dies leistet das Programm
xsltproc, das auf den FreeBSD-Rechner am WSI
installiert ist. Beispiel:
[knauel@duff xml-und-frames] xsltproc pfi-kommvv.xml xsltStylePreCompute: unknown xsl:for-eac xsltApplyOneTemplate: for-eac was not compiled
Wenn alles stimmt, dann wird die von XSLT-Skript erzeugte Ausgabe auf der Kommandozeile ausgegegen.
Scheme-Servlets geben JavaScript aus
Vielfach ist notwendig JavaScript-Code dynamisch zu
erzeugen, zum Beispiel um server-seitigt errechnete Werte in
das Programm einzufügen. JavaScripts können in X-Expressions
mit *COMMENT* eingebettet werden. Hier ein
ein Surflet Beispiel:
(define-structure surflet surflet-interface
(open scheme-with-scsh
surflets)
(begin
(define *count* 10)
(define content
`(html
(head (title "Ein JavaScript-Versuch"))
(body
(script (@ (type "text/javascript"))
(*COMMENT*
"
count=" ,(number->string *count*) ";
for (var i = 1; i <= count; i++) {
document.write(\"i ist \" + i + \"
\");
}
document.write(\"Gehen Sie weiter, hier gibt es nichts zu sehen!\");
//"))
(br)
(p "Das war ein dynamisch erzeugtes JavaScript!"))))
(define (main req)
(send-html/finish content))))
Dieses Programm als Textdatei
Kommandozeilenprogramme mit scsh-Scheme
In scsh-Scheme geschriebene Programme können
sehr leicht von der Kommandozeile aus ausgeführt werden. Der
Quelldatei wird nur ein entsprechender Aufruf des
Scheme-Interpreters für die Kommandozeile ("scsh")
vorangestellt:
#!/bin/sh exec scsh -s "$0" "$@" !# (display "Hallo Welt!") (newline)Diese Datei muss noch mit chmod +x quelle ausführbar gemacht werden, um sie ausführen zu können.
XML und XSLT fähige Browser
Eine Liste von Browsern, die XML und XSLT Standard unterschtützen, findest du hier.
XML und XSLT Dateien an Browser senden
Das "send-xml" Modul erleichert das Parsen von
"Processings" der XML-Inhalt. Das Modul bietet folgende Funktionen:
send-xml/suspend
send-xml/finish
Die tun das gleiche wie send-html/*, aber setzen den
Content-Type-Header der HTTP-Antwort auf
"text/xml". Außerdem kann man jetzt
Processing-Instructions ausgeben:
Aus
'(*PI* xml "version=\"1.0\"")
wird
und aus
'(*PI* xml-stylesheet "href=\"foo.xsl\"
type=\"text/xsl\"")
wird so
Achtung: Das erste Element der Liste ist immer noch *TOP*,
dieses muss man noch manual filtern.
Hier ist noch eine Beispiel-SUrflet