xsl-list
[Top] [All Lists]

Re: [xsl] Namespaces in output

2021-09-22 08:53:17
Terry,

What happens if you remove the default namespace declaration  xmlns="
http://www.w3.org/1999/xhtml"; from the top level?

Your XSLT stylesheet is an XML document, so this is binding all unprefixed
names in the XSLT (such as 'div') to the XHTML namespace. Remove
the declaration and this will not happen.

Your setting for xpath-default-namespace will still work as this only
affects the XSLT (specifically, the namespace assigned to literal result
elements) not the parsing or addressing of the source.

I hope that helps -- Wendell


On Wed, Sep 22, 2021 at 9:44 AM Terry Ofner tdofner(_at_)gmail(_dot_)com <
xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com> 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";>

In the past, I have skirted the namespace tangle by manually removing the
doctype and replacing <html xmlns="http://www.w3.org/1999/xhtml”;> 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";
    version="3.0"
    xmlns="http://www.w3.org/1999/xhtml";
    xpath-default-namespace="http://www.w3.org/1999/xhtml";
    xmlns:map="http://www.w3.org/2005/xpath-functions/map";
    xmlns:xs="http://www.w3.org/2001/XMLSchema";
    xmlns:saxon="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 appears in the root
level element of all output documents:

<div xmlns="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=
“div” namespace="">, the http://www.w3.org/1999/xhtml namespace appears
on all child elements:

<div class="apE">
    <p xmlns="http://www.w3.org/1999/xhtml"; class="subhead_ap_topic">2.2
Yada Yada</p>
    <p xmlns="http://www.w3.org/1999/xhtml"; class="subhead_ap_h2">Yuda</p>
    <p xmlns="http://www.w3.org/1999/xhtml"; class="body_first">NNNN</p>
    <p xmlns="http://www.w3.org/1999/xhtml"; class="subhead_ap_h4">MMMM</p>
    <p xmlns="http://www.w3.org/1999/xhtml"; class="body_text">PPPP</p>
</div>

My question: Is it possible to remove all namespaces from my result
documents—short of selecting * and rebuilding all elements using
<xsl:element namespace=“”>? These namespace declarations don’t hamper the
display of the resulting documents. However, text is text and the extra
load, over pages and pages of such output can’t 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/174322> (by
email <>)



-- 
...Wendell Piez... ...wendell -at- nist -dot- gov...
...wendellpiez.com... ...pellucidliterature.org... ...pausepress.org...
...github.com/wendellpiez... ...gitlab.coko.foundation/wendell...
--~----------------------------------------------------------------
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
--~--
<Prev in Thread] Current Thread [Next in Thread>