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"><!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 |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Getting epub: namespace i, Peter West lists@xxx | Thread | Re: [xsl] Getting epub: namespace i, Abel Braaksma (Exsel |
Re: [xsl] Saxon/C and Python?, Michael Kay mike@xxx | Date | Re: [xsl] Getting epub: namespace i, Peter West lists@xxx |
Month |