On 24 Jun 2014, at 11:41 pm, Wendell Piez wapiez(_at_)wendellpiez(_dot_)com
<xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com> wrote:
Dear Peter,
...
Particularly, when it comes to namespaces, all you need to do is to
ensure that the namespaces you want are on the elements where you want
them (whether those elements are copied or created anew by your XSLT),
and then let your serializer take care of the syntax. Since the epub
namespace isn't anywhere in your source data, it is not copied through
when you copy through all the other nodes in your source. (It is
added, however, when you generate your attributes with names in that
namespace. So declarations for it appear on elements with those
attributes.) The solution is to add it everywhere.
You can add it everywhere by modifying your identity template like this:
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:namespace name="epub">http://www.idpf.org/2007/ops</xsl:namespace>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
This worked a treat. XSLT 3.0 and an html-version on the output sorted out the
doctype.
Peter West
"...for I am gentle and lowly in heart, and you will find rest for your souls."
...
The namespace will then be bound to every node in your result.
Consequently you will see it declared on the document element in your
output -- and probably nowhere else. (I say 'probably' because that is
the way a well-designed serializer will do it, other things being
equal.)
...
On Tue, Jun 24, 2014 at 4:30 AM, Peter West lists(_at_)pbw(_dot_)id(_dot_)au
<xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com> wrote:
I'm trying to convert EPUB2 files to EPUB3. In the course of that, I need
to include some epub:type attributes. I also want to include a <!DOCTYPE
html> declaration, although I have seen it argued that the declaration is
not necessary.
I have managed to get the DOCTYPE declaration to work by a method that has
been described before in a number of places, and I have the epub:type
attributes appearing on the relevant elements. However, the epub namespace
is declared on every element, and I haven't been able to get it into the
root element. How can I do this?
My stylesheet starts like this:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xh="http://www.w3.org/1999/xhtml"
xmlns:epub="http://www.idpf.org/2007/ops"
exclude-result-prefixes="xs xh"
version="2.0">
<xsl:strip-space elements="*"/>
<xsl:output method="xhtml" />
<xsl:template match="/">
<xsl:text disable-output-escaping="yes"><!DOCTYPE html></xsl:text>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--