vorheriges KapitelInhaltsverzeichnisStichwortverzeichnisFeedbacknächstes Kapitel


Tag 21

XML und XHTML

In Kapitel 2 haben wir Sie mehrfach auf die XHTML-Spezifikation des W3C-Konsortiums verwiesen. Heute, quasi zum Ausklang des Buches, wollen wir Ihnen die XHTML- Spezifikation und die dahinter stehende XML-Technologie ein wenig näher vorstellen und damit gleichzeitig einen Ausblick auf das wagen, was uns die nächste Zukunft bringen wird.

Die Themen heute:

21.1 XML

In der ersten Hälfte des heutigen Tages wollen wir uns mit XML beschäftigen. Es war wohl im Jahre 2000, als XML eines der typischen Modethemen war. Jeder wollte auf einmal etwas mit XML anstellen, jeder wollte mitreden können. Inzwischen hat sich der Nebel ein wenig gelichtet. XML ist immer noch ein sehr wichtiges Thema, und - um eines vorwegzunehmen - ein Thema, das unserer Meinung nach große Zukunft hat. Wie bei jedem Hype hat sich aber auch ein wenig Ernüchterung breitgemacht. Der Heimanwender hat gemerkt, dass er XML (noch) nicht unbedingt einsetzen muss, zu gering ist die Unterstützung von Browserherstellern - wie gesagt, noch. Professionelle Anwender haben aber den Trend - und die Vorteile von XML - erkannt. Wie die Zukunft aussieht, erfahren Sie heute Mittag, zunächst aber möchten wir Ihnen eine kurze Einführung in diese (doch recht umfangreiche) Thematik geben. Als Motivation ein Praxisbeispiel, das zeigt, dass XML inzwischen auch im Produktivbetrieb eingesetzt wird. Einige Produktseiten des Computerherstellers Compaq, zu finden unter www.compaq.de, sind XML-basiert.

Abbildung 21.1:  Eine offensichtlich XML-basierte Seite - schauen Sie auf die URL!

Warum XML?

XML steht für eXtensible Markup Language, was in etwa mit erweiterbare Auszeichnungssprache übersetzt werden kann. Und diese Erweiterbarkeit ist auch der wohl größte Vorteil von XML gegenüber HTML. Heutzutage stößt man immer öfters an die Grenzen von HTML. Mühsam wird eine Website erstellt, bloß um dann festzustellen, dass der Konkurrenzbrowser diese völlig falsch anzeigt. Mit der zunehmenden Verbreitung von PDAs und Handhelds, die wiederum eigene Anforderungen an eine Website stellen, wird es zunehmend schwieriger, die Website für die verschiedenen Clients anzupassen. Oft findet man sich in der Lage, parallel mehrere Versionen der Website pflegen zu müssen.

Bei HTML werden die Inhalte oft nicht gesondert vom Layout getrennt, sondern sie sind stark miteinander verwoben. Genau dies macht eine Adaption für eine andere Plattform sehr schwierig.

XML will diese Lücke schließen. Die Inhalte werden in eine Struktur gefasst, und dabei völlig vom Layout getrennt. Für das Layout sind indes andere Mechanismen zuständig, die wir heute auch kurz vorstellen möchten.

Begrifflichkeiten

Bevor wir zu ein paar Beispielen kommen, möchten wir zunächst einige Begrifflichkeiten klären. Einiges wird Ihnen schon von den vorherigen Tagen bekannt sein, einiges ist neu.

Tags

XML arbeitet wie HTML auch auf Basis von Tags. Ein Tag wird durch eine spitze Klammer eingeleitet und ebenso abgeschlossen:

<para>

Jeder Tag muss durch einen entsprechenden »Gegenspieler« abgeschlossen werden. Dieser wird durch einen Schrägstrich eingeleitet:

</para>

Alles, was zwischen dem Start- und dem End-Tag steht, gehört zu dem Tag:

<para>All dies gehört zum Tag</para>

Innerhalb eines Tags dürfen auch andere Tags verwendet werden. Sie müssen nur darauf achten, dass sich die Tags nicht überschneiden. Folgendes ist beispielsweise korrekt:

<para>Dies ist der Inhalt des <strong>Tags</strong></para>

Folgendes ist dagegen falsch:

<para>Dies ist der <strong>Inhalt des Tags</para></strong>

Ein Tag kann auch einen oder mehrere Attribute haben. Deren Werte müssen entweder in doppelte oder in einfache Anführungszeichen eingeschlossen werden:

