Thomas Meinike: xml-stylesheets ?

Beitrag lesen

Hallo,

Wie ich solche stylesheets einbauen kann, das sie anschließend auch funktionieren. Welche Vor und Nachteile sie haben usw.

Was heißt "solche stylesheets"? xml-stylesheet ist eine Processing Instruction (PI) = Verarbeitungsanweisung fuer die Darstellung von XML-Dokumenten. Das kann ein "klassisches" CSS sein oder ein XSL(T)-Stylesheet zur Umwandlung der Inhalte in ein Ausgabeformat wie HTML.

Die Verwendung von CSS zur Formatierung von XML-Inhalten funktioniert nur sehr eingeschraenkt und ist stark von den Browsern abhaengig, außerhalb von IE und Mozilla/Firefox laeuft da wenig.

Hier mal ein Auszug aus einem Unterrichtsbeispiel, welches so auch nur mit Mozilla-Derivaten passabel funktioniert:

XML (nur ein Datensatz):

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet href="media_collection.css" type="text/css"?>
<!DOCTYPE media_collection SYSTEM "media_collection.dtd">

<media_collection>

<item medium="LP" type="audio">
    <name>Einstuerzende Neubauten</name>
    <title>Haus der Luege</title>
    <style>Indie</style>
    <year>1989</year>
    <coverimage>cover/neubauten.jpg</coverimage>
    <comment>Genial</comment>
    <tracks number="8">
      <track nr="1" time="2:07">Prolog</track>
      <track nr="2" time="5:44">Feurio!</track>
      <track nr="3" time="2:08">Ein Stuhl in der Hölle</track>
      <track nr="4" time="3:59">Haus der Lüge</track>
      <track nr="5" time="0:30">Epilog</track>
      <track nr="6" time="12:23">Fiat Lux / Manifestspiele / Hirnlego</track>
      <track nr="7" time="3:57">Schwindel</track>
      <track nr="8" time="3:48">Der Kuss</track>
    </tracks>
  </item>

<!-- weitere item-Elemente -->

</media_collection>

DTD (media_collection.dtd):

<!ELEMENT media_collection (item*)>
<!ELEMENT item (name,title,style?,price?,year?,coverimage?,comment?,tracks)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT style (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ELEMENT year (#PCDATA)>
<!ELEMENT coverimage (#PCDATA)>
<!ELEMENT comment (#PCDATA)>
<!ELEMENT tracks (track+)>
<!ELEMENT track (#PCDATA)>

<!ATTLIST item medium (CD|DVD|MD|MC|LP|VHS) #REQUIRED
               type   (audio|video) #REQUIRED

<!ATTLIST tracks number CDATA #IMPLIED>

<!ATTLIST track nr   CDATA #IMPLIED
                time CDATA #IMPLIED

CSS (media_collection.css):

media_collection
{
  display: table;
  margin: 20px auto 20px auto;
  border-collapse: collapse;
}

item
{
  display: table-row;
  border-collapse: collapse;
}

name
{
  color: #00C;
  background-color: #FFF;
  font-family: Arial, Helvetica, sans-serif;
  font-size: 24px;
  display: table-cell;
  padding: 10px;
  border: 1px solid #F00;
  border-collapse: collapse;
  border-spacing: 5px;
}

title
{
  color: #090;
  background-color: #FFF;
  font-family: Arial, Helvetica, sans-serif;
  font-size: 18px;
  display: table-cell;
  padding: 10px;
  border: 1px solid #F00;
  border-collapse: collapse;
}

style,price,year,coverimage,comment
{
  display: none; /* ausgeblendete Inhalte */
}

tracks
{
  display: table-cell;
  background-color: #FFF;
  border-collapse: collapse;
  border: 1px solid #F00;
  padding: 10px;
}

track
{
  display: list-item;
  list-style-type: none;
  list-style-position: inside;
  font-weight: bold;
  padding: 0px 10px 0px 10px;
}

track:before
{
  content: attr(nr) ". ";
}

track:after
{
  content: " [" attr(time) "]";
}

Dieses Beispiel zeigt auch die Grenzen dieser Technik auf. Von der Lauffaehigkeit im IE ganz abgesehen, waere es praktisch, auch die Cover-Bildnamen auszuwerten und das jeweilige Bild mit CSS-Mitteln einzubinden, was aber scheitert.

content: url(cover.gif);
wuerde ein festes Bild cover.gif einbinden.

content: url(coverimage);
hilft dagegen nicht, da nur der Textinhalt erscheint.

Mit XSLT kommt man da viel weiter, weil einfach ein img-Element mit src-Attribut erzeugt werden kann.

MfG, Thomas