Beruflich Dokumente
Kultur Dokumente
Thomas Feuerstack
Jens Vieler
Beratung und IT-Services
Das XML-Cocktailbuch
B/016/0210
Inhaltsverzeichnis
Aperitif
1.1
1.2
Bargeflster
2.1
Aufgeschnappte Satzfragmente . . . . . . . . . . . . . .
2.2
2.3
. . . .
2.4
3.1
10
3.2
Elementinhalte . . . . . . . . . . . . . . . . . . . . . .
11
3.3
12
3.4
Attribute . . . . . . . . . . . . . . . . . . . . . . . . . .
14
3.5
15
3.6
16
3.7
18
19
4.1
19
4.2
22
4.3
XML arbeitet . . . . . . . . . . . . . . . . . . . . . . .
23
4.4
Kommentare . . . . . . . . . . . . . . . . . . . . . . . .
29
4.5
30
iv
Inhaltsverzeichnis
5
31
5.1
DTD . . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
5.2
Elemente . . . . . . . . . . . . . . . . . . . . . . . . .
36
5.3
Attribute . . . . . . . . . . . . . . . . . . . . . . . . . .
41
5.4
Entitten . . . . . . . . . . . . . . . . . . . . . . . . . .
46
5.5
Parameter-Entitten . . . . . . . . . . . . . . . . . . . .
47
5.6
Generelle Entitten . . . . . . . . . . . . . . . . . . . .
47
5.7
Notationen . . . . . . . . . . . . . . . . . . . . . . . . .
49
5.8
51
Unbekannte Rezepturen
53
6.1
53
Auf Ex Anwendungsbeispiele
57
7.1
58
7.2
58
63
B Programm-Listings
65
65
66
70
Index
73
1 Aperitif
Manhattan (Aperitif)
1dash :
4cl :
2cl :
Angostura Bitter
Canadian Whisky
Vermouth Rosso
Dekoration
Cocktailkirsche
Mixanleitung
Alle Zutaten im Mixglas mit viel Eis verrhren. Danach in eine gut gekhlte
Cocktailschale abseihen und mit der Cocktailkirsche garnieren.
1.1
Oder haben Sie jemals eine rationale Begrndung fr die Entstehung von Beethovens
9. Sinfonie gehrt?
1 Aperitif
Wie bei jedem Rezeptbuch soll der Inhalt natrlich Geschmack
auf mehr machen; Sie sollten daher tunlichst daran gehen, die beschriebenen Inhalte selbst auszuprobieren.
Last not least, fr die konomisch denkenden LeserInnen: Sollte
Ihnen der Inhalt dieser Broschre nicht zusagen, so knnen Sie
wenigstens noch die abgedruckten Rezepte verwerten die Anschaffung hat sich also auf alle Flle gelohnt.
1.2
2 Bargeflster
Troubleshooter (Longdrink)
4cl :
1:
1EL
1/2
Asbach Uralt
Limette
Rohrzucker, braun
Zitrone
Fanta Pink Grapefruit
Crushed Ice
Dekoration
Zwei Strohhalme in das Glas lehnen.
Mixanleitung
Die Limette in Achtel schneiden und in einem Longdrinkglas, beispielsweise
mit Hilfe eines Caipirinha-Stels, zerstoen.
Den Rohrzucker und den Zitronensaft zugeben und das Glas zu knapp 3/4 mit
dem gestoenen Eis auffllen. Mit Asbach Uralt und Pink Grapefruit bis zum
Rand auffllen.
2.1
Aufgeschnappte Satzfragmente
Je nach baulicher Beschaffenheit der von Ihnen gewhlten Bar und meistens auch abhngig von dem Umstand, ob Sie allein oder in Begleitung
gekommen sind, ist es beinahe unvermeidlich, dass Sie an den Gesprchen der anderen Gste, nun sagen wir einmal teilhaben.
Meist sind es nur Satzfragmente, die wellenartig zu Ihnen durchdringen;
dennoch kann der Inhalt umso interessanter sein. So erzhlte neulich,
meiner ungewollten Teilhaberschaft berhaupt nicht gewahr, eine Hagenerin ihrer Begleitung, dass ihr Schwager (?) seinen diesjhrigen Urlaub irgendwo auf dem Balkan in Reykjavik verbracht habe.1
In Bezug auf XML sind die im Umlauf befindlichen Gerchte kaum weniger abenteuerlich. Aussagen die von XML als neuer Internetsprache
knden, hufig gekoppelt mit dem Zusatz, dass es mittlerweile unntig
ist, HTML zu lernen, sind dabei die eher harmloseren Vertreter ihrer Art.
Daneben finden sich auch gern Zitate, die von der beinahe grenzenlosen Formatierbarkeit eigener Dokumente berichten, bis hin zu der Tatsache, dass auch das leidige Austauschen verschiedenster Dokumentformate durch XML endlich das ersehnte positive Ende gefunden hat.
1
Zu ihrer Ehrenrettung sei gesagt, dass der schwgerliche Urlaubsort spter dann doch
glasweise Stck fr Stck weiter nach Norden verlegt wurde.
2 Bargeflster
Als Fazit lsst sich feststellen, dass ohne XML zuknftig wohl nichts
mehr geht, oder plakativer:
XML ist eine Meta-Auszeichnungssprache, ber die Elemente anderer Auszeichnungssprachen definiert werden knnen. Hierzu
werden die bentigten Elementnamen, deren Inhaltsstruktur, Attribute, etc. festgelegt und knnen darberhinaus wahlweise in einer
Regeldatei gespeichert werden.
2.3
2 Bargeflster
Dazu noch eine Bemerkung am Rande: Gerade dieser letzte Punkt sorgt
unter XML-Autoren hufig fr Unmut. Prinzipiell soll es ja der Computer sein, der die Arbeit des Anwenders erleichtert. Bei der Erstellung von XML-Dokumenten hat jedoch, aufgrund der im Vergleich zu
SGML eingeschrnkten XML-Strukturen, in jedem Fall der Autor mehr
(Schreib-)Arbeit zu leisten.
2.4
(b)
(c)
(d)
(b)
(c)
(d)
(b)
(c)
(d)
(e)
Eingaben
lschen Aufgaben
lsen
Eingaben lschen
Aufgaben lsen
2 Bargeflster
Apricot Brandy
Calvados
Gordons Dry Gin
Eiswrfel
Mixanleitung
In den Shaker einige Eiswrfel geben und den Gin, Calvados und Brandy
dazu. Kurz schtteln und in ein Cocktailglas abseihen. Schmeckt ganz sanft
verleiht aber nach ein paar Glsern Flgel.
10
3.1
11
3.2 Elementinhalte
<?xml version=1.0?>
<!DOCTYPE bar SYSTEM "bar.dtd">
<!- - Willkommen in der XML-Bar - ->
<bar>
<cocktail>
<name>Angels Face</name>
<zutat>
<substanz>Apricot Brandy</substanz>
<menge>1cl</menge>
</zutat>
<zutat>
<substanz>Calvados</substanz>
<menge>1cl</menge>
</zutat>
<zutat>
<substanz>Gordons Dry Gin</substanz>
<menge>3cl</menge>
</zutat>
<zutat>
<substanz>Eiswrfel</substanz>
<menge />
</zutat>
<mixanleitung>In den Shaker einige Eiswrfel geben...
</mixanleitung>
</cocktail>
</bar>
<!- - Innerhalb von (der?) <bar> knnen
weitere Cocktails folgen - ->
3.2
Elementinhalte
Im Gegensatz zu seiner Bedeutung beginnen wir bei der detaillierten
Analyse des XML-Cocktails nicht mit dem Prolog, sondern wenden uns
zuerst dem Bereich des Wurzelelements zu, da dieser den eigentlichen
Datenbestand enthlt. Denjenigen unter Ihnen, die HTML nicht nur in
Zusammenhang mit Spezialeditoren kennen, werden durchaus hnliche
Zge entdecken; der Ordnung halber gibt es aber auch hier nochmal den
strukturierten berblick.
Wie oben bereits gezeigt, besteht ein Element normalerweise aus Character Data, welches durch Marken geklammert ist.
<name>Angels Face</name>
Natrlich knnen Elemente auch verschachtelt werden, wobei Sie jedoch
12
! Ebenfalls erlaubt, aber uerst unschn, ist die Mischung von Character
Data und weiteren Elementen, beispielsweise
<zutat>
Beim Abmessen der Zutaten ist auf
uerste Genauigkeit zu achten!
<substanz>Apricot Brandy</substanz>
<menge>1cl</menge>
</zutat>
Da eine solche Vermixung zwar den Geschmack des Cocktails steigern
kann, auf keinen Fall jedoch die Lesbarkeit Ihres XML-Dokuments, sollten Sie auf Konstrukte dieser Art besser verzichten.
3.3
Abbildung 2.1 auf Seite 5 Da HTML eine Anwendung von SGML ist, welche wiederum als der ltere Bruder von XML angesehen werden kann, geben XML, bzw. SGML
die Regeln vor, woran sich die Anwendungen zu orientieren haben.
Schauen wir nochmal genauer hin:
<cocktail>
<name>Angels Face</name>
</cocktail>
2
In HTML werden leere Elemente hufig durch eine einzelne, ffnende Marke (Beispiel: <HR>) dargestellt. Wir wir noch sehen werden, ist dies nach den Konventionen
von XML nicht gestattet.
13
Leerraum4 zwischen der ffnenden Klammer und dem Markennamen ist verboten. Ein Leerraum vor dem abschlieenden > ist
dagegen erlaubt.
Die wenigen festgelegten Namensbeschrnkungen werden ein paar Seiten spter aufgefhrt, da sie auch Attribute und Entitten betreffen.
4
Unter Leerraum werden die Zeichen verstanden, die bei der Auswertung des XMLDokuments gewissermassen berlesen, bzw. auf ein Leerzeichen verkrzt werden. Dazu gehren das Leerzeichen (Blank) selbst, der Tabulator, Zeilenwechsel (LF), sowie
der Wagenrcklauf (CR).
14
3.4
Attribute
Wie nicht anders zu erwarten, knnen natrlich auch XML-Marken durch
Attribute erweitert bzw. variiert werden.
Als Beispiel ergnzen wir unser Element <name> durch das Attribut
klassifizierung, welches Werte wie Longdrink, Cocktail, Fizz,
u.v.a.m. annehmen soll, damit jeder Cocktail einer bestimmten Sparte
zugeordnet werden kann.
<bar>
<cocktail>
<name klassifizierung=Cocktail>Angels Face</name>
<zutat>
...
</bar>
Auch die Verwendung von Attributen ist bestimmten Regeln unterworfen, die wir Ihnen an dieser Stelle daher auch nicht vorenthalten wollen.
Die Angabe von Attributen ist nur in einer ffnenden Marke zulssig.
Werden mehrere Attribute gesetzt, so ist die Reihenfolge beliebig.
Attribute mssen zwingend mit Werten versehen werden; Attributwerte werden durch Quotes () oder Apostrophe () geklammert.
Vor oder nach dem Gleichheitszeichen darf Leerraum stehen.
Werden einem Attribut mehrere Werte zugeordnet, so sind diese
mit Leerzeichen voneinander zu trennen.
Quotes und Apostrophe drfen alternativ geschachtelt werden.
15
3.5
eigentliche Bedeutung
Markenbeginn
Markenende
Entittsbeginn
Attributwert
Attributwert
Ersatzdarstellung (Entitt)
<
>
&
"
'
! Die notorischen Problembereiter Umlaute mssen aufgrund der Tatsache, dass in einem XML-Dokument stets eine Kodierung vorhanden ist,
nicht gesondert maskiert werden warum das so ist, werden wir noch
genauer in Kapitel 4.2 auf Seite 22 sehen.
Die oben gezeigte Ersatzdarstellung wird auch als Entitt bezeichnet und
ist nicht nur auf die bereits gezeigten Zeichen beschrnkt, sprich: Sie
knnen selbst nach Lust und Laune eigene Entitten definieren.5
Daneben kann jedes andere Zeichen als Entitt mit Dezimal-,
Kapitel 4.2 auf Seite 22 Hexadezimal- oder UCS-4-Codierung dargestellt werden. Aus diesem
Grund sind die beiden folgenden Elemente identisch:
5
16
<name>Angels Face</name>
<name>Angel's 
Face</name>
Die Funktionsweise von CDATA ist dabei eigentlich recht simpel: Alle
Zeichen zwischen <![CDATA[ und ]]> werden ohne Interpretationsversuch berlesen Sie sollten sich ganz nebenbei gesprochen bereits
die Frage beantworten knnen, warum wohl die Verwendung der Zeichenfolge ]]> innerhalb eines CDATA-Abschnitts verboten ist.
Vielleicht sind Sie im letzten Absatz ber den Begriff Interpretationsversuch gestolpert und fragen sich nun, wer denn eigentlich Ihr XMLDokument irgendwann mal interpretiert.
Belassen wir es hier noch mit der Antwort: Der Parser. Die genaue
Funktion eines XML-Parsers erfolgt dann in Kapitel 4.
3.6
Aus dem Kapitel Marken in XML und HTML wissen Sie bereits, dass
Kapitel 3.3 auf Seite 12 Sie die Namen fr Marken relativ frei vergeben knnen, dies gilt unter
anderem auch fr die Benennung von Attributen und Entitten.
Die Verwendung des Wrtchens relativ weist an dieser Stelle schon
darauf hin, dass dieser Freiheit irgendwo auch Grenzen gesetzt sind. Fr
Marken, Attribute und Entitten sind diese Grenzen an den folgenden
Stellen erreicht:
Das erste Zeichen eines Namens muss ein Buchstabe aus dem
Unicode-Zeichensatz (UCS), ein Unterstrich (_) oder ein Doppelpunkt (:) sein.
Ab dem zweiten Zeichen knnen zustzlich Ziffern, der Bindestrich (-) oder ein Punkt (.) verwendet werden. Kaum zu glauben,
aber wahr: das Konstrukt
<_-.>Cocktailkirsche</_-.>
17
18
3.7
Falsch
Falsch
Falsch
4. <_-.>Sahne</_-.>
Korrekt
Falsch
Falsch
6. <dekoration>Ein
Cocktailschirmchen</dekoration>
Korrekt
Falsch
7. <EndedesRezepts>
Korrekt
Falsch
Eingaben
lschen Aufgaben
lsen
Eingaben lschen
Aufgaben lsen
B52 (Shooter)
3cl :
3cl :
1/2cl
Tia Maria
Baileys Irish Cream
Captain Morgan Jamaika Rum
Mixanleitung
Zuerst den Tia Maria, dann den Baileys in ein kleines, maximal 8cl fassendes
(hitzebestndiges!) Glas geben. Dabei darauf achten, dass die Likre nicht
allzusehr ineinander flieen.
Obenauf eine Schicht von ca. 1/2cl Captain Morgan Rum geben, dessen 70%
Alkohol gleich mit Hilfe eines Feuerzeugs entzndet werden.
Einen Strohhalm hineinstecken, kurz durchatmen und ganz schnell austrinken.
Vorsicht! Der Strohhalm mag keine Hitze!
4.1
20
4.1.1
Wohlgeformtheit : (Original: Wellformated) Um das Prdikat wohlgeformt zu erhalten muss das XML-Dokument alle Regeln erfllen, die wir bislang
Kapitel 3.3, 3.4 und 3.6
bei der Verwendung von Marken, Attributen, Entitten, etc. kennengelernt haben.
Gltigkeit : (Original: Validated) Ist das Dokument darberhinaus mit internen
oder externen Regeln verknpft, so knnen einige Parser auch die
festgelegten Vorschriften prfen. Sofern dabei keine Fehler auftreten, heisst das Dokument gltig.
Abbildungen 4.1 und 4.2 Seit der Version 5 besitzt Microsofts Internet-Explorer einen eingebauten
21
Parser (MSXML), der in der Lage ist, die Struktur eines XML-Dokuments im Browserfenster anzuzeigen und zustzlich die Wohlgeformtheit
zu kontrollieren.
Abbildung 4.4 auf der Darberhinaus kann von Microsofts Homepage der kostenlose zeilenorinchsten Seite entierte Parser xmlint runtergeladen werden, der zustzlich auf Gltigkeit prfen kann.1
Abbildung 4.3: Andere Browser (hier: Mozilla) sind bei weitem nicht so
komfortabel.
Viele Programmiersprachen besitzen mittlerweile eingebaute Routinen
oder Klassen, ber die ein interner Parser angesteuert wird. JAVA-Programmierer sollten sich das Package javax.xml.parsers nher anKapitel 7 auf Seite 57 schauen, whrend fr PHP-Interessierte die Klasse phpxml interessant
sein kann.
1
22
Abbildung 4.4: Der Parser mit dem wahrscheinlich besten Preis/Leistungsverhltnis: xmlint
4.2
Im letzten Kapitel sind uns ganz nebenbei die ersten vom Parser bemnAbbildungen 4.2 und 4.4 gelten Fehler untergekommen. Fr all diejenigen, die dieses Skript fr
lau aus der Leseecke gezogen haben und sich daher mit der 72dpi-PDFVersion rumschlagen mssen, sei die entsprechende Fehlermeldung noch
einmal im Klartext dargestellt.
23
Abbildung 4.5: Grundstzlich gilt: Sofern nicht anders angegeben, verlangen Parser ein UTF-Format.
Sofern Ihnen Ihr Lieblingseditor keinen UTF-Filter anbietet, knnen Sie
die gewnschte Kodierung alternativ ber das encoding-Attribut im
Prolog Ihres Dokuments festlegen. Das folgende Beispiel demonstriert
diese Technik.
<?xml version=1.0 encoding=ISO-8859-1?>
<bar>
<cocktail>
<name>B52</name>
...
Die in diesem Beispiel verwendete Kodierung ISO-8859-1 enthlt den
klassischen ASCII-Zeichensatz, sowie alle westeuropischen Sonderzeichen also all die Zeichen, die in normalen Editoren verwendet werden.
4.3
XML arbeitet
Langsam aber sicher verlassen wir den Bereich der Erfassung und wenden uns dem Problem zu, wie denn unsere Daten aufbereitet werden knnen.
Wir erinnern uns: XML selbst beinhaltet lediglich die Mglichkeit, erfasste Daten ber ein Markup zu strukturieren. Auch der Parser schafft
2
24
Fr uns ist momentan noch nicht von Interesse, was alles in Verarbeitungsanweisungen (im oberen Beispiel die bildschirmgerechte Aufbereitung ber XSL) untergebracht werden kann, wichtig ist jetzt erstmal
das Wie.
Rein syntaktisch kommt es dabei lediglich auf die folgenden Punkte an:
Zwischen dem ersten ? und dem Namen darf sich kein Leerzeichen befinden, eine Verarbeitungsanweisung <? Name> ist also
fehlerhaft.
Und, wie nicht anders zu erwarten, darf die Zeichenkombination
?> nicht in der Attributliste auftauchen.
Rein syntaktisch betrachtet ist daher
<?Prost alle=zusammen?>
eine korrekte Verarbeitungsanweisung wer immer sie auch letztendlich
umsetzen mag.
4.3.1
Formatierung
Verarbeitungsanweisungen werden hufig dazu benutzt, um aus XMLDokumenten eine formatierte Ausgabe zu zaubern ganz nebenbei wird
25
diese Broschre dadurch um ein Kapitel ergnzt, mit dem sich wirklich
etwas anfangen lsst.
Durch die Verwendung von Verarbeitungsanweisungen existieren netterweise gleich mehrere Mglichkeiten, aus XML-Anwendungen formatierte Ausgaben zu erzeugen.
XSL : (= eXtensible Stylesheet Language) XSL ist gewissermaen eine
eigene Programmiersprache, die nicht ganz einfach zu erlernen
ist. XSL ist kein Bestandteil von XML und damit auch nicht Inhalt
dieser Broschre.
CSS : (= Cascading StyleSheets) CSS waren ursprnglich als Formatvorlagen fr HTML gedacht, sie knnen jedoch auch direkt mit
XML-Dokumenten verknpft werden. Cascading Stylesheets sind
allgemein die simpelste Mglichkeit, XML-Anwendungen Format
zu verleihen.
Halten Sie sich bitte nochmal deutlich vor Augen, dass die Formatierung
von Daten, weder durch CSS noch durch XSL, nicht einmal ansatzweise
Bestandteil unseres Kernthemas XML ist. Nichtsdestotrotz knnen auch
wir ein gewisse Neugier nicht verhehlen. Lassen Sie uns daher die graue
Theorie ein wenig beiseite legen und dafr einen Kurzausflug in die Welt
der Darstellung von XML-Dokumenten unternehmen.
26
Auf den folgenden 1 1/2 Seiten wird demonstriert, wie Sie ein XMLDokument mit Cascading Style Sheets verknpfen und in einem WWWBrowser darstellen knnen.
Soda
Leitungswasser
Mixanleitung
Das Soda in ein Longdrinkglas geben, das Ganze mit Leitungswasser auffllen.
Das zugehrige Cascading Stylesheet (bar.css) kann wie folgt realisiert werden.
27
}
name {
}
zutat {
display: block;
font-family: sans-serif;
background-color: lightgreen;
border: solid;
display: block;
font-size: 18pt;
color: blue;
display: list-item;
font-size: 12pt;
}
menge {
padding-left: 0.5cm;
}
mixanleitung {
font-size: 11pt;
font-style: oblique;
background-color: yellow;
display: block;
}
Auch ohne tiefgreifende CSS-Kenntnisse drfte schnell klar werden, welche Formate wie angewandt werden.
Die Datei dd.xml kann nun wie eine HTML-Datei in einem WWWBrowser (Internet Explorer ab Version 5, Netscape ab Version 6) geffnet werden. Das erzielte Ergebnis wird je nach den vorhandenen CSSFhigkeiten des verwendeten Browsers variieren, es drfte aber Abbildung 4.6 sehr nahe kommen.
28
29
4.4 Kommentare
4.4
Kommentare
Kommentare dienen der bersichtlichkeit Ihres XML-Dokuments und
helfen dadurch Ihnen, als auch denjenigen die Ihre XML-Daten weiterverarbeiten mssen.3
Ganz nebenbei knnen temporr nicht bentigte XML-Anweisungen
durch Auskommentieren fr den Parser unsichtbar gemacht werden.
Kommentare beginnen mit der Zeichensequenz <!- - und enden mit
- ->.
<?xml version=1.0?>
<?xml-stylesheet type=text/css href=bar.css?>
<!- - Bildschirmausgabe ber Cascading Stylesheets - ->
<!- - ?xml-stylesheet type=text/xsl href=bar.xsl? - ->
<!- - XSL ist auskommentiert, da nicht Bestandteil
dieser Broschre - ->
<bar>
<cocktail>
...
Sie werden aus diesem Grund eher selten an der FernUni benutzt. :)
30
4.5
(b)
(c)
(d)
(b)
(c)
(d)
Version
(b)
standalone
(c)
(d)
Eingaben
lschen Aufgaben
lsen
Eingaben lschen
Aufgaben lsen
Alexander (Digestif)
1 Teil :
1 Teil :
1 Teil :
Cognac
Crme de Cacao braun
Sahne
Dekoration
Zimt
Mixanleitung
Alle Zutaten mit Ausnahme des Zimts werden im Shaker inklusive einigen
Eiswrfeln geschttelt und in ein Cocktailglas abgeseiht. Je nach Geschmack
den fertigen Drink mit etwas Zimt bestreuen.
Im nun folgenden Teil der Broschre beleuchten wir nach der Wohlgeformtheit nun die Gltigkeit der XML-Daten. Wir werden ein Regelwerk definieren, welches die einzelnen Elemente unserer Cocktailbar beschreibt: Was gehrt zu einem Cocktail? Sind die Zutaten in ausreichender Anzahl und vollstndig aufgefhrt? Sind Bilder erwnscht? Wird die
Rezeptstruktur (Beschreibung, Zutaten, Mixanleitung) eingehalten?
Der flchendeckende Einsatz solcher Automaten, die es brigens wirklich gibt, ist
bislang nur deshalb ausgeblieben, weil sich Maschinen morgens um halb 4 nicht auf
Diskussionen mit betrunkenen und verzweifelten Ehemnnern einlassen wollen.
32
5.1
DTD
Das XML-Regelwerk wird in einer DTD Document Type Definition
festgelegt. Diese Gltigkeitregeln beschreiben
Elemente, Attribute, Entitten Welche Marken gibt es?
Inhalte und Hufigkeitsangaben Was darf drin sein und wie oft?
Beziehungen einzelner Elemente zueinander. Reihenfolge, Abhngigkeiten, Verschachtelungen, Struktur Erst wird gemixt, dann
dekoriert.
Die DTD-Anweisungen knnen wahlweise innerhalb des XML-Dokuments, oder auerhalb, in einer expliziten DTD-Datei, deklariert werden.
In den folgenden, stark komprimierten Beispiel-Quellcodes wird zur besseren Lesbarkeit auf die interne Deklaration die Quick and Dirty Variante zurckgegriffen. Im Produktionseinsatz ist die externe Deklaration
wegen ihrer klaren Trennung von Daten und Regelwerk vorzuziehen.
33
5.1 DTD
Beispiel 5.1: Ohne Regeln bleibt auf Dauer keine Bar unbeschdigt.
<!DOCTYPE name [ <DTD-Anweisung> ... ]>
Was den Aufbau des DTD-Statements ELEMENT (siehe Beispiel) angeht, so werden Sie schon jetzt erkennen, dass die bar einen cocktail
im Angebot hat, der wiederum einen namen hat und aus einer zutat
besteht. Im Kapitel 5.2 auf Seite 36 wird dessen Bedeutung und Aufbau
vertieft.
5.1.2 Externe Deklaration
Die gleiche Bar kann aber auch allgemeingltiger realisiert werden.2
Durch die Trennung von Datenbestand (XML) und Regelwerk (DTD)
in jeweils eigenen Dateien gelingt es, mehrere unterschiedliche Datenbestnde ein und demselben Regelwerk zu unterwerfen.
Eine Verknpfung von XML und DTD wird wieder im DOCTYPE-Tag
des XML-Dokuments durchgefhrt, diesmal jedoch lediglich mit dem
Verweis auf eine DTD-Datei die sogenannte Externe Deklaration. Der
xml-Tag-Parameter standalone entfllt deshalb.
Fr die im Beispiel aufgebaute Mini-Bar bentigen wir daher eine
bar.xml:
2
Stellen Sie sich vor, Sie wollten unterschiedliche Datenbestnde wie Cocktails, Sektcocktails, Longdrinks und Shortdrinks verwalten, die sicherlich alle Namen, Zutaten
und Mixanleitungen haben - sich von der Datenstruktur her also hneln.
34
<?xml version=1.0?>
<!DOCTYPE bar SYSTEM bar.dtd>
<bar>
<cocktail>
<name>
Alexander
</name>
<zutat>
3cl Creme de Cacao braun
</zutat>
</cocktail>
</bar>
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
bar (cocktail)>
cocktail (name,zutat)>
name (#PCDATA)>
zutat (#PCDATA)>
Andere XML-Datenbestnde knnen nun mit dem gleichen DOCTYPEVerweis auf diese bar.dtd Bezug nehmen.
5.1.3
ffentliche Deklaration
Wird die zu verknpfende Regeldatei von einem greren Anwenderkreis benutzt (dessen Umfang so ungefhr ab weltweit aufwrts vermutet
wird), bzw. planen Sie eine derartige Regeldatei zu erstellen, so empfiehlt
sich die Einbindung als ffentliche Deklaration.
Im Vergleich zur lokalen Verknpfung wird diesmal das Schlsselwort
SYSTEM durch PUBLIC ersetzt. Hinter PUBLIC folgt wieder ein URI,
der sich nun jedoch aus einer Eigentmer-, Dokumentenklassen- und
Sprachcodebeschreibung zusammensetzt (jeweils durch // voneinander getrennt), bevor als Verknpfungsadresse der bereits bekannte URL
folgt.
Eine der bekanntesten ffentlichen Deklarationen bezieht sich auf die
DTD mit der Regelbeschreibung von XHTML.
5.1 DTD
35
Der Zeilenumbruch des letzten Beispiels hat freundlicherweise automatisch dafr gesorgt, dass wir die ffentliche Deklaration schrittweise analysieren knnen.
Zeile 1 : birgt soweit nichts Neues. Das Schlsselwort PUBLIC zeigt lediglich an, dass es sich um eine ffentliche Verknpfung handelt.
Zeile 2 : -//W3C beschreibt den Eigentmer oder Ersteller der DTD, als
das W3Consortium. //DTD XHTML... zeigt an, dass es sich um
ein Regelwerk fr XHTML handelt in der Version 1.0. Das Ganze ist dazu in Englisch (//EN) verfasst worden.
Um nochmal kurz auf die Eigentmerschaft zurckzukommen:
Das fhrende - (in -//W3C) weist darauf hin, dass das W3Consortium ein nicht registrierter Eigentmer der DTD ist. In Analogie dazu existieren, erkennbar am fhrenden +, zumindest in der
Theorie auch registrierte Besitzer bis zur Stunde der Drucklegung konnte dem Autorenteam jedoch niemand verraten, wo sich
Interessenten registrieren lassen knnen.
Zeile 3 : gibt abschlieend nur noch die Adresse an, von der die gewnschte
DTD geladen werden soll.
Tipp: Sofern Sie daran interessiert sind mal einen Blick hinter die
Kulissen zu werfen, sollten Sie aber bitte erst nachdem Sie den
Rest dieser Broschre gelesen haben die oben aufgefhrte DTD
xhtml1-transitional auf dem eigenen Rechner speichern.
Auch wenn sich die DTD auf XHTML bezieht, so ist sie aufgrund
der hohen Kompatibilitt ein gutes Beispiel um zu zeigen, wie beispielsweise HTML definiert ist.
Na, konnten Sie Ihre Neugier nicht zgeln und haben bereits in der
xhtml1-transitional.dtd rumgeschnuppert? Lassen Sie mich
abschlieend feststellen, dass auch die Syntax fr DTDs erstmal chaotischer ausschaut, als sie letztendlich wirklich ist.
36
5.2
Elemente
Julia (Cocktail)
2 cl :
2 cl :
6 cl :
Amaretto
Rum wei
Sahne
Dekoration
Erdbeeren
Mixanleitung
Zutaten im Elektromixer mit einigen Eiswrfeln gut durchmixen und das fertige Mix in einen groen Sektkelch fllen. Erdbeere an den Glasrand stecken.
leeres Element
beliebig
Bei Kindelementen: Name, Abfolge und Hufigkeit
Im Beispiel: (name,zutat)
Parsed Character Data - Inhalt besteht aus Text
37
5.2 Elemente
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
5.2.1
bar (cocktail)>
cocktail (name,zutat)>
name (#PCDATA)>
zutat (#PCDATA)>
Hufigkeitsangaben
38
genau 1 mal
0 oder 1 mal (optional, hchstens einmal)
0 bis n mal (optional, beliebig oft wiederholbar)
1 bis n mal (erforderlich, mindestens einmal, beliebig
oft wiederholbar)
Als angehende Barbesitzer wollen wir natrlich viele verschiedene Cocktails anbieten. Jeder Cocktail soll einen Namen haben und aus mindestens einer Zutat bestehen.3 Dekoration und Mixanleitung sind unverzichtbar, ein Foto hingegen kann erbrigt werden.
Damit ergibt sich das folgende DTD-Konstrukt:
...
<!ELEMENT bar (cocktail*)>
<!ELEMENT cocktail
(name,zutat+,dekoration,mixanleitung,foto?)>
...
Elementfolge
erster, zweiter,...
Den Autoren sind brigens keine Cocktails bekannt, die nur aus einer Zutat bestehen.
Cocktails, die nur aus Rum bestehen, bleiben Rum. Selbst der Dagobert-Duck-SparCocktail (Rezept auf Seite 26) besteht aus Leitungswasser und einem Spritzer Soda.
39
5.2 Elemente
Kleine bung Lernen Sie die Anleitungen fr die Cocktails Julia und Alexander auswendig. Cocktailname, Mengen und Substanzen der Zutaten. Der immer
gleiche Schema-Aufbau aller Cocktails wird Ihnen die Paukerei erleichtern. Vorhandene Abhngigkeiten Mengenangaben werden zum Beispiel nur im Zusammenhang mit den Zutaten, und nicht im Namen genannt drngen sich dabei wie von selbst auf.
Reihenfolgen und Abhngigkeiten fhren zu diesem DTD-Konstrukt:
...
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
...
name (#PCDATA)>
zutat (substanz,menge)>
substanz (#PCDATA)>
menge (#PCDATA)>
Demnach besteht jede Zutat aus genau einer Substanz und einer Mengenangabe. Eine Umkehrung zuerst die Menge und dann die Substanz
ist nicht zulssig.
5.2.4
Elementauswahl
Die Elementauswahl beschreibt eine Entweder/Oder-Verknpfung von
Elementen, Elementfolgen oder Elementauswahlen:
(Element1|Element2|...)
...
<!ELEMENT Angestellte (BarFachfrau|MixMeister) >
<!ELEMENT BarFachfrau (#PCDATA) >
<!ELEMENT MixMeister (#PCDATA) >
...
! Sollte unsere Bar so richtig in der Szene einschlagen, so werden selbstverstndlich weitere Mitarbeiter eingestellt. Die Kombination von Hufigkeitsangaben und Elementauswahl hat jedoch so ihre Tcken. Beachten Sie den folgenden Effekt:
40
...
<!ELEMENT Angestellte (BarFachfrau|MixMeister)*>
<!ELEMENT BarFachfrau (#PCDATA) >
<!ELEMENT MixMeister (#PCDATA) >
...
beschreibt eine gemischte Angestelltengruppe, eine beliebige Reihenfolge von sowohl BarFachfrauen als auch MixMeistern, wohingegen
...
<!ELEMENT Angestellte (BarFachfrau*|MixMeister*)>
<!ELEMENT BarFachfrau (#PCDATA) >
<!ELEMENT MixMeister (#PCDATA) >
...
entweder nur BarFachfrauen oder nur MixMeister jeweils in beliebiger Anzahl verpflichtet.4
5.2.5
Alten Janx-Geist
Wasser aus den Meeren von Santraginus V
arkturanischer Mega-Gin
fallianisches Sumpfgas
qualaktinischer Hyperminz-Extrakt
eines algolianischen Sonnentigers
Zamphour
Dekoration
Olive
Mixanleitung
Zutaten mischen, Mega-Gin-Wrfel darin zergehen lassen, Das Sumpfgas hindurchperlen lassen, ber einen Silberlffel den Minze-Extrakt trpfeln und
den Zahn auflsen.
Unsere Bar ist nun vollstndig. Die DTD-Anweisungen sind die Summe der bisherigen berlegungen. Auf das Foto (eine Grafik daher ANY
und nicht (#PCDATA)) kann gegebenenfalls verzichtet werden, weil
unsere Angestellten sowieso jeden Drink schon x-mal zubereitet haben
4
Als Bar-Besitzer werden Sie natrlich die 2. Variante whlen, weil sie so eine der
beiden, nach Geschlechtern getrennten, Angestelltentoiletten einsparen.
41
5.3 Attribute
und wissen wie er aussieht. Die bar.dtd:
Die Cocktails werden nun (Beispiel 5.2 auf der nchsten Seite) in
bar.xml abgelegt.
5.3
Attribute
Tequila Silver
Grenadine
Orangensaft
Dekoration
Schwarzer Trinkhalm
Mixanleitung
Einige groe Eiswrfel in ein Longdrinkglas geben, den Tequila dazu und
mit Orangensaft auffllen. Zum Schluss Grenadine dazugeben und mit einem
schwarzen Trinkhalm gerade so wenig umrhren, dass man den Sonnenaufgang im Glas noch sieht.
Mit Hilfe von Attributen knnen den Elementen zustzliche Informationen beigefgt werden. In unserer Bar kann beispielsweise jedem Cocktail die Klassifizierung mitgegeben werden, ob es sich eher um einen
Cocktail, einen Longdrink oder einen Collins handelt.
Attribute werden im Gegensatz zu Elementen, deren Inhalt als eigentliche Informationseinheit verstanden wird, in erster Linie als Steuerinformation benutzt. Ein Verlag knnte das Attribut Klassifizierung dazu
nutzen, die verschiedenen Cocktails zu gruppieren und sie in Kapiteln
zusammenzufassen.
In der DTD findet eine Auflistung mglicher Attribute im Anschluss an
die Element-Definition statt:
42
<?xml version=1.0?>
<!DOCTYPE bar SYSTEM bar.dtd>
<bar>
<cocktail>
<name>Alexander</name>
<zutat>
<substanz>Cognac</substanz>
<menge>3cl</menge>
</zutat>
<zutat>
<substanz>Creme de Cacao braun</substanz>
<menge>3cl</menge>
</zutat>
<zutat>
<substanz>Sahne</substanz>
<menge>3cl</menge>
</zutat>
<dekoration>Zimt</dekoration>
<mixanleitung>
Alle Zutaten - mit Ausnahme des Zimts - werden im Shaker
inklusive einigen Eiswrfeln geschttelt und in ein
Cocktailglas abgeseiht. Je nach Geschmack den fertigen
Drink mit etwas Zimt bestreuen.
</mixanleitung>
<foto>alexander.jpg</foto>
</cocktail>
<cocktail>
<name>Julia</name>
<zutat>
<substanz>Amaretto</substanz>
<menge>2cl</menge>
</zutat>
<zutat>
<substanz>Rum wei</substanz>
<menge>2cl</menge>
</zutat>
<zutat>
<substanz>Sahne</substanz>
<menge>6cl</menge>
</zutat>
<dekoration>Erdbeeren</dekoration>
<mixanleitung>
Zutaten im Elektromixer mit einigen Eiswrfeln
gut durchmixen und das fertige Mix in einen groen
Sektkelch fllen. Erdbeere an den Glasrand stecken.
</mixanleitung>
<foto>julia.jpg</foto>
</cocktail>
</bar>
43
5.3 Attribute
44
Typ
CDATA
ID
Es ist pro Element nur ein Attribut dieses Typs erlaubt. Namensregeln wie
fr XML-Namen. Der Wert muss eindeutig, das erste Zeichen darf nicht
nummerisch sein! Voreinstellungen #IMPLIED oder #REQUIRED.
<!ATTLIST cocktail nummer ID #REQUIRED>
<cocktail nummer=C0815>
...
</cocktail>
ENTITY /
ENTITIES
Bezug auf den Namen einer generellen, externen, nicht parsbaren Entitt
Zum Beispiel ein Bild.
<!ATTLIST cocktail foto ENTITY #IMPLIED>
<cocktail foto=tequilasunrise.jpg>
...
</cocktail>
NMTOKEN /
NMTOKENS
Zeichenkette, die nur aus Buchstaben, Ziffern, Punkt (.), Bindestrich (-),
Unterstrich (_) und dem Doppelpunkt (:) bestehen darf (Name Token).
<!ATTLIST zutat menge NMTOKEN #REQUIRED>
<zutat menge=1.5>
Oliven
</zutat>
45
5.3 Attribute
Typ
(Wert1|Wert2|...)
Voreinstellung
Erluterung
#REQUIRED
#IMPLIED
wert
#FIXED wert
46
5.4
Entitten
Dekoration
Zitronenscheibe
Mixanleitung
Eiswrfel bis zum Rand in das Glas geben und mit Rum und Cola auffllen.
Als Barbesitzer rgern Sie sich natrlich ber die EU-Verordnung zur
Kennzeichnungspflicht in Lebensmitteln.5 Sie tippen sich die Finger
wund, weil bei jedem Ihrer Drinks eine Reihe von ellenlangen, fortwhrend gleichen Zusatzstoff-Listen angehngt werden muss.
Den XML-Entwicklern ist dieser Umstand nicht verborgen geblieben,
und so schufen sie Entitten.
Entitten sind Verweise auf Daten. Die Funktionsweise erinnert an Textbausteine Entittsnamen werden in einem XML-Satz oder innerhalb
einer DTD durch den Inhalt der Entitt ersetzt.
Bei verpackten Lebensmitteln werden Zusatzstoffe im Rahmen der Zutatenliste gekennzeichnet. Bei loser Ware muss ein Schild an oder neben dem Produkt auf
die Verwendung von Zusatzstoffen hinweisen. In Gaststtten und Einrichtungen
der Gemeinschaftsverpflegung mssen Zusatzstoffe in der Speisekarte, der Preisliste oder auf einem Aushang gekennzeichnet werden. Das kann auch in Form
von Funoten geschehen. Siehe auch http://www.verbraucher.org/ bzw.
http://www.zusatzstoffe-online.de/
47
5.5 Parameter-Entitten
5.5
Parameter-Entitten
Parameter-Entitten werden in der DTD definiert und gelten auch nur
innerhalb der DTD.
<!ENTITY % Entityname Entityinhalt>
In unserer bar.dtd knnen wir nun immer wieder auftretende Geschmacksrichtungen als Textbaustein verwenden:
<!ENTITY % leckerwerte
(fruchtig|s|trocken|spritzig|flach)>
<!ELEMENT cocktail (#PCDATA)>
<!ATTLIST cocktail geschmack %leckerwerte;>
! Beachten Sie die etwas gewhnungsbedrftige Notation mit dem Prozentzeichen (%) und dem Semikolion (;).
5.6
Generelle Entitten
Generelle Entitten sind fr den Einsatz innerhalb der XML-Elemente
gedacht, womit wir uns dem Problem mit der Kennzeichnungspflicht von
Zusatzstoffen nhern.
<!ENTITY Entityname Entityinhalt>
In unserer bar.dtd knnen wir wieder hufig wiederkehrende Textteile
deklarieren:
<zutat>
3cl Creme de Cacao braun mit &enummern;
</zutat>
48
Erluterung
Zeichenkette
SYSTEM URI
49
5.7 Notationen
5.7
Notationen
Gin
Zitronensaft
Zuckersirup
Sodawasser
Dekoration
Zitronenscheibe, Cocktailkirsche
Mixanleitung
Die Zutaten (ohne Sodawasser) mit Eiswrfeln im Shaker gut schtteln und
in ein Longdrinkglas auf einige Eiswrfel abseihen. Mit etwas Sodawasser
auffllen. Mit einer Zitronenscheibe und einer Cocktailkirsche garnieren.
Mit Notationen werden externen, nicht-parsbaren Entitten Hilfsanwendungen zugeordnet.
<!NOTATION Notationsname Hilfsanwendung>
In unserer bar.dtd definieren wir, dass das Programm graphicstudio.exe zu starten ist, sobald einem Cocktail ein Icon als Attribut
bergeben wird:
<cocktail icon=smiley>
Tom Collins
</cocktail>
Was passiert jedoch, wenn zur XML-Anwendung gar kein graphicstudio.exe installiert ist?6
6
Zumindest hatten bis zum Zeitpunkt des Erscheinens dieser Broschre weder MixMeister noch BarFachfrauen eine Windows-Version implantiert bekommen. Beide
Angestelltengruppen knnen zwar lcheln, werden aber partout nicht gelb, womit der
Smiley nicht darstellbar ist.
50
51
5.8
(b)
(c)
(d)
(b)
(c)
(d)
(e)
(f)
(b)
(c)
(d)
(e)
(f)
4. Entitten
(a)
(b)
(c)
(d)
Eingaben
lschen Aufgaben
lsen
Eingaben lschen
Aufgaben lsen
52
6 Unbekannte Rezepturen
6.1
Gin
Zitronensaft
Zuckersirup
Sodawasser
Dekoration
Zitronenscheibe, Cocktailkirsche
Mixanleitung
Die ersten drei Zutaten im Shaker inklusive Crushed Ice schtteln, dann in
den Tumbler abseihen. Mit Soda den Longdrink auffllen und mit Kirsche
und Zitronenscheibe dekorieren.
Mittlerweile ist unsere bar.xml wohlgeformt und mit Hilfe der
bar.dtd auch gltig. Alle XML-Elemente und Attribute sind damit
namentlich eindeutig definiert man spricht in diesem Fall vom Namensraum, den eine DTD bildet. Im Beispiel gehren alle Cocktails dem
Namensraum unserer Bar an, der bar.dtd.
Was geschieht nun, wenn keine DTD vorhanden ist? Was, wenn XMLElemente aus fremden Namensrumen, oder mehrere Namensrume
gleichzeitig benutzt werden sollen? Besonders problematisch wird es,
wenn sich dabei Elementnamen und Attribute berschneiden und ins Gehege kommen. Bei mehreren gleichnamigen Elementen, sind Konflikte
innerhalb der XML-Anwendung vorprogrammiert.
Beispiel 6.1 auf der Ein Beispiel: Zum Feierabend bestellt sich der letzte Gast bei unserem
nchsten Seite MixMeister einen Gin Fizz.
So richtig wach ist der Mann hinter dem Tresen nicht mehr. Wie war
der Cocktailname noch gleich? Gin Fizz oder Sodawasser? Und musste <zutat>-<name> nicht ein Attribut klassifizierung haben?
Welche Regelwerke sich hinter einem <cocktail>-<name> oder einem <zutat>-<name> verbergen, geht aus dieser XML-Datei nicht
hervor. Um es vorweg zu nehmen: Der Mixmeister serviert dem Gast
wahrscheinlich ein Glas Milch, weil ihm die passende DTD fehlt.
54
6 Unbekannte Rezepturen
6.1.1
Qualifizierte Namen
Als Antwort auf fehlende DTD-Angaben hat das W3C im XML-Standard
qualifizierte Namen (qualified names) eingefhrt. Mit Ihnen werden in
der XML-Datei die bisher bekannten Elemente um einen Namensraum
erweitert.
<Elementname xmlns:URI>
Das Attribut xmlns: steht dabei fr XML name space. Der URI bestimmt, auf welchen Namensraum sich das Element und alle darin enthaltenen Unter-Elemente beziehen. Eine hier genannte Adresse sie
muss nicht wirklich existieren dient nur als Namenskonvention und
ist quasi ein Ehren-Codex zwischen den Erzeugern der Daten und den
Programmierern einer XML-Anwendung, die an beide appelliert: Haltet
euch an die gleichen Regeln. Der URI steht fr den Namen des Regelwerkes.
Fr unser Beispiel formuliert der Gast seine Bestellung neu:
Mach mir einen Gin Fizz nach den Anleitungen von
http://www.bar.de/cocktail und verwende
Zutaten aus dem Fundus von
http://www.zutaten.de.
55
! An dieser Stelle sei nochmals auf die mgliche Nichtexistenz eines URI
hingewiesen. Es handelt sich nicht um eine Auflistung von externen
DTD-Adressen, weshalb das Namensraumkonzept bei der Validierung
auch komplett ignoriert wird.
6.1.2
Der name-Tag innerhalb einer zutat unterscheidet sich i.A. von dem in der Datenstruktur darberliegenden Cocktail-name.
56
6 Unbekannte Rezepturen
Auer Cocktail-Regelwerken kann man natrlich auch richtige Standards
einsetzen. Falls Sie HTML4.0-Tags in Ihrem XML-Dokument verwenden wollen, so gilt der offizielle Namespace des W3C:
<html xmlns:http://www.w3.org/TR/REC-html-40>
! Und auch hier noch einmal: Unter diesem URI finden Sie zwar keine DTD, Sie vereinbaren und akzeptieren jedoch stillschweigend, dass
es sich bei den unterhalb vom <html>-Tag befindlichen Elementen um
die bekannten <h1>, <p>, <hr> usw. handelt. Nach diesem Regelwerk
schreiben Sie HTML-Seiten und nach diesem Regelwerk verhlt sich
auch jeder Web-Browser.
Wenn Sie neue HTML-Tags erfinden, so wird diese kein Browser anzeigen (knnen) sondern ignorieren, weil sie nicht im W3C-Regelwerk
definiert sind.
6.1.3 Namensrume: Unser Fazit
Sicher haben Sie es bemerkt: Namensrume sind fr den persnlichen
Einsatz zu unprzise und eignen sich eher zur Realisierung von berregionalen Standards. Die Autoren haben brigens ein C22 gegrndet und
geben demnchst die Cocktail Meta Language (kurz CockML) heraus.
Fr berschaubarere Einsatzbereiche, wie beispielsweise Firmen-Intraund Extranets, eignen sich DTD-Anweisungen besser.
7 Auf Ex Anwendungsbeispiele
Irish Whiskey
Zitronensaft
Zuckersirup
Sodawasser
Dekoration
Zitronenscheibe, Cocktailkirsche
Mixanleitung
Die Zutaten ohne Sodawasser im Shaker gut schtteln und in ein Longdrinkglas auf einige Eiswrfel abseihen. Mit etwas Sodawasser auffllen. Mit
einer Zitronenscheibe und einer Cocktailkirsche garnieren.
Another party is over. . . sang vor mehr als zwanzig Jahren Freddy
Mercury in seinem Melancholy Blues, und er hatte wie so hufig Recht.
Auch unsere Cocktailparty neigt sich langsam seinem Ende entgegen und
wenn es noch eine offene Frage gibt,1 dann sicherlich die, wofr der
ganze bislang betriebene Aufwand denn gut gewesen sein soll.
Bislang haben wir eine praktische Umsetzung von XML-Daten kennengelernt, nmlich die auf Seite 26, wo wir mit Hilfe von Cascading Style
Sheets XML-Daten fr die Darstellung innerhalb eines WWW-Browsers
aufbereitet haben. Im folgenden Abschnitt machen wir etwas sehr hnliches: Wiederum ist unser Zielmedium ein WWW-Browser, doch diesmal
wird die Konvertierung durch ein PHP-Skript bereits auf dem Server vorgenommen (weshalb solche Lsungen auch Serverside genannt werden),
und der Browser erhlt bereits den fertigen HTML-Code.
Wofr das Ganze gut sein soll? Zum einen kann so die Darstellung unseres Dokuments sehr viel dynamischer werden. Denken wir an den DagobertDuck-Sparcocktail zurck, so stellen wir fest, dass die Mengenangabe
immer hinter der Substanz erscheint einfach aus dem Grund, weil diese Reihenfolge im XML-Dokument festgelegt ist, und wir durch Cascading Style Sheets keinen Einfluss darauf haben. Durch den Einsatz von
Serverside-Konstrukten bieten sich da ganz andere Mglichkeiten, wie
wir gleich noch feststellen werden.
Nicht vergessen sollten wir auch, dass es immer noch Anwender gibt,
die sich nicht von ihrem Netscape 4.0 trennen wollen, fr den wiederum
CSS gnzlich unbekannt sind.
1
Wahrscheinlich gibt es jede Menge, aber wir werden nur noch die eine beantworten.
58
7.1
7 Auf Ex Anwendungsbeispiele
Abbildung 7.1 auf der Das PHP-Skript erzeugt damit serverseitig HTML-Code, der von jedem
nchsten Seite Browser angezeigt werden kann.
7.2
59
60
7 Auf Ex Anwendungsbeispiele
Um dieses Kapitel nicht ausufern zu lassen, haben wir darberhinaus den
! Java-Quellcode auf die ntigsten Anweisungen komprimiert. Sie sollten daher zumindest rudimentre Java-Kenntnisse besitzen um das folgende Beispiel zu verstehen. Das komplette nicht weiter kommentierte
Programm-Listing finden Sie im Anhang B.3.
7.2.2 Wie sieht die Java-Klasse aus?
In einem ersten Schritt mssen die oben aufgefhrten Pakete in eine eigene Klasse, in unserem Beispiel BarListe.java, eingebunden werden. Barliste selbst ist wiederum eine Ableitung der Standardklasse
DefaultHandler.
import
import
import
import
javax.xml.parsers.*;
org.xml.sax.*;
org.xml.sax.helpers.*;
java.io.*;
Innerhalb unserer Klasse knnen nun die geerbten Methoden startDocument, startElement, characters, endElement und
endDocument berschrieben werden, die fr die Umsetzung des XMLCodes verantwortlich sind. Das Verfahren gestaltet sich dabei wie folgt:
Durch die Instanzierung unserer Klasse wird automatisch ein Parser gestartet, der als Argument den Namen unseres XML-Dokuments bernimmt.
61
...
public void startElement(String nsu, String ln,
String qn, Attributes attr) {
elementname = qn;
if (elementname.equals("name")) {
System.out.println("\\section{");
attrib_cocktail = attr.getValue("klassifizierung");
}
...
}
62
7 Auf Ex Anwendungsbeispiele
...
public void characters(char[] cont, int start,
int len) {
data = new String(cont, start, len).trim();
if (elementname.equals("name")) {
System.out.println(data);
}
...
}
Abbildung 7.2: Aus XML wird mit Hilfe von Java ein echtes Rezeptbuch.
64
Anhang B
Programm-Listings
10
15
20
25
30
35
66
Anhang B Programm-Listings
5
<head>
<title>Die XML-Cocktailbar</title>
10
15
20
25
30
35
<style type="text/css">
<!-a, a:link, a:visited, a:active, a:focus
{
color : #6E749F;
background : transparent;
text-decoration : none;
font-weight : bold;
}
a:hover
{
color : #6E749F;
background : transparent;
text-decoration : none;
font-weight : bold;
}
body
{
margin : 0px 0px 0px 0px;
background : #FFFFFF;
font : 10pt Verdana, Geneva, Arial, Helvetica, sans-serif;
}
hr
{
color : #000000;
background : transparent;
width : 100%;
height : 1px;
40
}
45
span.description
{
background : transparent;
color : #000000;
background-attachment : scroll;
line-height : 150%;
}
50
span.header
{
background : transparent;
67
color : #6E749F;
font : bold 13pt Tahoma, Verdana, Geneva, Arial,
Helvetica, sans-serif;
letter-spacing : 1px;
55
}
60
65
span.small
{
background : transparent;
color : #000000;
font : 8pt Tahoma, Verdana, Geneva, Arial, Helvetica, sans-serif;
}
td
{
background : transparent;
font : 10pt Verdana, Geneva, Arial, Helvetica, sans-serif;
70
}
75
td.content
{
padding : 20px 20px 20px 20px;
background : #FFFFFF;
color : #000000;
vertical-align : top;
}
80
-->
</style>
</head>
85
<body>
<form action="<?php echo $PHP_SELF; ?>" method="post">
90
95
100
105
<span class="description">
Eine PHP-Beispielanwendung, welche die <b>bar.xml</b> in
HTML-Code transferiert, so dass sie von
jedem Browser angezeigt werden kann.
</span>
<br><br>
<table border="0" cellspacing="2" cellpadding="2">
<tr>
68
110
Anhang B Programm-Listings
<td><b>Search:</b></td>
<td><input type="text" name="term" value="<?php echo $term; ?>"
size="30" maxlength="30"></td>
<td><input type="submit" value="Suche"></td>
</tr>
</table>
115
<br><br>
120
125
130
135
140
145
150
155
160
165
170
175
180
?>
<td><?php echo $dekoration; ?></td>
<td width=30%><?php echo $mixanleitung; ?></td>
<td><?php echo "<IMG height=50 SRC="$foto">"; ?>
</td>
</tr>
185
190
<?php
}
?>
195
</table>
</td>
</tr>
</table>
200
</form>
</body>
</html>
69
70
Anhang B Programm-Listings
import
import
import
import
javax.xml.parsers.*;
org.xml.sax.*;
org.xml.sax.helpers.*;
java.io.*;
5
public class BarListe extends DefaultHandler{
private String elementname;
private String attrib_cocktail;
10
private
private
private
private
15
public void startDocument() throws SAXException{
System.out.println("\\documentclass[12pt]{article}");
System.out.println("\\usepackage[latin1]{inputenc}");
System.out.println("\\usepackage{german}");
System.out.println("\\begin{document}");
20
}
25
public void startElement(String nsu, String ln,
String qn, Attributes attr)
throws SAXException{
30
elementname=qn;
if (elementname.equals("name")) {
System.out.print("\n\\section*{");
}
35
if (elementname.equals("mixanleitung")) {
System.out.println("\n\\subsection*{Mixanleitung}");
}
40
if (elementname.equals("dekoration")) {
System.out.println("\\end{tabular}");
zutatflag = false;
System.out.println("\n\\subsection*{Dekoration}");
}
45
if(elementname.equals("zutat")) {
menge = "";
substanz = "";
50
if (!zutatflag) {
System.out.println("\n\\begin{tabular}{ll}");
zutatflag = true;
}
71
70
75
if (elementname.equals("substanz")) {
substanz = new String(cont, start, len);
}
if (elementname.equals("menge")) {
menge = new String(cont, start, len);
System.out.println("\\textsl{" + menge +"}: & " +
substanz + "\\\\");
}
80
}
85
public void endElement(String nsu, String ln, String qn)
throws SAXException{
elementname=qn;
90
95
if (elementname.equals("name")) {
normaldata = normaldata.trim();
System.out.println(normaldata +
" (" + attrib_cocktail + ")}");
}
if ((elementname.equals("dekoration")) ||
(elementname.equals("mixanleitung"))) {
normaldata = normaldata.trim();
100
if (normaldata.equals("")) {
System.out.println("---");
} else {
System.out.println(normaldata);
}
105
}
if (elementname.equals("cocktail")) {
72
Anhang B Programm-Listings
System.out.println("\n\\newpage");
110
}
}
115
120
public void warning(SAXException spex){
System.err.println("Warnung!!!!!!");
spex.printStackTrace(System.err);
}
125
public void error(SAXException spex){
System.err.println("Fehler!!!!!!");
spex.printStackTrace(System.err);
}
130
public void fatalError(SAXException spex){
System.err.println(\"Abbruch!!!!!!");
spex.printStackTrace(System.err);
}
135
140
try{
145
150
155
}
}
Anhang I Index
#FIXED, 45
#IMPLIED, 45
#PCDATA, 36, 40
#REQUIRED, 45
ANY, 36, 40
ATTLIST, 43
Attribut, 13, 14, 16
Apostrophe, 14
Attributname, 43
Attributtyp, 43
Elementname, 43
Quotes, 14
CDATA, 16, 44
Cocktail
Alexander, 31
Angels Face, 9
B52, 19
Cuba Libre, 46
Dagobert Duck, 26
Gin Fizz, 53
Julia, 36
Manhattan, 1
Mike Collins, 57
Pangalaktischer Donnergurgler, 40
Tequila Sunrise, 41
Tom Collins, 49
Troubleshooter, 3
Cocktail Meta Language, 56
CSS, 4, 25
DOCTYPE, 32
DTD, 29
Attribute, 41
Elemente, 36
Entitten, 46
Externe Deklaration, 33
Generelle Entitten, 46
Interne Deklaration, 32
Notationen, 49
Parameter Entitten, 46
ELEMENT, 36
Element, 10, 11
Abhngigkeiten, 36
Elementauswahl, 39
Elementfolge, 38
Elementinhalt, 36
Elementmodell, 37
Elementname, 36
Hufigkeitsangaben, 37
leer, 12, 13
EMPTY, 36
encoding, 28
Entitt, 10, 1316, 46
als Textbaustein, 46
Entityinhalt, 47
Entityname, 47
ENTITIES, 44
ENTITY, 44, 47
Hufigkeitsangaben
fr Elemente
?*+, 38
HTML, 5, 19, 25, 35
ID, 44
Java, 21
Kommentare, 29
Leerraum, 13
Marke, 12, 16
Markup, 4, 10
Language, 4
Namen
qualifizierte, 54
Namensraum, 17
unserer, 53
NDATA, 48, 49
NMTOKEN, 44
NMTOKENS, 44
NOTATION, 49
Notationen
Hilfsanwendung, 49
Notationsname, 49
74
Parser, 16, 19, 23
Gltigkeit, 20
Wohlgeformtheit, 20
PHP, 21
Prolog, 10, 23, 24
PUBLIC, 34, 35, 48
Regelwerk, 32
SGML, 5
Anwendung, 5, 12
standalone, 28, 32
SYSTEM, 34, 48, 49
Tag, 4, 10, 12
Textbausteine
Entitten als, 46
UCS, 15, 16, 22
UTF, 22
Verarbeitungsanweisung, 24
Formatierung durch, 24
xml, 28
version, 28
Wurzelelement, 10, 11, 13, 24
XHTML, 5, 34, 35
XLink, 4
XML, 4
Dokument
Aufbau, 10
Sektion, 10
XML-Anwendungen
Java-Klassen, 59
phpxml-1.0, 58
Serverside, 28, 57
xmlint, 21
xmlns, 54, 56
XPath, 4
XSL, 4, 24, 25, 28
Index