<para align="left" align='right'>All dies gehört zum Tag</para>

Nun gibt es auch Tags, die keinen Inhalt haben (ein Beispiel hierfür ist etwa das <br>-Tag von HTML). Auch dieses Tag muss geschlossen werden:

<br></br>

Hierfür gibt es aber auch eine Abkürzung: Der Schrägstrich kommt vor der schließenden spitzen Klammer, muss aber durch ein Leerzeichen von dem Tagnamen getrennt werden:

<br />

XML unterscheidet - im Gegensatz zu HTML - zwischen Groß- und Kleinschreibung. Folgendes ist also ebenfalls nicht korrekt:

<Para>All dies gehört zum Tag</para>

Und wenn Sie sich gefragt haben, welche Bedeutung das <para>-Tag überhaupt hat: Die Antwortet lautet, das bestimmen Sie! Das X in XML steht für eXtensible, und bedeutet, dass Sie beliebig Tags definieren und festlegen können. Wie gesagt, bei XML werden Inhalt und Layout voneinander getrennt, Sie haben also bei der Tagvergabe freie Hand (sollten sich aber nichtsdestotrotz Ihre Gedanken machen).

Entity

Sie kennen bereits von HTML her die besondere Bedeutung des kaufmännischen Unds: Hierdurch werden Sonderzeichen ausgegeben, beispielsweise &auml; für das kleine ä, sowie &amp; für das kaufmännische Und. So etwas nennt man Entity, und Sie können in XML auch eigene Entities erstellen. Zum Einbau dieser Entities kommen wir später.

Wurzelelement

Das Wurzelelement eines XML-Dokuments ist das oberste Element auf der Seite. Jede XML-Seite darf nur ein einziges Wurzelelement haben. Bei HTML-Seiten war dieses Element <html>.

Ein XML-Beispiel

XML-Dateien selbst sind wie HTML-Dateien auch reine Textdateien, können also mit den einfachsten Editoren erstellt werden. Hier ein einfaches XML-Dokument:

Listing 21.1: autoren1.xml

<?xml version="1.0"?>
<autoren>
<autor>
<name>Dirk Louis</name>
</autor>
</autoren>

Die erste Zeile ist ein Muss - hiermit wird das Dokument als XML-Dokument ausgezeichnet. Als nächstes kommt das Wurzelelement, in diesem Fall <autoren>. Dieses enthält ein Unterelement <autor> mit einem weiteren Unterelement, nämlich <name>, welches als Inhalt den Namen eines der beiden Autoren dieses Buches enthält.

In der Praxis ist das XML-Dokument natürlich viel länger, und enthält mehrere Autoren, und womöglich auch ein paar Werke dieser Autoren:

Listing 21.2: autoren2.xml

<?xml version="1.0"?>
<autoren>
<autor>
<name>Dirk Louis</name>
<buch erscheinungsjahr="2000">
<titel>Frontpage 2000 Kompendium</titel>
<verlag>Markt+Technik</verlag>
<koautor>Oliver Pott</koautor>
</buch>
<buch erscheinungsjahr="1999">
<titel>Jetzt lerne ich Visual C++ 6</titel>
<verlag>Markt+Technik</verlag>
</buch>
</autor>
<autor>
<name>Christian Wenz</name>
<buch erscheinungsjahr="2000">
<titel>Jetzt lerne ich ASP</titel>
<verlag>Markt+Technik</verlag>
<koautor>Christian Trennhaus</koautor>
<koautor>Andreas Kordwig</koautor>
</buch>
<buch erscheinungsjahr="2000">
<titel>Jetzt lerne ich Dynamic Web-Publishing</titel>
<verlag>Markt+Technik</verlag>
<koautor>Tobias Hauser</koautor>
</buch>
</autor>
</autoren>

Der Microsoft Internet Explorer ab Version 5 unterstützt XML; wenn Sie der Datei die Endung .xml geben, können Sie sie im Browser betrachten.

Abbildung 21.2:  #Die XML-Datei im Internet Explorer 5

Nun kommt der Verlagsname Markt+Technik öfters vor (und aus naheliegenden Gründen wird ausschließlich dieser Verlagsname verwendet). Hier könnten wir auch eine Entity verwenden. Diese wird wie folgt deklariert:

Listing 21.3: autoren3.xml (Ausschnitt)

<!DOCTYPE autoren [
<!ENTITY mut "Markt+Technik">
]>

Beachten Sie, dass nach <!DOCTYPE der Name des Wurzelelements kommen muss!

