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関数を呼び出します.
以上が変換後のコードの説明になります.