OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

docbook-apps message

[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 <bobs@sagehill.net> 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
> 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
>>
>>
>>
>
>



-- 
Robert Nagle
12777 Ashford Point Dr #1417
Houston, Texas 77082
713 893 3424
http://www.robertnagle.info


[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]