Hi,
That stylesheet works outside of the browser, so it seems to be an issue with 
how the browser loads and processes a stylesheet.  Can you get the browser to 
work without any stylesheet customization, using the stock DocBook XSL 
stylesheet (without MathML processing)?  I've never had much luck getting 
browsers to process the DocBook XSL stylesheets.

Bob Stayton
Sagehill Enterprises
[email protected]


  ----- Original Message ----- 
  From: Zoltán János Jánosi 
  To: Bob Stayton 
  Cc: [email protected] 
  Sent: Thursday, June 21, 2012 5:45 AM
  Subject: Re: [docbook-apps] include MathML files with the help of XSL


  It doesn't seem to work for me.
  I had to put this line right after the xls namespace declaration line.
  Now it drops an "unknown error".

  To reproduce the error, follow these steps:

    1.. download the 3 attached files into one directory

    2.. extract the DocBook xslt files into a subdirectory called 
"docbook-xsl-1.76.1"

    3.. open the file called "MathML_XSLT_teszt.xml" in a browser (I use 
FireFox)



  2012/6/20 Bob Stayton <[email protected]>

    Hi Zoltán,
    I assumed you were developing a customization layer of DocBook XSL.  Your 
test stylesheet does not import the DocBook XSL stylesheet, and so the 
templates matching on the mathml elements are not available to the processor.  
If you add this to the top of your test stylesheet, it will work:

     <xsl:import href="path-to/docbook-xsl-1.76.1/html/docbook.xsl"/>

    Now the templates matching on mml:* are imported and can copy the MathML 
elements through.


    You also said:


      but in my files, there are no mml namespace given.



    But in your Eq_0005.xml file, you do specify the MathML namespace on the 
<math> element:

     <math xmlns="http://www.w3.org/1998/Math/MathML";>

    When that file is opened by the document() function, that namespace is 
respected and those mathml templates will be applied to those elements.


    Bob Stayton
    Sagehill Enterprises
    [email protected]


    ----- Original Message ----- From: Zoltán János Jánosi

    To: [email protected]
    Sent: Wednesday, June 20, 2012 2:07 AM

    Subject: Re: [docbook-apps] include MathML files with the help of XSL


    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