Subject: Re: [xsl] Namespaces in output From: "Terry Ofner tdofner@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Wed, 22 Sep 2021 14:37:41 -0000 |
Michael, Thank you for the clarity. So, a modified identity template like the one below will take care of any elements not addressed in my stylesheet. Is there any danger in this approach? <xsl:template match="*"> <xsl:element name="{name()}" namespace=""> <xsl:copy-of select="@*"/> <xsl:apply-templates select="node()"/> </xsl:element> </xsl:template> Any LREs in my stylesheet should employ xsl:element and xsl:attribute at construction with namespace=b". Similar constructions should be used throughout, avoiding <xsl:copy> and <xsl:copy-of> (except when copying attributes). Are the above statement accurate? Terry > On Sep 22, 2021, at 9:53 AM, Michael Kay mike@xxxxxxxxxxxx <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: > > If an element in the result tree is in the XHTML namespace, that's because you put it there, and the way to get rid of the namespace declaration is to STOP putting it there. > > The way you put it there depends on how you created the element. The three ways of creating an element are essentially > > (a) xsl:element > > (b) xsl:copy/copy-of > > (c) literal result elements > > With xsl:element, the new element goes in the namespace selected in the namespace attribute (as you indicate). > > With xsl:copy/copy-of, it retains the namespace it had in the source document > > With literal result elements, it retains the namespace that the LRE has in the stylesheet. > > If you want to change the namespace of an element in the source document, you can't use xsl:copy/copy-of, you need to use xsl:element. > > Michael Kay > Saxonica > >> On 22 Sep 2021, at 14:43, Terry Ofner tdofner@xxxxxxxxx <mailto:tdofner@xxxxxxxxx> <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx <mailto:xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>> wrote: >> >> I am processing html exported from InDesign documents. As such, Every html document comes with the standard doctype and namespace declarations: >> >> <!DOCTYPE html> >> <html xmlns="http://www.w3.org/1999/xhtml <http://www.w3.org/1999/xhtml>"> >> >> In the past, I have skirted the namespace tangle by manually removing the doctype and replacing <html xmlns="http://www.w3.org/1999/xhtml <http://www.w3.org/1999/xhtml>b> with an element name that the Oxygen xslt engine would not quibble about, such as <mybook>. Since I have too many documents to transform, I have left the doctype and html/namespace in place and modified the stylesheet namespace declarations like this: >> >> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform <http://www.w3.org/1999/XSL/Transform>" >> version="3.0" >> xmlns="http://www.w3.org/1999/xhtml <http://www.w3.org/1999/xhtml>" >> xpath-default-namespace="http://www.w3.org/1999/xhtml <http://www.w3.org/1999/xhtml>" >> xmlns:map="http://www.w3.org/2005/xpath-functions/map <http://www.w3.org/2005/xpath-functions/map>" >> xmlns:xs="http://www.w3.org/2001/XMLSchema <http://www.w3.org/2001/XMLSchema>" >> xmlns:saxon="http://saxon.sf.net/ <http://saxon.sf.net/>" >> exclude-result-prefixes="xs map #default saxon"> >> >> >> Well and good. I can address the html elements directly in my stylesheet. However, the namespace http://www.w3.org/1999/xhtml <http://www.w3.org/1999/xhtml> appears in the root level element of all output documents: >> >> <div xmlns="http://www.w3.org/1999/xhtml <http://www.w3.org/1999/xhtml>" class="apE"> >> <p class="subhead_ap_topic">2.2 Yada Yada</p> >> <p class="subhead_ap_h2">Yuda</p> >> <p class="body_first">NNNN</p> >> <p class="subhead_ap_h4">MMMM</p> >> <p class="body_text">PPPP</p> >> </div> >> >> When I remove the namespace at the root level using <xsl:element name=bdivb namespace="">, the http://www.w3.org/1999/xhtml <http://www.w3.org/1999/xhtml> namespace appears on all child elements: >> >> <div class="apE"> >> <p xmlns="http://www.w3.org/1999/xhtml <http://www.w3.org/1999/xhtml>" class="subhead_ap_topic">2.2 Yada Yada</p> >> <p xmlns="http://www.w3.org/1999/xhtml <http://www.w3.org/1999/xhtml>" class="subhead_ap_h2">Yuda</p> >> <p xmlns="http://www.w3.org/1999/xhtml <http://www.w3.org/1999/xhtml>" class="body_first">NNNN</p> >> <p xmlns="http://www.w3.org/1999/xhtml <http://www.w3.org/1999/xhtml>" class="subhead_ap_h4">MMMM</p> >> <p xmlns="http://www.w3.org/1999/xhtml <http://www.w3.org/1999/xhtml>" class="body_text">PPPP</p> >> </div> >> >> My question: Is it possible to remove all namespaces from my result documentsbshort of selecting * and rebuilding all elements using <xsl:element namespace=bb>? These namespace declarations donbt hamper the display of the resulting documents. However, text is text and the extra load, over pages and pages of such output canbt but add time to rendering pages. Of course, having one namespace declaration at the root level is preferable to having all child elements carrying a ns. >> >> Any help in this would be appreciated. >> >> Terry >> >> >> XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list> >> EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/293509> (by email <applewebdata://F23A8F0A-B7BD-4E75-8363-498495D71C60>) > > XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list> > EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/723745> (by email <>)
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Namespaces in output, Michael Kay mike@xxx | Thread | Re: [xsl] Namespaces in output, Michael Kay mike@xxx |
Re: [xsl] Namespaces in output, Michael Kay mike@xxx | Date | Re: [xsl] Namespaces in output, Michael Kay mike@xxx |
Month |