[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]
Subject: Re: [docbook-apps] include MathML files with the help of XSL
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 firstname.lastname@example.org----- Original Message ----- From: Carlos Araya
To: Zoltán János Jánosi Cc: email@example.com Sent: Wednesday, June 13, 2012 9:37 AM Subject: Re: [docbook-apps] include MathML files with the help of XSLThe 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 <firstname.lastname@example.org> 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!