Nun kann sie wie folgt eingesetzt werden:

<verlag>&mut;</verlag>

Wir drucken obiges Listing nicht noch einmal ab, wohl aber die Ausgabe des veränderten Listings im Internet Explorer. Wie Sie sehen, wurde die Entity &mut; wie gewünscht durch den Text »Markt+Technik« ersetzt.

Abbildung 21.3:   Entities in XML

DTD

Zu einem XML-Dokument gehört auch noch die entsprechende DTD - Document Type Definition. In dieser wird angegeben, welche Struktur dem XML-Dokument zugrunde liegt, also was das Wurzelelement ist, und welche Elemente unterhalb welchen anderen Elements erlaubt sind. Die DTD ist nicht notwendig, ein XML-Dokument kann auch ohne sie existieren. Im Sinne einer sauberen Strukturierung der Daten sollten Sie aber DTDs anlegen.

Eine DTD wird durch <!DOCTYPE eingeleitet, wie wir das bereits zuvor bei den Entities gesehen haben. Dahinter folgt der Name des Wurzelelements des XML-Dokuments. Alle weiteren Angaben (beispielsweise Entities) sind in eckigen Klammern eingeschlossen.

<!DOCTYPE autoren [
...
]>

Elemente

Ein Element hat den folgenden Aufbau:

<!ELEMENT Name Inhalt>

Um das Beispiel von zuvor zu nehmen: Innerhalb von <autoren> gibt es das Element <autor>, welches die Unterelemente <name> und <buch> hat:

<!DOCTYPE autoren [
<!ELEMENT autor (name, buch)>
]>

Dementsprechend darf beispielsweise das Element <koautor> nicht direkt unterhalb von <autor> erscheinen. Wenn Sie einem Element gestatten möchten, dass jedes beliebige andere Element in ihm erlaubt ist, können Sie das Schlüsselwort ANY verwenden:

<!ELEMENT egal ANY>

Innerhalb von <egal> ist nun jedes Element erlaubt.

Das Gegenteil hierzu ist das Schlüsselwort EMPTY, welches ein leeres Element darstellt:

<!ELEMENT br EMPTY>

Nun ist es in unserem XML-Dokument aber so gewesen, dass es innerhalb von <autoren> mehrere Autoren geben kann, ein Autor schreibt unter Umständen auch mehrere Bücher, mit einer variablen Anzahl von Koautoren. Auch dies muss in der DTD angegeben werden. Werfen wir zunächst einen Blick auf das Element autor:

<!ELEMENT autor (name, buch)>

Das bedeutet: Es gibt zwei Unterelemente, name und buch. Die Reihenfolge ist hiermit festgeschrieben, und jedes dieser Unterelemente muss genau einmal vorkommen. Wenn Sie aber nun die Anzahl der Bücher variabel gestalten möchten, müssen Sie den Quantifizierer (deutsche Übersetzung des englischen quantifier) + verwenden. Dieser zeigt an: Dieses Element tritt mindestens einmal auf, aber beliebig oft. Und da man nur dann (Buch-)Autor ist, wenn man mindestens ein Buch veröffentlicht hat, ist dies genau der Quantifizierer, den wir benötigen:

<!ELEMENT autor (name, buch+)>

Wenn wir uns nicht nur auf Buchautoren beschränken möchten, sondern auch Zeitschriftenautoren berücksichtigen wollen, müssen wir noch die Alternative einführen, dass ein Autor Artikel verfasst hat. Mit dem Zeichen | wird diese Alternative angegeben. Das erinnert nicht ohne Absicht stark an einige der zuvor vorgestellten Programmiersprachen - der senkrechte Strich entspricht einem oder.

<!ELEMENT autor (name, (buch+ | artikel+))>

Der Fall, dass ein Autor sowohl Bücher als auch Artikel verfasst hat, wurde hier nicht betrachtet. Dazu benötigen wir einen anderen Quantifizierer, den wir im Folgenden vorstellen.

Werfen wir zunächst einen genaueren Blick auf das Element buch. Ein Buch hat einen Titel, einen Verlag - und eine variable Anzahl von Koautoren. Der Quantifizierer + ist also hier fehl am Platze, Sie müssen stattdessen * verwenden, was für beliebig viele steht (insbesondere auch 0).

<!ELEMENT buch (titel, verlag, koautor*)>

Somit lässt sich auch die Definition des autor-Elements verfeinern, wenn man Zeitschriftenartikel berücksichtigen will. Folgendes ist aber falsch:

