Jetzt lerne ich XML

(c) Günter Born

Auszug über MSXML 3.0 und XSLT1.0 aus dem Titel "Jetzt lerne ich XML" von Markt + Technik Verlag.

Bemerkungen zu MSXML 3.0

An dieser Stelle möchte ich noch näher auf den Microsoft XML-Parser MSXML eingehen. Mit der Vorstellung des Internet Explorer 5.0 führte Microsoft auch eine XML-Unterstützung ein. Microsoft verfolgte das Ziel, die XML-Fähigkeiten möglichst nahe an die damaligen W3C-Arbeitsentwürfe etc. anzupassen. Zu dieser Zeit lag aber nur ein Arbeitsentwurf zu XSL vor. Der MSXML-Parser implementierte in der Version 2.0 die in diesem Entwurf vorgeschlagenen Methoden zur Transformation. Nach Erscheinen des Browsers wurde im W3C der XSLT-Entwurf aus XSL ausgegliedert und kräftig überarbeitet. Dies führte dazu, dass die auf XSL basierende Microsoft MSXML-Implementierung von XSLT nicht mehr konform zur W3C-XSLT-1.0-Empfehlung ist. So verwendet MSXML 2.x den Namensraum http://www.w3.org/TR/WD-xsl.

Im ersten Ansatz hatte ich die Beispiele auf die Version 2.x des MSXML-Prozessors abgestimmt. Sie finden diese Beispiele auf der Begleit-CD im Ordner \Beisp\Kap07\msxml2.

Kurz bevor dieses Buch fertig gestellt wurde, veröffentlichte Microsoft die MSXML-Bibliothek in der Version 3. Diese Bibliothek enthält einen mit den W3C-Vorgaben für XSLT-1.0 konformen XSLT-Prozessor. Um auch ältere XML/XSL-Dokumente weiter bearbeiten zu können, unterstützt MSXML 3.0 auch die Funktionen aus MSXML 2.x. Die Unterscheidung, welche Funktionalität gemeint ist, erfolgt über den Namensraum für das Style Sheet.

  • http://www.w3.org/TR/WD-xsl: Bezieht sich auf den alten XSL-Namensraum der MSXML-2.x-Prozessoren und sollte (wegen der fehlenden W3C-XSLT-1.0-Konformität) nicht mehr für Neuentwicklungen genutzt werden.
  • http://www.w3.org/1999/XSL/Transform: Dies ist der im W3C-Standard XSLT 1.0 vereinbarte Namensraum. Zeichen Sie Ihre Style-Sheet-Dokumente mit diesem Namensraum aus, sollten die Ergebnisse in MSXML auch mit anderen XSLT-Prozessoren zu verarbeiten sein.

Um Ihnen das Umsetzen der Buchbeispiele auf andere XSLT-Prozessoren zu erleichtern, wurde das nachfolgende Kapitel auf die Möglichkeiten von MSXML 3.0 abgestimmt. Sie benötigen daher zur Bearbeitung der Beispiele aus dem Ordner \Beisp\Kap07 der Begleit-CD die Version 3.0 des XML-Parsers.

Die Downloadadresse für den Parser lautet msdn.microsoft.com/xml. Sie finden auf dieser Seite alle von Microsoft angebotenen XML-Werkzeuge und Dokumente.

Wichtige Hinweise zur Installation von MSXML 3.0

Leider gibt es eine Tücke bei der Verwendung des Microsoft XML-Parsers. Standardmäßig werden Sie die aus dem Internet heruntergeladene EXE-Datei des Parsers per Doppelklick anwählen und die erforderlichen Dateien installieren lassen. Sind bereits Versionen des MSXML-Parsers (z.B. über den Internet Explorer 5.x) installiert, richtet das Setup-Programm die neue Version des Parsers im so genannten Side-by-Side-Modus ein. Dies bedeutet, die alten Bibliotheken werden nicht überschrieben. Dies stellt sicher, dass Sie auch alte XML-/XSL-Dokumente ohne Kompatibilitätsprobleme bearbeiten können.

Was auf den ersten Blick sehr komfortabel aussieht, erweist sich bei XSLT als Problem. Verwenden Sie in der XSL-Datei den vom W3C für XSLT 1.0 vorgegebenen Namensraum, wird das Dokument als fehlerhaft zurückgewiesen (intern wird auf die alten MSXML-Versionen zurückgegriffen). Abhilfe bringt nur, den MSXML 3.0-Parser im so genannten Replacement-Modus zu installieren. Hierzu benötigen Sie das Programm XMLINST.EXE, das Sie auf den XML-Webseiten (msdn.microsoft.com/xml) finden. Rufen Sie dieses Programm im Fenster der Eingabeaufforderung mit

Pfad\xmlinst -u

