Das XML Cocktailbuch

Embed Size (px)

DESCRIPTION

buch

Citation preview

  • B/016/0210

    Das XML-Cocktailbuch

    Universittsrechenzentrum

    Thomas FeuerstackJens Vieler

    Beratung und IT-Services

    FernUniversitt, Oktober 2002

  • 2

  • Inhaltsverzeichnis

    1 Aperitif 1

    1.1 Wie dieses Kapitel zu seinem Namen kam . . . . . . . . 1

    1.2 Wer sollte diese Broschre lesen? . . . . . . . . . . . . 2

    2 Bargeflster 3

    2.1 Aufgeschnappte Satzfragmente . . . . . . . . . . . . . . 3

    2.2 XML die Zutatenliste . . . . . . . . . . . . . . . . . 4

    2.3 Verwandtschaften: HTML, SGML, XHTML, . . . . . . . 5

    2.4 Aufgaben zur Selbstkontrolle . . . . . . . . . . . . . . . 7

    3 Was alles in den Shaker kommt 9

    3.1 Aufbau eines XML-Dokuments . . . . . . . . . . . . . 10

    3.2 Elementinhalte . . . . . . . . . . . . . . . . . . . . . . 11

    3.3 Marken in XML und HTML. . . . . . . . . . . . . . . . . 12

    3.4 Attribute . . . . . . . . . . . . . . . . . . . . . . . . . . 14

    3.5 Warum Character Data nicht einfach Text ist . . . . . . . 15

    3.6 Namen: nur Schall und Rauch? . . . . . . . . . . . . . . 16

    3.7 Aufgaben zur Selbstkontrolle . . . . . . . . . . . . . . . 18

    4 Gerhrt und geschttelt 19

    4.1 Aus Zutaten wird ein Drink, oder: Der Parser . . . . . . 19

    4.2 oder 0000000 00000000 00000000 11000100? . . . . . 22

    4.3 XML arbeitet . . . . . . . . . . . . . . . . . . . . . . . 23

    4.4 Kommentare . . . . . . . . . . . . . . . . . . . . . . . . 29

    4.5 Aufgaben zur Selbstkontrolle . . . . . . . . . . . . . . . 30

  • iv Inhaltsverzeichnis

    5 Was alles in den Shaker darf 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 Aufgaben zur Selbstkontrolle . . . . . . . . . . . . . . . 51

    6 Unbekannte Rezepturen 53

    6.1 Namensrume oder: Der Ehren-Codex der Barmixer . . 53

    7 Auf Ex Anwendungsbeispiele 57

    7.1 Serverside xml2html mit PHP . . . . . . . . . . . . . . 58

    7.2 xml2tex mit Java . . . . . . . . . . . . . . . . . . . . . 58

    A Auflsung aller Aufgaben 63

    B Programm-Listings 65

    B.1 xml2html mit XSL . . . . . . . . . . . . . . . . . . . . 65

    B.2 Serverside xml2html mit PHP . . . . . . . . . . . . . . 66

    B.3 xml2tex mit Java . . . . . . . . . . . . . . . . . . . . . 70

    I Index 73

  • 1 Aperitif

    Manhattan (Aperitif)1dash : Angostura Bitter4cl : Canadian Whisky2cl : Vermouth Rosso

    DekorationCocktailkirsche

    MixanleitungAlle Zutaten im Mixglas mit viel Eis verrhren. Danach in eine gut gekhlteCocktailschale abseihen und mit der Cocktailkirsche garnieren.

    1.1 Wie dieses Kapitel zu seinem Namen kam

    ist eigentlich noch die einfachste der zu diesem Zeitpunkt zu beantwor-tenden Fragen. Eine Broschre die den Namen Das XML-Cocktailbuchtrgt und sich damit in doppelter Hinsicht mit hochgeistigen Genssenbeschftigt kann folgerichtig nur mit einem Aperitif beginnen.

    Die Frage msste daher eigentlich lauten Wie diese Broschre zu ihremNamen kam und eine Antwort darauf drfte ungleich schwerer zu ge-ben sein. Bekanntermassen lsst sich der Funke der Inspiration, soferner denn erstmal gezndet hat, schwerlich auf seinen Auslser zurckfh-ren eines Morgens wacht man auf und wei mit Sicherheit, dass mandemnchst ein XML-Cocktailbuch schreiben wird.1

    Fr den Fall, dass Sie zu dem Menschenschlag gehren, der immer allesganz genau wissen muss, knnen Sie sich eventuell aus den folgendenAnhaltspunkten etwas zusammenbasteln.

    Wer uns (in diesem Fall die Autoren) kennt wei, dass uns die Er-stellung einer rein technisch orientierten Broschre viel zu drgeist.

    Ganz nebenbei existieren fr unseren Geschmack bereits viel zuviele XML-Einfhrungen, XML-HowTos, XML fr Dummies undwas der Markt traditionell sonst noch fr den/die vermeintlich Un-bedarfte(n) hergibt.

    1 Oder haben Sie jemals eine rationale Begrndung fr die Entstehung von Beethovens9. Sinfonie gehrt?

  • 2 1 Aperitif

    Wie bei jedem Rezeptbuch soll der Inhalt natrlich Geschmackauf mehr machen; Sie sollten daher tunlichst daran gehen, die be-schriebenen Inhalte selbst auszuprobieren.

    Last not least, fr die konomisch denkenden LeserInnen: SollteIhnen der Inhalt dieser Broschre nicht zusagen, so knnen Siewenigstens noch die abgedruckten Rezepte verwerten die An-schaffung hat sich also auf alle Flle gelohnt.

    1.2 Wer sollte diese Broschre lesen?

    Prinzipiell alle, die schon immer mal wissen wollten, was es denn defacto mit der neuen(?) Wunderwaffe XML so auf sich hat. Sollten Siedarberhinaus noch ein paar nette Ideen fr Ihre nchste Gartenpartysuchen, so haben Sie gewissermaen in einem Abwasch die Gelegenheit,das Angenehme mit dem Ntzlichen zu verbinden.

    Fans von Hochglanzwerbematerial werden dagegen eher nicht auf ihreKosten kommen. Zum einen gestatten wir uns auf den kommenden Sei-ten auch durchaus kritische Anmerkungen zu XML, zweitens knnen wiruns die umfeldspezifischen Schlagwrter meist selbst nicht merken, und last not least wrde eine Reproduktion dieser Broschre auf Hoch-glanz unseren mageren Universittshaushalt bei weitem bersteigen.

    In diesem Sinne, der Manhattan ist angerichtet Prost!

  • 2 Bargeflster

    Troubleshooter (Longdrink)4cl : Asbach Uralt1 : Limette1EL Rohrzucker, braun1/2 Zitrone

    Fanta Pink GrapefruitCrushed Ice

    DekorationZwei Strohhalme in das Glas lehnen.

    MixanleitungDie Limette in Achtel schneiden und in einem Longdrinkglas, beispielsweisemit Hilfe eines Caipirinha-Stels, zerstoen.Den Rohrzucker und den Zitronensaft zugeben und das Glas zu knapp 3/4 mitdem gestoenen Eis auffllen. Mit Asbach Uralt und Pink Grapefruit bis zumRand auffllen.

    2.1 Aufgeschnappte Satzfragmente

    Je nach baulicher Beschaffenheit der von Ihnen gewhlten Bar und meis-tens auch abhngig von dem Umstand, ob Sie allein oder in Begleitunggekommen sind, ist es beinahe unvermeidlich, dass Sie an den Gespr-chen 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 Ha-generin ihrer Begleitung, dass ihr Schwager (?) seinen diesjhrigen Ur-laub irgendwo auf dem Balkan in Reykjavik verbracht habe.1In Bezug auf XML sind die im Umlauf befindlichen Gerchte kaum we-niger abenteuerlich. Aussagen die von XML als neuer Internetspracheknden, hufig gekoppelt mit dem Zusatz, dass es mittlerweile unntigist, HTML zu lernen, sind dabei die eher harmloseren Vertreter ihrer Art.

    Daneben finden sich auch gern Zitate, die von der beinahe grenzenlo-sen Formatierbarkeit eigener Dokumente berichten, bis hin zu der Tat-sache, dass auch das leidige Austauschen verschiedenster Dokumentfor-mate durch XML endlich das ersehnte positive Ende gefunden hat.

    1 Zu ihrer Ehrenrettung sei gesagt, dass der schwgerliche Urlaubsort spter dann dochglasweise Stck fr Stck weiter nach Norden verlegt wurde.

  • 4 2 Bargeflster

    Als Fazit lsst sich feststellen, dass ohne XML zuknftig wohl nichtsmehr geht, oder plakativer:

    XML ist die Lsung fr alle Probleme berhaupt.Erstaunlich, nicht wahr? Denn als Kunde einer konsumorientierten Um-welt sollten Sie eigentlich genug Erfahrung gesammelt haben um zuwissen, dass bei extrem angepriesenen Super-Angeboten der Pferdefuschon irgendwo versteckt sein wird. Mit knapp zwanzigjhriger Berufs-erfahrung knnen wir zudem beisteuern, dass wir in jedem dieser Jahremindestens eine Lsung fr alle Probleme haben kommen (und auchwieder gehen) sehen.Deshalb erstmal keine Panik, gemeinsam werden wir den Cocktail schonschtteln. Nippen wir also nochmal am Troubleshooter und raisonierendabei: Was ist nun dran an/drin im XML?

    2.2 XML die Zutatenliste

    Schaut man sich das Konglomerat XML etwas genauer an, so wird manschnell feststellen, dass das Rad bei weitem nicht neu erfunden wurde,im Gegenteil: das meiste wird Ihnen wahrscheinlich ziemlich bekanntvorkommen. Konkret ausgefhrt bedeutet dies:

    Die Abkrzung XML steht fr EXtensible Markup Language, alsoauf Deutsch: erweiterbare Auszeichnungssprache.

    Durch XML sollen ASCII-, also textzeichenbasierte Dokumente,mit einer Struktur versehen werden. Dies geschieht (Stichwort:Markup Language) durch Auszeichnungen in Form von Start- undEnde-Tags und sollte bereits jetzt zu Deja-vu-Effekten fhren.Erstes Beispiel: Wir nehmen denTroubleshootergerhrt und nicht geschttelt.

    XML ist eine Meta-Auszeichnungssprache, ber die Elemente an-Kapitel 2.3 auf dernchsten Seite derer Auszeichnungssprachen definiert werden knnen. Hierzu

    werden die bentigten Elementnamen, deren Inhaltsstruktur, Attri-bute, etc. festgelegt und knnen darberhinaus wahlweise in einerRegeldatei gespeichert werden.

    Die Darstellung, Verarbeitung und Verknpfung von Daten gehrt! dagegen nicht zur Aufgabe von XML und ist damit auch nichtInhalt dieser Broschre!

    Entsprechende Umsetzungen werden durch Co-Standards, die un-mittelbar auf XML aufbauen, wie XSL, XPath, XLink oder imsimpelsten Fall CSS realisiert.

    Strukturierung und Auszeichnung von Daten ist beileibe nichtsNeues. Im Gegensatz zu proprietren Lsungen, beispielsweiseMicrosofts Word-Format oder Pagemaker, ist XML ein offener,

  • 2.3 Verwandtschaften: HTML, SGML, XHTML, . . . 5

    gut dokumentierter Standard, der von jedem eingesehen werdenkann.

    Fazit: XML ist daher gut fr einen Datenaustausch geeignet was! aber auf keinen Fall damit gleichbedeutend ist, dass fr diesenZweck auch geeignete Werkzeuge oder Anwendungen existieren!

    2.3 Verwandtschaften: HTML, SGML, XHTML, . . .

    Eines der am weitest verbreitetsten Vorurteile besagt, XML wre derletztendliche Nachfolger von HTML und wrde dieses in naher Zukunftkonsequenterweise ersetzen. Was ist davon zu halten?

    Der Blick auf die Verwandschaftsverhltnisse zeigt, dass HTML einespeziell fr das WWW konzipierte Anwendung von SGML2 ist, das heit,es wurde auf Grundlage der fr SGML gltigen Auszeichnungsregelndefiniert in Analogie dazu knnen Sie auch von Ihren spter erzeugtenXML-Dokumenten als Anwendungen sprechen.

    Im Gegensatz dazu ist XML hingegen eine Seiten-(Weiter-?)Entwicklungvon SGML und zu dieser voll kompatibel. Ein Vergleich zwischen XMLund HTML drfte daher ausgehen wie die klassische Vorlage mit denpfeln und Birnen.Wenn also etwas mit HTML verglichen werden kann, so muss dies aufder Ebene der Anwendungen geschehen. Eine Anwendung die sich da-fr anbieten wrde, also eine von XML, ist beispielsweise XHTML Abbildung 2.1 zeigt dies noch einmal bersichtlicher.

    Abbildung 2.1: XML und seine Verwandtschaftsgrade.

    In Analogie dazu muss sich XML also mit SGML messen. Prinzipiellsind sich beide Sprachen sehr hnlich, jedoch sind die Mglichkeiten vonXML bewusst eingeschrnkt worden ohne dabei allerdings wesentlicheVorteile zu verlieren; zumindest sagt man so. XML ist durch diese Ma-nahme robuster als SGML; darberhinaus sind Programme zur Verar-beitung von XML-Dokumenten, beziehungsweise XML-Anwendungen,einfacher zu erstellen.

    2 SGML = Standard Generalized Markup Language

  • 6 2 Bargeflster

    Dazu noch eine Bemerkung am Rande: Gerade dieser letzte Punkt sorgtunter XML-Autoren hufig fr Unmut. Prinzipiell soll es ja der Com-puter sein, der die Arbeit des Anwenders erleichtert. Bei der Erstel-lung von XML-Dokumenten hat jedoch, aufgrund der im Vergleich zuSGML eingeschrnkten XML-Strukturen, in jedem Fall der Autor mehr(Schreib-)Arbeit zu leisten.

  • 2.4 Aufgaben zur Selbstkontrolle 7

    2.4 Aufgaben zur Selbstkontrolle

    Versuchen Sie, mglichst ohne Zuhilfenahme der Unterlagen, die folgen-den Fragen zu beantworten, bzw. die Stze zu vervollstndigen:

    1. XML ist die Abkrzung fr:

    (a) Standard Generalized Markup Language(b) Extensible Markup Language(c) Hypertext Markup Language(d) nichts von allem

    2. Welche der folgenden Aufgaben wird nicht durch XML gelst:

    (a) Strukturierung von Datenmengen(b) Auszeichnung von Dokumenten(c) Formatierung von Dokumenten(d) Vorbereitung von Dokumenten zum Austausch zwischen

    verschiedensten Anwendungen

    3. Welche der folgenden Aussagen ist richtig:

    (a) XML ist eine Erweiterung von HTML(b) XML ist eine Anwendung von XHTML(c) XML ist flexibler als SGML(d) XML ist die pragmatische Variante von XHTML(e) Nichts davon ist richtig

    Eingaben lschen Aufgaben lsen

  • 8 2 Bargeflster

  • 3 Was alles in den Shaker kommt

    Angels Face (Cocktail)1cl : Apricot Brandy1cl : Calvados3cl Gordons Dry Gin

    Eiswrfel

    MixanleitungIn den Shaker einige Eiswrfel geben und den Gin, Calvados und Brandydazu. Kurz schtteln und in ein Cocktailglas abseihen. Schmeckt ganz sanft verleiht aber nach ein paar Glsern Flgel.

    Farben und ihre Bedeutung

    Bis auf wenige Ausnahmen ist ein Cocktail eigentlich immer eine sehrfarbenfrohe Angelegenheit. Dies liegt nicht nur daran, dass sich das WortCocktail mit Hahnenschwanz der sich ebenfalls hufig stark kolo-riert darstellt bersetzen lsst: sptestens nach zwei bis drei Glsernwird auch die eigene Umgebung merklich bunter.

    Aus diesem Grund, und nicht zuletzt wegen der besseren bersichtlich-keit, haben wir versucht, das Prinzip Farbe in diese Broschre zu in-tegrieren. Wenn Sie daher im Folgenden auf farblich unterlegte Begriffestoen, so bedeutet dies im Einzelnen:

    Blau : kennzeichnet Marken, Attribute, Anweisungen, etc. die sich imWurzelelementbereich eines XML-Dokuments befinden.

    Grn : hat prinzipiell die gleiche Bedeutung wie Blau fr den Prolog ei-nes Dokuments.

    Orange : ist zu behandeln wie Blau und Grn, die betroffenen Elemente be-finden sich jedoch im Bereich Diverses. Das Rtsel um die Be-griffe Wurzelelementbereich, Prolog und Diverses wird direkt imfolgenden Kapitel aufgelst.

    Rot : hat dafr generell zwei Bedeutungen. Zu einen haben wir damitfehlerhafte Anweisungen oder Befehle markiert. In der PDF-Versi-on dieser Broschre sind die restlichen rot markierten Textstellen,zum Beispiel das Inhaltsverzeichnis, anklickbar. Wir hoffen, dassaus dem jeweiligen Umfeld ersichtlich ist, ob es sich um einenFehler oder eine anklickbare Stelle handelt.

  • 10 3 Was alles in den Shaker kommt

    Magenta : ist nicht nur fr die Deutsche Telekom reserviert. In dieser Far-be hinterlegte Textstellen knnen ebenfalls angeklickt werden undfhren direkt zu externen Web-Adressen oder Download-Berei-chen.

    Die Leidtragenden dieses Verfahrens sind wahrscheinlich diejenigen, diedieses Skript monochrome gedruckt ber den Dispatch bestellt haben,anstatt es farbig und umsonst aus der Leseecke zu ziehen. Nichtsdesto-trotz haben wir uns bemht,1 die aus einer Schwarzweidarstellung be-dingten Benachteiligungen so gering, wie mglich zu halten.

    3.1 Aufbau eines XML-Dokuments

    Der rein formale Aufbau eines XML-Dokuments lsst sich wohl amEinfachsten anhand eines Beispiels verdeutlichen schauen wir daherBeispiel 3.1 auf der

    nchsten Seite den Engeln ins Gesicht und uns den Angels Face in XML-Notation an.

    Die generelle Struktur eines XML-Dokuments unterteilt sich in die dreiSektionen Prolog, Wurzelelementbereich und Diverses.

    Innerhalb jeder Sektion knnen Markups, im Allgemeinen Start- undEnde-Tags sowie Entitten, als auch Character Data enthalten sein. Be-vor es deshalb weitergeht, sollten wir sicherheitshalber noch detaillierterauf die oben vorgestellten und fr Sie wahrscheinlich neuen Begriffe ein-gehen.

    Markups : Wie Ihnen vielleicht schon aufgefallen ist, werden Auszeichnun-gen in XML durch das sogenannte Markup-Prinzip realisiert. Diesbedeutet, dass der auszuzeichnende Text jeweils durch eine ff-nende und schlieende Marke umklammert ist.

    Anstelle von Marke wird auch hufig der Begriff Tag verwen-det. Der Dokumentbereich von einer ffnenden bis hin zur schlies-senden Marke wird als Element bezeichnet.

    Entitt : Vorsichtig ausgedrckt bernimmt eine Entitt (oder Entity) dieFunktion eines Textbausteins, d.h. die im Dokument vorhandeneZeichenkette wird durch einen Text ersetzt, der ansonsten nichtoder nur umstndlich dargestellt werden knnte.

    Da der obere Satz immer noch sehr kompliziert klingt, hier einBeispiel: Das bekannte Kaufmanns-Und (&), wird sowohl inHTML als auch in XML durch die Entitt & dargestellt Kapitel 3.5 wird sich noch ausfhrlicher mit dem Thema Entittenbeschftigen.

    Character Data : Als Character Data wird nun folgerichtig alles bezeichnet, wasnicht in die Bereiche Markup oder Entitt gehrt also im Nor-malfall Text.

    1 Ein nachtrglicher Dank geht hiermit an unsere Deutsch-Lehrerinnen und -Lehrer.

  • 3.2 Elementinhalte 11

    Angels Face

    Apricot Brandy1cl

    Calvados1cl

    Gordons Dry Gin3cl

    Eiswrfel

    In den Shaker einige Eiswrfel geben...

    Beispiel 3.1: Angels Face diesmal ganz in XML

    3.2 Elementinhalte

    Im Gegensatz zu seiner Bedeutung beginnen wir bei der detailliertenAnalyse des XML-Cocktails nicht mit dem Prolog, sondern wenden unszuerst dem Bereich des Wurzelelements zu, da dieser den eigentlichenDatenbestand enthlt. Denjenigen unter Ihnen, die HTML nicht nur inZusammenhang mit Spezialeditoren kennen, werden durchaus hnlicheZge entdecken; der Ordnung halber gibt es aber auch hier nochmal denstrukturierten berblick.Wie oben bereits gezeigt, besteht ein Element normalerweise aus Cha-racter Data, welches durch Marken geklammert ist.

    Angels Face

    Natrlich knnen Elemente auch verschachtelt werden, wobei Sie jedoch

  • 12 3 Was alles in den Shaker kommt

    auf die genaue Verschachtelungsreihenfolge zu achten haben.

    Apricot Brandy1cl

    Eine besondere Bedeutung hat das leere Element, fr das in XML zweiDarstellungen existieren. Alternativ zu einem Element ohne CharacterData

    Eiswrfel

    wird hufig, wie in Beispiel 3.1, die Kurzschreibweise gewhlt.2

    Ebenfalls erlaubt, aber uerst unschn, ist die Mischung von Character! Data und weiteren Elementen, beispielsweise

    Beim Abmessen der Zutaten ist aufuerste Genauigkeit zu achten!Apricot Brandy1cl

    Da eine solche Vermixung zwar den Geschmack des Cocktails steigernkann, auf keinen Fall jedoch die Lesbarkeit Ihres XML-Dokuments, soll-ten Sie auf Konstrukte dieser Art besser verzichten.

    3.3 Marken in XML und HTML. . .

    Wie im letzten Kapitel gezeigt, orientiert sich das Handling der Markenoder Tags stark an HTML. Hre ich da irgendwo einen leisen Wider-spruch? Richtig sofern Sie diese Broschre aufmerksam verfolgt habenwissen Sie bereits, dass es eigentlich umgekehrt ist.

    Da HTML eine Anwendung von SGML ist, welche wiederum als der l-Abbildung 2.1 auf Seite 5tere Bruder von XML angesehen werden kann, geben XML, bzw. SGMLdie Regeln vor, woran sich die Anwendungen zu orientieren haben.

    Schauen wir nochmal genauer hin:

    Angels Face

    2 In HTML werden leere Elemente hufig durch eine einzelne, ffnende Marke (Bei-

    spiel: ) dargestellt. Wir wir noch sehen werden, ist dies nach den Konventionenvon XML nicht gestattet.

  • 3.3 Marken in XML und HTML. . . 13

    . . . Gemeinsamkeiten. . .

    Wie bereits mehrfach erwhnt, existiert zu jeder ffnenden Marke() ein schlieendes quivalent () mit fh-rendem /. Natrlich ist auch die Schachtelung von Marken erlaubt,wobei das bliche Last-in-First-Out-Prinzip gilt. Das heisst, dass diezuletzt geffnete Marke als erste wieder geschlossen werden muss; Mar-kenberschneidungen sind verboten.

    . . . und Unterschiede

    Da XML keine eigene Anwendung ist, sondern Sie ja selbst mit IhremDokument eine Anwendung auf XML definieren, sind Ihrer Kreativittbei der Auswahl Ihrer Markennamen kaum Grenzen gesetzt.3

    Unbedingt beachten, da von HTML wahrscheinlich eher ungewohnt, soll-ten Sie jedoch die folgenden Punkte:

    Jede XML-Marke muss ein schlieendes quivalent besitzen. Ein! Ausnahme bilden lediglich leere Elemente, die durch die Sonder-form dargestellt werden knnen.

    Gro-/Kleinschreibung wird strikt unterschieden. Ein Element

    Angels Face

    ist fehlerhaft, weil hier, wie bereits oben erwhnt, zu einem ff-nenden Tag kein schliessender existiert.

    Innerhalb eines XML-Dokuments existiert genau ein (!) Wurzel-element, welches smtliche weiteren Elemente enthlt und dessenName nicht mehrfach verwendet werden darf. In unserem BeispielBeispiel 3.1 auf Seite 11ist dies das Wurzelelement .

    Leerraum4 zwischen der ffnenden Klammer und dem Markenna-men ist verboten. Ein Leerraum vor dem abschlieenden > istdagegen erlaubt.

    < name>Angels Face

    3 Die wenigen festgelegten Namensbeschrnkungen werden ein paar Seiten spter auf-gefhrt, da sie auch Attribute und Entitten betreffen.

    4 Unter Leerraum werden die Zeichen verstanden, die bei der Auswertung des XML-Dokuments gewissermassen berlesen, bzw. auf ein Leerzeichen verkrzt werden. Da-zu gehren das Leerzeichen (Blank) selbst, der Tabulator, Zeilenwechsel (LF), sowieder Wagenrcklauf (CR).

  • 14 3 Was alles in den Shaker kommt

    3.4 Attribute

    Wie nicht anders zu erwarten, knnen natrlich auch XML-Marken durchAttribute erweitert bzw. variiert werden.

    Als Beispiel ergnzen wir unser Element durch das Attributklassifizierung, welches Werte wie Longdrink, Cocktail, Fizz,u.v.a.m. annehmen soll, damit jeder Cocktail einer bestimmten Spartezugeordnet werden kann.

    Angels Face

    ...

    Auch die Verwendung von Attributen ist bestimmten Regeln unterwor-fen, die wir Ihnen an dieser Stelle daher auch nicht vorenthalten wollen.

    Die Angabe von Attributen ist nur in einer ffnenden Marke zuls-sig.

    Werden mehrere Attribute gesetzt, so ist die Reihenfolge beliebig.

    Attribute mssen zwingend mit Werten versehen werden; Attribut-werte werden durch Quotes () oder Apostrophe () geklammert.

    Vor oder nach dem Gleichheitszeichen darf Leerraum stehen.

    Werden einem Attribut mehrere Werte zugeordnet, so sind diesemit Leerzeichen voneinander zu trennen.

    Quotes und Apostrophe drfen alternativ geschachtelt werden.

    Angels Face

    Die Verwendung des

  • 3.5 Warum Character Data nicht einfach Text ist 15

    Angels Face

    Angels Face

    Die mehrfache Angabe des gleichen Attributs ist nicht erlaubt.

    Angels Face

    3.5 Warum Character Data nicht einfach Text ist

    Wir haben bereits gelernt, dass ein Elementinhalt nicht einfach als Textsondern als Character Data bezeichnet wird. Hintergrund des Ganzen istnicht (nur), dass wir eine weitere Fachvokabel einfhren wollten; in derTat knnen einzelne Zeichen ein auf den ersten Blick etwas befremdli-ches Aussehen haben.

    Beginnen wollen wir dabei mit den Zeichen, die logischerweise maskiertwerden mssen weil sie generell innerhalb von XML fr andere Aufga-ben vorgesehen sind. Dies sind im Einzelnen:

    Zeichen eigentliche Bedeutung Ersatzdarstellung (Entitt)< Markenbeginn Markenende >& Entittsbeginn &" Attributwert " Attributwert '

    Die notorischen Problembereiter Umlaute mssen aufgrund der Tatsa-!che, dass in einem XML-Dokument stets eine Kodierung vorhanden ist,nicht gesondert maskiert werden warum das so ist, werden wir nochgenauer in Kapitel 4.2 auf Seite 22 sehen.

    Die oben gezeigte Ersatzdarstellung wird auch als Entitt bezeichnet undist nicht nur auf die bereits gezeigten Zeichen beschrnkt, sprich: Sieknnen selbst nach Lust und Laune eigene Entitten definieren.5

    Daneben kann jedes andere Zeichen als Entitt mit Dezimal-,Hexadezimal- oder UCS-4-Codierung dargestellt werden. Aus diesemKapitel 4.2 auf Seite 22Grund sind die beiden folgenden Elemente identisch:

    5 berraschenderweise bersetzt uns Langenscheidts Taschenwrterbuch Englisch denBegriff Entity mit Wesen(heit), Dasein, bzw. juristische Person ;-)

  • 16 3 Was alles in den Shaker kommt

    Angels FaceAngel's Face

    Lngere oder komplexereSonderzeichenpassagen knnen mit Hilfe desCDATA-Abschnitts eleganter konstruiert werden, auch wenn dessen Be-nutzung anfnglich etwas kryptisch erscheint.

    ...

    In den Shaker 200ml, gibts bei Schluckspecht & Sohn)]]>einige Eiswrfel geben und den Gin, Calvados und Brandydazu....

    Die Funktionsweise von CDATA ist dabei eigentlich recht simpel: AlleZeichen zwischen werden ohne Interpretations-versuch berlesen Sie sollten sich ganz nebenbei gesprochen bereitsdie Frage beantworten knnen, warum wohl die Verwendung der Zei-chenfolge ]]> innerhalb eines CDATA-Abschnitts verboten ist.

    Vielleicht sind Sie im letzten Absatz ber den Begriff Interpretations-versuch gestolpert und fragen sich nun, wer denn eigentlich Ihr XML-Dokument irgendwann mal interpretiert.

    Belassen wir es hier noch mit der Antwort: Der Parser. Die genaueFunktion eines XML-Parsers erfolgt dann in Kapitel 4.

    3.6 Namen: nur Schall und Rauch?

    Aus dem Kapitel Marken in XML und HTML wissen Sie bereits, dassSie die Namen fr Marken relativ frei vergeben knnen, dies gilt unterKapitel 3.3 auf Seite 12anderem auch fr die Benennung von Attributen und Entitten.

    Die Verwendung des Wrtchens relativ weist an dieser Stelle schondarauf hin, dass dieser Freiheit irgendwo auch Grenzen gesetzt sind. FrMarken, Attribute und Entitten sind diese Grenzen an den folgendenStellen erreicht:

    Das erste Zeichen eines Namens muss ein Buchstabe aus dem! Unicode-Zeichensatz (UCS), ein Unterstrich (_) oder ein Doppel-punkt (:) sein.Ab dem zweiten Zeichen knnen zustzlich Ziffern, der Binde-strich (-) oder ein Punkt (.) verwendet werden. Kaum zu glauben,aber wahr: das Konstrukt

    Cocktailkirsche

  • 3.6 Namen: nur Schall und Rauch? 17

    ist in XML ein korrekt benanntes Element.

    Vorsicht bei der Verwendung des Doppelpunktes! Dieser wird auchin Zusammenhang mit Namensrumen benutzt, was gelegentlichKapitel 6.1 auf Seite 53zu Konflikten fhrt.

    Die Zeichenfolge XML ist in jeder Form der Gro-/Kleinschrei-bung fr das W3Consortium reserviert und darf daher nicht zu Be-ginn eines Namens verwendet werden. Nicht erlaubt sind daherNamen wie XMLBar, xMLCocktail, XmlShaker, . . .

  • 18 3 Was alles in den Shaker kommt

    3.7 Aufgaben zur Selbstkontrolle

    Bewerten Sie, mglichst ohne Zuhilfenahme der Unterlagen, die Rich-tigkeit der folgenden XML-Konstrukte:

    1. Swimmingpool

    Korrekt Falsch

    2.

    Korrekt Falsch

    3. Cream of Coconut

    Korrekt Falsch

    4. Sahne

    Korrekt Falsch

    5. Alle Zutaten im Shaker mitEiswrfelnvermixen

    Korrekt Falsch

    6. EinCocktailschirmchen

    Korrekt Falsch

    7.

    Korrekt Falsch

    Eingaben lschen Aufgaben lsen

  • 4 Gerhrt und geschttelt

    B52 (Shooter)3cl : Tia Maria3cl : Baileys Irish Cream1/2cl Captain Morgan Jamaika Rum

    MixanleitungZuerst den Tia Maria, dann den Baileys in ein kleines, maximal 8cl fassendes(hitzebestndiges!) Glas geben. Dabei darauf achten, dass die Likre nichtallzusehr 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 Aus Zutaten wird ein Drink, oder: Der Parser

    Bislang haben wir uns ausschlielich mit dem Problem beschftigt, Da-ten XML-konform anzulegen. Dabei ist ein wenig die Frage vernachls-sigt worden, wer die strukturierten Daten letztendlich aufbereiten, wei-terverarbeiten, darstellen soll.

    Sofern Sie sich immer noch nicht und trotz dieser Broschre von demGedanken gelst haben, dass dies die Aufgabe eines WWW-Browsersist, liegen Sie leider total falsch. Die WWW-Sprache ist nach wievor HTML; denkbar wre hchstens ein Konverter, der Ihre XML-Datennach HTML berfhrt, welches dann wiederum. . .

    Denkbar ist natrlich auch ein Programm, welches Ihre XML-Daten inein Word-Format, eine Oracle-Datenbank oder gleich in PDF umsetzt.Damit befinden wir uns in Bereichen, die gnzlich auerhalb des WWWliegen und ein entscheidender Vorteil von XML ist letztendlich diemediale Unabhngigkeit.

    Natrlich gibt es bislang keine Applikation, welche alle oben aufgefhr-ten Wnsche direkt umsetzt. Es existieren jedoch Programme, welche dieFhigkeit besitzen, Ihr XML-Dokument zu lesen, die darin enthaltenenMarkups zu erkennen und nicht zuletzt die wiederum darin befindlichenDaten zu extrahieren. Diese Programme heien Parser.

    Um es noch einmal deutlich auszusprechen: Ein Parser ist nicht in der! Lage, und es gehrt auch nicht zu seinen Aufgaben, Ihre XML-Dokumen-te in irgendein anderes Format umzuwandeln oder fr den Bildschirm

  • 20 4 Gerhrt und geschttelt

    aufzubereiten! Dies ist im Normalfall die Aufgabe eines weiteren undeventuell selbst zu erstellenden Programms, welches in aller Regel einenParser als Komponente benutzt.

    4.1.1 Was tut dann ein Parser berhaupt?

    Da ein Parser offenbar nichts direkt Verwertbares erzeugt, drngt sichdiese Frage frmlich auf. Trotzdem nimmt Ihnen der Parser jedoch inForm von berprfungen bereits eine Menge Arbeit ab, die sich im We-sentlichen durch die zwei folgenden Begriffe beschreiben lsst:

    Wohlgeformtheit : (Original: Wellformated) Um das Prdikat wohlgeformt zu erhal-ten muss das XML-Dokument alle Regeln erfllen, die wir bislangbei der Verwendung von Marken, Attributen, Entitten, etc. ken-Kapitel 3.3, 3.4 und 3.6nengelernt haben.

    Gltigkeit : (Original: Validated) Ist das Dokument darberhinaus mit internenoder externen Regeln verknpft, so knnen einige Parser auch diefestgelegten Vorschriften prfen. Sofern dabei keine Fehler auftre-ten, heisst das Dokument gltig.

    Abbildung 4.1: Microsofts Internet Explorer besitzt einen eingebautenParser. . .

    Es versteht sich von selbst, dass XML-Dokumente, die fr eine externeWeiterverarbeitung vorgesehen sind, die beiden oben aufgefhrten Kri-terien nach Mglichkeit erfllen. Umgekehrt gilt das natrlich auch frDokumente, die Sie zur Weiterverarbeitung bernehmen.

    4.1.2 Und wo bekomme ich einen Parser her?

    Seit der Version 5 besitzt Microsofts Internet-Explorer einen eingebautenAbbildungen 4.1 und 4.2

  • 4.1 Aus Zutaten wird ein Drink, oder: Der Parser 21

    Abbildung 4.2: . . . der auch auf Wohlgeformtheit prft.

    Parser (MSXML), der in der Lage ist, die Struktur eines XML-Doku-ments im Browserfenster anzuzeigen und zustzlich die Wohlgeformtheitzu kontrollieren.

    Darberhinaus kann von Microsofts Homepage der kostenlose zeilenori-Abbildung 4.4 auf dernchsten Seite entierte Parser xmlint runtergeladen werden, der zustzlich auf Gl-

    tigkeit prfen kann.1

    Abbildung 4.3: Andere Browser (hier: Mozilla) sind bei weitem nicht sokomfortabel.

    Viele Programmiersprachen besitzen mittlerweile eingebaute Routinenoder Klassen, ber die ein interner Parser angesteuert wird. JAVA-Pro-grammierer sollten sich das Package javax.xml.parsers nher an-schauen, whrend fr PHP-Interessierte die Klasse phpxml interessantKapitel 7 auf Seite 57sein kann.

    1 Ganz nebenbei ist dieser Parser ist nur 32 KB gro.

  • 22 4 Gerhrt und geschttelt

    Abbildung 4.4: Der Parser mit dem wahrscheinlich besten Preis-/Leistungsverhltnis: xmlint

    4.2 oder 0000000 00000000 00000000 11000100?

    Im letzten Kapitel sind uns ganz nebenbei die ersten vom Parser bemn-gelten Fehler untergekommen. Fr all diejenigen, die dieses Skript frAbbildungen 4.2 und 4.4lau aus der Leseecke gezogen haben und sich daher mit der 72dpi-PDF-Version rumschlagen mssen, sei die entsprechende Fehlermeldung nocheinmal im Klartext dargestellt.

    Im Textinhalt wurde ein ungltiges Zeichen gefundenmaximal 8cl fassendes (hitzebest-------------------------------

    Genauer gesagt wurde der Fehler in Zeile 18 und Spalte 37 gefunden.Forschen wir in unserer Quelldatei an der angegebenen Position nach, sostoen wir auf ein .

    Der technische Hintergrund ist, man ahnt es bereits, ein komplexer undsoll daher an dieser Stelle nur verkrzt und wahrscheinlich eher popu-lrwissenschaftlich wiedergegeben werden.

    Generell erwartet der Parser seinen zu parsenden Text, also Ihr XML-Dokument, im Unicode Transformation Format, oder kurz: UTF. UTF istwiederum eine verkrzte Darstellung des Universal Character Set (UCS).ber UCS heit es wiederum auf der Unicode Home Page:

    Unicode provides a unique number for every character, nomatter what the platform, no matter what the program, nomatter what the language.

    Es geht also um die einheitliche und bergreifende Darstellung der ver-wendeten Zeichen. Was prinzipiell erstmal hervorragend klingt, ist in derPraxis hufig mit Nachteilen behaftet. Im Falle von UCS uert sich derPferdefu darin, dass zur Darstellung jedes Zeichens anstelle des klassi-schen Bytes gleich derer vier bentigt werden, was wiederum bedeutet,dass auch Ihre Dokumente um den Faktor 4 an Gre zunehmen.

  • 4.3 XML arbeitet 23

    Abhilfe schaffen hier die komprimierenden UTF-Formate, wobei unsjetzt weniger interessieren soll, wie da genau komprimiert wird,2 sonderneher, wie wir unser XML-Dokument in ein UTF-Format bekommen.

    Der einfachste Weg ist hufig der, an den am wenigsten gedacht wird.Tatschlich besitzen mittlerweile viele Editoren, unter anderem, seit Win-Abbildung 4.5dows 2000, das klassische Microsoft Notepad die Mglichkeit, direktin UTF zu speichern.

    Abbildung 4.5: Grundstzlich gilt: Sofern nicht anders angegeben, ver-langen Parser ein UTF-Format.

    Sofern Ihnen Ihr Lieblingseditor keinen UTF-Filter anbietet, knnen Siedie gewnschte Kodierung alternativ ber das encoding-Attribut imProlog Ihres Dokuments festlegen. Das folgende Beispiel demonstriertdiese Technik.

    B52...

    Die in diesem Beispiel verwendete Kodierung ISO-8859-1 enthlt denklassischen ASCII-Zeichensatz, sowie alle westeuropischen Sonderzei-chen also all die Zeichen, die in normalen Editoren verwendet wer-den.

    4.3 XML arbeitet

    Langsam aber sicher verlassen wir den Bereich der Erfassung und wen-den uns dem Problem zu, wie denn unsere Daten aufbereitet werden kn-nen.

    Wir erinnern uns: XML selbst beinhaltet lediglich die Mglichkeit, er-fasste Daten ber ein Markup zu strukturieren. Auch der Parser schafft

    2 Wer es wirklich ganz genau wissen will kann unter http://www.unicode.orgnachschauen.

  • 24 4 Gerhrt und geschttelt

    hier keine Abhilfe, da seine Aufgabe im Wesentlichen darin besteht, dieaufgebaute Struktur zu berprfen.

    Die letztendliche Aufbereitung des XML-Dokuments muss daher exter-nen Anwendungen vorbehalten bleiben, die logischerweise mit dem Do-kument verknpft werden mssen. Dies geschieht im Regelfall ber Ver-arbeitungsanweisungen.

    Verarbeitungsanweisungen werden normalerweise im Prolog des XML-Dokuments eingefgt, gelegentlich tauchen sie aber auch schon mal hin-ter dem Wurzelelement auf. Die Struktur einer Verarbeitungsanweisungist dabei ausgesprochen schlicht, sie hat die Form

    oder, um ein konkreteres Beispiel mit den Verarbeitungsanweisungenxml und xml-stylesheet zu zeigen:

    B52...

    Fr uns ist momentan noch nicht von Interesse, was alles in Verarbei-tungsanweisungen (im oberen Beispiel die bildschirmgerechte Aufbe-reitung ber XSL) untergebracht werden kann, wichtig ist jetzt erstmaldas Wie.

    Rein syntaktisch kommt es dabei lediglich auf die folgenden Punkte an:

    Zwischen dem ersten ? und dem Namen darf sich kein Leerzei-chen befinden, eine Verarbeitungsanweisung nicht in der Attributliste auftauchen.

    Rein syntaktisch betrachtet ist daher

    eine korrekte Verarbeitungsanweisung wer immer sie auch letztendlichumsetzen mag.

    4.3.1 Formatierung

    Verarbeitungsanweisungen werden hufig dazu benutzt, um aus XML-Dokumenten eine formatierte Ausgabe zu zaubern ganz nebenbei wird

  • 4.3 XML arbeitet 25

    diese Broschre dadurch um ein Kapitel ergnzt, mit dem sich wirklichetwas anfangen lsst.

    Durch die Verwendung von Verarbeitungsanweisungen existieren netter-weise gleich mehrere Mglichkeiten, aus XML-Anwendungen forma-tierte Ausgaben zu erzeugen.

    XSL : (= eXtensible Stylesheet Language) XSL ist gewissermaen eineeigene Programmiersprache, die nicht ganz einfach zu erlernenist. XSL ist kein Bestandteil von XML und damit auch nicht Inhaltdieser Broschre.

    CSS : (= Cascading StyleSheets) CSS waren ursprnglich als Format-vorlagen fr HTML gedacht, sie knnen jedoch auch direkt mitXML-Dokumenten verknpft werden. Cascading Stylesheets sindallgemein die simpelste Mglichkeit, XML-Anwendungen Formatzu verleihen.

    Halten Sie sich bitte nochmal deutlich vor Augen, dass die Formatierungvon Daten, weder durch CSS noch durch XSL, nicht einmal ansatzweiseBestandteil unseres Kernthemas XML ist. Nichtsdestotrotz knnen auchwir ein gewisse Neugier nicht verhehlen. Lassen Sie uns daher die graueTheorie ein wenig beiseite legen und dafr einen Kurzausflug in die Weltder Darstellung von XML-Dokumenten unternehmen.

  • 26 4 Gerhrt und geschttelt

    Exkurs: Aufbereitung durch CSS

    Auf den folgenden 1 1/2 Seiten wird demonstriert, wie Sie ein XML-Dokument mit Cascading Style Sheets verknpfen und in einem WWW-Browser darstellen knnen.

    Dagobert Duck (Spardrink)1Spritzer: Soda

    Leitungswasser

    MixanleitungDas Soda in ein Longdrinkglas geben, das Ganze mit Leitungswasser auffl-len.

    Der oben aufgefhrte Cocktail wird in XML-Notation in der Datei dd.xmlgespeichert.

    Dagobert Duck

    Soda1Spritzer

    Leitungswasser

    Das Soda in ein Longdrinkglas geben, das Ganze mitLeitungswasser auffllen.

    Das zugehrige Cascading Stylesheet (bar.css) kann wie folgt reali-siert werden.

  • 4.3 XML arbeitet 27

    cocktail { display: block;font-family: sans-serif;background-color: lightgreen;border: solid;

    }name { display: block;

    font-size: 18pt;color: blue;

    }zutat { 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, wel-che Formate wie angewandt werden.

    Die Datei dd.xml kann nun wie eine HTML-Datei in einem WWW-Browser (Internet Explorer ab Version 5, Netscape ab Version 6) geff-net werden. Das erzielte Ergebnis wird je nach den vorhandenen CSS-Fhigkeiten des verwendeten Browsers variieren, es drfte aber Abbil-dung 4.6 sehr nahe kommen.

    Abbildung 4.6: Die meisten moderneren Browser (hier: Mozilla) sind inder Lage, XML-Dokumente mit CSS-Anweisungen darzustellen.

    Ungleich eleganter wirkt das Ganze, wenn die Aufbereitung, anstatt durchstarre Cascading Style Sheets, via XSL vorgenommen wird. Allein durchden Austausch der entsprechenden Verarbeitungsanweisung

  • 28 4 Gerhrt und geschttelt

    ...

    wird ein Aussehen wie in Abbildung 4.7 erzielt.

    Abbildung 4.7: Der gleiche Cocktail, aber anders zubereitet.

    Die zugehrigen XSL-Verarbeitungsanweisungen sind im Vergleich zuCSS natrlich komplexer, Sie finden Sie trotzdem im Anhang B.1. Dar-berhinaus wollen wir nicht verheimlichen, dass XSL bislang nur durch! den Internet Explorer umgesetzt werden kann!

    Einen Ausweg aus diesen Browserabhngigkeiten bieten sogenannteServerside-Anwendungen wir werden am Ende dieser Broschre dar-Kapitel 7 auf Seite 57auf zurckkommen.

    Damit wollen wir unseren Ausflug beenden und zum ursprnglichenThema zurckkehren.

    4.3.2 Ganz speziell: Die xml-Verarbeitungsanweisung

    Eine Sonderrolle spielt die im Normalfall zuerst auftretende Verarbei-tungsanweisung mit dem Namen xml. Diese muss, falls vorhanden, dieerste aller Verarbeitungsanweisungen im Dokument sein weswegen siesich immer direkt in der ersten Zeile befindet. Zu beachten: Auch Kom-mentare drfen der xml-Verarbeitungsanweisung nicht vorangestelltwerden.

    Die xml-Verarbeitungsanweisung gilt auch als Pseudoanweisung, da ihrInhalt, im Gegensatz zu allen anderen Verarbeitungsanweisungen, direktvom Parser bercksichtigt wird.

    Prinzipiell drfen der xml-Verarbeitungsanweisung die folgenden dreiAttribute bergeben werden:

  • 4.4 Kommentare 29

    version : definiert die Versionsnummer der verwendeten XML-Version. Vor-einstellung: 1.0

    encoding : bekommt als Attributwert die verwendete Zeichenkodierung. Vor-einstellung: UTF-8

    standalone : beschreibt, ob das Regelwerk fr Marken, Attribute und Entittenim Dokument enthalten ist, oder ber eine externe Document TypeDefinition (DTD) geladen wird. Voreinstellung: no

    Die Attribute mssen in der oben angegebenen Reihenfolge aufgefhrt! werden! Eine xml-Verarbeitungsanweisung der Form

    wrde vom Parser aufgrund der falschen Reihenfolge als fehlerhaft re-klamiert.

    4.4 Kommentare

    Kommentare dienen der bersichtlichkeit Ihres XML-Dokuments undhelfen dadurch Ihnen, als auch denjenigen die Ihre XML-Daten weiter-verarbeiten mssen.3

    Ganz nebenbei knnen temporr nicht bentigte XML-Anweisungendurch Auskommentieren fr den Parser unsichtbar gemacht werden.

    Kommentare beginnen mit der Zeichensequenz .

    ...

    Der Kommentartext darf die Zeichenfolge -- nicht enthalten.!

    3 Sie werden aus diesem Grund eher selten an der FernUni benutzt. :)

  • 30 4 Gerhrt und geschttelt

    4.5 Aufgaben zur Selbstkontrolle

    Versuchen Sie, mglichst ohne Zuhilfenahme der Unterlagen, die folgen-den Fragen zu beantworten, bzw. die Stze zu vervollstndigen:

    1. Welche Aussage tifft auf das folgende XML-Dokument zu?

    Blauer Kakadu

    (a) Das Dokument ist wohlgeformt.(b) Das Dokument ist gltig.(c) Das Dokument ist wohlgeformt und gltig.(d) Das Dokument ist nichts von all dem.

    2. Wie mssen innerhalb eines XML-Dokuments Umlaute kodiertwerden?

    (a) Umlaute knnen gar nicht verwendet werden, da nurZeichen erlaubt sind, die sich auf den ersten 127 Stellen derASCII-Tabelle befinden (Beispiel: ae).

    (b) Umlaute werden generell als Hexadezimal-Entittabgelegt (Beispiel: E4;).

    (c) Umlaute mssen nicht besonders behandelt werden,sofern beim Speichern des Dokuments das darin verwendeteEncoding (Beispiel: ISO-8859-1) beachtet wird.

    (d) Als Brger der USA interessieren mich Umlauteberhaupt nicht.

    3. Welches der folgenden Attribute gehrt nicht in diexml-Verarbeitungsanweisung?

    (a) Version(b) standalone

    4. Was passiert, wenn ein XML-Dokument in einemWWW-Browser geffnet wird?

    (a) Das Dokument wird vollstndig formatiert angezeigt.(b) Das Dokument wird unformatiert angezeigt, der Browser

    bercksichtigt jedoch die vorhandenen Strukturen und rcktentsprechend ein.

    (c) Das Dokument erscheint als ASCII-Flietext.(d) Die Frage kann nicht generell beantwortet werden, das

    Ergebnis hngt vom verwendeten Browser ab.

    Eingaben lschen Aufgaben lsen

  • 5 Was alles in den Shaker darf

    Alexander (Digestif)1 Teil : Cognac1 Teil : Crme de Cacao braun1 Teil : Sahne

    DekorationZimt

    MixanleitungAlle Zutaten mit Ausnahme des Zimts werden im Shaker inklusive einigenEiswrfeln geschttelt und in ein Cocktailglas abgeseiht. Je nach Geschmackden fertigen Drink mit etwas Zimt bestreuen.

    Im nun folgenden Teil der Broschre beleuchten wir nach der Wohlge-formtheit nun die Gltigkeit der XML-Daten. Wir werden ein Regel-werk definieren, welches die einzelnen Elemente unserer Cocktailbar be-schreibt: Was gehrt zu einem Cocktail? Sind die Zutaten in ausreichen-der Anzahl und vollstndig aufgefhrt? Sind Bilder erwnscht? Wird dieRezeptstruktur (Beschreibung, Zutaten, Mixanleitung) eingehalten?

    Abbildung 5.1: Messbecher mit gltigen Cocktailrezepten

    Entsprechen unsere Cocktailrezepte solchen Regeln, so sind sie gltig(valid) und knnen den verschiedensten Anwendungen zur Verarbeitunggereicht werden, beispielsweise dem Mixer an der Bar, dem Verlag zurErstellung eines Rezeptbuches, oder mal was ganz Besonderes einemMixautomaten.1

    1 Der flchendeckende Einsatz solcher Automaten, die es brigens wirklich gibt, istbislang nur deshalb ausgeblieben, weil sich Maschinen morgens um halb 4 nicht aufDiskussionen mit betrunkenen und verzweifelten Ehemnnern einlassen wollen.

  • 32 5 Was alles in den Shaker darf

    5.1 DTD

    Das XML-Regelwerk wird in einer DTD Document Type Definitionfestgelegt. 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, Abhn-

    gigkeiten, Verschachtelungen, Struktur Erst wird gemixt, danndekoriert.

    Die DTD-Anweisungen knnen wahlweise innerhalb des XML-Doku-ments, oder auerhalb, in einer expliziten DTD-Datei, deklariert werden.In den folgenden, stark komprimierten Beispiel-Quellcodes wird zur bes-seren Lesbarkeit auf die interne Deklaration die Quick and Dirty Vari-ante zurckgegriffen. Im Produktionseinsatz ist die externe Deklarationwegen ihrer klaren Trennung von Daten und Regelwerk vorzuziehen.

    5.1.1 Interne Deklaration

    Gehen wir zunchst von einer sehr einfachen Bar aus, die einen Cocktailmit einem Namen und einer Zutat enthlt.

    Abbildung 5.2: Grundstruktur unserer Bar

    Die entsprechende bar.xmlwird dieser Struktur wie in Beispiel 5.1 aufder nchsten Seite gerecht.

    Die aufmerksamen Leser haben schon die beiden Erweiterungen ent-deckt, die ber die reine Wohlgeformtheit hinausgehen.

    Zum einen wird der XML-Tag um standalone=yes ergnzt, wo-mit signalisiert wird, dass alle notwendigen Informationen eben auchdie Gltigkeitsregeln in dieser XML-Datei vollstndig vorhanden sind.

    Daneben werden die DTD-Anweisungen direkt im DOCTYPE-Tag ein-gebettet daher die Bezeichnung Interne Deklaration. Die allgemeineSyntax lautet:

  • 5.1 DTD 33

    ]>

    Alexander

    3cl Creme de Cacao braun

    Beispiel 5.1: Ohne Regeln bleibt auf Dauer keine Bar unbeschdigt.

    Was den Aufbau des DTD-Statements ELEMENT (siehe Beispiel) an-geht, so werden Sie schon jetzt erkennen, dass die bar einen cocktailim Angebot hat, der wiederum einen namen hat und aus einer zutatbesteht. Im Kapitel 5.2 auf Seite 36 wird dessen Bedeutung und Aufbauvertieft.

    5.1.2 Externe Deklaration

    Die gleiche Bar kann aber auch allgemeingltiger realisiert werden.2Durch die Trennung von Datenbestand (XML) und Regelwerk (DTD)in jeweils eigenen Dateien gelingt es, mehrere unterschiedliche Daten-bestnde ein und demselben Regelwerk zu unterwerfen.

    Eine Verknpfung von XML und DTD wird wieder im DOCTYPE-Tagdes XML-Dokuments durchgefhrt, diesmal jedoch lediglich mit demVerweis auf eine DTD-Datei die sogenannte Externe Deklaration. Derxml-Tag-Parameter standalone entfllt deshalb.

    Fr die im Beispiel aufgebaute Mini-Bar bentigen wir daher einebar.xml:

    2 Stellen Sie sich vor, Sie wollten unterschiedliche Datenbestnde wie Cocktails, Sekt-cocktails, Longdrinks und Shortdrinks verwalten, die sicherlich alle Namen, Zutatenund Mixanleitungen haben - sich von der Datenstruktur her also hneln.

  • 34 5 Was alles in den Shaker darf

    Alexander

    3cl Creme de Cacao braun

    sowie die DTD-Anweisungen in bar.dtd:

    Andere XML-Datenbestnde knnen nun mit dem gleichen DOCTYPE-Verweis auf diese bar.dtd Bezug nehmen.

    5.1.3 ffentliche DeklarationWird die zu verknpfende Regeldatei von einem greren Anwender-kreis benutzt (dessen Umfang so ungefhr ab weltweit aufwrts vermutetwird), bzw. planen Sie eine derartige Regeldatei zu erstellen, so empfiehltsich die Einbindung als ffentliche Deklaration.Im Vergleich zur lokalen Verknpfung wird diesmal das SchlsselwortSYSTEM durch PUBLIC ersetzt. Hinter PUBLIC folgt wieder ein URI,der sich nun jedoch aus einer Eigentmer-, Dokumentenklassen- undSprachcodebeschreibung zusammensetzt (jeweils durch // voneinan-der getrennt), bevor als Verknpfungsadresse der bereits bekannte URLfolgt.

    Eine der bekanntesten ffentlichen Deklarationen bezieht sich auf dieDTD mit der Regelbeschreibung von XHTML.

  • 5.1 DTD 35

    Der Zeilenumbruch des letzten Beispiels hat freundlicherweise automa-tisch dafr gesorgt, dass wir die ffentliche Deklaration schrittweise ana-lysieren knnen.

    Zeile 1 : birgt soweit nichts Neues. Das Schlsselwort PUBLIC zeigt ledig-lich an, dass es sich um eine ffentliche Verknpfung handelt.

    Zeile 2 : -//W3C beschreibt den Eigentmer oder Ersteller der DTD, alsdas W3Consortium. //DTD XHTML... zeigt an, dass es sich umein Regelwerk fr XHTML handelt in der Version 1.0. Das Gan-ze ist dazu in Englisch (//EN) verfasst worden.Um nochmal kurz auf die Eigentmerschaft zurckzukommen:Das fhrende - (in -//W3C) weist darauf hin, dass das W3Con-sortium ein nicht registrierter Eigentmer der DTD ist. In Analo-gie dazu existieren, erkennbar am fhrenden +, zumindest in derTheorie auch registrierte Besitzer bis zur Stunde der Druckle-gung konnte dem Autorenteam jedoch niemand verraten, wo sichInteressenten registrieren lassen knnen.

    Zeile 3 : gibt abschlieend nur noch die Adresse an, von der die gewnschteDTD geladen werden soll.

    Tipp: Sofern Sie daran interessiert sind mal einen Blick hinter dieKulissen zu werfen, sollten Sie aber bitte erst nachdem Sie denRest dieser Broschre gelesen haben die oben aufgefhrte DTDxhtml1-transitional auf dem eigenen Rechner speichern.Auch wenn sich die DTD auf XHTML bezieht, so ist sie aufgrundder hohen Kompatibilitt ein gutes Beispiel um zu zeigen, wie bei-spielsweise HTML definiert ist.

    Na, konnten Sie Ihre Neugier nicht zgeln und haben bereits in derxhtml1-transitional.dtd rumgeschnuppert? Lassen Sie michabschlieend feststellen, dass auch die Syntax fr DTDs erstmal chao-tischer ausschaut, als sie letztendlich wirklich ist.

  • 36 5 Was alles in den Shaker darf

    5.2 Elemente

    Julia (Cocktail)2 cl : Amaretto2 cl : Rum wei6 cl : Sahne

    DekorationErdbeeren

    MixanleitungZutaten im Elektromixer mit einigen Eiswrfeln gut durchmixen und das fer-tige Mix in einen groen Sektkelch fllen. Erdbeere an den Glasrand stecken.

    Wie sehen nun solche DTD-Regeln aus?

    Beginnen wir mit der berlegung, welche gltigen Elemente ein XML-Datensatz haben darf, in welcher Anzahl Elemente auftauchen drfen,welche Beziehungen oder Abhngigkeiten mehrerer Elemente zueinan-der haben, ob eine Reihenfolge eingehalten werden muss und schlie-lich, was fr eine Struktur das ganze Datengebilde aufweisen soll.

    Im vorhergehenden Kapitel wurde eine Beispiel-Bar konstruiert, dieeinen Cocktail mit einem Namen und einer Zutat enthlt (siehe Ab-bildung 5.2). Name und Zutat sollen lediglich Text enthalten. All daswird in einer entsprechenden Document Type Definition (DTD) mit demELEMENT-Tag festgelegt:

    Mit dem Elementnamen werden gltige XML-Elemente definiert. Diechronologische Reihenfolge der Elemente im XML-Dokument muss derListe der ELEMENT-Tags entsprechen.

    Als Elementinhalt drfen die folgenden Werte verwendet werden:

    EMPTY leeres ElementANY beliebigElementmodell Bei Kindelementen: Name, Abfolge und Hufigkeit

    Im Beispiel: (name,zutat)(#PCDATA) Parsed Character Data - Inhalt besteht aus Text

    Zu unserer Beispiel-Bar bentigt man demnach die folgenden ELEMENT-Anweisungen:

  • 5.2 Elemente 37

    5.2.1 Traumberuf Barmixer? (Teil I: Das Ziel)Nun ist eine Bar mit nur einem Cocktail (der dazu auch noch aus nureiner einzigen Zutat besteht) zugegebenermaen nicht marktfhig. Einereichhaltige Getrnkekarte mit anstndigen Drinks sei daher genug Moti-vation dieses Elementmodell zu dem auszubauen, was in Abbildung 5.3zu sehen ist: Mehr Cocktails, mehr Zutaten, Hinweise zur Dekoration,eine Mixanleitung und eventuell ein Foto.

    Abbildung 5.3: Elementmodell Ziel ist eine vollstndige Bar.

    Teile dieses Barmodells werden im weiteren Verlauf dieser Broschreimmer wieder als Beispiel herangezogen werden.

    5.2.2 Hufigkeitsangaben

    Abbildung 5.4: Mehrfachnennung von Elementen

    Hufigkeitsangaben legen fest, wie oft ein Element, eine Elementfolgeoder eine Elementauswahl auftreten soll bzw. darf. Dabei existieren viermgliche DTD-Notationen:

  • 38 5 Was alles in den Shaker darf

    Element genau 1 malElement? 0 oder 1 mal (optional, hchstens einmal)Element* 0 bis n mal (optional, beliebig oft wiederholbar)Element+ 1 bis n mal (erforderlich, mindestens einmal, beliebig

    oft wiederholbar)Als angehende Barbesitzer wollen wir natrlich viele verschiedene Cock-tails anbieten. Jeder Cocktail soll einen Namen haben und aus mindes-tens einer Zutat bestehen.3 Dekoration und Mixanleitung sind unver-zichtbar, ein Foto hingegen kann erbrigt werden.

    Damit ergibt sich das folgende DTD-Konstrukt:

    ...

    ...

    Achten Sie darauf, dass Sie keine Leerrume (Tabulatoren, Leerzeichen,! etc.) zwischen den Elementnamen und den Hufigkeitsangaben einset-zen.

    5.2.3 Elementfolge

    Abbildung 5.5: Die verbindliche Reihenfolge von Elementen

    Die Elementfolge legt die verbindliche Reihenfolge von Elementen, Ele-mentfolgen oder Elementauswahlen fest:

    (Element1,Element2,...) erster, zweiter,...

    3 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-Spar-Cocktail (Rezept auf Seite 26) besteht aus Leitungswasser und einem Spritzer Soda.

  • 5.2 Elemente 39

    Lernen Sie die Anleitungen fr die Cocktails Julia und Alexander aus-Kleine bungwendig. Cocktailname, Mengen und Substanzen der Zutaten. Der immergleiche Schema-Aufbau aller Cocktails wird Ihnen die Paukerei erleich-tern. Vorhandene Abhngigkeiten Mengenangaben werden zum Bei-spiel nur im Zusammenhang mit den Zutaten, und nicht im Namen ge-nannt drngen sich dabei wie von selbst auf.

    Reihenfolgen und Abhngigkeiten fhren zu diesem DTD-Konstrukt:

    ...

    ...

    Demnach besteht jede Zutat aus genau einer Substanz und einer Men-genangabe. Eine Umkehrung zuerst die Menge und dann die Substanz ist nicht zulssig.

    5.2.4 Elementauswahl

    Die Elementauswahl beschreibt eine Entweder/Oder-Verknpfung vonElementen, Elementfolgen oder Elementauswahlen:

    (Element1|Element2|...) Element1 oder Element2 oder ...

    Abweichend vom bisherigen Bar-Modell, beschftigen wir uns in Formeines kleinen Einschubs mit Personalangelegenheiten. Unsere Bar stehtja noch ganz am Anfang. Daher knnen wir nur einen Angestellten be-schftigen. Die DTD hierfr sieht wie folgt aus:

    ...

    ...

    Sollte unsere Bar so richtig in der Szene einschlagen, so werden selbst-! verstndlich weitere Mitarbeiter eingestellt. Die Kombination von Hu-figkeitsangaben und Elementauswahl hat jedoch so ihre Tcken. Beach-ten Sie den folgenden Effekt:

  • 40 5 Was alles in den Shaker darf

    ...

    ...

    beschreibt eine gemischte Angestelltengruppe, eine beliebige Reihenfol-ge von sowohl BarFachfrauen als auch MixMeistern, wohingegen

    ...

    ...

    entweder nur BarFachfrauen oder nur MixMeister jeweils in beliebi-ger Anzahl verpflichtet.4

    5.2.5 Traumberuf Barmixer? (Teil II: Das Ergebnis)

    Pangalaktischer Donnergurgler (Cocktail)1 Flasche: Alten Janx-Geist1 Teil : Wasser aus den Meeren von Santraginus V3 Wrfel : arkturanischer Mega-Gin4 l : fallianisches Sumpfgas1 Teil : qualaktinischer Hyperminz-Extrakt1 Zahn: eines algolianischen Sonnentigers1 Spritzer: Zamphour

    DekorationOlive

    MixanleitungZutaten mischen, Mega-Gin-Wrfel darin zergehen lassen, Das Sumpfgas hin-durchperlen lassen, ber einen Silberlffel den Minze-Extrakt trpfeln undden Zahn auflsen.

    [Kein Bild verfg-bar - Der Film istwhrend der Zube-reitung im Kamera-gehuse verdampft!]

    Unsere Bar ist nun vollstndig. Die DTD-Anweisungen sind die Sum-me der bisherigen berlegungen. Auf das Foto (eine Grafik daher ANYund nicht (#PCDATA)) kann gegebenenfalls verzichtet werden, weilunsere Angestellten sowieso jeden Drink schon x-mal zubereitet haben

    4 Als Bar-Besitzer werden Sie natrlich die 2. Variante whlen, weil sie so eine derbeiden, nach Geschlechtern getrennten, Angestelltentoiletten einsparen.

  • 5.3 Attribute 41

    und wissen wie er aussieht. Die bar.dtd:

    (name,zutat+,dekoration,mixanleitung,foto?)>

    Die Cocktails werden nun (Beispiel 5.2 auf der nchsten Seite) inbar.xml abgelegt.

    5.3 Attribute

    Tequila Sunrise (Longdrink)4 cl : Tequila Silver2 cl : Grenadineetwas: Orangensaft

    DekorationSchwarzer Trinkhalm

    MixanleitungEinige groe Eiswrfel in ein Longdrinkglas geben, den Tequila dazu undmit Orangensaft auffllen. Zum Schluss Grenadine dazugeben und mit einemschwarzen Trinkhalm gerade so wenig umrhren, dass man den Sonnenauf-gang im Glas noch sieht.

    Mit Hilfe von Attributen knnen den Elementen zustzliche Informatio-nen beigefgt werden. In unserer Bar kann beispielsweise jedem Cock-tail die Klassifizierung mitgegeben werden, ob es sich eher um einenCocktail, einen Longdrink oder einen Collins handelt.

    Attribute werden im Gegensatz zu Elementen, deren Inhalt als eigent-liche Informationseinheit verstanden wird, in erster Linie als Steuerin-formation benutzt. Ein Verlag knnte das Attribut Klassifizierung dazunutzen, die verschiedenen Cocktails zu gruppieren und sie in Kapitelnzusammenzufassen.

    In der DTD findet eine Auflistung mglicher Attribute im Anschluss andie Element-Definition statt:

  • 42 5 Was alles in den Shaker darf

    Alexander

    Cognac3cl

    Creme de Cacao braun3cl

    Sahne3cl

    Zimt

    Alle Zutaten - mit Ausnahme des Zimts - werden im Shaker

    inklusive einigen Eiswrfeln geschttelt und in einCocktailglas abgeseiht. Je nach Geschmack den fertigenDrink mit etwas Zimt bestreuen.

    alexander.jpg

    Julia

    Amaretto2cl

    Rum wei2cl

    Sahne6cl

    Erdbeeren

    Zutaten im Elektromixer mit einigen Eiswrfeln

    gut durchmixen und das fertige Mix in einen groenSektkelch fllen. Erdbeere an den Glasrand stecken.

    julia.jpg

    Beispiel 5.2: Die komplett ausgestattete Bar.

  • 5.3 Attribute 43

    Abbildung 5.6: Attribute hier als Sortierkriterium.

    Attributname2 Typ Default...>

    Bevor die einzelnen Bestandteile des ATTLIST vorgestellt werden, zu-nchst unsere Beispiel-Bar, in der wir nach Abbildung 5.6 das Attributklassifizierung als Zusatz zum Namen definieren:

    (name,zutat+,dekoration,mixanleitung,foto?)>

    Cocktail>

    Der Elementname beschreibt, auf welche Elemente sich die folgendenAttribute beziehen. Es drfen nur vorangegangene, gltige Elemente ver-wendet werden in diesem Fall name.

    Der Attributname ist frei whlbar - im Beispiel klassifizierung.

    Als Attributtyp knnen die folgenden Notationen verwendet werden:

  • 44 5 Was alles in den Shaker darf

    Typ Erluterung, Beispiel DTD und Beispiel XML-Satz

    CDATA Zeichenkette aus beliebigen Zeichen (Character Data).

    Tequila Sunrise

    ID Es ist pro Element nur ein Attribut dieses Typs erlaubt. Namensregeln wiefr XML-Namen. Der Wert muss eindeutig, das erste Zeichen darf nichtnummerisch sein! Voreinstellungen #IMPLIED oder #REQUIRED.

    ...

    ENTITY /ENTITIES

    Bezug auf den Namen einer generellen, externen, nicht parsbaren Entitt Zum Beispiel ein Bild.

    ...

    NMTOKEN /NMTOKENS

    Zeichenkette, die nur aus Buchstaben, Ziffern, Punkt (.), Bindestrich (-),Unterstrich (_) und dem Doppelpunkt (:) bestehen darf (Name Token).

    Oliven

  • 5.3 Attribute 45

    Typ Erluterung, Beispiel DTD und Beispiel XML-Satz

    (Wert1|Wert2|...) Aufzhlung mglicher Attributwerte. Der Attributwert in einem XML-Satzmuss einem der Werte aus dieser Liste entsprechen.

    Tequila Sunrise

    Fr die Voreinstellung (Default) drfen die folgenden Werte verwendet werden:

    Voreinstellung Erluterung

    #REQUIRED In dem XML-Satz muss das Attribut immer angegeben werden.

    #IMPLIED Die Angabe des Attributs ist optional.

    wert Standardwert, falls das Attribut nicht angegeben wurde.

    #FIXED wert Der einzig mgliche Wert fr das Attribut.

  • 46 5 Was alles in den Shaker darf

    5.4 Entitten

    Cuba Libre (Longdrink)4 cl : Bacardi Rum wei1 l : Tropicola

    DekorationZitronenscheibe

    MixanleitungEiswrfel bis zum Rand in das Glas geben und mit Rum und Cola auffllen.

    Als Barbesitzer rgern Sie sich natrlich ber die EU-Verordnung zurKennzeichnungspflicht in Lebensmitteln.5 Sie tippen sich die Fingerwund, weil bei jedem Ihrer Drinks eine Reihe von ellenlangen, fortwh-rend 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 Text-bausteine Entittsnamen werden in einem XML-Satz oder innerhalbeiner DTD durch den Inhalt der Entitt ersetzt.

    Abbildung 5.7: Entitten Textbausteine fr XML und DTD

    Generell unterscheidet man dabei zwei Arten: Parameter Entitten, dienur innerhalb der DTD gltig sind, und Generelle Entitten, gltig inner-halb der XML-Elemente.

    5 Bei verpackten Lebensmitteln werden Zusatzstoffe im Rahmen der Zutatenliste ge-kennzeichnet. Bei loser Ware muss ein Schild an oder neben dem Produkt aufdie Verwendung von Zusatzstoffen hinweisen. In Gaststtten und Einrichtungender Gemeinschaftsverpflegung mssen Zusatzstoffe in der Speisekarte, der Preis-liste oder auf einem Aushang gekennzeichnet werden. Das kann auch in Formvon Funoten geschehen. Siehe auch http://www.verbraucher.org/ bzw.http://www.zusatzstoffe-online.de/

  • 5.5 Parameter-Entitten 47

    5.5 Parameter-Entitten

    Parameter-Entitten werden in der DTD definiert und gelten auch nurinnerhalb der DTD.

    In unserer bar.dtd knnen wir nun immer wieder auftretende Ge-schmacksrichtungen als Textbaustein verwenden:

    dies wird automatisch ersetzt zu:

    Beachten Sie die etwas gewhnungsbedrftige Notation mit dem Pro-! zentzeichen (%) und dem Semikolion (;).

    5.6 Generelle Entitten

    Generelle Entitten sind fr den Einsatz innerhalb der XML-Elementegedacht, womit wir uns dem Problem mit der Kennzeichnungspflicht vonZusatzstoffen nhern.

    In unserer bar.dtd knnen wir wieder hufig wiederkehrende Textteiledeklarieren:

    die Anwendung findet innerhalb der XML-Datenstze statt

    3cl Creme de Cacao braun mit &enummern;

  • 48 5 Was alles in den Shaker darf

    und dies wird ersetzt zu:

    3cl Creme de Cacao braun mit E412, E189, E503, E612, E613und E614

    Beachten Sie, dass im Gegensatz zu den Parameter-Entitten hier in der! DTD kein Prozentzeichen (%) stehen darf. Im XML-Datensatz wird mitdem kaufmnnischen Und (&) und dem Semikolion (;) gearbeitet, so wiees von den Umlauten in HTML ( = ) her bekannt ist.Anstelle von Zeichenketten knnen auch Verweise auf externe oder f-fentliche Daten verwendet werden. Mit parsbaren bzw. nicht-parsbaren Kapitel 5.7 auf der

    nchsten Seite Entitten sind hier Text- bzw. Binrdaten (zum Beispiel ein Foto) ge-meint:

    Entityinhalt Erluterung

    Zeichenkette Interne Entitt, E412, E189, E503, E612,E613 und E614

    SYSTEM URI Externe, parsbare Entitt. Der URI ver-weist auf ein Dokument.

    PUBLIC FPI URIffentlicher Verweis auf eine externe,parsbare Datei und einen alternativenURI.

    SYSTEM URI NDATA Notation Externe, nicht-parsbare Entitt.

    PUBLIC FPI URI NDATANotation

    ffentlicher Verweis auf eine externe,nicht-parsbare Datei.

  • 5.7 Notationen 49

    5.7 Notationen

    Tom Collins (Collins)5 cl : Gin3 cl : Zitronensaft2 cl : Zuckersirupetwas: Sodawasser

    DekorationZitronenscheibe, Cocktailkirsche

    MixanleitungDie Zutaten (ohne Sodawasser) mit Eiswrfeln im Shaker gut schtteln undin ein Longdrinkglas auf einige Eiswrfel abseihen. Mit etwas Sodawasserauffllen. Mit einer Zitronenscheibe und einer Cocktailkirsche garnieren.

    Mit Notationen werden externen, nicht-parsbaren Entitten Hilfsanwen-dungen zugeordnet.

    In unserer bar.dtd definieren wir, dass das Programm graphic-studio.exe zu starten ist, sobald einem Cocktail ein Icon als Attributbergeben wird:

    In bar.xml erhlt der Cocktail Tom Collins nun einen Smiley:

    Tom Collins

    Was passiert jedoch, wenn zur XML-Anwendung gar kein graphic-studio.exe installiert ist?6

    6 Zumindest hatten bis zum Zeitpunkt des Erscheinens dieser Broschre weder Mix-Meister noch BarFachfrauen eine Windows-Version implantiert bekommen. BeideAngestelltengruppen knnen zwar lcheln, werden aber partout nicht gelb, womit derSmiley nicht darstellbar ist.

  • 50 5 Was alles in den Shaker darf

    Die feste Zuordnung zwischen Hilfsanwendungen und Datenelementenbereitet den Autoren Zahnweh, zumal der offene Austausch von Datensehr eingeschrnkt wird. Ein solches Regelwerk lsst sich bestenfallsinnerhalb eines homogenen Umfeldes zum Beispiel innerhalb einesFirmen-Intranets mit fest vorgegebenen Rechner und Programmstruktu-ren durchsetzen.

  • 5.8 Aufgaben zur Selbstkontrolle 51

    5.8 Aufgaben zur Selbstkontrolle

    Versuchen Sie, mglichst ohne Zuhilfenahme der Unterlagen, die folgen-den Fragen zu beantworten, bzw. die Stze zu vervollstndigen:

    1. Ein XML-Regelwerk

    (a) kann im Prolog einer XML-Datei stehen.(b) kann beliebige Marken deklarieren.(c) wird in einer DTD festgelegt.(d) wird vom W3C festgelegt.

    2.

    (a) schafft jede Menge Arbeitspltze.(b) verlangt nur BarFachfrauen oder MixMeister.(c) verlangt paarweise BarFachfrauen und MixMeister.(d) verlangt beliebig viele BarFachfrauen oder MixMeister.(e) verlangt eine Nennung in der Reihenfolge BarFachfrau

    und dann MixMeister.

    (f) taucht nirgendwo auf den Web-Seiten des W3C auf.3. Wie sieht die DTD-Anweisung fr Attribute aus, mit der jedem

    Cocktail eine eindeutige Cocktailnummer zugeordnet wird?

    (a) (b) (c) (d) (e) (f)

    4. Entitten

    (a) eignen sich als Textbausteine.(b) knnen auch auf nicht parsbare Daten (Bilder) verweisen.(c) werden in einer DTD festgelegt.(d) werden vom W3C untersagt.

    Eingaben lschen Aufgaben lsen

  • 52 5 Was alles in den Shaker darf

  • 6 Unbekannte Rezepturen

    6.1 Namensrume oder: Der Ehren-Codex der Barmixer

    Gin Fizz (Cocktail)2/3 : Gin1/3 : Zitronensaft1 EL : Zuckersirupetwas: Sodawasser

    DekorationZitronenscheibe, Cocktailkirsche

    MixanleitungDie ersten drei Zutaten im Shaker inklusive Crushed Ice schtteln, dann inden Tumbler abseihen. Mit Soda den Longdrink auffllen und mit Kirscheund Zitronenscheibe dekorieren.

    Mittlerweile ist unsere bar.xml wohlgeformt und mit Hilfe derbar.dtd auch gltig. Alle XML-Elemente und Attribute sind damitnamentlich eindeutig definiert man spricht in diesem Fall vom Na-mensraum, den eine DTD bildet. Im Beispiel gehren alle Cocktails demNamensraum unserer Bar an, der bar.dtd.

    Was geschieht nun, wenn keine DTD vorhanden ist? Was, wenn XML-Elemente aus fremden Namensrumen, oder mehrere Namensrumegleichzeitig benutzt werden sollen? Besonders problematisch wird es,wenn sich dabei Elementnamen und Attribute berschneiden und ins Ge-hege kommen. Bei mehreren gleichnamigen Elementen, sind Konflikteinnerhalb der XML-Anwendung vorprogrammiert.

    Ein Beispiel: Zum Feierabend bestellt sich der letzte Gast bei unseremBeispiel 6.1 auf dernchsten Seite MixMeister einen Gin Fizz.

    So richtig wach ist der Mann hinter dem Tresen nicht mehr. Wie warder Cocktailname noch gleich? Gin Fizz oder Sodawasser? Und muss-te - nicht ein Attribut klassifizierung haben?Welche Regelwerke sich hinter einem - oder ei-nem - verbergen, geht aus dieser XML-Datei nichthervor. Um es vorweg zu nehmen: Der Mixmeister serviert dem Gastwahrscheinlich ein Glas Milch, weil ihm die passende DTD fehlt.

  • 54 6 Unbekannte Rezepturen

    Gin Fizz

    2/3 Gin

    1/3 Zitronensaft

    1 EL Zuckersirup

    etwas Sodawasser

    Beispiel 6.1: Gin Fizz gegen Feierabend

    6.1.1 Qualifizierte Namen

    Als Antwort auf fehlende DTD-Angaben hat das W3C im XML-Standardqualifizierte Namen (qualified names) eingefhrt. Mit Ihnen werden inder XML-Datei die bisher bekannten Elemente um einen Namensraumerweitert.

    Das Attribut xmlns: steht dabei fr XML name space. Der URI be-stimmt, auf welchen Namensraum sich das Element und alle darin ent-haltenen Unter-Elemente beziehen. Eine hier genannte Adresse siemuss nicht wirklich existieren dient nur als Namenskonvention undist quasi ein Ehren-Codex zwischen den Erzeugern der Daten und denProgrammierern einer XML-Anwendung, die an beide appelliert: Halteteuch an die gleichen Regeln. Der URI steht fr den Namen des Regel-werkes.

    Fr unser Beispiel formuliert der Gast seine Bestellung neu:

    Mach mir einen Gin Fizz nach den Anleitungen vonhttp://www.bar.de/cocktail und verwendeZutaten aus dem Fundus vonhttp://www.zutaten.de.

  • 6.1 Namensrume oder: Der Ehren-Codex der Barmixer 55

    Die entsprechende bar.xml sieht dann so aus:

    Gin Fizz

    2/3 Gin

    1/3 Zitronensaft

    ...

    Der Cocktail gelingt, die Milch wandert in den Ausguss.

    An dieser Stelle sei nochmals auf die mgliche Nichtexistenz eines URI! hingewiesen. Es handelt sich nicht um eine Auflistung von externenDTD-Adressen, weshalb das Namensraumkonzept bei der Validierungauch komplett ignoriert wird.

    6.1.2 Mehrere Namensrume gleichzeitig verwenden

    Waren im vorhergehenden Beispiel die Namensrume noch hierarchischvoneinander getrennt1, so lassen sich mit leicht modifizierten Notationauch mehrere xmlns auf der gleichen Ebene miteinander vermischen:

    Entsprechend kann auch unsere bar.xml gestaltet werden:

    Gin Fizz 2/3 Gin

    ...

    1 Der name-Tag innerhalb einer zutat unterscheidet sich i.A. von dem in der Daten-struktur darberliegenden Cocktail-name.

  • 56 6 Unbekannte Rezepturen

    Auer Cocktail-Regelwerken kann man natrlich auch richtige Standardseinsetzen. Falls Sie HTML4.0-Tags in Ihrem XML-Dokument verwen-den wollen, so gilt der offizielle Namespace des W3C:

    Und auch hier noch einmal: Unter diesem URI finden Sie zwar kei-! ne DTD, Sie vereinbaren und akzeptieren jedoch stillschweigend, dasses sich bei den unterhalb vom -Tag befindlichen Elementen umdie bekannten , , usw. handelt. Nach diesem Regelwerkschreiben Sie HTML-Seiten und nach diesem Regelwerk verhlt sichauch jeder Web-Browser.Wenn Sie neue HTML-Tags erfinden, so wird diese kein Browser an-zeigen (knnen) sondern ignorieren, weil sie nicht im W3C-Regelwerkdefiniert sind.

    6.1.3 Namensrume: Unser Fazit

    Sicher haben Sie es bemerkt: Namensrume sind fr den persnlichenEinsatz zu unprzise und eignen sich eher zur Realisierung von berre-gionalen Standards. Die Autoren haben brigens ein C22 gegrndet undgeben demnchst die Cocktail Meta Language (kurz CockML) heraus.Fr berschaubarere Einsatzbereiche, wie beispielsweise Firmen-Intra-und Extranets, eignen sich DTD-Anweisungen besser.

    2 C2: Cocktail Consortium

  • 7 Auf Ex Anwendungsbeispiele

    Mike Collins (Collins)6 cl : Irish Whiskey3 cl : Zitronensaft2 cl : Zuckersirupetwas: Sodawasser

    DekorationZitronenscheibe, Cocktailkirsche

    MixanleitungDie Zutaten ohne Sodawasser im Shaker gut schtteln und in ein Long-drinkglas auf einige Eiswrfel abseihen. Mit etwas Sodawasser auffllen. Miteiner Zitronenscheibe und einer Cocktailkirsche garnieren.

    Another party is over. . . sang vor mehr als zwanzig Jahren FreddyMercury in seinem Melancholy Blues, und er hatte wie so hufig Recht.Auch unsere Cocktailparty neigt sich langsam seinem Ende entgegen undwenn es noch eine offene Frage gibt,1 dann sicherlich die, wofr derganze bislang betriebene Aufwand denn gut gewesen sein soll.

    Bislang haben wir eine praktische Umsetzung von XML-Daten kennen-gelernt, nmlich die auf Seite 26, wo wir mit Hilfe von Cascading StyleSheets XML-Daten fr die Darstellung innerhalb eines WWW-Browsersaufbereitet haben. Im folgenden Abschnitt machen wir etwas sehr hnli-ches: Wiederum ist unser Zielmedium ein WWW-Browser, doch diesmalwird die Konvertierung durch ein PHP-Skript bereits auf dem Server vor-genommen (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 unse-res Dokuments sehr viel dynamischer werden. Denken wir an den Dagobert-Duck-Sparcocktail zurck, so stellen wir fest, dass die Mengenangabeimmer hinter der Substanz erscheint einfach aus dem Grund, weil die-se Reihenfolge im XML-Dokument festgelegt ist, und wir durch Casca-ding Style Sheets keinen Einfluss darauf haben. Durch den Einsatz vonServerside-Konstrukten bieten sich da ganz andere Mglichkeiten, wiewir 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 wiederumCSS gnzlich unbekannt sind.

    1 Wahrscheinlich gibt es jede Menge, aber wir werden nur noch die eine beantworten.

  • 58 7 Auf Ex Anwendungsbeispiele

    7.1 Serverside xml2html mit PHP

    Selbstverstndlich gibt es auch Serverside xml2html-Lsungen fr diebeliebte Scriptingsprache PHP. Wie so oft wird man unter

    http://www.hotscripts.com/

    fndig. Dort stt man unter anderem auf Michael P. Mehls XML-Klassephpxml-1.0. Siehe auch

    http://www.phpxml.org/

    Eine einfache Cocktail-Anwendung inklusive Anzeige und Suchfunkti-on ist mit wenigen Zeilen PHP-Code realisiert. Der einleitende HTML-Code, das Suchformular sowie der detaillierte Tabellenaufbau entfal-len hier aus Platzgrnden; das vollstndige Listing findet sich in An-hang B.2.

    ...

    evaluate(//cocktail/*[contains(., $suchabfrage)]/..);

    }else{ // Alle anzeigen$getraenke = $xmlevaluate(//cocktail);

    }foreach ( $getraenke as $cocktail ){ // durch alle XML-Datensaetze$name = $xmlget_content($cocktail./name[1]);

    ?>

    ...

    Das PHP-Skript erzeugt damit serverseitig HTML-Code, der von jedemAbbildung 7.1 auf dernchsten Seite Browser angezeigt werden kann.

    7.2 xml2tex mit Java

    Als Alternativbeispiel, und nicht zuletzt um zu zeigen, dass XML-An-wendungen nicht doch immer wieder als konvertierte HTML-Ausgabe

  • 7.2 xml2tex mit Java 59

    Abbildung 7.1: Cocktailrezepte mit phpxml-1.0

    in einem Browserfenster landen, wollen wir nun zumindest prinzipielldemonstrieren, wie wir unsere Cocktailliste in ein schickes Rezeptbuchverwandeln knnen.

    Wo liegt dabei berhaupt das Problem? Bekanntlich verfgt jeder WWW-Browser ber eine eingebaute Print-Routine. Sofern Sie jedoch wie wirder Meinung sind, dass Schriftsatz etwas mehr als eine Aneinanderrei-hung von Buchstaben ist, sollten Sie weiterlesen schlielich haben wirim oberen Absatz bereits das Attribut schick benutzt.

    Angedacht ist also eine Konvertierung unserer XML-Cocktails zu einerdruckfhigen Rezeptsammlung. Um eine optimale Druckaufbereitung zuerzielen, und um uns nicht mit mehr Arbeit als ntig zu belasten, be-dienen wir uns des Schriftsatzsystems LATEX als Backend, und zwar ausfolgenden Grnden:

    1. sind in LATEX immer noch die besten Satzalgorithmen enthalten.Unsere Rezeptsammlung soll ja auch nach was aussehen.

    2. besitzt LATEX eine hnliche Auszeichnungsstruktur wie XML. Ei-ne Konvertierung kann sich daher (beinahe) auf den simplen Aus-tausch von Marken beschrnken.

    7.2.1 Was wird bentigt?

    Grundstzlich bentigen wir die Java-Pakete javax.xml.parsers,sowie org.xml.sax die fr uns den bentigten Parser bereitstellen.Beide Pakete sind seit der Version 1.4 in der kostenlosen Java 2 StandardEdition (j2SE) enthalten.

  • 60 7 Auf Ex Anwendungsbeispiele

    Um dieses Kapitel nicht ausufern zu lassen, haben wir darberhinaus denJava-Quellcode auf die ntigsten Anweisungen komprimiert. Sie soll-! ten daher zumindest rudimentre Java-Kenntnisse besitzen um das fol-gende Beispiel zu verstehen. Das komplette nicht weiter kommentierteProgramm-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 ei-gene Klasse, in unserem Beispiel BarListe.java, eingebunden wer-den. Barliste selbst ist wiederum eine Ableitung der StandardklasseDefaultHandler.

    import javax.xml.parsers.*;import org.xml.sax.*;import org.xml.sax.helpers.*;import java.io.*;public class BarListe extends DefaultHandler{private String elementname;private String attrib_cocktail;

    ...

    }

    Innerhalb unserer Klasse knnen nun die geerbten Methoden start-Document, startElement, characters, endElement undendDocument berschrieben werden, die fr die Umsetzung des XML-Codes verantwortlich sind. Das Verfahren gestaltet sich dabei wie folgt:

    Durch die Instanzierung unserer Klasse wird automatisch ein Parser ge-startet, der als Argument den Namen unseres XML-Dokuments ber-nimmt.

    public class BarListe extends DefaultHandler{...

    public static void main(...){SAXParserFactory saxpafac =SAXParserFactory.newInstance();

    saxpafac.setValidating(true);SAXParser saxpa = saxpafac.newSAXParser();saxpa.parse(args[0], new BarListe());

    ...

    }}

  • 7.2 xml2tex mit Java 61

    Die Methode parse bernimmt in diesem Beispiel den Namen desXML-Dokuments aus der Kommandozeile und instanziert unsere KlasseBarListe. ber die Methode setValidating wird festgelegt, obder Parser das Dokument zustzlich auf Gltigkeit prfen soll.

    Die oben aufgefhrten Methoden werden nun vom Parser in Abhn-gigkeit des eingelesenen Dokuments aktiviert, beispielsweise start-Document beim Beginn der Leseoperation oder startElement so-bald eine ffnenden Marke (wie ) auftaucht.

    public class BarListe extends DefaultHandler{public void startDocument() {System.out.println("\\documentclass{article}");...

    }}

    Entsprechend komplizierter wird die Angelegenheit, sobald die erstenffnenden Marken gefunden werden.

    ...

    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");

    }...

    }

    Der Methode startElement wird also jeweils im dritten Argumentder Name des gefundenen Element bergeben, der dann im Methoden-rumpf per if-Anweisung abgefragt werden kann. In unserem Beispielwird jeweils bei jedem Fund der Marke die LATEX-Anweisung\section{ geschrieben, also eine neue berschrift erzeugt. Danebenkann ber die Methode getValue der Wert des Attributs klassi-fizierung gesichert werden.

    Der eigentliche Inhalt des Elements also Character Data, oder um beimBeispiel zu bleiben, der Name des Cocktails, wird durch die Methodecharacters lokalisiert.

  • 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);

    }...

    }

    Die Aufgabe die abschlieende } zu setzen, um den \section-Befehlzu vervollstndigen, bleibt der Methode endElement berlassen. hn-liches gilt fr die Methode endDocument welche am Ende des XML-Dokuments aufgerufen wird und die folgerichtig auch die letzte Zeile derLATEX-Datei (\end{document}) schreibt.Der auf diese Weise entstandene LATEX-Quellcode schaut nicht unbedingtstrukturiert aus, ist jedoch voll funktionsfhig wie Abbildung 7.2 zeigt.

    Abbildung 7.2: Aus XML wird mit Hilfe von Java ein echtes Rezept-buch.

  • Anhang A Auflsung aller Aufgaben

    Aufgaben 2.4 auf Seite 7: 1 (b); 2 (c); 3 (e)

    Aufgaben 3.7 auf Seite 18: 1 (Falsch); 2 (Korrekt); 3 (Falsch); 4 (Korrekt); 5 (Falsch); 6 (Korrekt);7 (Falsch)

    Aufgaben 4.5 auf Seite 30: 1 (a); 2 (c); 3 (a); 4 (d)

    Aufgaben 5.8 auf Seite 51: 1 (a) oder (c); 2 (c); 3 (d); 4 (a), (b) oder (c)

  • 64 Anhang A Auflsung aller Aufgaben

  • Anhang B Programm-Listings

    B.1 xml2html mit XSL1

    5 Cocktail Bar

    Cocktail BarInhaber: Feuerstack & Vieler

    10

    15 Zutaten:

    20

    25 Dekoration:

    30

    35

  • 66 Anhang B Programm-Listings

    B.2 Serverside xml2html mit PHP

    1

    5

    Die XML-Cocktailbar

    10

  • B.2 Serverside xml2html mit PHP 67

    color : #6E749F;55 font : bold 13pt Tahoma, Verdana, Geneva, Arial,

    Helvetica, sans-serif;letter-spacing : 1px;

    }

    60 span.small{

    background : transparent;color : #000000;font : 8pt Tahoma, Verdana, Geneva, Arial, Helvetica, sans-serif;

    65 }

    td{

    background : transparent;70 font : 10pt Verdana, Geneva, Arial, Helvetica, sans-serif;

    }

    td.content{

    75 padding : 20px 20px 20px 20px;background : #FFFFFF;color : #000000;vertical-align : top;

    }80

    -->

    85

  • 68 Anhang B Programm-Listings

    Search:110 class.include("../../source/xml.php");

    // Create an XML object for the XML file.$xml = new XML("bar.xml");

    135// Check whether a search term was given.if ( !empty($term) ){

    // Only select those cocktail, in whose name or position140 // the search string is present.

    $government = $xml->evaluate("//cocktail/*[contains(., $term)]/..");

    }else

    145 {// Select all members of the government.$government = $xml->evaluate("//cocktail");

    }

    150 // Run through all members of the government.foreach ( $government as $cocktail ){

    // Retrieve information about the cocktail.// and Display the information.

    155 $name = $xml->get_content($cocktail."/name[1]");

    ?>

    160 evaluate($cocktail."/zutat");

  • B.2 Serverside xml2html mit PHP 69

    foreach ( $zutat as $unddazu )165 {

    $substanz =$xml->get_content($unddazu."/substanz[1]");

    $menge = $xml->get_content($unddazu."/menge[1]");?>

    170

    get_content($cocktail."/dekoration[1]");180 $mixanleitung =

    $xml->get_content($cocktail."/mixanleitung[1]");$foto = $xml->get_content($cocktail."/foto[1]");

    ?>185

    190

    195

    200

  • 70 Anhang B Programm-Listings

    B.3 xml2tex mit Java

    1 import javax.xml.parsers.*;import org.xml.sax.*;import org.xml.sax.helpers.*;import java.io.*;

    5public class BarListe extends DefaultHandler{

    private String elementname;private String attrib_cocktail;

    10private String normaldata = "";private String substanz = "";private String menge = "";private boolean zutatflag = false;

    15

    public void startDocument() throws SAXException{

    System.out.println("\\documentclass[12pt]{article}");20 System.out.println("\\usepackage[latin1]{inputenc}");

    System.out.println("\\usepackage{german}");System.out.println("\\begin{document}");

    }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;

    }

  • B.3 xml2tex mit Java 71

    }55

    if(elementname.equals("name")){attrib_cocktail =

    attr.getValue("klassifizierung");}

    60normaldata = "";

    }

    65 public void characters(char[] cont, int start, int len)throws SAXException{

    if(elementname.equals("name") ||elementname.equals("dekoration") ||

    70 elementname.equals("mixanleitung")) {normaldata = normaldata +new String(cont, start, len).trim() + "\n";

    }

    75 if (elementname.equals("substanz")) {substanz = new String(cont, start, len);

    }if (elementname.equals("menge")) {

    menge = new String(cont, start, len);80 System.out.println("\\textsl{" + menge +"}: & " +

    substanz + "\\\\");}

    }85

    public void endElement(String nsu, String ln, String qn)throws SAXException{

    elementname=qn;90

    if (elementname.equals("name")) {normaldata = normaldata.trim();System.out.println(normaldata +

    " (" + attrib_cocktail + ")}");95 }

    if ((elementname.equals("dekoration")) ||(elementname.equals("mixanleitung"))) {normaldata = normaldata.trim();

    100if (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 public void endDocument() throws SAXException{

    System.out.println("\\end{document}");

    }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

    public static void main(String[] args){SAXParserFactory saxpafac =

    140 SAXParserFactory.newInstance();saxpafac.setValidating(true);

    try{145 SAXParser saxpa = saxpafac.newSAXParser();

    saxpa.parse(args[0], new BarListe());

    } catch (ParserConfigurationException pcex){150 pcex.printStackTrace(System.err);

    } catch (SAXException sex){sex.printStackTrace(System.err);

    } catch (IOException ioex){ioex.printStackTrace(System.err);

    155 }}

    }

  • Anhang I Index

    #FIXED, 45#IMPLIED, 45#PCDATA, 36, 40#REQUIRED, 45

    ANY, 36, 40ATTLIST, 43Attribut, 13, 14, 16

    Apostrophe, 14Attributname, 43Attributtyp, 43Elementname, 43Quotes, 14

    CDATA, 16, 44Cocktail

    Alexander, 31Angels Face, 9B52, 19Cuba Libre, 46Dagobert Duck, 26Gin Fizz, 53Julia, 36Manhattan, 1Mike Collins, 57Pangalaktischer Donnergurgler, 40Tequila Sunrise, 41Tom Collins, 49Troubleshooter, 3

    Cocktail Meta Language, 56CSS, 4, 25

    DOCTYPE, 32DTD, 29

    Attribute, 41Elemente, 36Entitten, 46Externe Deklaration, 33Generelle Entitten, 46Interne Deklaration, 32Notationen, 49Parameter Entitten, 46

    ELEMENT, 36Element, 10, 11

    Abhngigkeiten, 36Elementauswahl, 39Elementfolge, 38Elementinhalt, 36Elementmodell, 37Elementname, 36Hufigkeitsangaben, 37leer, 12, 13

    EMPTY, 36encoding, 28Entitt, 10, 1316, 46

    als Textbaustein, 46Entityinhalt, 47Entityname, 47

    ENTITIES, 44ENTITY, 44, 47

    Hufigkeitsangabenfr Elemente?*+, 38

    HTML, 5, 19, 25, 35

    ID, 44

    Java, 21

    Kommentare, 29

    Leerraum, 13

    Marke, 12, 16Markup, 4, 10

    Language, 4

    Namenqualifizierte, 54

    Namensraum, 17unserer, 53

    NDATA, 48, 49NMTOKEN, 44NMTOKENS, 44NOTATION, 49Notationen

    Hilfsanwendung, 49Notationsname, 49

  • 74 Index

    Parser, 16, 19, 23Gltigkeit, 20Wohlgeformtheit, 20

    PHP, 21Prolog, 10, 23, 24PUBLIC, 34, 35, 48

    Regelwerk, 32

    SGML, 5Anwendung, 5, 12

    standalone, 28, 32SYSTEM, 34, 48, 49

    Tag, 4, 10, 12Textbausteine

    Entitten als, 46

    UCS, 15, 16, 22UTF, 22

    Verarbeitungsanweisung, 24Formatierung durch, 24xml, 28

    version, 28

    Wurzelelement, 10, 11, 13, 24

    XHTML, 5, 34, 35XLink, 4XML, 4

    DokumentAufbau, 10Sektion, 10

    XML-AnwendungenJava-Klassen, 59phpxml-1.0, 58Serverside, 28, 57

    xmlint, 21xmlns, 54, 56XPath, 4XSL, 4, 24, 25, 28

    AperitifWie dieses Kapitel zu seinem Namen kamWer sollte diese Broschre lesen?

    BargeflsterAufgeschnappte SatzfragmenteXML --- die ZutatenlisteVerwandtschaften: HTML, SGML, XHTML, Aufgaben zur Selbstkontrolle

    Was alles in den Shaker kommtAufbau eines XML-DokumentsElementinhalteMarken in XML und HTMLAttributeWarum Character Data nicht einfach Text istNamen: nur Schall und Rauch?Aufgaben zur Selbstkontrolle

    Gerhrt und geschtteltAus Zutaten wird ein Drink, oder: Der Parser oder 0000000000000000000000011000100?XML arbeitetKommentareAufgaben zur Selbstkontrolle

    Was alles in den Shaker darfDTDElementeAttributeEntittenParameter-EntittenGenerelle EntittenNotationenAufgaben zur Selbstkontrolle

    Unbekannte RezepturenNamensrume -- oder: Der Ehren-Cod