XML mit Style
(This page uses CSS style sheets)
Style
Was sollte ich wann verwenden?
Externe Style Sheets
CSS
Eingebettete Style Sheets
--
Existiert ein solches nicht können Sie dennoch externe Style Sheets
durch die Nutzung von xml-stylesheet Verarbeitungs Instruktionen
(processing instructions) wie dieser verwenden:
... der Rest des Dokumentes...
Diese processing instructions (PI) müssen vor dem ersten Tag des
Dokumentes verwendet werden. Ein type="text/css" ist nicht notwendig,
aber es hilft dem Browser: wenn er kein CSS verarbeiten kann muss er
nichts herunterladen.
Genau wie beim link Element in HTML können mehrere xml-stylesheet PIs
mit verschiedenen Attributen für Typ, Medium und Titel verwendet
werden.
Hier ist ein grösseres Beispiel. Nehmen wir an Sie haben drei Style
Sheets, einen welcher den Basis Display Type eines jeden Elementes
festlegt (inline, block, list-item, etc.) und zwei andere welche sich
um die Farben und Abstände kümmern. Die zwei letzten sind gegenseitige
Alternativen und der Leser des Dokumentes kann entscheiden welchen von
Beiden er nutzen möchte. Mit Aussnahme dass das Dokument gedruckt
werden soll, in diesem Fall wird immer der letzte Style genutzt. Hier
ist der gemeinsame Style Sheet:
:
/* common.css */
INSTRUMENT { display: inline }
ARTICLE, HEADLINE, AUTHOR, PARA { display: block }
--
EXTRAS { display: none }
Fredrick the Great meets Bach
...
In diesem Fall muss ein type="text/css" Eintrag vorhanden sein,
ansonsten muss der Browser die Style Sheet Sprache erraten. Die
xml-stylesheet PI verweist nun nicht auf eine externe Style Sheet
Datei, sonden auf ein xml-stylesheet Element im Dokument selbst. Dieses
Element wird von einem id Attribut idendifiziert welches als Ziel für
diese Verlinkung dient. (Je nach dem verwendeten XML Format kann das id
Attribut auch woanders aufgerufen werden oder ganz und gar fehl am
Platze sein.)
--
Extraregel benötigt werden welche ein Fragment Idendifikator in
einem Style Sheet dafür verwendet um auf den Inhalt eines Elementes
mit Hilfe eines PI zu verweisen.
3. Genauso ist es unklar was passiert wenn innerhalb eines Elementes
Kinderelemente existieren. Besteht der Style Sheet dann aus allen
Inhalten der verknüpften Elemente? Oder nur aus dem Inhalt der
ersten Elements? Oder soll dieser Fall als Fehler behandelt und
ignoriert werden?
4. Im obigen Beispiel verweist die URL innerhalb des Dokumentes
selbst. Der Fakt dass der Browser die URL überhaupt aufrufen kann
kann bedeuten dass er weiss wie XML verarbeitet werden muss und
damit in der Lage ist das gewünschte Style Element zu finden. Aber
nehmen wir einmal an die URL verweisst auf ein Fragment innerhalb
eines externen Dokumentes. Der Browser müsste jetzt ersteinmal das
aktuelle XML Dokument herunterladen und parsen um im Anschluss den
Style Sheet zu laden und zu parsen. Aber das type Attribut sagt nur
etwas über den Dokumententyp von einem der beiden Dokumente aus -
somit kann der Browser nicht wissen ob er den Style Sheet
verarbeiten kann. Es ist ja noch nicht einmal definiert ob das type
Attribut nun den Typ des externen Dokumentes oder den des da
--
Format. Dank dem Style Sheet kann der Browser nun wenigstens
irgendetwas ausgeben. Bekannte Formate wie SVG, SMIL oder XHTML
besitzen ihre eigenen Regeln und gehen über die Möglichkeiten
hinaus welche ein Style Sheet spezifizieren könnte. Aber da gibt es
noch andere Punkte mit denen der Browser bei generischem XML nichts
anfangen kann: zum Beispiel weiss er nicht welche Attribute als ID
Attribute interpretiert werden sollen. Es existiert eine W3C
Empfehlung für ein Attribut namens xml:id und wenn das Dokument
Attribute diesen Namens enthält dann ist es sehr wahrscheinlich
dass ein URL Fragment darauf verweisst. Existiert ein solches
Attribut jedoch nicht muss der Browser selbst versuchen
herauszubekommen welches Attribut als ID verwendet wird. Wenn das
Dokument einen DOCTYPE Eintrag am Seitenanfang enthält kann die
damit verbundene DTD heruntergeladen werden in welcher die
Attribute angegeben sind. Aber Browser sind vielleicht nicht in der
Lage die DTD herunterzuladen oder es existiert kein DOCTYPE
Verweis.
--
basierten Formate nicht verfügbar. Natürlich ermöglichst CSS die
Auswahl von allen Attributen auch ohne das class Attribut, die
Verwendung ist aber dann wesentlich unbequemer.
Hier ein Beispiel. Existiert ein class Attribut und das
Dokumentenformat definiert dass das Ganze als HTML interpretiert werden
soll kann die Schreibweise mit dem Punkt verwendet werden. (Von daher
wird dieses spezielle Beispiel nicht funktionieren da es in HTML kein
Element gibt welchem ein class Attribut zugewiesen werden könnte
s { display: none }
--
Some text...
A note...
Wenn das Dokumenten Format nicht angegeben ist erzeugt class eine
Unterklasse und der längere Selektor "[ ]" muss verwendet werden:
s { display: none }
p { display: block }
p[class~=note] { color: red }
Some text...
A note...
Existiert kein class Attribut aber irgendetwas anderes muss dennoch
"[ ]" verwendet werden:
Testen Sie es in Ihrem Browser