|
Hi,
I'm using a clean check out from Xalan CVS this
morning but I've had this problem with much older versions as well.
With DOCTYPE in the mathml file, I never get the
root math by match="/" but get #document instead. And not one template
will match. I've got other xsl transforms that work fine and these don't
have the DOCTYPE in them. But I need the DOCTYPE for mathml so that all of
the entities can be resolved.
I sent them as attachments rather then cut and
paste into this email if anyone wants to run
java -ms64m -mx256m
-Xbootclasspath/p:%XALAN_PATH%\build\xalan.jar;%XALAN_PATH%\xercesImpl.jar;%XALAN_PATH%\xml-apis.jar
org.apache.xalan.xslt.Process -TS -TG -in wing-section.mml -xsl
./mathml2Java.xsl -out wing-section.java
on it and explain what I am doing wrong. I'm
puzzled by this and have tried many varitations on this.
Roger
|
wing-section.mml
Description: Binary data
<?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:fo="http://www.w3.org/1999/XSL/Format"> <!--xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:math="http://www.w3.org/TR/MathML2"--> <!--xsl:import href="linearAlgebra.xsl"/> <xsl:import href="statistics.xsl"/--> <xsl:output method="text" encoding="UTF-8" indent="yes"/> <xsl:strip-space elements="*"/>
<xsl:template match="math" name="math">
math<xsl:for-each select="*">
<xsl:choose>
<xsl:when test="name()='apply'">
<xsl:call-template name="apply"/>
</xsl:when>
</xsl:choose>
</xsl:for-each>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="apply" name="apply">
apply<xsl:for-each select="*">
<xsl:choose>
<xsl:when test="name()='eq'">
<xsl:call-template name="eq"/>
</xsl:when>
</xsl:choose>
</xsl:for-each>
<!--xsl:if test="parent::*[name()='math']">
<xsl:text>;
</xsl:text>
</xsl:if-->
</xsl:template>
<xsl:template match="/">
<xsl:text>
public class Equation extends Object
{
public Equation()
{
}
public void crunch()
{
</xsl:text><xsl:value-of select="name()"/>
<!--xsl:for-each select="*"-->
<!--xsl:call-template name="math"/-->
<!--xsl:apply-templates/-->
<!--/xsl:for-each-->
<xsl:apply-templates />
<xsl:text>
}
private double determinant(javax.vecmath.GMatrix A)
{
double det=0.0;
double sign=1.0;
for(int j=0;j<A.getNumCol();j++)
{
int permutator=j;
double value=0.0;
for(int i=0;i<A.getNumRow();i++)
{
value*=A.getElement(i, permutator++);
if(permutator>=A.getNumCol())permutator=0;
}
det+=(sign*value);
sign*=-1.0;
}
}
private double magnitude(javax.vecmath.GVector V)
{
double magnitudeSquared=0.0;
for(int i=0;i<V.getSize();i++)
{
magnitudeSquared+=Math.pow(V.getElement(i), 2);
}
return Math.sqrt(magnitudeSquared);
}
private double mean(double[] array)
{
double sum=0.0;
for(int i=0;i<array.length;i++)
{
sum+=array[i];
}
return sum/array.length;
}
private double mean(long[] array)
{
double sum=0.0;
for(int i=0;i<array.length;i++)
{
sum+=array[i];
}
return sum/array.length;
}
private double mean(int[] array)
{
double sum=0.0;
for(int i=0;i<array.length;i++)
{
sum+=array[i];
}
return sum/array.length;
}
private double variance(double[] array)
{
double sum=0.0;
double meanValue=mean(array);
for(int i=0;i<array.length;i++)
{
sum+=Math.pow(array[i]-meanValue, 2.0);
}
return sum/(array.length-1);
}
private double variance(long[] array)
{
double sum=0.0;
double meanValue=mean(array);
for(int i=0;i<array.length;i++)
{
sum+=Math.pow(array[i]-meanValue, 2.0);
}
return sum/(array.length-1);
}
private double variance(int[] array)
{
double sum=0.0;
double meanValue=mean(array);
for(int i=0;i<array.length;i++)
{
sum+=Math.pow(array[i]-meanValue, 2.0);
}
return sum/(array.length-1);
}
private double standardDeviation(double[] array)
{
return Math.sqrt(variance(array));
}
private double standardDeviation(long[] array)
{
return Math.sqrt(variance(array));
}
private double standardDeviation(int[] array)
{
return Math.sqrt(variance(array));
}
//Have this somewhere
private double median(double[] array)
{
return 0.0;
}
private double median(long[] array)
{
return 0.0;
}
private double median(int[] array)
{
return 0.0;
}
//fill in
private double mode(double[] array)
{
return 0.0;
}
private double mode(long[] array)
{
return 0.0;
}
private double mode(int[] array)
{
return 0.0;
}
//Think I know but need to check
private double moment(double[] array, int p, int degree)
{
return 0.0;
}
private double moment(long[] array, int p, int degree)
{
return 0.0;
}
private double moment(int[] array, int p, int degree)
{
return 0.0;
}
private javax.vecmath.Matrix3d genericMatrix3d=null;
private javax.vecmath.Matrix4d genericMatrix4d=null;
}
</xsl:text>
</xsl:template>
<xsl:template match="mrow">
<!--xsl:for-each select="./*"-->
<!--xsl:value-of select="name()"/-->
<xsl:apply-templates select="./*"/>
<!--/xsl:for-each-->
<xsl:if test="parent::*[name()='math']">
<xsl:text>;
</xsl:text>
</xsl:if>
</xsl:template>
<xsl:template match="semantics">
<xsl:apply-templates select="./*"/>
<xsl:if test="parent::*[name()='math']">
<xsl:text>;
</xsl:text>
</xsl:if>
</xsl:template>
<xsl:template match="annotation-xml">
</xsl:template>
<xsl:template match="plus" name="plus">
<xsl:text>(</xsl:text>
<xsl:for-each select="parent::apply/*[position()>1]">
<xsl:if test="not(position()=1)">
<xsl:text>+</xsl:text>
</xsl:if>
<xsl:if test="local-name()='ci'">
<xsl:value-of select="."/>
</xsl:if>
<xsl:if test="local-name()='apply'">
<xsl:call-template name="apply"/>
</xsl:if>
</xsl:for-each>
<xsl:text>)</xsl:text>
</xsl:template>
<xsl:template match="times" name="times">
<xsl:text>(</xsl:text>
<xsl:for-each select="parent::apply/*[position()>1]">
<xsl:if test="not(position()=1)">
<xsl:text>*</xsl:text>
</xsl:if>
<xsl:if test="not(local-name()='apply')">
<xsl:value-of select="."/>
</xsl:if>
<xsl:if test="local-name()='apply'">
<xsl:apply-templates/>
</xsl:if>
</xsl:for-each>
<xsl:text>)</xsl:text>
</xsl:template>
<xsl:template match="divide" name="divide">
<!--xsl:text>(</xsl:text>
<xsl:for-each select="./*">
<xsl:if test="not(position()=1)">
<xsl:text>/</xsl:text>
</xsl:if>
<xsl:if test="not(local-name()='apply')">
<xsl:value-of select="."/>
</xsl:if>
<xsl:if test="local-name()='apply'">
<xsl:apply-templates/>
</xsl:if>
</xsl:for-each>
<xsl:text>)</xsl:text-->
<xsl:apply-templates select="ancestor::apply/*[2]"/>
<xsl:text>/</xsl:text>
<xsl:apply-templates select="ancestor::apply/*[3]"/>
</xsl:template>
<xsl:template match="msup|power">
<xsl:text>Math.pow(</xsl:text>
<xsl:for-each select="./*">
<xsl:value-of select="." disable-output-escaping = "yes"/>
<xsl:if test="not(position()>1)">
<xsl:text>, </xsl:text>
</xsl:if>
</xsl:for-each>
<xsl:text>)</xsl:text>
</xsl:template>
<!--xsl:template match="msubsup/mo[position()=1 and text()='∫'] /msubsup/mn[position()=1] /msubsup/mi[position()=1]"-->
<xsl:template match="msubsup[position()=1] /child::mo[position()=1 and text()='∫']">
<xsl:variable name="lower-limit" select="../child::*[2]"/>
<xsl:variable name="upper-limit" select="../child::*[3]"/>
<xsl:variable name="differential" select="../following-sibling::* //*[text()='ⅆ'] /following-sibling::*"/>
<!--xsl:text>We're here.
</xsl:text-->
<!--xsl:value-of select="$lower-limit" disable-output-escaping = "yes"/>
<xsl:value-of select="$upper-limit" disable-output-escaping = "yes"/>
<xsl:value-of select="$differential" disable-output-escaping = "yes"/-->
<xsl:if test="../following-sibling::mfrac /child::mrow /following-sibling::mi[text()=$differential]">
<xsl:text>Math.log(</xsl:text>
<xsl:value-of select="$upper-limit" disable-output-escaping = "yes"/>
<xsl:text>)-Math.log(</xsl:text>
<xsl:value-of select="$lower-limit" disable-output-escaping = "yes"/>
<xsl:text>)
</xsl:text>
</xsl:if>
<!--xsl:call-template name="log-integral"/-->
<!--xsl:for-each select="../following-sibling::mfrac /child::mrow /following-sibling::mi[text()=$differential]">
<xsl:value-of select="name()" disable-output-escaping = "yes"/>
<xsl:text>, </xsl:text>
<xsl:text> and here
</xsl:text>
</xsl:for-each-->
</xsl:template>
<xsl:template match="mfrac" name="log-integral">
<xsl:text> log-integral
</xsl:text>
<xsl:for-each select="./*">
<!--xsl:if test="position()=1"-->
<xsl:value-of select="name()" disable-output-escaping = "yes"/>
<xsl:text>, </xsl:text>
<!--/xsl:if-->
<xsl:text> and here
</xsl:text>
</xsl:for-each>
</xsl:template>
<xsl:template match="msqrt|mroot">
<xsl:text>Math.sqrt(</xsl:text>
<xsl:for-each select="./*">
<xsl:value-of select="." disable-output-escaping = "yes"/>
<xsl:if test="not(position()>1)">
<xsl:text>, </xsl:text>
</xsl:if>
</xsl:for-each>
<xsl:text>)</xsl:text>
</xsl:template>
<xsl:template match="mfrac">
<xsl:text>(</xsl:text>
<xsl:for-each select="./child::*">
<xsl:value-of select="." disable-output-escaping = "yes"/>
<xsl:if test="not(position()>1)">
<xsl:text>/</xsl:text>
</xsl:if>
</xsl:for-each>
<xsl:text>)</xsl:text>
</xsl:template>
<xsl:template match="mo">
<xsl:choose>
<xsl:when test="text()='⁢'">
<xsl:text>*</xsl:text>
</xsl:when>
<xsl:when test="text()='+'">
<xsl:text>+</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="text()" disable-output-escaping = "yes"/>
<!--xsl:apply-templates select="@*"/-->
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="eq" name="eq">
<xsl:apply-templates select="parent::apply/*[2]"/>
<xsl:text>=</xsl:text>
<xsl:apply-templates select="parent::apply/*[3]"/>
</xsl:template>
<xsl:template match="ci" name="ci">
<xsl:value-of select="."/>ci
</xsl:template>
<xsl:template match="pi">
<xsl:text>Math.PI</xsl:text>
</xsl:template>
<xsl:template match="exp">
<xsl:variable name="variable" select="parent::apply/*[2]"/>
<xsl:text>Math.exp(</xsl:text><xsl:value-of select="$variable"/>
<xsl:text>)</xsl:text>
</xsl:template>
<xsl:template match="ln">
<xsl:variable name="variable" select="parent::apply/*[2]"/>
<xsl:text>Math.log(</xsl:text><xsl:value-of select="$variable"/>
<xsl:text>)</xsl:text>
</xsl:template>
<xsl:template match="log">
<xsl:variable name="variable" select="parent::apply/*[3]"/>
<xsl:variable name="base" select="parent::apply/*[2]"/>
<xsl:text>Math.log(</xsl:text><xsl:value-of select="$variable"/>
<xsl:text>)/Math.log(</xsl:text><xsl:value-of select="$base"/>
<xsl:text>)</xsl:text>
</xsl:template>
<xsl:template match="sin">
<xsl:variable name="variable" select="parent::apply/*[2]"/>
<xsl:text>Math.sin(</xsl:text><xsl:value-of select="$variable"/>
<xsl:text>)</xsl:text>
</xsl:template>
<xsl:template match="cos">
<xsl:variable name="variable" select="parent::apply/*[2]"/>
<xsl:text>Math.cos(</xsl:text><xsl:value-of select="$variable"/>
<xsl:text>)</xsl:text>
</xsl:template>
<xsl:template match="tan">
<xsl:variable name="variable" select="parent::apply/*[2]"/>
<xsl:text>Math.tan(</xsl:text><xsl:value-of select="$variable"/>
<xsl:text>)</xsl:text>
</xsl:template>
<xsl:template match="sec">
<xsl:variable name="variable" select="parent::apply/*[2]"/>
<xsl:text>Math.sec(</xsl:text><xsl:value-of select="$variable"/>
<xsl:text>)</xsl:text>
</xsl:template>
<xsl:template match="csc">
<xsl:variable name="variable" select="parent::apply/*[2]"/>
<xsl:text>Math.csc(</xsl:text><xsl:value-of select="$variable"/>
<xsl:text>)</xsl:text>
</xsl:template>
<xsl:template match="cot">
<xsl:variable name="variable" select="parent::apply/*[2]"/>
<xsl:text>Math.cot(</xsl:text><xsl:value-of select="$variable"/>
<xsl:text>)</xsl:text>
</xsl:template>
<xsl:template match="sinh">
<xsl:variable name="variable" select="parent::apply/*[2]"/>
<xsl:text>Math.sinh(</xsl:text><xsl:value-of select="$variable"/>
<xsl:text>)</xsl:text>
</xsl:template>
<xsl:template match="cosh">
<xsl:variable name="variable" select="parent::apply/*[2]"/>
<xsl:text>Math.cosh(</xsl:text><xsl:value-of select="$variable"/>
<xsl:text>)</xsl:text>
</xsl:template>
<xsl:template match="tanh">
<xsl:variable name="variable" select="parent::apply/*[2]"/>
<xsl:text>Math.tanh(</xsl:text><xsl:value-of select="$variable"/>
<xsl:text>)</xsl:text>
</xsl:template>
<xsl:template match="sech">
<xsl:variable name="variable" select="parent::apply/*[2]"/>
<xsl:text>Math.sech(</xsl:text><xsl:value-of select="$variable"/>
<xsl:text>)</xsl:text>
</xsl:template>
<xsl:template match="csch">
<xsl:variable name="variable" select="parent::apply/*[2]"/>
<xsl:text>Math.csch(</xsl:text><xsl:value-of select="$variable"/>
<xsl:text>)</xsl:text>
</xsl:template>
<xsl:template match="coth">
<xsl:variable name="variable" select="parent::apply/*[2]"/>
<xsl:text>Math.coth(</xsl:text><xsl:value-of select="$variable"/>
<xsl:text>)</xsl:text>
</xsl:template>
<xsl:template match="arcsin">
<xsl:variable name="variable" select="parent::apply/*[2]"/>
<xsl:text>Math.asin(</xsl:text><xsl:value-of select="$variable"/>
<xsl:text>)</xsl:text>
</xsl:template>
<xsl:template match="arccos">
<xsl:variable name="variable" select="parent::apply/*[2]"/>
<xsl:text>Math.acos(</xsl:text><xsl:value-of select="$variable"/>
<xsl:text>)</xsl:text>
</xsl:template>
<xsl:template match="atan">
<xsl:variable name="variable" select="parent::apply/*[2]"/>
<xsl:text>Math.atan(</xsl:text><xsl:value-of select="$variable"/>
<xsl:text>)</xsl:text>
</xsl:template>
<xsl:template match="arccosh">
<xsl:variable name="variable" select="parent::apply/*[2]"/>
<xsl:text>Math.arccosh(</xsl:text><xsl:value-of select="$variable"/>
<xsl:text>)</xsl:text>
</xsl:template>
<xsl:template match="arccot">
<xsl:variable name="variable" select="parent::apply/*[2]"/>
<xsl:text>Math.arccot(</xsl:text><xsl:value-of select="$variable"/>
<xsl:text>)</xsl:text>
</xsl:template>
<xsl:template match="arccoth">
<xsl:variable name="variable" select="parent::apply/*[2]"/>
<xsl:text>Math.arccoth(</xsl:text><xsl:value-of select="$variable"/>
<xsl:text>)</xsl:text>
</xsl:template>
<xsl:template match="arccsc">
<xsl:variable name="variable" select="parent::apply/*[2]"/>
<xsl:text>Math.arccsc(</xsl:text><xsl:value-of select="$variable"/>
<xsl:text>)</xsl:text>
</xsl:template>
<xsl:template match="arccsch">
<xsl:variable name="variable" select="parent::apply/*[2]"/>
<xsl:text>Math.arccsch(</xsl:text><xsl:value-of select="$variable"/>
<xsl:text>)</xsl:text>
</xsl:template>
<xsl:template match="arcsec">
<xsl:variable name="variable" select="parent::apply/*[2]"/>
<xsl:text>Math.arcsec(</xsl:text><xsl:value-of select="$variable"/>
<xsl:text>)</xsl:text>
</xsl:template>
<xsl:template match="arcsech">
<xsl:variable name="variable" select="parent::apply/*[2]"/>
<xsl:text>Math.arcsech(</xsl:text><xsl:value-of select="$variable"/>
<xsl:text>)</xsl:text>
</xsl:template>
<xsl:template match="arcsinh">
<xsl:variable name="variable" select="parent::apply/*[2]"/>
<xsl:text>Math.arcsinh(</xsl:text><xsl:value-of select="$variable"/>
<xsl:text>)</xsl:text>
</xsl:template>
<xsl:template match="arctanh">
<xsl:variable name="variable" select="parent::apply/*[2]"/>
<xsl:text>Math.arctanh(</xsl:text><xsl:value-of select="$variable"/>
<xsl:text>)</xsl:text>
</xsl:template>
</xsl:stylesheet>
