Here is my test setup:*
**
DocBook 4.4 XML file:**

**<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="HTML5_MathML.xsl" type="text/xsl"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
"docbookV4.4/docbookx.dtd" []>
<book xmlns:xi="http://www.w3.org/2001/XInclude";>
    <title/>
    <chapter>
        <title/>
        <para>
            <inlineequation id="Eq_0005">
                <inlinemediaobject>
                  <imageobject>
                    <imagedata fileref="math/Eq_0005.gif"/>
                  </imageobject>
                </inlinemediaobject>
            </inlineequation>
        </para>
    </chapter>
</book>*

*The XSLT file (HTML5_MathML.xsl):*

*<?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" encoding="utf-8" indent="yes" />

    <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>

    <xsl:template match="/">
        <xsl:text disable-output-escaping='yes'></xsl:text>
            <html>
                <body>
                    <xsl:apply-templates/>
                </body>
            </html>
    </xsl:template>

</xsl:stylesheet>*

*MathML file (Eq_0005.xml):*

*    <math xmlns="http://www.w3.org/1998/Math/MathML";>
      <mrow>
        <msup><mi>a</mi><mn>2</mn></msup>
        <mo>+</mo>
        <msup><mi>b</mi><mn>2</mn></msup>
        <mo>=</mo>
        <msup><mi>c</mi><mn>2</mn></msup>
      </mrow>
    </math>*

*Expected result:*

<!doctype html>
  <html>
  <head>
   <meta charset="UTF-8">
  </head>
  <body>
*    <math xmlns="http://www.w3.org/1998/Math/MathML";>
      <mrow>
        <msup><mi>a</mi><mn>2</mn></msup>
        <mo>+</mo>
        <msup><mi>b</mi><mn>2</mn></msup>
        <mo>=</mo>
        <msup><mi>c</mi><mn>2</mn></msup>
      </mrow>
    </math>*
  </body>
</html>
*
Obtained result: (by opening the DocBook XML file in FireFox)*

*<html>*
*<body> x ( t ) = R e [ A ⋅ e j ( ω 0 ⋅ t + Φ ) ] </body>*
*</html>

**Problem 1:*
All of the MathML XML elements are missing.

*Problem 2:*
You wrote something about DocBook MML template match and I couldn't really
understand what should I do with that:
*>>> 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>*

It seems to me really usable (just copying the MathML objects), but in my
files, there are no mml namespace given.

2012/6/14 Zoltán János Jánosi <[email protected]>:
> OK, I'll do.
>
> 2012/6/14 Bob Stayton <[email protected]>:
>> OK.  If it works, please post your reply to the mailing list so it gets
into
>> the list archive.
>>
>>
>> Bob Stayton
>> Sagehill Enterprises
>> [email protected]
>>
>>
>> ----- Original Message ----- From: "Zoltán János Jánosi" <
[email protected]>
>> To: "Bob Stayton" <[email protected]>
>> Sent: Thursday, June 14, 2012 2:09 PM
>>
>> Subject: Re: [docbook-apps] include MathML files with the help of XSL
>>
>>
>> Thanx Bob, you are right about what I originally wanted.
>> Thanx for the answer, soon I'll try it!
>>
>> 2012/6/14 Bob Stayton <[email protected]>:
>>>
>>> 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>&InvisibleTimes;</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!
>>
>>
>>

Reply via email to