<!ELEMENT autor (name, buch*, artikel*)>

Der Grund: Wenn ein Autor kein Buch und keinen Artikel geschrieben hat, würde er dennoch auf dieses Muster passen, was wir nicht beabsichtigen. Eine funktionierende Alternative wäre Folgendes:

<!ELEMENT autor (name, ( (buch+, artikel*) | (buch*, artikel+) ))>

Zur Erläuterung: Entweder mindestens ein Buch und beliebig viele Artikel, oder umgekehrt.

Was ist nun (beispielsweise) mit dem Element <titel>? Auch dies muss definiert werden. Es enthält keine Unterelemente mehr, aber Text (den Buchtitel nämlich). Hierfür gibt es einen eigenen Typ, genannt CDATA. In einem CDATA-Element dürfen weitere Elemente und Auszeichnungen vorkommen. Wollen Sie dies untersagen, also insbesondere nur Text zulassen, können Sie #PCDATA verwenden (für parseable character data). Wir verwenden an dieser Stelle CDATA, da dies flexibler ist.

<!ELEMENT titel (CDATA)>

Es gibt auch noch andere Typen außer CDATA und #PCDATA, beispielsweise für numerische Werte. Diese Einschränkung erweist sich in der Praxis aber als eher unpraktisch, und Strings sind nun einmal der wohl flexibelste Datentyp.

Hier nun die vollständigen Definitionen aller Elemente unserer Autoren-XML-Datei:

<!DOCTYPE autoren [
<!ELEMENT autor (name, buch+)>
<!ELEMENT name (CDATA)>
<!ELEMENT buch (titel, verlag, koautor*)>
<!ELEMENT titel (CDATA)>
<!ELEMENT verlag (CDATA)>
<!ELEMENT koautor (CDATA)>
]>

Natürlich wäre es möglich, koautor gegebenenfalls auch als Element vom Typ autor zu deklarieren:

<!ELEMENT koautor (CDATA | koautor)>

Dadurch würden wir aber eine rekursive Datenstruktur erhalten, was nicht in unserem Sinne ist

Attribute

Eines unserer Tags - und zwar <buch> - hatte auch ein Attribut, das Erscheinungsjahr. Attribute sollten in der DTD möglichst direkt nach der Elementsdefinition angegeben werden, und zwar nach folgendem Schema:

<!ATTLIST Element
Attribut Typ
Attribut Typ
...>

Für den Typ gibt es mehrere Möglichkeiten, und auch hier ist CDATA eine häufige Wahl:

<!ATTLIST buch
erscheinungsjahr CDATA>

Wird nichts Weiteres angegeben, sind Attribute optional. Wenn Sie ein Attribut zum Muss erklären möchten, müssen Sie in der Attributsliste noch #REQUIRED angeben:

<!ATTLIST buch
erscheinungsjahr CDATA #REQUIRED>

Somit ist die DTD für unsere Autorenliste vollständig; Sie finden Sie im Folgenden noch einmal abgedruckt:

Listing 21.4: autoren.dtd

<!DOCTYPE autoren [
<!ELEMENT autor (name, buch+)>
<!ELEMENT name (CDATA)>
<!ELEMENT buch (titel, verlag, koautor*)>
<!ATTLIST buch
erscheinungsjahr CDATA #REQUIRED>
<!ELEMENT titel (CDATA)>
<!ELEMENT verlag (CDATA)>
<!ELEMENT koautor (CDATA)>
<!ENTITY mut "Markt+Technik">
]>

Einbau

Um die DTD in Ihr XML-Dokument einzubauen, können Sie sie direkt nach der Zeile <?xml version="1.0"?> einsetzen. Wenn Sie der DTD jedoch mehrere Dokumente zugrundelegen möchten, ist es empfehlenswert, sie in einer eigenen Datei abzuspeichern. Als Dateiendung hat sich der Standard .dtd durchgesetzt (in unserem Fall beispielsweise sollten Sie die Datei autoren.dtd nennen). Sie können die DTD dann wie folgt in Ihre XML-Dokumente einbinden:

<!DOCTYPE autoren SYSTEM "autoren.dtd">

Natürlich können Sie auch relative und absolute Pfade angeben:

<!DOCTYPE autoren SYSTEM "/dtd/autoren.dtd">

Zu guter Letzt kann die DTD auch auf einem anderen Server liegen:

<!DOCTYPE autoren SYSTEM "http://ihrserver/dtd/autoren.dtd">

