There has been a problem in transforming DocBook to anything in eXist-db. The 
main problem is that the DocBook XSLTs cannot be loaded into eXist. There are 
some conflicts with the catalog in eXist.

The solution is to utilize the XPRoc Module 
<http://exist-db.org/exist/apps/public-repo/packages/XProc.html>
 
Install the XProc module and download the DocBook XSLT.  I recommend the 
docbook-xsl-ns collection 
http://sourceforge.net/projects/docbook/files/docbook-xsl-ns/ 
<http://sourceforge.net/projects/docbook/files/docbook-xsl-ns/>.

install the extracted zip on the local filesystem of the eXist-db server.

The option stylesheet-path is set to the location of the XSL that you need to 
call.
The option db-doc-path is set to the path to the DocBook document that is to be 
transformed.


The XProc script is a simple one:
 
<p:declare-step xmlns:p="http://www.w3.org/ns/xproc 
<http://www.w3.org/ns/xproc>" version="1.0">
    <p:option name="stylesheet-path" required="true"/>
    <p:option name="db-doc-path" required="true"/>
    <p:input port="source">
        <p:empty/>
    </p:input>
    <p:output port="result"/>
    <p:load name="load-doc">
        <p:with-option name="href" select="concat('xmldb://' <xmldb://'>, 
$db-doc-path)"/>
    </p:load>
    <p:load name="load-stylesheet">
        <p:with-option name="href" select="$stylesheet-path"/>
    </p:load>
    <p:xslt>
        <p:input port="source">
            <p:pipe port="result" step="load-doc"/>
        </p:input>
        <p:input port="stylesheet">
            <p:pipe port="result" step="load-stylesheet"/>
        </p:input>
        <p:with-param name="draft.mode" select="'no'"/>
        <p:with-param name="fop.extensions" select="'0'"/>
        <p:with-param name="fop1.extensions" select="'1'"/>
        <p:with-param name="highlight.source" select="'1'"/>
        <p:with-param name="paper.type" select="'USLetter'"/>
    </p:xslt>
</p:declare-step>
 
The XQuery code to run the transform is equally simple:
 
xquery version "3.0";

import module namespace xproc="http://exist-db.org/xproc 
<http://exist-db.org/xproc>";

let $simple-proc := doc('/db/myxproc/docbook-to.xpl')/*

let $fo := xproc:process($simple-proc, (
                    <option name="stylesheet-path" 
value="/docbook-xsl-ns-1.78.1/fo/docbook.xsl"/>,
                    <option name="db-doc-path" value="/db/db-article.xml"/>
                    ))
let $pdf-binary := xslfo:render($fo, 'application/pdf', ())
let $stored := xmldb:store('/db', 'article.pdf', $pdf-binary, 'application/pdf')
return $stored


Loren Cahlander
Principal
GreatLinkUp, LLC
[email protected] <mailto:[email protected]>
[email protected] <mailto:[email protected]>
+1-651-747-6910



Reply via email to