On 24 Jun 2014, at 11:41 pm, Wendell Piez wapiez@xxxxxxxxxxxxxxx
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> 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@xxxxxxxxx
> <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> 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>
|