Die direkte Anzeige von XML in Browsern

(Auszug aus "XML in a Nutshell" von Elliotte Rusty Harold & W. Scott Means)

Irgendwann, so hofft man, werden Browser in der Lage sein, nicht nur XHTML-Dokumente, sondern auch alle XML-Dokumente anzuzeigen. Da es zu viel verlangt ist zu erwarten, dass Browser die Semantik für alle XML-Anwendungen – sowohl aktuelle als auch noch zu erfindende – bereitstellen, werden allen Dokumenten Stylesheets beigefügt werden, die Anweisungen enthalten, wie die einzelnen Elemente dargestellt werden sollen.

Die momentan wichtigsten Stylesheet-Sprachen sind:

Irgendwann werden weitere Versionen dieser Sprachen dazukommen, einschließlich wenigstens CSS 2.1, CSS Level 3 und XSLT 2.0. Lassen Sie uns jedoch zunächst einmal schauen, wie und wie gut die bisherigen Style-Sprachen von den existierenden Browsern unterstützt werden.

Die Verarbeitungsanweisung xml-stylesheet

Das mit einem Dokument verknüpfte Stylesheet wird durch eine xml-stylesheet-Verarbeitungsanweisung im Prolog des Dokuments gekennzeichnet, die nach der XML-Deklaration, aber vor dem Start-Tag des Wurzelelements kommt. Diese Verarbeitungsanweisung verwendet Pseudo-Attribute, um das Stylesheet zu beschreiben; d.h. sie sehen zwar wie Attribute aus, sind aber keine Attribute, da xml-stylesheet eine Verarbeitungsanweisung und kein Element ist.

Die erforderlichen Pseudo-Attribute href und type

Es sind zwei Pseudo-Attribute für xml-stylesheet-Verarbeitungsanweisungen notwendig. Der Wert des Pseudo-Attributs href gibt die – möglicherweise auch relative – URL an, unter der das Stylesheet zu finden ist. Das Pseudo-Attribut type gibt den MIME-Typ des Stylesheet an, text/css für Cascading Stylesheets, application/xml für XSLT-Stylesheets. Im folgenden Beispiel teilt die Verarbeitungsanweisung xml-stylesheet den Browsern mit, dass vor der Anzeige des Dokuments das CSS-Stylesheet person.css auf das Dokument angewendet werden soll.

<?xml version="1.0"?>
<?xml-stylesheet href="person.css" type="text/css"?>
<person>Alan Turing</person>

Code-Beispiel: Ein XML-Dokument, dem ein Stylesheet zugeordnet ist

Anmerkung: Der Internet Explorer von Microsoft verwendet type="text/xsl" für XSL-Stylesheets. Der MIME-Medientyp text/xsl ist aber nicht bei der IANA (Internet Assigned Numbers Authority) registriert und wird dies auch niemals sein. Er ist ein Produkt der Erfindungsgabe von Microsoft. Irgendwann wird application/xslt+xml registriert, um insbesondere XSLT-Stylesheets zu identifizieren.

Zusätzlich zu diesen beiden notwendigen Pseudo-Attributen gibt es vier optionale Pseudo-Attribute:

  • media
  • charset
  • alternate
  • title

Das Pseudo-Attribut media

Das Pseudo-Attribut media enthält einen kurzen String, der das Medium kennzeichnet, für das dieses Stylesheet eingesetzt wird, beispielsweise Papier, Bildschirmausgabe, Fernseher usw. Entweder gibt es ein einzelnes Medium oder eine kommaseparierte Liste an. Zu den erkannten Werten gehören:

screen

Computermonitore

tty

Fernschreiber, Terminals, Xterms und andere nicht-grafikfähige Geräte

tv

Fernseher, WebTV, Videospielkonsolen und Ähnliches

projection

Dias, Folien und Laptop-Präsentationen, die einem Publikum auf einem großen Bildschirm gezeigt werden

handheld

PDAs, Handys, GameBoys und Ähnliches

print

Papier

braille

Geräte mit taktilem Feedback für Sehgeschädigte

aural

Sprachausgaben

all

alle hier aufgeführten Medien plus solche, die noch gar nicht erfunden worden sind

 

Zum Beispiel besagt folgende xml-stylesheet-Verarbeitungsanweisung, dass das CSS-Stylesheet unter "http://www.cafeconleche.org/style/titus.css" für Fernsehen, Projektion und Druck verwendet werden soll:

