Re: [xsl] Getting epub: namespace into root html element

Subject: Re: [xsl] Getting epub: namespace into root html element
From: "Peter West lists@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Fri, 27 Jun 2014 04:59:15 -0000
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">&lt;!DOCTYPE
html></xsl:text>
>>        <xsl:apply-templates/>
>>    </xsl:template>
>>
>>    <xsl:template match="@*|node()">
>>        <xsl:copy>
>>            <xsl:apply-templates select="@*|node()"/>
>>        </xsl:copy>
>>    </xsl:template>

Current Thread