auf. Das Programm entfernt jetzt alle Registrierungseinträge für die installierten MSXML-Versionen. Da die Datei msxml3.dll bereits durch die Side-by-Side-Installation des Parsers im Windows Ordner \System vorliegt, müssen Sie diese erneut registrieren. Geben Sie im Dialogfeld Ausführen den Befehl

regsvr32 pad\msxml3.dll

ein. In beiden Fällen ist natürlich der Platzhalter pfad durch die erforderliche Pfadangabe (z.B. C:\Windows\System) zu ersetzen. Anschließend geben Sie in der Befehlszeile erneut den Befehl:

Pfad\xmlinst

ein. Jetzt sollte eine XML-Unterstützung basierend auf MSXML 3.0 im System vorhanden sein. Der neue Parser benutzt keine alten DLL-Dateien mehr, unterstützt aber trotzdem die vorherigen Funktionen. Gleichzeitig werden neue Objekte und Methoden für verschiedene Funktionen (z.B. XSLT) bereitgestellt.

In Windows 9x wird das Programm xmlinst eine Fehlermeldung liefern, dass bestimmte Windows NT-Prozesstabellen nicht gefunden werden. Diese Meldung können Sie ignorieren, zumindest bei meinen Versuchen hat die Installation unter Windows 9x funktioniert. Weitere Hinweise zur Installation etc. entnehmen Sie den Microsoft Webseiten oder dem bereits mehrfach erwähnten Microsoft XML SDK 3.0, das sich ebenfalls von der Microsoft XML-Website herunterladen lässt.

Eine XLS-Datei im XML-Dokument referenzieren

Für die Beispiele dieses Kapitels verwenden wir teilweise den Internet Explorer 5.x (mit integriertem XML/XSLT-Prozessor) als Anzeigeprogramm. Um ein XML-Dokument per Doppelklick zu transformieren und im Browser anzuzeigen, muss das XML-Dokument eine Referenz auf die zugehörige XSL-Datei enthalten. Diese Referenz wird wie bei CSS-Dateien (siehe vorheriges Kapitel) über eine Processing Instruction referenziert. Diese Processing Instruction besitzt folgenden Aufbau:

<?xml-stylesheet type="text/xsl" href="datei.xsl"?>

Die xml-stylesheet-Processing-Instruction veranlasst den XML-Parser, die betreffende Style-Sheet-Datei auszuwerten. Der Typ dieser Datei wird über das type-Attribut der Processing Instruction identifiziert. In obiger Anweisung wird ein XSL-Style-Sheet und kein CSS-Style-Sheet referenziert. Der Verweis auf die Style-Sheet-Datei erfolgt über eine URI-Angabe im href-Attribut.

Damit das Ganze auch funktioniert, muss natürlich der Mime-Typ "text/xsl" auf dem Rechner registriert sein. Wenn Sie den Internet Explorer 5 installieren, wird diese Registrierung automatisch vorgenommen. Beachten Sie auch, dass die XSLT-Empfehlung den Mime-Typ "text/xml" für Style-Sheet-Dateien vorsieht. Die Beispiele dieses Kapitels benutzen aber die Microsoft-Vorgaben.

Beispiel: XML-Dokument per XSL-Datei anzeigen

Es soll an einer sehr einfachen XML-Dokumentdatei demonstriert werden, wie sich diese mittels eines XSL-Style-Sheets im Internet Explorer 5 darstellen lässt. Dabei möchte ich Ihnen auch einige Fallen aufzeigen, die im Microsoft Parser MSXML lauern.

Die XML-Dokumentdatei des Beispiels

Die XML-Dokumentdatei besitzt in diesem Beispiel folgenden Aufbau:

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl"
href="liste.xsl"?>
<daten>
<person>
<name>Braun</name>
<vorname>Hans</vorname>
<tel>069-305-7023</tel>
</person>
...
</daten>

Das Wurzelelement daten kann ein oder mehrere person-Elemente mit Personendaten enthalten. Diese XML-Dokumentdatei besitzt keinen Verweis auf eine DTD oder ein XDR-Schema. Ich habe an dieser Stelle zur Vereinfachung nur ein person-Element mit Daten aufgeführt.

Die zweite Zeile der XML-Datei enthält die Processing Instruction, die den XML-Parser anweist, die XSL-Style-Sheet-Datei zu laden und die Funktionen des XSLT-Teils auszuführen. Das XSL-Style-Sheet enthält die Informationen zur Umformung des XML-Dokuments in ein darstellbares HTML-Dokument.

So soll die Ausgabe aussehen

Das in der zweiten Zeile der XML-Dokumentdatei in der Processing Instruction referenzierte XSL-Style-Sheet soll die XML-Daten der person-Elemente bzw. deren Unterelemente in eine HTML-Struktur umformen. Um das ganze Beispiel recht einfach zu halten, habe ich beschlossen, die Werte für einen Datensatz (alles was im person-Element an Daten enthalten ist) in einer Zeile fett auszugeben. Zusätzlich enthält die Ergebnisdatei noch eine Überschrift auf der Seite sowie einen Seitentitel für das gesamte Dokument (Abbildung 1.1).

