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<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].**org<[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<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 <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<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<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<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<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].**org<[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<http://www.w3.org/1999/XSL/Transform> >>>> " >>>> xmlns:mml="http://www.w3.org/**1998/Math/MathML<http://www.w3.org/1998/Math/MathML> >>>> " >>>> xmlns:xi="http://www.w3.org/**2001/XInclude<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<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<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<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! >>>> >>> >>> >>> >>> >
<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:import href="/docbook-xsl-1.76.1/html/docbook.xsl"/> <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>
<?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>
<math display='block' xmlns='http://www.w3.org/1998/Math/MathML'><mrow><mi>x</mi> <mo stretchy='false'>(</mo> <mi>t</mi> <mo stretchy='false'>)</mo> <mo>=</mo> <mi>R</mi> <mi>e</mi> <mrow><mo>[</mo> <mrow><mi>A</mi> <mo>⋅</mo> <msup><mi>e</mi> <mrow><mi>j</mi> <mo stretchy='false'>(</mo> <msub><mi>ω</mi> <mn>0</mn> </msub><mo>⋅</mo> <mi>t</mi> <mo>+</mo> <mi>Φ</mi> <mo stretchy='false'>)</mo> </mrow></msup></mrow><mo>]</mo> </mrow></mrow></math>
--------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
