Hi,
id() is an XSLT function (see your local XSLT reference), while xml:id() is
not. It has nothing to do with the name of the attribute, only the type of
the attribute (defined in the schema as attribute type ID). In fact, the
id() function works fine with xml:id attributes since they are defined as
type ID.
Bob Stayton
Sagehill Enterprises
[EMAIL PROTECTED]
----- Original Message -----
From: "Jeff Hooker" <[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Thursday, October 09, 2008 2:55 PM
Subject: [docbook-apps] FIXED: [docbook-apps] Processing Xincludes using
document() and xml:id (docbook 5)
Hi all,
Fixed the problem by changing the:
<xsl:copy-of select="xml:id($id_value2)"/>
to:
<xsl:copy-of select="//[EMAIL PROTECTED]:id=$id_value2]"/>
Still, if anyone could explain to me why:
<xsl:copy-of select="id($id_value2)"/>
worked fine but:
<xsl:copy-of select="xml:id($id_value2)"/>
failed, I'd be most interested.
Cheers,
Jeff.
-----Original Message-----
From: Jeff Hooker [mailto:[EMAIL PROTECTED]
Sent: Thursday, October 09, 2008 1:56 PM
To: [email protected]
Subject: [docbook-apps] 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.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]