Beachten Sie aber unbedingt Folgendes: Wenn Sie die DTD in eine externe Datei auslagern, müssen Sie das <!DOCTYPE [ sowie ]> entfernen - denn in der XML-Datei wird ja bereits <!DOCTYPE verwendet!

XML-Parser

Um die fertigen XML-Dateien einmal auszutesten, benötigen Sie ein entsprechendes Anzeigeprogramm. Sie können die Datei jedoch zuvor noch auf syntaktische Korrektheit prüfen.

Datei prüfen

Ein XML-Dokument heißt wohlgeformt, wenn alle XML-Regeln eingehalten worden sind, also insbesondere nur ein Wurzelelement, keine ineinander verschachtelten Tags, und so weiter. Die syntaktische Korrektheit eines Dokuments ist in XML besonders wichtig. Die Programmierer sind durch HTML ein wenig »verdorben«, denn die Webbrowser akzeptieren (in begrenztem Maße) auch fehlerhaftes HTML. Bei XML ist das nicht mehr der Fall, ein Dokument ist entweder wohlgeformt oder nicht. Einer der ersten Syntaxprüfer war expat. Sie können Version 1.x unter www.jclark.com/xml/expat.html herunterladen. Sie finden dort auch einen Link auf Version 2.0, die sich zur Zeit in Entwicklung befindet.

Expat ist der zugrundeliegende XML-Parser im Netscape 6

Sie finden unter der angegebenen URL den kompletten Quellcode und können Expat selbst kompilieren. Windows-Nutzer finden im Unterverzeichnis bin eine bereits kompilierte und einsatzbereite Datei.

Um das Ganze zu testen, können Sie die zuvor entwickelte XML-Datei verwenden. Bauen Sie aber ein paar Fehler ein. Hier ein Beispiel. Sehen Sie die Unterschiede?

Listing 21.5: fehlerhaft.xml

<?xml version="1.0">
<!DOCTYPE autoren SYSTEM "autoren.dtd">
<autoren>
<autor>
<name>Dirk Louis</name>
<buch erscheinungsjahr="2000">
<titel>Frontpage 2000 Kompendium</titel>
<verlag>&mut;</verlag>
<koautor>Oliver Pott</koautor>
</buch>
<buch erscheinungsjahr="1999">
<titel>Jetzt lerne ich Visual C++ 6</titel>
<verlag>&mut;</verlag>
</buch>
</autor>
</autoren>
<autoren>
<autor>
<name>Christian Wenz</name>
<buch erscheinungsjahr="2000">
<titel>Jetzt lerne ich ASP</titel>
<verlag>&mut;</verlag>
<koautor>Christian Trennhaus</koautor>
<koautor>Andreas Kordwig</koautor>
</buch>
<buch erscheinungsjahr="2000">
<titel>Jetzt lerne ich Dynamic Web-Publishing</titel>
<verlag>&mut;</verlag>
<koautor>Tobias Hauser</koautor>
</buch>
</autor>
</autoren>

Rufen Sie nun den Parser auf, indem Sie auf Kommandozeilenebene xmlwf dateiname aufrufen (in unserem Beispie etwa xmlwf autoren.xml). Der Parser sollte folgende Meldung ausgeben:

autoren.xml:1:0: unclosed token

Erster Fehler entdeckt: Das Fragezeichen vor der schließenden Klammer in der ersten Zeile fehlt. Fügen Sie dieses Fragezeichen hinzu und rufen Sie xmlwf noch einmal auf. Es kommt zu folgender Ausgabe:

autoren.xml:17:0: junk after document element

Auch diese Fehlermeldung ist leicht zu erklären: Es gibt zwei Wurzelelemente, das darf nicht sein. Nachdem Sie auch diesen Fehler behoben haben (entfernen des zweiten <autoren>-Elements und verschieben des zweiten <autor>-Blocks in das Innere des ersten <autoren>-Elements) gibt Expat keine Fehlermeldung mehr aus, das Dokument ist also wohlgeformt.

Expat überprüft nur XML-Dateien, nicht aber eingebundene DTDs. Wenn Sie auch DTDs überprüfen möchten, ist IBM's XML4J (XML for Java) eine gute Wahl. Sie finden diesen Parser unter www.alphaworks.ibm.com/tech/xml4j.

Datei anzeigen

Sowohl der Internet Explorer ab Version 5 als auch der Netscape 6 verstehen (zumindest ein wenig) XML (zum aktuellen Zeitpunkt eignet sich jedoch lediglich der Internet Explorer zum Testen). Sie können also eine XML-Datei direkt in einem dieser Browser öffnen. Sie haben das bereits in Abbildung 21.2 gesehen.

