如何使用 XSLT 实现 Presentation MathML 到 Content MathML 转换器?
How can I implement a Presentation MathML to Content MathML translator using XSLT?
我想使用 XSLT 实现 P2C 转换器。例如:
<mrow>
<mi>x</mi>
<mo>+</mo>
<msup>
<mi>y</mi>
<mn>3</mn>
</msup>
</mrow>
进入 C-MathML 术语。
<apply>
<csymbol>mrow</csymbol>
<ci>x</ci>
<csymbol>+</csymbol>
<apply>
<csymbol>msup</csymbol>
<ci>y</ci>
<cn>3</cn>
</apply>
</apply>
规则如下:
1) <mi>
转到 <ci>
2) <mo>
转到 <csymbol>
3) 所有其他元素 <xxx>
转到 <apply><csymbol>xxx</csymbol> ... </apply>
以下是我到目前为止所写的内容,但我在实施第 3 条规则时遇到了困难,因为我对 XSLT 的经验不多。有人可以帮忙吗?
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:mml="http://www.w3.org/1998/Math/MathML" >
<xsl:output method="xml" />
<xsl:template mode="p2c" match="*">
<xsl:copy>
<xsl:copy-of select="@" />
<xsl:apply-templates mode="p2c"/>
</xsl:copy>
</xsl:template>
<!-- mn -->
<xsl:template mode="p2c" match="mml:mn">
<mml:cn><xsl:apply-templates mode="p2c"/></mml:cn>
</xsl:template>
<!-- mo -->
<xsl:template mode="p2c" match="mml:mo">
<mml:csymbol><xsl:apply-templates mode="p2c"/></mml:csymbol>
</xsl:template>
<!-- mi -->
<xsl:template mode="p2c" match="mml:mi/text()">
<mml:ci><xsl:value-of select="."/></mml:ci>
</xsl:template>
</xsl:stylesheet>
all other elements <xxx>
go to <apply><csymbol>xxx</csymbol> ... </apply>
简直了
<xsl:template match="*">
<apply>
<csymbol>
<xsl:value-of select="name()"/>
</csymbol>
</apply>
</xsl:template>
我想使用 XSLT 实现 P2C 转换器。例如:
<mrow>
<mi>x</mi>
<mo>+</mo>
<msup>
<mi>y</mi>
<mn>3</mn>
</msup>
</mrow>
进入 C-MathML 术语。
<apply>
<csymbol>mrow</csymbol>
<ci>x</ci>
<csymbol>+</csymbol>
<apply>
<csymbol>msup</csymbol>
<ci>y</ci>
<cn>3</cn>
</apply>
</apply>
规则如下:
1) <mi>
转到 <ci>
2) <mo>
转到 <csymbol>
3) 所有其他元素 <xxx>
转到 <apply><csymbol>xxx</csymbol> ... </apply>
以下是我到目前为止所写的内容,但我在实施第 3 条规则时遇到了困难,因为我对 XSLT 的经验不多。有人可以帮忙吗?
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:mml="http://www.w3.org/1998/Math/MathML" >
<xsl:output method="xml" />
<xsl:template mode="p2c" match="*">
<xsl:copy>
<xsl:copy-of select="@" />
<xsl:apply-templates mode="p2c"/>
</xsl:copy>
</xsl:template>
<!-- mn -->
<xsl:template mode="p2c" match="mml:mn">
<mml:cn><xsl:apply-templates mode="p2c"/></mml:cn>
</xsl:template>
<!-- mo -->
<xsl:template mode="p2c" match="mml:mo">
<mml:csymbol><xsl:apply-templates mode="p2c"/></mml:csymbol>
</xsl:template>
<!-- mi -->
<xsl:template mode="p2c" match="mml:mi/text()">
<mml:ci><xsl:value-of select="."/></mml:ci>
</xsl:template>
</xsl:stylesheet>
all other elements
<xxx>
go to<apply><csymbol>xxx</csymbol> ... </apply>
简直了
<xsl:template match="*">
<apply>
<csymbol>
<xsl:value-of select="name()"/>
</csymbol>
</apply>
</xsl:template>