Jan Huss: Anfänger und die W3C Doku

Hallo Leute,

ich beschäftige mich seit heute mit XSL, da ich demnächst einige Projekte damit durchziehen darf.

Ich habe mich heute ersteinmal mit den theoretischen Grundlagen auseinandergesetzt und diese auch in etwa nachvollzogen.

Nur stellt sich mir nun eine sicherlich nicht besonders komplexe Frage:

Wenn ich als W3C-Beispiel ein

<xsl:template match="document">
  fo:block
    <fo:initial-property-set font-variant="small-caps"/>
    xsl:apply-templates/
  </fo:block>
</xsl:template>

angeboten bekomme hab ich bisher keine Ahnung wie ich diese tollen fo-Tags umsetzen soll.

<xsl:template match="document">
<H1><xsl:value-of select="//title"/></H1>
</xsl:template>
</xsl:stylesheet>

... ist mir verständlich, wie bastel ich denn nun hier die oberen Tags ein??? (vom Prinzip)

Entschuldigt meine Unwissenheit...

Gruß Jan

  1. Hallo Jan,

    Wenn ich als W3C-Beispiel ein

    <xsl:template match="document">
      fo:block
        <fo:initial-property-set font-variant="small-caps"/>
        xsl:apply-templates/
      </fo:block>
    </xsl:template>

    angeboten bekomme hab ich bisher keine Ahnung wie ich diese tollen fo-Tags umsetzen soll.

    In dem Beispiel ist "document" ein Element deiner XML-Daten. In den XML-Daten sollte es also so was wie <document>...</document> geben. die fo:-Elemente des Format-Teils von XSL dienen dann dem Zweck, Formate fuer dieses XML-Element zu definieren. Mit

    xsl:apply-templates/

    wendest du dann noch "alle definierten Schablonen fuer Kindelemente" an. Wenn also innerhalb deines Elements <document>...</document> noch ein Element <xy>...</xy> notiert sein sollte und es auch eine XSL-Template-Definition dafuer gibt, dann wird diese angewendet.
    Hm - ja, besonders verstaendlich ist das auch nicht *g*.

    <xsl:template match="document">
    <H1><xsl:value-of select="//title"/></H1>
    </xsl:template>
    </xsl:stylesheet>

    ... ist mir verständlich, wie bastel ich denn nun hier die oberen Tags ein??? (vom Prinzip)

    Kann es sein, dass du so was meinst wie:

    <xsl:template match="/">
     <html><head></head><body>
      <xsl:apply-templates />
     </body></html>
    </xsl:template>

    Damit wird die Dokumentwurzel der XML-Daten in ein HTML-Konstrukt uebersetzt, das das uebliche HTML-Grundgeruest darstellt. Durch das "<xsl:apply-templates />" zwischen <body> und </body> werden die untergeordneten Schablonen angewendet, wenn in den Daten untergeordnete Elemente vorkommen.

    viele Gruesse
      Stefan Muenz

  2. Hallo Jan,

    Wenn ich als W3C-Beispiel ein

    <xsl:template match="document">
      fo:block
        <fo:initial-property-set font-variant="small-caps"/>
        xsl:apply-templates/
      </fo:block>
    </xsl:template>

    angeboten bekomme hab ich bisher keine Ahnung wie ich diese tollen fo-Tags umsetzen soll.

    Dazu benötigst du einen XSL-FO-Prozessor (bzw. Formatter):
    Klassisch: FOP von der XML-apache-Group unter http://xml.apache.org/fop. Der IE kann das noch nicht (falls du es mit dem probiert hast)
    Ein grafischer XSL-FO-Formatter ist dieser hier
    http://www.antennahouse.com/xslformatter.html

    <xsl:template match="document">
    <H1><xsl:value-of select="//title"/></H1>
    </xsl:template>
    </xsl:stylesheet>

    Gruß
    Franz

  3. Hallo,

    Nur stellt sich mir nun eine sicherlich nicht besonders komplexe Frage:

    Wenn ich als W3C-Beispiel ein

    <xsl:template match="document">
      fo:block
        <fo:initial-property-set font-variant="small-caps"/>
        xsl:apply-templates/
      </fo:block>
    </xsl:template>

    angeboten bekomme hab ich bisher keine Ahnung wie ich diese tollen fo-Tags umsetzen soll.

    wenn ich deinen unteren code ansehe, möchtest du eigentlich eine xml -> html transformation.

    ausholt: hinter xsl verbergen sich 2 versch. standards: xslt und xsl (xsl-fo).

    xsl (oder xsl-fo = xsl formating objects) ist für layoutformatierung von xml dokumenten, sie definiert layout-blöcke und andere layout-eigenschaften (farbe, schriftart etc.) für xml elemente. zur ziet wird xsl-fo in erster linie für xml -> pdf konvertierung verwendet.

    <xsl:template match="document">
    <H1><xsl:value-of select="//title"/></H1>
    </xsl:template>
    </xsl:stylesheet>

    da ist vom prinzip ok, aber vom technik etwas schlecht:
    mit //title selektierts du eigentlich alle <title> elemente im gesamten dokument. das geht wenn du nur ein <title> hast noch halbwegs gut, nicht desto trotz gehen solche selektierungen sehr zu lasten der performance.

    wenn dein xml so aussieht:

    <?xml version="1.0"?>
    <document>
       <title>der titel</title>
    </document>

    kannst eine xslt dazu schreiben:

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
       <xsl:template match="/">
          <html>
             <head>
                <title><xsl:value-of select="title" /></title>
             </head>
             <body>
                xsl:apply-templates/
             </body>
          </html>
       </xsl:template>
       <xsl:template match="title">
          <h1><xsl:value-of select="." /></h1>
       </xsl:template>
    </xsl:stylesheet>

    und das würe eine html ergeben:

    <html>
       <head>
          <title>der titel</title>
       </head>
       <body>
          <h1>der titel</h1>
       </body>
    </html>

    grüße
    thomas