Doch diese Darstellung ist sehr spartanisch. Kommen wir also zum letzten und nicht unwichtigen Schritt - dem Layout.

Layout mit CSS und XLS

Sie haben prinzipiell zwei Möglichkeiten, XML-Dateien mit Layout zu versehen. Entweder, Sie verwenden Style Sheets, oder Sie setzen XSL ein.

CSS

Style Sheets haben Sie bereits in der ersten Woche kennen gelernt. Sie können eine CSS- Datei wie folgt in Ihre XML-Datei einbinden:

<?xml:stylesheet href="autoren.css" type="text/css"?>

Das folgende Style Sheet zeigt exemplarisch einige Formatierungsmöglichkeiten:

Listing 21.6: autoren.css

autor {display: block; padding-top: 5pt; font-family: verdana;}
name {display: block; font-weight: bold; font-size: 16pt;}
buch {display: block; text-indent: 15pt; font-size: 12pt;}
titel {display: block; font-weight: bold; font-size: 10pt;}
verlag {display: block; font-size: 10pt;}
koautor {display: block; font-size: 10pt; font-style: italic;}

Und so sieht das Ganze dann im Internet Explorer aus:

Abbildung 21.4:   XML mit CSS

XSL

XSL steht für Extensible Style Language und ist eine Sprache, mit der Layoutanweisungen für XML-Elemente angegeben werden kann. Im konkreten Fall bedeutet dies, dass die XML-Daten nach einer bestimmten Verarbeitungsvorschrift (beispielsweise) in HTML umgewandelt werden. Momentan aktuell ist XSL2. Die Sprache ist sehr umfangreich, wir können an dieser Stelle aber nur einen kleinen Ausschnitt darstellen.

Eine XSL-Datei hat den folgenden Grobaufbau:

<xsl:stylesheet
xmlns:xsl="http://www.w3.org/TR/WD-xsl">

Templates

</xsl:stylesheet>

Der mit Templates gekennzeichnete Bereich ist hier ein Platzhalter für die Formatierungsvorschriften für die einzelnen XML-Elemente. Ein einzelnes Template sieht folgendermaßen aus:

<xsl:template match="Muster">
Anweisungen
</xsl:template>

Muster gibt hier an, nach welchem XML-Element oder XML-Wert gesucht werden soll. Am Einfachsten ist es, wenn Sie hier den Namen des XML-Elements angeben. Analog zur DTD-Definition können Sie auch wieder Alternativen und Ähnliches verwenden, dies soll aber nicht mehr Thema dieses Buches sein. Eine Besonderheit wollen wir nicht unerwähnt lassen: Mit / wird das Wurzelelement repräsentiert.

Die Anweisungen werden direkt am Beispiel erläutert.

Die folgende XSL-Datei formatiert die Autorenliste. Wir drucken sie zunächst ab und analysieren Sie danach.

Listing 21.7: autoren.xsl

<?xml version="1.0"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/TR/WD-xsl">

<xsl:template match="/">
<html>
<head>
<title>Autorenliste</title>
</head>
<body bgcolor="white">
<xsl:for-each select="autoren/autor">
<p>
<strong><xsl:value-of select="name"/></strong>
</p>
<p>
<xsl:apply-templates select="buch"/>
</p>
<hr />
</xsl:for-each>
</body>
</html>
</xsl:template>

<xsl:template match="buch">
<xsl:value-of select="titel"/><
(<xsl:value-of select="@erscheinungsjahr"/>)<br />
<xsl:value-of select="verlag"/><br />
<ul>
<xsl:apply-templates select="koautor"/>
</ul>
</xsl:template>

<xsl:template match="koautor">
<li><xsl:value-of/></li>
</xsl:template>

</xsl:stylesheet>

Beginnen wir mit dem ersten Block:

<xsl:template match="/">
<html>
<head>
<title>Autorenliste</title>
</head>
<body bgcolor="white">
<xsl:for-each select="autoren/autor">
<p>
<strong><xsl:value-of select="name"/></strong>
</p>
<p>
<xsl:apply-templates select="buch"/>
</p>
<hr />
</xsl:for-each>
</body>
</html>
</xsl:template>

