[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]
Subject: Re: [docbook-apps] titlepage + XHTML + empty xmlns element: why?
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 bobs@sagehill.net ----- Original Message ----- From: "Robert Nagle" <idiotprogrammer@gmail.com> To: <docbook-apps@lists.oasis-open.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: docbook-apps-unsubscribe@lists.oasis-open.org > For additional commands, e-mail: docbook-apps-help@lists.oasis-open.org > > >
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]