OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

docbook-apps message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]


Subject: xml:base problem with nested XIncludes


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 <figure>.  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 version="1.0" encoding="UTF-8" ?>
<!DOCTYPE article>
<article
   xml:id="test" xmlns="http://docbook.org/ns/docbook"; version="5.0" 
xml:lang="EN">
<info>
<title>Main title</title>
</info>
<para></para>
<xi:include href="root1.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
</article>



---File: root1.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE appendix>
<appendix xml:id="file0" xmlns="http://docbook.org/ns/docbook"; 
version="5.0" xml:lang="EN">
<info>
<title>root1 title</title>
</info>
<xi:include href="file0.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
</appendix>



---File: file0.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE section>
<section xml:id="Pictures" xmlns="http://docbook.org/ns/docbook"; 
version="5.0" xml:lang="EN">
<info><title>Pictures</title></info>
<figure xml:id="LowRoad"><title>Medieval Road</title>
<mediaobject>
<imageobject role="xhml">
<imagedata fileref="images/Old_road_grass-54X.jpg" format="JPG" 
width="100%" contentwidth="12.0cm" align="center"/>
</imageobject>
<imageobject role="fo">
<imagedata fileref="images/Old_road_grass-54.jpg" format="JPG" 
width="100%" contentwidth="9.0cm" align="center"/>
</imageobject>
<caption><para  role="Start">Medieval Road</para></caption>
</mediaobject>
</figure>
</section>



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



---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
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" 
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:strip-space elements="*"/>
<!-- Match document -->
<xsl:template match="/">
<xsl:apply-templates mode="copy" select="."/>
</xsl:template>
<!-- Deep copy template -->
<xsl:template match="*|text()|@*" mode="copy">
<xsl:copy>
<xsl:apply-templates mode="copy" select="@*"/>
<xsl:apply-templates mode="copy"/>
</xsl:copy>
</xsl:template>
<!-- exclude some attributes added by the XInclude part -->
<xsl:template match="@*[name()='xml:base']" mode="copy"/>
<!-- Handle default matching -->
<xsl:template match="*"/>
</xsl:stylesheet>


Ron
-- 
Ron Catterall Ph.D. D.Sc.
ron@catterall.net
http://catterall.net
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE article>
<article xml:id="test" xmlns="http://docbook.org/ns/docbook"; version="5.0" xml:lang="EN">
<info>
<title>Main title</title>
</info>
<para></para>
<xi:include href="root1.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
</article>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE appendix>
<appendix xml:id="file0" xmlns="http://docbook.org/ns/docbook"; version="5.0" xml:lang="EN">
<info>
<title>root1 title</title>
</info>
<xi:include href="file0.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
</appendix>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE section>
<section xml:id="Pictures" xmlns="http://docbook.org/ns/docbook"; version="5.0" xml:lang="EN">
<info><title>Pictures</title></info>
<figure xml:id="LowRoad"><title>Medieval Road</title>
<mediaobject>
<imageobject role="xhml">
<imagedata fileref="images/Old_road_grass-54X.jpg" format="JPG" width="100%" contentwidth="12.0cm" align="center"/>
</imageobject>
<imageobject role="fo">
<imagedata fileref="images/Old_road_grass-54.jpg" format="JPG" width="100%" contentwidth="9.0cm" align="center"/>
</imageobject>
<caption><para  role="Start">Medieval Road</para></caption>
</mediaobject>
</figure>
</section>
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; version="1.0">
<xsl:import href="/Applications/Utilities/oxygen/10.3/oxygen/frameworks/docbook/5.0/docbook-xsl-ns-1.75.1/fo/docbook.xsl"/>
</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" 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:strip-space elements="*"/>

    <!-- Match document -->
    <xsl:template match="/">
        <xsl:apply-templates mode="copy" select="."/>
    </xsl:template>
    <!-- Deep copy template -->
    <xsl:template match="*|text()|@*" mode="copy">
        <xsl:copy>
            <xsl:apply-templates mode="copy" select="@*"/>
            <xsl:apply-templates mode="copy"/>
        </xsl:copy>
    </xsl:template>
    <!-- exclude some attributes added by the XInclude part -->
    <xsl:template match="@*[name()='xml:base']" mode="copy"/>
    <!-- Handle default matching -->
    <xsl:template match="*"/>
</xsl:stylesheet>

S/MIME Cryptographic Signature



[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]