Florian Neumeyer: Probleme mit DocBook-XSL->FO

Hallo,

ich würde gerne in meinem DocBook Artikel einem Paragraphen ein Attribut aus dem FO Namespace zuweisen.
XSL Prozessor ist libxslt-1.1.15, DocBook-XSL ist in der Version 1.69.1.
Folgendermaßen bin ich vorgegangen:

<article xmlns:fo="http://www.w3.org/1999/XSL/Format">
<para fo:keep-with-next="always">blubb</para>

Leider geht nach der Konvertierung des DoocBooks in eine FO Datei das Attribut keep-with-next verloren.
Habe ich einen Denkfehler drin oder muss ich evtl. einen XSL Parameter setzen, damit das Attribut erhalten bleibt?

Danke,
Florian

  1. Hallo,

    ich würde gerne in meinem DocBook Artikel einem Paragraphen ein Attribut aus dem FO Namespace zuweisen.
    XSL Prozessor ist libxslt-1.1.15, DocBook-XSL ist in der Version 1.69.1.
    Folgendermaßen bin ich vorgegangen:

    <article xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <para fo:keep-with-next="always">blubb</para>

    Leider geht nach der Konvertierung des DoocBooks in eine FO Datei das Attribut keep-with-next verloren.
    Habe ich einen Denkfehler drin oder muss ich evtl. einen XSL Parameter setzen, damit das Attribut erhalten bleibt?

    Du müsstest mal ersten anschauen ob du überhaupt so ein Attribut dem para-Element hinzugüfen darfst.

    <!ATTLIST para
      %common.attrib;
      %para.role.attrib;
      %local.para.attrib;

    Wenn du jetzt anschaust, was in den Entities steht, wirdst du feststellen, dass es kein attribut "keep-with-next" bzw. "fo:keep-with-next" definiert sind.
    Das müsstest du z.B. im <!ENTITY % local.para.attrib ""> eintragen. Dasselbe gilt übrigens auch für <article> und dem Attribut "xmlns:fo". Damit dein XML überhaupt erst gültig ist.

    Gut das hat mit dem XSLT nur wenig zu tun.
    also was steht im XSLT für <para>
    <xsl:template match="para">
      <fo:block xsl:use-attribute-sets="normal.para.spacing">
        <xsl:call-template name="anchor"/>
        xsl:apply-templates/
      </fo:block>
    </xsl:template>

    Jetzt schaust du dir also an was im Attributer-Set "normal.para.spacig" steht.
    <xsl:attribute-set name="normal.para.spacing">
      <xsl:attribute name="space-before.optimum">1em</xsl:attribute>
      <xsl:attribute name="space-before.minimum">0.8em</xsl:attribute>
      <xsl:attribute name="space-before.maximum">1.2em</xsl:attribute>
    </xsl:attribute-set>

    Also wiederum nichts für dein Attribut.

    Fazit: du musst das XSL erweitern, entweder im Template für Para oder das Attribut-Set.

    Grüße
    Thomas