<?xml-stylesheet href="http://www.cafeconleche.org/style/titus.css" type="text/css" media="tv, projection, print"?>

Das Pseudo-Attribut charset

Das Pseudo-Attribut charset gibt an, in welchem Zeichensatz das Stylesheet geschrieben wurde. Es werden die gleichen Werte benutzt wie bei der Encoding-Deklaration. Um zum Beispiel festzulegen, dass das CSS-Stylesheet koran.css im Zeichensatz ISO-8859-6 geschrieben wurde, benutzen Sie diese Verarbeitungsanweisung:

 

<?xml-stylesheet href="koran.css" type="text/css" charset="ISO-8859-6"?>

Die Pseudo-Attribute alternate und title

Das Pseudo-Attribut alternate legt fest, ob dieses Stylesheet für seinen Medientyp primär ist oder ob es eine Alternative für Sonderfälle darstellt. Der Standardwert ist no, das bedeutet, es ist das primäre Stylesheet. Besitzt alternate den Wert yes, kann der Browser dem Benutzer eine Auswahl aus alternativen Stylesheets zeigen – er muss es jedoch nicht. Wenn er eine Wahl bietet, verwendet er den Wert des Pseudo-Attributs title, um dem Benutzer mitzuteilen, wie sich die Stylesheets unterscheiden. Diese drei xml-stylesheet-Verarbeitungsanweisungen beispielsweise bieten dem Benutzer die Auswahl zwischen großer, kleiner und mittlerer Schrift:

<?xml-stylesheet href="big.css" type="text/css" alternate="yes" title="Große Schriften"?>
<?xml-stylesheet href="small.css" type="text/css" alternate="yes" title="Kleine Schriften"?>
<?xml-stylesheet href="medium.css" type="text/css" title="Normale Schriften"?>

Browser, die nicht in der Lage sind, Benutzern diese Auswahl anzubieten, wählen einfach das erste Nicht-alternate-Stylesheet, das seinem Medientyp am nächsten kommt (bei einem typischen Webbrowser ist das screen).

Internet Explorer

Der Microsoft Internet Explorer 4.0 (IE4) und spätere Versionen enthalten einen XML-Parser, auf den über VBScript oder JavaScript zugegriffen werden kann. Das wird intern eingesetzt, um Channels und den Active Desktop zu unterstützen. Ihre eigenen JavaScript- und VBScript-Programme können diesen Parser verwenden, um XML-Daten zu lesen und sie in die Webseite einzufügen. Allerdings liegt alles, was über einfache Aufgaben wie das schlichte Anzeigen einer Seite mit XML von einer bestimmten URL hinausgeht, jenseits der Fähigkeiten des IE4. Darüber hinaus versteht IE4 keine auf XML angewandte Stylesheet-Sprache.

Internet Explorer 5 (IE5) und 5.5 (IE5.5) verstehen XML, obwohl ihr Parser mehr als ein wenig fehlerbehaftet ist; er weist Dokumente ab, die er eigentlich nicht abweisen sollte, erstaunlicherweise sogar die XML 1.0-Spezifikation selbst. Internet Explorer 6 (IE6) hat die XML-Unterstützung etwas verbessert, ist aber immer noch nicht völlig konform.

IE5 und neuere Versionen können XML-Dateien direkt darstellen, mit oder ohne damit verknüpftes Stylesheet. Falls kein Stylesheet angegeben wurde, benutzt IE5 ein vorgegebenes, integriertes XSLT-Stylesheet, das die Baumstruktur des XML-Dokuments mit ein wenig DHTML anzeigt, so dass der Benutzer die Knoten des Baums auf- und zuklappen kann. Die folgende Abbildung zeigt den IE5, der das Code-Beispiel Ein TEI-Dokument ausgibt.

Dokument, das mit dem IE5-Stylesheet dargestellt wird

Abbildung: Ein Dokument, das mit dem in IE5 integrierten Stylesheet dargestellt wird

IE5 unterstützt außerdem Teile von CSS Level 1 und ein wenig CSS Level 2. Allerdings ist diese Unterstützung punktuell und inkonsistent. Manche Aspekte von CSS, die bei HTML-Dokumenten funktionieren, schlagen fehl, wenn sie auf XML-Dokumente angewandt werden. IE5.5 und IE6 verbessern die Abdeckung von CSS geringfügig, unterstützen aber immer noch nicht alle Properties und Selektoren von CSS. Tatsächlich funktionieren weiterhin manche CSS-Features, die im IE6 bei HTML funktionieren, nicht, wendet man sie auf XML-Dokumente an.

