【问题标题】:How can I implement a Presentation MathML to Content MathML translator using XSLT?如何使用 XSLT 实现 Presentation MathML 到 Content MathML 的转换器?
【发布时间】:2017-10-07 17:08:02
【问题描述】:

我想使用 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) &lt;mi&gt; 转到 &lt;ci&gt;

2) &lt;mo&gt; 转到 &lt;csymbol&gt;

3) 所有其他元素 &lt;xxx&gt; 转到 &lt;apply&gt;&lt;csymbol&gt;xxx&lt;/csymbol&gt; ... &lt;/apply&gt;

以下是我到目前为止所写的内容,但我在实施第 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>

【问题讨论】:

    标签: xml xslt mathml


    【解决方案1】:

    所有其他元素 &lt;xxx&gt; 转到 &lt;apply&gt;&lt;csymbol&gt;xxx&lt;/csymbol&gt; ... &lt;/apply&gt;

    这很简单

    <xsl:template match="*">
      <apply>
       <csymbol>
         <xsl:value-of select="name()"/>
       </csymbol>
     </apply>
    </xsl:template>
    

    【讨论】:

    • 是的,但问题是我在文件中也有 html 标签。写&lt;xsl:template match="mml:*&gt; 这样的东西是否有效,因为我只想使用 mml 标签?
    • 当然(前提是您使用的是 XSLT 2.0)。但是要使这个工作正常,您将不得不阅读一些有关 XSLT 的内容。如果 Stack Overflow 是您唯一获取该语言信息的来源,那么进展将非常缓慢。
    猜你喜欢
    • 2011-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多