docbook-apps

xml:base problem with nested XIncludes

  • 1.  xml:base problem with nested XIncludes

    Posted 07-02-2009 20:10
    Hi

    A problem with nested XIncludes that I raised in 2005 has either not
    been resolved, or has risen again in DB5 and 1.75.1. The problem is in
    the value of xml:base which results in the generation of bad paths to
    files referenced in a nested XInclude. A sample program to demonstrate
    the problem is below, and the separate files are attached. XEP reports
    the bad paths - see below - but fop just fails to produce any diagnostic
    output. A work around is to pre-process the XIncludes and appropriate
    xsl code is in the file copy.xsl

    root0.xml XIncludes root1.xml which XIncludes file0.xml which references
    a jpg file in a
    . The file cannot be found because the xml:base
    is wrongly applied.

    Tool chain Oxygen 10.3, DB5, XSL 1.75.1, Saxon-6.5.5 and XEP-4.10-20070727.
    java version "1.5.0_19"
    Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_19-b02-306)
    Java HotSpot(TM) Client VM (build 1.5.0_19-138, mixed mode)



    ---File: root0.xml



    xml:id="test" xmlns="http://docbook.org/ns/docbook" version="5.0"
    xml:lang="EN">
    <info>

    </info>
    <para></para>
    <xi:include href="root1.xml" xmlns:xi="http://www.w3.org/2001/XInclude"></xi:include>




    ---File: root1.xml


    <appendix xml:id="file0" xmlns="http://docbook.org/ns/docbook"></appendix>
    version="5.0" xml:lang="EN">
    <info>

    </info>
    <xi:include href="file0.xml" xmlns:xi="http://www.w3.org/2001/XInclude"></xi:include>




    ---File: file0.xml



    version="5.0" xml:lang="EN">
    <info></info>

    <mediaobject>
    <imageobject role="xhml">
    <imagedata fileref="images/Old_road_grass-54X.jpg" format="JPG"></imagedata>
    width="100%" contentwidth="12.0cm" align="center"/>
    </imageobject>
    <imageobject role="fo">
    <imagedata fileref="images/Old_road_grass-54.jpg" format="JPG"></imagedata>
    width="100%" contentwidth="9.0cm" align="center"/>
    </imageobject>
    <para role="Start">Medieval Road</para>
    </mediaobject>





    ---File: root.xsl

    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"></xsl:stylesheet>
    version="1.0">
    <xsl:import></xsl:import>
    href="/Applications/Utilities/oxygen/10.3/oxygen/frameworks/docbook/5.0/docbook-xsl-ns-1.75.1/fo/docbook.xsl"/>




    ---XEP failure report
    ---The image file referred to in file0.xml cannot be found.
    ---Nested Xinclude problem - XEP gives the bad filename
    [error] Failed to create image
    file:/Library/WebServer/Documents/_XML/_test//Library/WebServer/Documents/_XML/_test/images/Old_road_grass-54.jpg
    of type image/jpeg
    [error] java.io.FileNotFoundException:
    /Library/WebServer/Documents/_XML/_test/Library/WebServer/Documents/_XML/_test/images/Old_road_grass-54.jpg
    (No such file or directory)



    If the nested Xincludes are expanded first using the following XSL, then
    the nested problem is avoided and all is well, the image file is found
    and displayed
    ---File: copy.xsl

    <xsl:stylesheet version="1.0"></xsl:stylesheet>
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    exclude-result-prefixes="xi" xmlns:xi="http://www.w3.org/2001/XInclude">
    <xsl:output indent="yes" method="xml" encoding="UTF-8"></xsl:output>
    <xsl:strip-space elements="*"></xsl:strip-space>

    <xsl:template match="/">
    <xsl:apply-templates mode="copy" select="."></xsl:apply-templates>
    </xsl:template>

    <xsl:template match="*|text()|@*" mode="copy">
    <xsl:copy>
    <xsl:apply-templates mode="copy" select="@*"></xsl:apply-templates>
    <xsl:apply-templates mode="copy"></xsl:apply-templates>
    </xsl:copy>
    </xsl:template>

    <xsl:template match="@*[name()='xml:base']" mode="copy"></xsl:template>

    <xsl:template match="*"></xsl:template>



    Ron
    --
    Ron Catterall Ph.D. D.Sc.
    ron@catterall.net
    http://catterall.net

    Attachment(s)

    xml
    file0.xml   664 B 1 version
    xml
    root1.xml   280 B 1 version
    xml
    root0.xml   289 B 1 version