Dieser sagt aus: Suche das Wurzelelement (match="/") und gib dann zunächst eine Reihe von HTML-Anweisungen aus. Mit <xsl:for-each select="autoren/autor"> wird eine For- Each-Schleife initiiert, die Sie bereits aus den Programmiersprachenkapiteln her kennen. Es werden alle <autor>-Elemente innerhalb des <autoren>-Elements durchsucht. Auch hier wird wieder eine Reihe von HTML-Code ausgegeben. Inmitten dieses Codes kommt dann folgendes Element:

<xsl:value-of select="name"/>

Hierdurch wird der Wert des <name>-Elements ausgegeben; in unserem Beispiel ist das der Name des entsprechenden Autors.

Drei Zeilen weiter unten sehen Sie eine neue Anweisung:

<xsl:apply-templates select="buch"/>

Hierdurch wird dem XSL-Prozessor gesagt, dass er nach dem <buch>-Element suchen (select="buch") und für alle gefundenen Elemente die Templates verarbeiten (apply- templates) soll. Werfen wir einen direkten Blick auf dieses Template:

<xsl:template match="buch">
<xsl:value-of select="titel"/>
(<xsl:value-of select="@erscheinungsjahr"/>)<br />
<xsl:value-of select="verlag"/><br />
<ul>
<xsl:apply-templates select="koautor"/>
</ul>
</xsl:template>

Zunächst wird der Titel und der Verlag des Buches ausgegeben. Sie sehen hier auch, wie der Wert eines Attributs ausgegeben wird: Um ein Attribut von einem Element zu unterscheiden, wird dem Attributsnamen (hier: erscheinungsjahr) ein Klammeraffe vorangestellt.

Als nächstes wird mit <ul> eine Aufzählungsliste gestartet, und mit <xsl:apply-templates select="koautor"/> die Verarbeitung der Templates für alle <koautor>-Elemente gestartet. Diese sehen so aus:

<xsl:template match="koautor">
<li><xsl:value-of/></li>
</xsl:template>

Der Text im Elements wird als Listenelement ausgegeben.

Und damit haben Sie Ihre erste XSL-Datei erstellt. Eingebunden wird sie in die XML- Datei wie folgt:

<?xml:stylesheet href="autoren.xsl" type="text/xsl"?>

Hierbei steht autoren.xsl für den Dateinamen der obigen XSL-Datei. Starten Sie Ihren Browser, und laden Sie die neue XML-Datei. In Abbildung 21.5 sehen Sie, was der Internet Explorer 5 daraus macht.

Abbildung 21.5:  XML und XSL

Hiermit beenden wir unsere Schnelleinführung in XML. Sie haben damit einen ersten Einblick in eine Technologie erhalten, die in Zukunft eine noch größere Rolle spielen wird als jetzt schon!

21.2 XHTML

In Anerkennung der Bedeutung des neuen XML-Standards hat das W3C-Konsortium in den Jahren 1999/2000 seinen HTML 4-Standard auf der Basis von XML neu formuliert. Das Ergebnis heißt XHTML und lässt sich am besten als eine Art »strenges HTML« verstehen.

XHTML ist vollständig XML-kompatibel und gründet derzeit auf drei XML- Dokumenttypdeklarationen, die den Dokumenttypen aus dem HTML 4-Standard entsprechen. XHTML ist aber auch nicht weit von HTML entfernt, und unter Beachtung einiger weniger Regeln ist es möglich, Webseiten aufzusetzen, die zum einem XML- kompatibel sind, zum anderem aber auch von traditionellen Webbrowsern ohne XML- Parser verarbeitet können.

Warum sollte man auf XHTML umstellen?

XHTML bringt uns genau die Vorteile, die auch XML auszeichnen: es ist strikt standardisiert und es ist modular erweiterbar. Für die Zukunft ist daher zu erwarten, dass es eine Reihe von modularen Erweiterungen zu XHMTL geben wird. Insbesondere die Integration neuer Technologien ist dank der modularen Erweiterbarkeit von XML/ XHTML kein Problem mehr.

XML hat gezeigt, dass es für Daten, die mit Markups gekennzeichnet sind, weit mehr Einsatzgebiete als nur die Formatierung und Darstellung in einem Browser gibt. Mit zunehmender Verbreitung von XHTML wird für XHTML eine vergleichbare Entwicklung einsetzen und es wird neben den traditionellen Browsern immer mehr XHTML-Parser geben, die XHTML-Dokumente auf die unterschiedlichsten Weisen auswerten und verarbeiten werden.

Schließlich ist XHTML wirklich nicht schwer zu erlernen. Als HTML-Autor brauchen Sie nur ein paar einfache Regeln zu beachten.