IE5 und IE5.5 unterstützen ihre eigene Version von XSLT, die auf einem sehr frühen Working Draft (Arbeitsvorschlag) der XSLT-Spezifikation beruht. Sie unterstützen nicht XSLT 1.0. Sie können den Unterschied feststellen, wenn Sie sich den Namensraum des Stylesheets anschauen. Ein Stylesheet, das für IE5 geschrieben wurde, verwendet den Namensraum "http://www.w3.org/TR/WD-xsl", während ein Stylesheet, das für standardkonforme XSLT-Prozessoren entworfen wurde, den Namensraum "http://www.w3.org/1999/XSL/Transform" einsetzt. Trotz oberflächlicher Gemeinsamkeiten sind diese beiden Sprachen nicht kompatibel. Ein Stylesheet, das für IE5 geschrieben wurde, funktioniert mit keinem anderen XSLT-Prozessor, und ein Stylesheet, das mit Standard-XSLT 1.0 geschrieben wurde, funktioniert nicht im IE. IE6 unterstützt beides, das richtige XSLT und den Nicht-Standard-Dialekt von Microsoft.

Netscape und Mozilla

Netscape 4.x und früher bieten eigentlich keinerlei nennenswerte Unterstützung für die Darstellung von XML im Browser. Netscape 4.0.6 und neuer setzen XML intern für bestimmte Funktionen ein, wie etwa »What's Related«. Allerdings kann der Autor der Seiten nicht auf den Parser zugreifen, nicht einmal über JavaScript.

Mozilla 1.0 sowie Netscape 6.0 und neuere Versionen unterstützen vollständig die Darstellung von XML im Browser. CSS Level 2 wird ebenso fast vollständig unterstützt, und auch die XSLT-Unterstützung ist ziemlich gut. Mozilla kann eine XML-Webseite lesen, das damit verknüpfte CSS-Stylesheet herunterladen, es auf das Dokument anwenden und das Ergebnis dem Benutzer anzeigen – und das Ganze automatisch und mehr oder weniger genau so, wie XML im Web immer gedacht war. Mozilla unterstützt teilweise MathML und SVG. Die SVG-Unterstützung ist bei Mozilla 1.7 standardmäßig nicht eingeschaltet, und die MathML-Unterstützung erfordert einige zusätzliche Schriftarten mit weiteren mathematischen Zeichen. Aber beides lässt sich problemlos ergänzen.

Alternative Ansätze

Das Erstellen von Webseiten in XML bedeutet nicht unbedingt, dass diese auch in XML ausgegeben werden. Browser bis zur vierten Generation, die XML bis jetzt nicht wirklich unterstützen, werden uns auch in der Zukunft noch begegnen. Um Benutzer mit solchen Browsern zu bedienen, wird normales, einfaches HTML benötigt, das in Browsern bis hin zu Mosaic 1.0 funktioniert.

Eine beliebte Möglichkeit ist es, die Seiten in XML zu schreiben, jedoch in HTML auszugeben. Wenn der Server eine Anfrage für ein XML-Dokument empfängt, konvertiert er das Dokument automatisch in HTML und schickt dann stattdessen das konvertierte Dokument. Höherentwickelte Server können die umgewandelten Dokumente im Cache speichern. Sie können auch Browser erkennen, die XML unterstützen, und ihnen stattdessen das rohe XML schicken.

Die bevorzugte Methode, um die Konvertierung vorzunehmen, besteht darin, ein XSLT-Stylesheet und ein Java-Servlet zu verwenden. Tatsächlich enthalten die meisten XSLT-Engines, wie Xalan-J und SAXON, Servlets, die genau dies tun. Es sind jedoch auch andere Konstellationen möglich, z.B. der Einsatz von PHP oder CGI anstelle eines Servlets. Der Trick besteht darin sicherzustellen, dass die Browser nur das entgegennehmen, was sie auch lesen und darstellen können.

  

<< zurück vor >>

 

 

 

Tipp der data2type-Redaktion:
Zum Thema XML bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

  


Copyright © 2005 O'Reilly Verlag GmbH & Co. KG
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "XML in a Nutshell" denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

O’Reilly Verlag GmbH & Co. KG, Balthasarstraße 81, 50670 Köln, kommentar(at)oreilly.de