XHTML SVG CSS PHP

Dr. O. Hoffmann

CSS-Layout

Man muß auch der Zukunft etwas überlassen.
Johann Wolfgang von Goethe

CSS und XML

Bei XML-Dokumenten sollte zwischen solchen unterschieden werden, die der Kommunikation zwischen definierten Partnern stattfindet und die der allgemeinen Publikation dienen. So oder so werden in der Regel für jeglichen Dokumenttyp Programme verwendet, um den Inhalt darzustellen. Bei einer öffentlichen Publikation ist nicht bekannt, welche Programme die Nutzer verwenden werden. Damit die Programme überhaupt eine Chance haben, den Inhalt seiner Funktion gemäß darzustellen, kommt dafür nur ein Standarddokumenttyp von W3C in Frage. Für die interne Kommunikation, Vermittlung von Informationen an spezielle Programme können hingegen sinnvoll eigene oder firmeneigene Dokumenttypen verwendet werden. Sobald jedoch Informationen in solch einem privaten Format veröffentlicht werden sollen, ist zuvor eine Konvertierung in einen Standard vorzunehmen, wobei dann immer zu überlegen ist, ob der Standard nicht gleich von vorneherein die optimale Wahl ist.

Neben XSL kann auch CSS zum Layout von XML-Dokumenten genutzt werden. Bei den Standardtypen gibt es teilweise sogar einige Extraeigenschaften, etwa bei SVG. Bei eigenen Formaten ist dem Darstellungsprogramm natürlich nicht bekannt, wie was darzustellen ist, da die Auszeichnungselemente für dieses keine Bedeutung haben und für unbekannte Formate auch keine interne Stilvorlage des Darstellungsprogrammes oder eine des Nutzers vorliegen wird. Soll der Text sinnvoll angezeigt werden, ist auf jeden Fall jedes Element komplett mit Eigenschaften zu versehen. Mit XSL ist ja gar eine Transformation in ein Standardformat möglich.

Besonders wichtig ist die Eigenschaft display: block beziehungsweise display: inline. display sollte für jedes Element angegeben werden. Schauen wir uns erstmal ein einfaches Beispiel eines eigenen Dokumenttypes an:
XML-Beispiel
Es ist allerdings zu beachten, daß Fragmentidenifizierer #id und Klassen .klasse nicht direkt funktionieren, Attribute können aber über Element[attribut=Wert] angesprochen werden. Neu ist auch ein allgemeines Attribut xml:id für alle XMLs, mit dem Elemente eindeutig identifiziert werden können, womit dann auch in CSS Fragmentidentifizierer #id wieder einsetzbar sein sollten, sofern das verwendete Darstellungsprogramm neu genug ist. Bei alten Programmen kommt es da zu Inkompatibilitäten, womit klar ist, daß dieses neue XML-Attribut das Problem zwar formal löst, aber man in der Praxis damit gerechnet werden muß, daß es den Programmen etwa im Jahre 2008 noch nicht durchgängig bekannt ist. Einige Anbieter von Darstellungsprogrammen zeigen sich hier auch in den nächsten Jahren unwillig, dieses allgemeine Attribut zu implementieren und sabbotieren damit eine weitere Verbreitung dieser hilfsreichen Funktionalität.

Mich persönlich und vermutlich auch viele andere auch hat an den Standardformaten im Zusammenhang mit CSS allerdings besonders interessiert, skalierbare Vektorgraphik (SVG) mit CSS als Hintergrundbilder einbinden zu können. Zwar konnten bereits etwa 2008 alle technisch aktuellen CSS-Darstellungsprogramme (Opera, Geckos, Konqueror, Amaya) SVG hinreichend für ein Hintergrundbild interpretieren, es war allerdings immer noch festzustellen, daß gerade diese Kombination von SVG und CSS noch nicht klappt (mit Ausnahme von Opera 9.50 alpha/beta), während umgekehrt die Verwendung von CSS für SVG-Dokumente gut funktioniert. In den Folgejahren wurden die Fehler in gängigen Programmen jedoch weitgehend behoben, so daß Hintergrunbilder im Format SVG ähnlich sinnvoll wie Pixelgraphik einsetzbar sind.

Schauen wir uns zum Zwecke der allgemeinen Erbauung ein Beispiel mit gemischten XML-Standards an. Opera 9.50 beta hat nunmehr eine bereits brauchbare Darstellung für MathML und kann SVG-Hintergrundbilder darstellen, somit hat dieses Programm alle Voraussetzungen, das folgende Testdokument korrekt anzuzeigen, scheitert lediglich daran, daß es die maskierten Umlaute und ß-Ligaturen nicht erkennt. Eine solche Maskierung ist nicht unbedingt notwendig; die entsprechenden Symbole von MathML etwa für ein Integral sind allerdings wichtig und werden auch nicht angezeigt. Werden solche Zeichen nicht gebraucht, funktionieren solche Dokumente also bereits komplett mit Opera 9.50 beta. Mal abgesehen vom fehlenden Hintergrundbild und der Darstellung von SVG mit dem Element img kommt auch Gecko 1.8 (Firefox, SeaMonkey) mit SVG-Unterstützung der korrekten Anzeige schon sehr nahe, sofern man ihm die truetype-Fonts für MathML installiert hat:
Beispiel für gemischte XML-Standards
So sollte es eigentlich etwa aussehen, wenn alles richtig angezeigt wird:
PNG-Bild, wie das obige Beispiel aussehen sollte.