My mistake. The template <xsl:call-template name="l10n.language"/> is used to select one of the DocBook XSL locale files under common. Since the English one is name "en.xml", this template processes the @xml:lang value and returns "en". So replace that call with:

<xsl:if test="@xml:lang">
 <xsl:attribute name="lang">
   <xsl:value-of select="@xml:lang"/>
 </xsl:attribute>
</xsl:if>

That will pick up the actual value of the xml:lang attibute.

Bob Stayton
Sagehill Enterprises
[email protected]


----- Original Message ----- From: "Robert Pasternak" <[email protected]>
To: "Bob Stayton" <[email protected]>
Cc: <[email protected]>
Sent: Friday, March 18, 2011 12:58 AM
Subject: Re: [docbook-apps] passing attributes from an ARTICLE element to an HTML element


Hi Bob,

It works, thanks, but there is one small problem. In my source docbook
xml I have:

<article xml:lang="en-us" ...>

In my xhtml output there is:

<html lang="en" xml:lang="en" ...>
..
<body>
  ..
  <div class="article" xml:lang="en-us" lang="en-us" ...>


Please note that while the div element corresponding to the article
element has correct language declaration, i.e. "en-us", the html
element has not, i.e. "en".

What am I missing here?

Thanks,
Robert

On Sat, Feb 26, 2011 at 11:04 PM, Bob Stayton <[email protected]> wrote:
Hi Robert,
To insert an id attribute in the <html> element, you'll need to customize
the template named 'chunk-element-content' in xhtml/chunk-common.xsl. That
is where the <html> element is generated. You could add a template call
after the opening <html> to insert any attributes. Since that template is
used for all chunks, I would suggest using a mode to just change article:

[in customized chunk-element-content]
<html>
<xsl:apply-templates select="." mode="html.root.attributes"/>
...

where mode="html.root.attributes" is new for your purposes. You would
create a general template that does nothing, and a special one for article:

<!-- for all other elements do nothing -->
<xsl:template match="*" mode="html.root.attributes"/>

<!-- for article, add two attributes -->
<xsl:template match="d:article" mode="html.root.attributes">
<xsl:attribute name="id">
<xsl:call-template name="object.id"/>
</xsl:attribute>
<xsl:attribute name="lang">
<xsl:call-template name="l10n.language"/>
</xsl:attribute>
</xsl:template>

To avoid the duplicate id on the div, you need to customize the template
that matches on d:article in xhtml/component.xsl. After the opening <div>
tag, it calls a template named 'common.html.attributes', and then generates
the id attribute. Delete the id part and that should do it.

When you customize the d:article template, be aware that you must follow the
guidelines for customizing chunked output, and put it in a separate
customization layer that imports docbook.xsl. That's because the template
in component.xsl is not a chunking template, it is a template for element
formatting. If you don't separate them, you probably won't get output for
your article. See this reference for details:

http://www.sagehill.net/docbookxsl/ChunkingCustomization.html

Bob Stayton
Sagehill Enterprises
[email protected]


----- Original Message ----- From: "Robert Pasternak" <[email protected]>
To: <[email protected]>
Sent: Friday, February 25, 2011 12:57 AM
Subject: [docbook-apps] passing attributes from an ARTICLE element to an
HTML element


Hi

My Docbook based project has a modular structure, where each xml file
starts with an article element. Each article element specifies two
attributes: xml:id and xml:lang. For HTML output I use the
xhtml/profile-chunk.xsl transformation, and each article is
transformed into a standalone html file. The two attributes are added
to the div element containing the contents of the article, however I
would like these two attributes to be added to the enclosing html
element. And so, the first question is how to do that, and the second
is how to remove the xml:id attribute from the div element, so there
are no duplicated ids within the single html file.

Thanks,
Robert

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]






---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]




---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to