Von HTML zu XHTML

Unter Beachtung einiger weniger Regeln ist es möglich, Webseiten aufzusetzen, die zum einem XHTML-kompatibel sind, zum anderem aber auch von traditionellen Webbrowsern ohne XML-Parser verarbeitet können.

Auf der Webseite http://validator.w3.org/ können Sie Ihre HTML-Dokumente auf korrekte XHTML-Syntax hin untersuchen lassen.

Abbildung 21.6:  Hier können Sie Webseiten online auf korrektes HTML/XHTML testen lassen

21.3 Zusammenfassung

Heute haben wir Ihnen XML vorgestellt. Sie haben erfahren, warum derzeit ein so großes Interesse an XML besteht und wie man als Webdesigner XML nutzen kann. Wir haben zusammen ein erstes XML-Dokument erstellt und mit Hilfe eines XML-Parsers getestet. Da XML in erster Linie nur den logischen Aufbau eines Dokuments beschreibt, stellte sich die Frage, wie man Formatierungsvorschriften für XML-Dokumente vorsehen kann. Mit CSS und XSL haben wir Ihnen zwei Möglichkeiten zur Formatierung von XML-Daten aufgezeigt.

Zum guten Schluss sind wir noch einmal auf XHTML zu sprechen gekommen und haben eine Checkliste erstellt, nach der man weitgehendst sicherstellen kann, dass eine Webseite sowohl von traditionellen Browsern als auch von Browsern mit XML-Parsern dargestellt werden kann.

21.4 Fragen und Antworten

Frage:
Ich finde XML sehr interessant. Sollte ich mich weiter in XML einarbeiten?

Antwort:
Auf jeden Fall. Selbst wenn es in Ihrem Tätigkeitsfeld derzeit keine sinnvolle Einsatzmöglichkeit für XML geben sollte, wird es ihr Schaden nicht sein, wenn Sie sich eingehender mit XML beschäftigen. XML ist eine Zukunftstechnologie und gewinnt derzeit ständig an Bedeutung.

Frage:
Ich arbeite als Webdesigner und kann mich nicht für XML begeistern. Muss ich mich mit XML beschäftigen?

Antwort:
Nein, es steht derzeit nicht zu erwarten, dass HTML von XML oder XHTML verdrängt oder gar ersetzt werden könnte. Wenn Sie professionell im Bereich Webdesign tätig sind, sollten Sie aber darauf gefasst sein, dass Kunden oder Ihr Chef irgendwann mit der Forderung nach XML-Anwendungen an Sie herantreten könnten.

21.5 Workshop

Der Workshop enthält Quizfragen, die Ihnen helfen sollen, Ihr Wissen zu festigen, und Übungen, die Sie anregen sollen, das eben Gelernte umzusetzen und eigene Erfahrungen zu sammeln. Versuchen Sie, das Quiz und die Übungen zu beantworten und zu verstehen, bevor Sie zur Lektion des nächsten Tages übergehen.

Quiz

  1. Unterscheidet XML zwischen Groß- und Kleinschreibung?
  2. Mit welchen drei Elementen beginnt ein typisches XML-Dokument?
  3. Wie kann man leere HTML-Elemente so deklarieren, dass Sie sowohl von traditionellen HTML-Browsern als auch von XHTML-Parsern akzeptiert werden?

Übungen

  1. Am letzten Tag wollen wir Sie nicht noch mit Übungen quälen. Falls Sie aber trotzdem Lust haben, noch eine Übung zu machen, dann verwandeln Sie doch folgenden HTML-Code in ein korrektes XHTML-Dokument und testen Sie es unter http://validator.w3.org/.
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
    "http://www.w3.org/TR/html4/strict.dtd">

    <head>
    <style type="text/css">
    <!--
    body { background-color: black; color: white;
    margin-top: 10px}
    div.sonne { position: absolute; left: 350px; top: 120px}
    div.erde { position: absolute; left: 335px; top: 200px }
    -->
    </style>
    </head>

    <body>

    <h1>Erde und Sonne</h1>

    <div class="sonne"><img src="sonne_t.gif" width="150" height="150"></div>
    <div class="erde"><img src="erde_t.gif" width="60" height="60"></div>

    </body>
    </html>



vorheriges KapitelInhaltsverzeichnisStichwortverzeichnisFeedbackKapitelanfangnächstes Kapitel


© Markt+Technik Verlag, ein Imprint der Pearson Education Deutschland GmbH