I think the requestor wanted to do this without modifying the XML files to add the
references to the MathML files:
dynamically pull in MathML files (by their ID)
That's why he was trying to use XInclude in XSL. However, XInclude cannot be used
inside an XSLT stylesheet because XSLT processors do not recognize it or process it.
The XInclude step is performed when the files are parsed by the XML parser, before the
stylesheet sees the XML.
But a stylesheet can use the XSLT document() function to open and include other
content. Something like this would work
<xsl:template match="inlineequation">
<xsl:variable name="id" select="@id"/>
<xsl:variable name="mathml" select="concat($id, '.xml')"/>
<xsl:apply-templates select="document($mathml,.)/*"/>
</xsl:template>
You might want to add some error checking to this code. You can use
xsl:apply-templates here because the DocBook stylesheets already have templates
matching on MathML elements, and they just copy the elements through to the output.
In html/math.xsl you will find:
<xsl:template match="mml:*" xmlns:mml="http://www.w3.org/1998/Math/MathML">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
Bob Stayton
Sagehill Enterprises
[email protected]
----- Original Message -----
From: Carlos Araya
To: Zoltán János Jánosi
Cc: [email protected]
Sent: Wednesday, June 13, 2012 9:37 AM
Subject: Re: [docbook-apps] include MathML files with the help of XSL
The first thing I see is that you need to include the mathml namespace in your
customization layer
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:mml="http://www.w3.org/1998/Math/MathML"
xmlns:xi="http://www.w3.org/2001/XInclude">
Elements for the MathML namespace should be prefixed with the prefix you chose (mml in
the case above). Same thing with the XIncllude elements, they have to be on their own
namespace (xi)
Each ID has to be unique. Otherwise when inserting the MathML equation the XSLT
processor will throw an error for duplicate IDs
Using the code you provide below I would do something like this:
<inlineequation id="Eq_0005">
<inlinemediaobject>
<imageobject>
<imagedata fileref="math/Eq_0005.gif"/>
</imageobject>
<textobject>
<xi:include href="math/Eq_005.xml/>
</textobject>
</inlinemediaobject>
</inlineequation>
The processor will use the first element that it can handle (as explained in
http://docbook.org/tdg51/en/html/inlinemediaobject.html) so the order in which you put
them may be important.
Using xincludes may also change the way in which you process your documents. Look at
Bob Stayton's book for how to pre-process your document with xincluded content
(http://www.sagehill.net/docbookxsl/Xinclude.html)
On Wed, Jun 13, 2012 at 1:52 AM, Zoltán János Jánosi <[email protected]> wrote:
Hi all!
My question:
Is there any way (with XSLT) to dynamically pull in MathML files (by their ID) and put
them into the XML/HTML files?
The situation is the following:
I have a DocBook 4.4 XML file with equation objects in it.
Every equation object has a unique ID.
For every equation ID belongs to 2 files, one MathML 2.0 XML file and a graphics
version.
Both filename is constructed from the equation ID+extension.
The graphics version is linked by the imagedata tag.
The source equation looks like this: (DocBook 4.4)
<para>
<inlineequation id="Eq_0005">
<inlinemediaobject>
<imageobject>
<imagedata fileref="math/Eq_0005.gif"/>
</imageobject>
</inlinemediaobject>
</inlineequation>
<para>
I'd like to dynamically transform the equation object to include the MathML version
rather than the graphics version. I tried to transform the DocBook document into XHTML
and HTML5, and use xinclude to include the MathML XML files, but didn't succeed yet.
It should look something like this at the end: (I think)
<p>
<math>
<mrow>
<mi>a</mi>
<mo>⁢</mo>
<msup>
...
</math>
</p>
What I have tried yet:
Here is a simple XSLT to get the equation ID:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="inlineequation">
The ID of equation is <xsl:value-of select="@id"/>
</xsl:template>
</xsl:stylesheet>
Then I tried to use the xinclude and put into the XSLT but none of them seemed to
work.
Any ideas appreciated.
Thanx in advance!
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]