Abbildung .1: Anzeige der XML-Daten als HTML-Seite

So ist die XSL-Datei aufgebaut

Die XSL-Datei Liste0.xsl ist selbst wiederum im XML-Format aufgebaut und besitzt nachfolgend gezeigte Struktur.

<?xml version='1.0' encoding="ISO-8859-1"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="/">
<html>
<head><title>XSL-Beispiel</title></head>
<body>
<p><b>Namensliste aus XML-Dokument</b></p>
<xsl:for-each select="daten/person">
<b><xsl:value-of select="."/></b><br/>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

Nach der XML-Deklaration in der ersten Zeile definiert die zweite Zeile das Wurzelelement stylesheet und bezieht dieses auf den Namensraum für XSLT 1.0:

<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">

Das Präfix xsl dient zur Identifizierung der Elemente der XSL-Datei, die sich auf den Namensraum beziehen. Dies bedeutet, immer wenn ein XSLT-Befehl vorkommt, muss das betreffende XSL-Element dieses Präfix aufweisen.

Die Beispiele aus der Hilfe des Microsoft XML SDK 2.x verwenden den (zur XSLT-1.0-Empfehlung nicht konformen) XSL-Namensraum http://www.w3.org/TR/WD-xsl. Um das obige Beispiel ausführen zu können, benötigen Sie daher einen XSLT-1.0-kompatiblen XSLT-Prozessor (z.B. MSXML 3).

Schauen wir uns die restlichen Anweisungen nochmals an. Style Sheets bestehen aus Vorlagen (die die Ausgabe beschreiben) und Regeln, nach denen die Ausgaben erfolgen sollen. Die Regeln werden in Elementen des Namensraums xsl formuliert. Die folgende Anweisung

<xsl:template match="/">
...
</xsl:template>

definiert bereits die erste Regel. Eigentlich soll das Element template die Vorlage aufnehmen, die zur Transformation der XML-Daten in die Ausgabe anzuwenden ist. Über das Attribut match lässt sich dann aber angeben, worauf die Vorlage angewandt wird. Hierfür wird im Wert des Attributs match ein Muster (konkreter ein XPath-Ausdruck, siehe folgende Seiten) hinterlegt, das die Elemente des XML-Dokuments beschreibt, auf die die Vorlage anzuwenden ist. In diesem Beispiel wird das Muster "/" benutzt, das in XPath das Wurzelelement adressiert. Die obige Struktur besagt also, dass die im Element enthaltene Vorlage auf die Dokumentinstanz anzuwenden ist.

Zwischen Start- und Endtag des template-Elements können Sie dann die Vorlage als Schablone für den auszugebenden Text hinterlegen. Diese Schablone kann wiederum eigene Regeln aufweisen und sieht im obigen Beispiel folgendermaßen aus:

<html>
<head><title>XSL-Beispiel</title></head>
<body>
<p><b>Namensliste aus XML-Dokument</b></p>
<xsl:for-each select="daten/person">
<b><xsl:value-of select="." /></b><br/>
</xsl:for-each>
</body>
</html>

Im Wesentlichen handelt es sich um HTML-Code, der direkt in das Ausgabedokument übertragen wird. Innerhalb der Vorlage lassen sich aber weitere Regeln als XSLT-Anweisungen eintragen. Ich habe dieses Regeln im obigen Code fett hervorgehoben. Die Regeln legen dann fest, wie die Vorlage mit Daten aus dem XML-Dokument zu ergänzen ist.

Die obige Sequenz benutzt beispielsweise die for-each-Anweisung, die alle angegebenen Elemente im XML-Dokument bearbeitet. Über das select-Attribut vereinbaren Sie dann, das Element gemeint ist (hier das Element person im Wurzelelement daten). Die for-each-Regel bearbeitet also alle Personendatensätze des XML-Dokuments.

Die value-of-Anweisung liest die Werte der Elemente und fügt diese in den Ausgabetext an der betreffenden Stelle ein. In dieser Anweisung wird das select-Attribut auf den Wert "." gesetzt. Dieses Zeichen benennt den aktuellen Knoten im XML-Dokument (also einen person-Datensatz). Die Regel übernimmt dann alle Unterelemente eines person-Elements in die Ausgabe.

Bei den XSLT-Anweisungen handelt es sich um XML-Elemente, die Attribute aufweisen können. Attribute wie match oder select können Muster zur Auswahl der XML-Elemente enthalten (z.B. "/" oder "daten/person"). Die zulässigen Muster werden in der XPath-Empfehlung des W3C beschrieben. Auf die Details kommen wir später noch zurück.

