- From: <RobertM@dessci.com>
- Date: Mon, 9 May 2005 12:11:50 -0500
- To: jon@noring.name
- CC: www-math@w3.org
Jon,
I've been looking into the status on the note in preparation on mixing
MathML and SVG. It isn't ready to be circulated yet, though your
inquiries have inspired another flurry of effort, and hopefully we
will be able to publish it soon. However, I can give you a short
version.
There are three obvious use cases:
MathML island in SVG
SVG island in MathML
non-hierarchical mixing of both MathML and SVG
The first two cases lend themselves to the existing extension
mechanisms on MathML and SVG. When you have a well-defined,
self-contained block of MathML that you need to include in SVG
(e.g. to label a graph with an equation), the foreignObject tag is
probably the right way to go. I make no claims that the following
example is technically correct, but this gives the idea:
----------------------------------------
<?xml version="1.0" standalone="yes"?>
<svg width="4in" height="3in" version="1.1" xmlns='http://www.w3.org/2000/svg'>
<desc>This example uses the 'switch' element to provide a
fallback graphical representation of an paragraph, if
MathML is not supported.</desc>
<!-- The 'switch' element will process the first child element
whose testing attributes evaluate to true.-->
<switch>
<!-- Process the embedded MathML if the requiredExtensions attribute
evaluates to true (i.e., the user agent supports MathML embedded within SVG). -->
<foreignObject width="100" height="50"
requiredExtensions="xmlns="http://www.w3.org/1998/Math/MathML">
<!-- MathML content goes here -->
<math xmlns="http://www.w3.org/1998/Math/MathML>
<mfrac>
<mn> 1 </mn>
<mrow>
<msup><mi> x </mi><mn> 3 </mn></msup>
<mo> + </mo>
<mfrac><mi> x </mi><mn> 3 </mn></mfrac>
</mrow>
</mfrac>
</math>
</foreignObject>
<!-- Else, process the following alternate SVG. -->
<text font-size="10" font-family="italic">
<tspan x="10" y="10">1/(x^3+(x/3))</tspan>
</text>
</switch>
</svg>
----------------------------------------
Conversely, when you have a self-contained block of SVG that you want
to incorporate into MathML (e.g. to draw some symbol or something)
then the MathML <semantics> element is probably the best choice.
Again, here is an example, which may not be technically correct:
----------------------------------------
<math>
...
<semantics>
<csymbol definitionURL="elementary-stats.html#dice-4up"/>
<annotation-xml encoding="SVG1.1">
<svg xmlns="http://www.w3.org/2000/svg" height="137px">
<rect stroke="black" fill="none" rx="5px" width="40px" height="40px"/>
<circle stroke="black" fill="black" cy="30px" cx="30px" r="5px"/>
<circle stroke="black" fill="black" cy="30px" cx="10px" r="5px"/>
<circle stroke="black" fill="black" cy="20px" cx="20px" r="5px"/>
<circle stroke="black" fill="black" cy="10px" cx="30px" r="5px"/>
<circle stroke="black" fill="black" cy="10px" cx="10px" r="5px"/>
</svg>
</annotation-xml>
<annotation encoding="image/jpeg"> copy dice4.jpg here </annotation>
<annotation encoding="image/gif" other="dice.gif"/>
</semantics>
...
</math>
----------------------------------------
The case where you really want to intermix MathML and SVG
non-hierarchically, e.g. to circle things in one equation and draw
arrows to part of another, is really hard, and we don't have a good
way to handle that worked out in any detail yet.
Anyway, that is what I can report. Hope it helps.
--Robert
------------------------------------------------------------------
Dr. Robert Miner RobertM@dessci.com
W3C Math Interest Group co-chair 651-223-2883
Design Science, Inc. "How Science Communicates" www.dessci.com
------------------------------------------------------------------
Received on Monday, 9 May 2005 17:12:09 UTC