使用MediaWiki API获取Wikipedia数学表达式

时间:2014-10-09 08:09:38

标签: wikipedia wikipedia-api mediawiki-api

我想在API响应MediaWiki中获取<math>标记的内容。

我尝试过使用此查询: https://en.wikipedia.org/w/api.php?action=query&prop=extracts&format=xml&titles=delta-v

我正在获取有效的xml文件,但代替 enter image description here

我得到了:

<dl><dd></dd></dl>

我想要的是:

<math>\Delta{v} = \int_{t_0}^{t_1} {\frac {|T|} {m}}\, dt</math>

可在此处通过“修改”按钮获取:http://en.wikipedia.org/w/index.php?title=Delta-v&action=edit

这是通过API以某种方式提供的吗?

2 个答案:

答案 0 :(得分:4)

您需要使用MediaWiki的本机API函数查询整个页面源:

    https://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvlimit=1&rvprop=content&format=xml&titles=delta-v

这将为您提供与编辑页面时完全相同的内容。

prop=extracts查询由扩展程序TextExtracts实现,并不总是与其他扩展程序(如Math)生成的代码内容一起使用。它可能被认为是TextExtracts中的一个错误,但考虑到MediaWiki中页面呈现的复杂性,以及各种扩展添加到内容的方式,它可能永远不会捕获所有内容。

答案 1 :(得分:0)

在原始链接中,您可以获得MathML渲染,包括注释元素<annotation encoding="application/x-tex">中的TeX代码。

<dd>
  <span>
    <span>
      <math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \Delta {v}=\int _{t_{0}}^{t_{1}}{\frac {|T(t)|}{m(t)}}\,dt}">
        <semantics>
          <mrow class="MJX-TeXAtom-ORD">
            <mstyle displaystyle="true" scriptlevel="0">
              <mi mathvariant="normal">Δ</mi>
              <mrow class="MJX-TeXAtom-ORD">
                <mi>v</mi>
              </mrow>
              <mo>=</mo>
              <msubsup>
                <mo>∫</mo>
                <mrow class="MJX-TeXAtom-ORD">
                  <msub>
                    <mi>t</mi>
                    <mrow class="MJX-TeXAtom-ORD">
                      <mn>0</mn>
                    </mrow>
                  </msub>
                </mrow>
                <mrow class="MJX-TeXAtom-ORD">
                  <msub>
                    <mi>t</mi>
                    <mrow class="MJX-TeXAtom-ORD">
                      <mn>1</mn>
                    </mrow>
                  </msub>
                </mrow>
              </msubsup>
              <mrow class="MJX-TeXAtom-ORD">
                <mfrac>
                  <mrow>
                    <mrow class="MJX-TeXAtom-ORD">
                      <mo stretchy="false">|</mo>
                    </mrow>
                    <mi>T</mi>
                    <mo stretchy="false">(</mo>
                    <mi>t</mi>
                    <mo stretchy="false">)</mo>
                    <mrow class="MJX-TeXAtom-ORD">
                      <mo stretchy="false">|</mo>
                    </mrow>
                  </mrow>
                  <mrow>
                    <mi>m</mi>
                    <mo stretchy="false">(</mo>
                    <mi>t</mi>
                    <mo stretchy="false">)</mo>
                  </mrow>
                </mfrac>
              </mrow>
              <mspace width="thinmathspace" />
              <mi>d</mi>
              <mi>t</mi>
            </mstyle>
          </mrow>
          <annotation encoding="application/x-tex">{\displaystyle \Delta {v}=\int _{t_{0}}^{t_{1}}{\frac {|T(t)|}{m(t)}}\,dt}</annotation>
        </semantics>
      </math>
    </span>
  </span>
</dd>