[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]
Subject: Re: [docbook-apps] titlepage + XHTML + empty xmlns element: why?
Excellent explanation.... And yes, I simply added xmlns="http://www.w3.org/1999/xhtml" So my resulting rjtitlepage.xsl has this statement at the top: <xsl:stylesheet xmlns="http://www.w3.org/1999/xhtml" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:exsl="http://exslt.org/common" version="1.0" exclude-result-prefixes="exsl"> I'm glad that there is a quick solution here. Let me say that the concept of a "titlepage" in HTML output seems intended more for XSL-FO than HTML; that's probably why these kind of kludges have to be used. I'll file a bug indeed. Thanks. Robert On Sun, Dec 19, 2010 at 10:08 PM, Bob Stayton <email@example.com> wrote: > Hi Robert, > I think you have discovered a hole in the DocBook stylesheet setup of XHTML. > Since you asked "why?", here is the long explanation. > > As it should, the XHTML output generated by xhtml/docbook.xsl or chunk.xsl > puts all HTML elements in the xhtml namespace, by setting the default > namespace on the root element of the XHTML output: > > <html xmlns="http://www.w3.org/1999/xhtml"> > > When generating namespaced output, any output that includes a reference to > the null namespace by showing xmlns="" is an indication that some template > or customization forgot that it was outputting elements in that namespace. > So instead, those elements are output in the null namespace, and that > xmlns="" must be added to those elements to indicate such. If they didn't > have that declaration, they would inherit the root element's namespace > declaration and be in the XHTML namespace. But since those elements are not > in the XHTML namespace, they have to opt out with xmlns="" to show that they > have no namespace. > > Such "opting out" is usually the result of not including the declaration of > that namespace as the default output of the stylesheet. In the XHTML > stylesheets, that is done on the root element of the stylesheet: > > <xsl:stylesheet xmlns="http://www.w3.org/1999/xhtml" etc. > > Note that there is no namespace prefix in this declaration. This becomes > the default namespace for generated elements. After the XSLT processor has > processed all the content into memory and is ready to serialize the output, > it tries to minimize the number of namespace declarations in the output. If > all goes as planned and all elements are in that namespace, then the > processor can put a single namespace declaration on the root element, and > all descendant elements will inherit it. > > In XSL, it isn't enough to put this declaration on the main stylesheet file > that you call, such as docbook.xsl or chunk.xsl. Rather, this declaration > must appear in *all* the file modules that are imported or included to make > up the stylesheet. If you look in the DocBook xhtml directory, you will see > that all the xsl files have that declaration, including > titlepage.templates.xsl. > > But when you generated a new titlepage.templates.xsl from your custom spec > file, it did not have that default namespace declaration. Thus any instances > of "<div>" or other HTML elements appearing in those templates do not have a > namespace, so they are not in the XHTML namespace. So the XSLT processor > has to indicate that lack of namespace by adding xmlns="" to those elements, > so they won't inherit the default XHTML namespace from the root element. > > To make a long story short, all you need to do to fix this problem is to > manually add xmlns="http://www.w3.org/1999/xhtml" to the <xsl:stylesheet> > element of your generated titlepage.templates.xsl. Then all the output from > that module will also be in the XHTML namespace, and the processor won't > need to generate xmlns="" for them. > > The "hole" that I mentioned at the start is that the stylesheet file > (template/titlepage.xsl) that generates a new titlepage.templates.xsl from > a spec file is not aware that the output for XHTML should be in that > namespace. That's why you need to add in manually after you generate the > file. > > So how does the xhtml/titlepage.templates.xsl that ships with DocBook XSL > get that declaration? Because it is not generated by > templates/titlepage.xsl. Rather, it is generated by the program that > converts the html stylesheet files to xhtml stylesheet files. That > conversion program adds the namespace declaration to all the modules, > including that one. You probably noticed that the xhtml directory does not > have a titlepage.templates.xml (that's .xml, not .xsl) spec file. > > I would appreciate if you would file a bug report on this issue. > > Bob Stayton > Sagehill Enterprises > firstname.lastname@example.org > > > ----- Original Message ----- From: "Robert Nagle" > <email@example.com> > To: <firstname.lastname@example.org> > Sent: Sunday, December 19, 2010 2:44 PM > Subject: [docbook-apps] titlepage + XHTML + empty xmlns element: why? > > >> My goal is to make chunked XHTML or HTML output. I wish to have an >> abstract, but I want it to appear only in a meta tag, not in the main >> text. In my customization layer I enabled the parameter >> (generate.meta.abstract) >> >> Bob Stayton has suggested a way to do this: >> http://lists.oasis-open.org/archives/docbook-apps/201012/msg00077.html >> Customize the titlepage template for HTML so that abstract is not >> included in the main content for chapter. >> >> This method works, but it produces invalid HTML and XHTML code. The >> div tag which previously contained ABSTRACT now has a blank attribute >> for xsmlns. >> >> I tried using the latest docbook-ns and the regular docbook chunk xsl. >> I tried both HTML and XHTML. The problem goes away when I remove the >> line in the customization layer to include my customized titlepage >> template. >> >> This sounds like a bug to me. Can anyone confirm this and/or suggest a >> way to solve this? Thanks. >> >> rj >> >> ***************************************** >> OUTPUT FOR ONE CHAPTER >> <head> >> ... >> <meta name="description" content="This is a test of the emergency >> broadcast system." /> >> </head> >> <body> >> >> <div class="chapter" title="Chapter 4. RJ Test"> >> >> <div xmlns="" class="titlepage"></div> >> <div class="mediaobject"> >> etc... >> >> ****************************************************** >> MY MODIFICATION TO TITLEPAGETEMPLATE: >> >> <t:titlepage t:element="chapter" t:wrapper="div" class="titlepage"> >> <t:titlepage-content t:side="recto"> >> <title/> >> <subtitle/> >> <corpauthor/> >> <authorgroup/> >> <author/> >> <othercredit/> >> <releaseinfo/> >> <copyright/> >> <legalnotice/> >> <pubdate/> >> <revision/> >> <revhistory/> >> <!-- <abstract/>--> HERE"S WHAT I CHANGED >> </t:titlepage-content> >> -- >> Robert Nagle >> 12777 Ashford Point Dr #1417 >> Houston, Texas 77082 >> 713 893 3424 >> http://www.robertnagle.info >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: email@example.com >> For additional commands, e-mail: firstname.lastname@example.org >> >> >> > > -- Robert Nagle 12777 Ashford Point Dr #1417 Houston, Texas 77082 713 893 3424 http://www.robertnagle.info