Zur Bearbeitungszeit wertet der XSLT-Prozessor das XSL-Style-Sheet aus und transferiert den Inhalt der Vorlage in die Ausgabe. Enthält die Vorlage eine Regel, wertet der Prozessor diese aus. Über Attribute lassen sich Muster angeben, die bei der Ausführung mit den XML-Daten verglichen werden. Immer wenn das Muster mit den Daten übereinstimmt, führt der Prozessor die Regel aus und übernimmt das Ergebnis in die Ausgabe. Als Ergebnis des obigen Beispiels erhalten Sie dann die in Abbildung 1.1 angezeigte HTML-Seite.

Sie finden die Dateien Bsp07_01.xml und Liste0.xsl im Ordner \Beisp\Kap07 auf der Begleit-CD. Das Beispiel lässt sich direkt im Internet Explorer 5.x anzeigen, indem Sie auf die XML-Datei doppelklicken.

(c) by Günter Born - www.borncity.de - All Rights reserved

Literatur

Hier gehts um XML

Neben HTML nimmt ein weiterer Standard, die Extended Markup Language (XML) mehr und mehr Gestalt an. Wer über reines HTML hinaus möchte, kommt an XML nicht vorbei. Rund um diesen Standard des W3C haben sich in der letzten Zeit eine Reihe von Anwendungen gebildet (z.B. WML zur Gestaltung von WAP-Seiten, SVG als Grafiksprache, VML als Microsofts Grafiksprache, MathML zur Darstellung mathematischer Formeln, SMIL zur Anwendung von Multimediaeffekten, HTML+TIME zur Zeitsteuerung etc. Der Internet Explorer 5.0 unterstützt bereits XML und viele dieser XML-Anwendungen. Die Einarbeitung in XML scheiterte bisher aber häufig an der ziemlich trockenen "Theorie" zu XML. Dies wird sich nun ändern. Im bereits erwähnten HMTL-Kompendium finden Sie sowohl eine Einführung in XML als auch Hinweise zu XHTML, die in XML formulierte Variante von HTML. Ins Detail geht es aber in diesem Titel:

Jetzt lerne ich XML Günter Born: Jetzt lerne ich XML
Markt+Technik, München, Seiten: 432, Preis: 49,95 DM, ISBN: 3-8272-5924-X
1 CD, 02-2001

Hier erfahren Sie, was es zum Thema XML zu wissen gibt, ohne dass Sie schon vorher Profi sein müssen oder Programmierkenntnisse benötigen.

Dies reicht von einer einfachen Einführung in das Erstellen von WAP-Seiten mit WML über XML-Grundlagen bis hin zur Realisierung von Spezialeffekten in Webseiten (z.B. zeitgesteuerte Effekte mit SMIL bzw. HTML+Time oder die Darstellung von Vektorgrafiken mit VML bzw. SVG).

Wer sich professionell mit dem Thema auseinandersetzen möchte, wird um diesen Titel nicht herumkommen.

Alles am Stück ein Buch mit CD-ROM

Die vollständige und auf HTML 4.0x aktualisierte gedruckte Fassung dieser Referenz finden Sie in:

HTML Kompendium Günter Born: HTML Kompendium,
Mit XHTML, DTHTML, CSS, XML, XSL und WML
Markt+Technik, München, 2000, ISBN 3-8272-5830-8, 1049 Seiten

Bestseller, ComputerBild "Buch der Woche", Five Stars bei Amazon

Dieser Titel mit CD widmet sich umfassend dem Thema HTML samt Randgebieten und geht auch auf XML ein. Mit dem Buch und der CD erhalten Sie:

  • Eine komplette Referenz zur Sprache HTML von der Einführung bis zur Diskussion spezieller Fragen wie Tabellen, Frames, JavaScript etc.
  • Eine gedruckte Referenz aller HTML 4-Befehle sowie der betreffenden Attribute (wobei in der Referenz angegeben wird, in welchen HTML-Versionen die Befehle verfügbar sind).
  • Weitergehende Informationen zu Cascading StyleSheets, Dynamic HTML (DHTML) und eine Einführung in die Extended Markup Language (XML) samt Kapitel zum Erstellen von WAP-Seiten mit WML.

Auf der diesem Buch beiliegenden Begleit-CD-ROM finden Sie:

  • Eine Sammlung der besten Werkzeuge zum Erstellen von HTML-Dokumenten für verschiedene Plattformen wie Windows, OS/2, Unix und Macintosh.
  • Alle Beispiele, die im Buch besprochen werden.
  • Zugangssoftware für verschiedene Online-Dienste.

Enagierte Anwender und professionelle Webdesigner greifen daher auf dieses Standardwerk (welches in ComputerBild 2000 zum Buch der Woche gekürt wurde) zurück.

(c) by Günter Born - www.borncity.de - All Rights reserved