MathMLトップへ
MathMLサンプル集トップへ

MathMLサンプル集の表示の仕組み

MathMLサンプル集がMathML数式とコードを表示する仕組みについて説明します.

ファイルの構成

MathMLサンプル集は次のファイルから構成されています. なお, これらはMathMLサンプル集(MathMLコア版)のものです. MathMLサンプル集(MathJax版)も概ね同じようなファイルから構成されています.

ファイルの説明
ファイル名説明
index.htmlフレームを表示するHTMLファイル.
contents.html目次となるHTMLファイル.
000xxsrc.xmldissrc.xslを呼び出し, 000xxexp.xmlを表示したり, コードを表示したりするための情報が記載されたXMLファイル.
xxには数字が入ります.
000xxsrc.xml数式を表すMathMLファイル
dissrc.xsl000xxexp.xmlを表示したり, コードに変換したりするためのXSLTファイル
src.dtd000xxsrc.xmlの書き方を表すDTDファイル
rplent.jsユニコード文字を実体参照に変換するための, dissrc.xslから呼び出されるJavaScriptファイル

表示処理の流れ

目次の項目をクリックしたときに, MathML数式とコードが表示される処理の流れは次の図のとおりです.

MathML数式とコードが表示される処理の流れ
MathML数式とコードが表示される処理の流れ
  1. 項目をクリックすると, フレームsrc000xxsrc.xmlを表示する.
  2. 000xxsrc.xmldissrc.xslを呼び出す.
  3. フレームsrc000xxexp.xmlをコードに変換して表示する.
  4. load関数を作成し, 読込み時に呼び出す.
  5. load関数がフレームexp000xxexp.xmlを表示する.

dissrc.xslによる具体的な変換処理

呼び出されたdissrc.xslによって, 000xxsrc.xmlが変換される具体的な処理について説明します.

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="dissrc.xsl"?>
<!DOCTYPE src SYSTEM "src.dtd">
<src>
  <file>00001exp.xml</file>
  <entlist>
    <ent code="02062" name="&amp;#x02062;"/><!--InvisibleTimes-->
    <ent code="000B1" name="&amp;#x000B1;"/><!--PlusMinus-->
  </entlist>
</src>
000xxsrc.xmlのコード(例)

上記の000xxsrc.xmlは, dissrc.xslによって次のように変換されます. なお, この変換後のコードは, 読みやすいように改行位置を調整しています.

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <script type="text/javascript" src="rplent.js"/> ...(1)
    <script type="text/javascript"> ...(2)
      function load(){
        parent.frames[1].location="00001exp.xml"; ...(3)
        replaceentity(); ...(4)
        replacemathentity("02062","&amp;#x02062;");  ...(5)
	replacemathentity("000B1","&amp;#x000B1;");
      }
    </script>
  </head>
  <body onload="load();"> ...(6)
    <div>
      ・・・
      000xxexp.xmlをXSLTによってコードに変換したもの
      ・・・
    </div>
  </body>
</html>
000xxsrc.xmlの変換後のコード

変換後のコードについて説明します.

(1)で, rplent.jsを読み込みます.

(2)は, load関数を宣言しています. load関数の中身としては, まず, (3)でフレームexp000xxexp.xmlを表示します. 次に(4)でreplaceentity関数を呼び出して, <>"&といった特殊文字を名前付き文字参照に書き換えます. 最後に, 順次(5)のreplavemathentity関数を呼び出して, 1つ目の引数の文字コードの文字を, 2つ目の引数の数値文字参照に書き換えます. この関数は, 000xxsrc.xmlの全てのent要素の分作成されます. replaceentity関数もreplavemathentity関数もrplent.jsで定義された関数です.

(6)で, 読込み時にload関数を呼び出します.

以上が変換後のコードの説明になります.