- From: Goessner / MecXpert <goessner@mecxpert.de>
- Date: Mon, 24 Jun 2002 22:45:05 +0200
- To: <www-math@w3.org>, <www-svg@w3.org>
thanks to david's "Universal Svg/MathML stylesheet" (USMSS) we now have a real cross-browser multi-namespace xml document. I made some minor modifications to his stylesheet (i might have modified the prefixes alternatively), so that the following works with ie6 *and* amaya. note to use *.xml instead of *.html for ie6 to work properly. also note, that the 'svg' is *not* rotated in amaya because of the obviously not implemented 'transform' attribute. thanks a lot .. david carlisle .. this is also very useful for inline svg only. MathmlSvg.xml //------------------------------------------------------------------------ <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="MathmlSvg.xsl"?> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:g="http://www.w3.org/2000/svg" xmlns:m="http://www.w3.org/1998/Math/MathML"> <head> <title>SVG/MathML</title> </head> <body> <h2>SVG and MathML</h2> <p>In SVG a homogenous transformation matrix looks like this.</p> <p> <m:math> <m:mrow> <m:mi>T</m:mi><m:mo>=</m:mo> <m:mo>(</m:mo> <m:mtable> <m:mtr> <m:mtd> <m:mi>a</m:mi> </m:mtd> <m:mtd> <m:mi>c</m:mi> </m:mtd> <m:mtd> <m:mi>e</m:mi> </m:mtd> </m:mtr> <m:mtr> <m:mtd> <m:mi>b</m:mi> </m:mtd> <m:mtd> <m:mi>d</m:mi> </m:mtd> <m:mtd> <m:mi>f</m:mi> </m:mtd> </m:mtr> <m:mtr> <m:mtd> <m:mn>0</m:mn> </m:mtd> <m:mtd> <m:mn>0</m:mn> </m:mtd> <m:mtd> <m:mn>1</m:mn> </m:mtd> </m:mtr> </m:mtable> </m:mrow> <m:mo>)</m:mo> </m:math> </p> <p> Here is how we use it. </p> <p> <g:svg width="200" height="150"> <g:text transform="matrix(0.5,0.866,-0.866,0.5,10,40)" stroke="darkslateblue" fill="lightblue" font-size="60" font-family="Comic Sans MS">SVG</g:text> </g:svg> </p> </body> </html> MathmlSvg.xsl // ------------------------------------------------------------- <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:g="http://www.w3.org/2000/svg" xmlns:h="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/xhtml" exclude-result-prefixes="h" > <h:p>The main bulk of this stylesheet is an identity transformation so...</h:p> <xsl:template match="*"> <xsl:copy> <xsl:copy-of select="@*"/> <xsl:apply-templates/> </xsl:copy> </xsl:template> <h:p>XHTML elements are copied sans prefix (XHTML is default namespace here, so these elements will still be in XHTML namespace</h:p> <xsl:template match="h:*"> <xsl:element name="{local-name(.)}"> <xsl:copy-of select="@*"/> <xsl:apply-templates/> </xsl:element> </xsl:template> <h:p>This just ensures the mathml prefix declaration isn't copied from the source at this stage, so that the system will use the mml prefix coming from this stylesheet</h:p> <xsl:template match="h:html|html"> <html> <xsl:copy-of select="@*[not(namespace-uri(.)='http://www.w3.org/2002/Math/preference')]"/ > <xsl:apply-templates/> </html> </xsl:template> <xsl:template match="h:head|head"> <head> <object id="mmlFactory" classid="clsid:32F66A20-7614-11D4-BD11-00104BD3F987"> <xsl:text> </xsl:text> </object> <xsl:processing-instruction name="import"> namespace="m" implementation="#mmlFactory" </xsl:processing-instruction> <object id="AdobeSVG" classid="clsid:78156a80-c6a1-4bbf-8e6a-3cd390eeb4e2"> <xsl:text> </xsl:text> </object> <xsl:processing-instruction name="import"> namespace="g" implementation="#AdobeSVG" </xsl:processing-instruction> <xsl:apply-templates/> </head> </xsl:template> <h:p>Somewhat bizarrely in an otherwise namespace aware system, Microsoft behaviours are defined to trigger off the <h:em>prefix</h:em> not the <h:em>Namespace</h:em>. In the code above we associated a MathML rendering behaviour (if one was found) with the prefix <h:code>m:</h:code> so here we ensure that this is the prefix that actually gets used in the output.</h:p> <xsl:template match="m:*"> <xsl:element name="m:{local-name(.)}"> <xsl:copy-of select="@*"/> <xsl:apply-templates/> </xsl:element> </xsl:template> <xsl:template match="g:*"> <xsl:element name="g:{local-name(.)}"> <xsl:copy-of select="@*"/> <xsl:apply-templates/> </xsl:element> </xsl:template> </xsl:stylesheet> // ----------------------------------------------------------- stefan goessner ----- Original Message ----- From: "David Carlisle" <davidc@nag.co.uk> To: <goessner@mecxpert.de> Cc: <www-math@w3.org>; <www-svg@w3.org> Sent: Monday, June 24, 2002 6:14 PM Subject: Re: Is it so hard to generate compliant software ? > > > > Please note, that i don't use the universal MathML stylesheet (UMSS) here, > > since nothing comparable exists for Svg. So the resulting document > > XHTML/Presentation MathML/SVG is unfortunately not cross-browser enabled. > > If you cut out bits of the mathml stylesheet and change mathplayer to > adobesvg you get the following stylesheet which appears to render your > document, even when the mathplayer and adobe-specific object elements > are removed. > > The same xml file also renders in amaya (the svg is clearly > recognised as it comes out big and blue, but not rotated). > > This hasn't been tested at all except on the document you posted... > > This stylesheet doesn't do all the more exotic determination of > available renderers that the mathml one does: it just does mathplayer and > adobe svg, always, but it could form the basis of a stylesheet for > cross platform svg. > > David > > > ====================================== > <?xml version="1.0"?> > <?xml-stylesheet type="text/xsl" href="svg.xsl"?> > <html xmlns="http://www.w3.org/1999/xhtml" > xmlns:g="http://www.w3.org/2000/svg" > xmlns:m="http://www.w3.org/1998/Math/MathML"> > <head> > <title>SVG/MathML</title> > </head> > <body> > <h2>SVG and MathML</h2> > <p>In SVG a homogenous transformation matrix looks like this.</p> > <p> > <m:math> > <m:mrow> > <m:mi>T</m:mi><m:mo>=</m:mo> > <m:mo>(</m:mo> > <m:mtable> > <m:mtr> > <m:mtd> <m:mi>a</m:mi> </m:mtd> > <m:mtd> <m:mi>c</m:mi> </m:mtd> > <m:mtd> <m:mi>e</m:mi> </m:mtd> > </m:mtr> > <m:mtr> > <m:mtd> <m:mi>b</m:mi> </m:mtd> > <m:mtd> <m:mi>d</m:mi> </m:mtd> > <m:mtd> <m:mi>f</m:mi> </m:mtd> > </m:mtr> > <m:mtr> > <m:mtd> <m:mn>0</m:mn> </m:mtd> > <m:mtd> <m:mn>0</m:mn> </m:mtd> > <m:mtd> <m:mn>1</m:mn> </m:mtd> > </m:mtr> > </m:mtable> > </m:mrow> > <m:mo>)</m:mo> > </m:math> > </p> > <p> > Here is how we use it. > </p> > <p> > <g:svg width="200" height="150"> > <g:text transform="matrix(0.5,0.866,-0.866,0.5,10,40)" > stroke="darkslateblue" fill="lightblue" font-size="60" > font-family="Comic Sans MS">SVG</g:text> > </g:svg> > </p> > </body> > </html> > ====================================== > <xsl:stylesheet > version="1.0" > xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > xmlns:mml="http://www.w3.org/1998/Math/MathML" > xmlns:svg="http://www.w3.org/2000/svg" > xmlns:h="http://www.w3.org/1999/xhtml" > xmlns="http://www.w3.org/1999/xhtml" > exclude-result-prefixes="h" > > > > > <h:p>The main bulk of this stylesheet is an identity transformation so...</h:p> > <xsl:template match="*"> > <xsl:copy> > <xsl:copy-of select="@*"/> > <xsl:apply-templates/> > </xsl:copy> > </xsl:template> > > > > <h:p>XHTML elements are copied sans prefix (XHTML is default namespace > here, so these elements will still be in XHTML namespace</h:p> > <xsl:template match="h:*"> > <xsl:element name="{local-name(.)}"> > <xsl:copy-of select="@*"/> > <xsl:apply-templates/> > </xsl:element> > </xsl:template> > > <h:p>This just ensures the mathml prefix declaration isn't copied from > the source at this stage, so that the system will use the mml prefix > coming from this stylesheet</h:p> > <xsl:template match="h:html|html"> > <html> > <xsl:copy-of select="@*[not(namespace-uri(.)='http://www.w3.org/2002/Math/preference')]"/ > > <xsl:apply-templates/> > </html> > </xsl:template> > > > <xsl:template match="h:head|head"> > <head> > <object id="mmlFactory" > classid="clsid:32F66A20-7614-11D4-BD11-00104BD3F987"> > <xsl:text> </xsl:text> > </object> > <xsl:processing-instruction name="import"> > namespace="mml" implementation="#mmlFactory" > </xsl:processing-instruction> > <object id="AdobeSVG" > classid="clsid:78156a80-c6a1-4bbf-8e6a-3cd390eeb4e2"> > <xsl:text> </xsl:text> > </object> > <xsl:processing-instruction name="import"> > namespace="svg" implementation="#AdobeSVG" > </xsl:processing-instruction> > <xsl:apply-templates/> > </head> > </xsl:template> > > > > <h:p>Somewhat bizarrely in an otherwise namespace aware system, > Microsoft behaviours are defined to trigger off the > <h:em>prefix</h:em> not the <h:em>Namespace</h:em>. In the code above > we associated a MathML rendering behaviour (if one was found) with the > prefix <h:code>mml:</h:code> so here we ensure that this is the prefix > that actually gets used in the output.</h:p> > <xsl:template match="mml:*"> > <xsl:element name="mml:{local-name(.)}"> > <xsl:copy-of select="@*"/> > <xsl:apply-templates/> > </xsl:element> > </xsl:template> > > > <xsl:template match="svg:*"> > <xsl:element name="svg:{local-name(.)}"> > <xsl:copy-of select="@*"/> > <xsl:apply-templates/> > </xsl:element> > </xsl:template> > > > </xsl:stylesheet> > ====================================== > > _____________________________________________________________________ > This message has been checked for all known viruses by Star Internet > delivered through the MessageLabs Virus Scanning Service. For further > information visit http://www.star.net.uk/stats.asp or alternatively call > Star Internet for details on the Virus Scanning Service.
Received on Monday, 24 June 2002 16:54:27 UTC