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: Processing Xincludes using document() and xml:id (docbook 5)


Hi all,

My employer is rolling out an XML CMS that has issues resolving xincludes. The workaround that I need to perform is writing a short XSL to preprocess my files and resolve Xincludes manually.

My script worked fine on a couple of test docbook 4 test files that used the id attribute to identify nodes, but as soon as I switched to my docbook 5 files and changed the referenced attribute to xml:id, I began getting the following: error message:

"The URI http://www.w3.org/XML/1998/namespace does not identify an external Java class"

Now, the namespace quoted, is of course, the default XML namespace. During the process of flailing about, I did try explicitly binding xml to its namespace (xmlns:xml='http://www.w3.org/XML/1998/namespace') but had no effect.

The script as it stands looks like this:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
    xmlns:exsl="http://exslt.org/common"; xmlns:fo="http://www.w3.org/1999/XSL/Format";
    xmlns:ng="http://docbook.org/docbook-ng"; xmlns:db="http://docbook.org/ns/docbook";
    xmlns:xi="http://www.w3.org/2001/XInclude"; exclude-result-prefixes="db ng exsl" version="1.0">

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

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

    <xsl:template match="xi:include">
        <!-- grab the value contained in the bracket of the xpointer attribute -->
        <xsl:variable name="id_value1">
            <xsl:value-of select="substring-before(@xpointer, ')')"/>
        </xsl:variable>
        <xsl:variable name="id_value2">
            <xsl:value-of select="substring-after($id_value1, '(')"/>
        </xsl:variable>
        <xsl:for-each select="document(@href,/)">
            <xsl:copy-of select="xml:id($id_value2)"/>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

Thanks in advance for any help.
Jeff.


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