W3C home > Mailing lists > Public > www-math@w3.org > June 2002

Re: Is it so hard to generate compliant software ?

From: David Carlisle <davidc@nag.co.uk>
Date: Mon, 24 Jun 2002 17:14:26 +0100
Message-Id: <200206241614.RAA25606@penguin.nag.co.uk>
To: goessner@mecxpert.de
CC: www-math@w3.org, www-svg@w3.org



> 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 12:15:01 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Saturday, 20 February 2010 06:12:51 GMT