MathMLサンプル集の表示の仕組み
MathMLサンプル集がMathML数式とコードを表示する仕組みについて説明します.
ファイルの構成
MathMLサンプル集は次のファイルから構成されています. なお, これらはMathMLサンプル集(MathMLコア版)のものです. MathMLサンプル集(MathJax版)も概ね同じようなファイルから構成されています.
| ファイル名 | 説明 |
|---|---|
| index.html | フレームを表示するHTMLファイル. |
| contents.html | 目次となるHTMLファイル. |
| 000xxsrc.xml | dissrc.xslを呼び出し, 000xxexp.xmlを表示したり, コードを表示したりするための情報が記載されたXMLファイル.xxには数字が入ります. |
| 000xxsrc.xml | 数式を表すMathMLファイル |
| dissrc.xsl | 000xxexp.xmlを表示したり, コードに変換したりするためのXSLTファイル |
| src.dtd | 000xxsrc.xmlの書き方を表すDTDファイル |
| rplent.js | ユニコード文字を実体参照に変換するための, dissrc.xslから呼び出されるJavaScriptファイル |
表示処理の流れ
目次の項目をクリックしたときに, MathML数式とコードが表示される処理の流れは次の図のとおりです.
- 項目をクリックすると,
フレームsrcに000xxsrc.xmlを表示する. 000xxsrc.xmlがdissrc.xslを呼び出す.フレームsrcに000xxexp.xmlをコードに変換して表示する.load関数を作成し, 読込み時に呼び出す.load関数がフレームexpに000xxexp.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="&#x02062;"/><!--InvisibleTimes--> <ent code="000B1" name="&#x000B1;"/><!--PlusMinus--> </entlist> </src>
上記の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","&#x02062;"); ...(5) replacemathentity("000B1","&#x000B1;"); } </script> </head> <body onload="load();"> ...(6) <div> ・・・ 000xxexp.xmlをXSLTによってコードに変換したもの ・・・ </div> </body> </html>
変換後のコードについて説明します.
(1)で, rplent.jsを読み込みます.
(2)は, load関数を宣言しています. load関数の中身としては, まず, (3)でフレームexpに000xxexp.xmlを表示します. 次に(4)でreplaceentity関数を呼び出して, <>"&といった特殊文字を名前付き文字参照に書き換えます. 最後に, 順次(5)のreplavemathentity関数を呼び出して, 1つ目の引数の文字コードの文字を, 2つ目の引数の数値文字参照に書き換えます. この関数は, 000xxsrc.xmlの全てのent要素の分作成されます. replaceentity関数もreplavemathentity関数もrplent.jsで定義された関数です.
(6)で, 読込み時にload関数を呼び出します.
以上が変換後のコードの説明になります.