現在、当サイト「mozilla.org 日本語版」の和訳文書は更新されておらず、mozilla.org の原文 よりも内容が古くなっている可能性があります。ご不便をお掛けしますが、最新の情報は原文をご確認ください。



Mozilla での MathML の記述

Roger B. Sidje <rbs@maths.uq.edu.au>

XML/XHTML
の検証

W3C の
HTML/XHTML
検証サービス

RUWF? の
XML 文法点検


CSS の
検証

WEB
から直接

テキストエリアに
コピー & ペースト

ファイルの
アップロード

目次
  • 序文

  • 要点

  • XHTML への適合

  • MathML のヒント

 

序文

MathML についての決定的な参照先は MathML の仕様書 です。Mozilla での MathML の実装は、始めに MathML 1.x と、 それへの付加 (利点) と反対された特徴 (欠点) が考慮された MathML 2.0 での プレゼンテーションマークアップ に適合することを目的としています。

このページでは現在の実装の中からほとんどを取得できるような MathML の記法について要約します。

この実装は現在進行中なので、 正確な機能が欠如しているか一部しか実行できないかもしれません。 その上、Mozilla 自身がまだ開発段階で不安定性や予期せぬ振舞いを残しています。 このように、 Mozilla で MathML を実験しようとする者は、Mozilla が最先端の物であることを知って、 これらの事実を心に止めておくべきです。

参加 は貴方の貢献の一部です。 あなたの還元は WEB 上に MathML の文書を置き 仲間にもそうするように誘ってみること、 BugZilla にバグを報告すること、またコードに関して援助ができるのなら 現在のコードを検査・改良すること、そして 今後の課題 に項目を載せることによって発表されるべきです。

要点

MathML は XML の応用なので, <math>...</math> タグで囲まれた部分は整形式 XML でなくてはなりません。

Mozilla は同一文書内での XML と HTML の混合をまだサポートしていません。 つまり HTML 文書内の <math> タグで囲まれた部分は Mozilla では正しく表示されません。

<math>...</math> タグで囲まれた部分を Mozilla で正しく表示される為には、 その部分が整形式 XML 文書内で整形式 XML でなければなりません。 これは、ほかの XML と同様で、それぞれの開始タグ <tag> は終了タグ </tag> と共に用いなければならず 全ての要素は完全な入れ子の状態でなければならない事を意味します。

HTML の限界により、W3C は今 XHTML を作成し HTML にはもう手を加えないと考えられます。 XHTML (eXtensible HTML) は XML の規則で HTML を再構成したものです。 いい加減なマークアップが許されてしまう HTML とは反対に、 整形式でない XML (つまり整形式でない XHTML) 文書は正しく表示されません。

Mozilla は XML 1.0 に対応していますが、 XHTML にはその仕様が完全に定まってないという特異性のため完全に対応していません (例えば、文書が text/html として提供されるか text/xml として提供されるかに依って、 DOM で大文字を返すか小文字を返すかが決まります)。

XHTML は厳格で、HTML のきちんとしたバージョンなので、 XHTML で書かれたページはほとんどのブラウザで正しく表示されます。 そしてこれは Mozilla の MathML エンジンに都合が良いので、 著者・作成者は XHTML の文法を用いるべきです。 これは Mozilla で MathML を『すぐ使える』ようにする為の過酷な段階です。

XHTML への適合

ここに Mozilla で正しく表示できるような XHTML に適合した文書を作成するための主な法則を挙げます。
  • XHTML のタグはすべて小文字で

    HTML

    XHTML

    <H1 Align="CENTER">コーシー積分</H1>

    <h1 align="center">コーシー積分</h1>


  • すべての空でない要素は閉じる

    HTML

    XHTML

    <p>MathML
      <ul>
        <li>プレゼンテーションマークアップ
        <li>コンテントマークアップ
      </ul>
                
    <p>MathML
      <ul>
        <li>プレゼンテーションマークアップ</li>
        <li>コンテントマークアップ</li>
      </ul>
    </p>
                

  • 空要素タグはその末尾にスラッシュ (/) を付加

    HTML

    XHTML

    <img src="myimage.gif">

    <img src="myimage.gif" />

    <br>

    <br />

    <hr>

    <hr />


  • すべての属性値は引用符で囲む
  • HTML

    XHTML

    <table border=0>

    <table border="0">


  • 属性は属性値まできちんと書く
  • HTML

    XHTML

    <td nowrap>

    <td nowrap="nowrap">


  • 文書のルート要素は <html> で次の XHTML 名前空間を記す
    <html xmlns="http://www.w3.org/1999/xhtml">

  • 全ての文書に DOCTYPE 宣言が必要
    <!DOCTYPE html 
         PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
         "DTD/xhtml1-strict.dtd">
    
    <!DOCTYPE html 
         PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
         "DTD/xhtml1-transitional.dtd">
    
    <!DOCTYPE html 
         PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
         "DTD/xhtml1-frameset.dtd">
    

以下は最小な XHTML 文書の例です。

<?xml version="1.0"?>  
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml">  
  <head>  
    <title>最小な XHTML 文書</title>  
  </head>  
  <body>  
    <p>
      すべての検証済 XHTML を受け入れます、それゆえ 
      <a href="http://www.mozilla.org/">リンク</a>
が表示されます。 </p> </body> </html>

Mozilla での記述

一度文書が XHTML に対応すれば、次の例に示されるように、 Mozilla ではほんの少しだけ重要でない改訂が必要です。

<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN"
               "http://www.w3.org/TR/MathML2/dtd/xhtml-math11-f.dtd" [
  <!ENTITY mathml "http://www.w3.org/1998/Math/MathML">
]>  
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>MathML を含む最小の XHTML</title> 
  </head>
  <body>
    <p>
      検証済 XHTML と MathML を受け入れました,その結果 
      <a href="http://www.mozilla.org/">リンク</a>
      と分数 
      <math xmlns="&mathml;">
        <mfrac>
          <mi>a</mi>
          <mi>b</mi>
        </mfrac>
      </math>
      が表示されます 
    </p>
  </body>
</html>
[ もしブラウザが MathML 対応ならば、 この例の表示結果を見て下さい ]

MathML のヒント

  • 検証済 MathML を用いましょう。 それぞれの要素の文法は、MathML の仕様書によって正確に定義されています。 例えば、多くの MathML の要素は決まった数の子要素が要求されます。 WEB サイトに検証済 MathML を置くことによって訪れた人に恩恵を与えましょう。 いい加減な HTML を一蹴する事でブラウザを威張らせましょう。 今 XML/XHTML/MathML と共に、 新たな立場で WEB をきれいな状態にすることから始まります。

  • 無関係な、そして無意味に内容を混乱させるタグは避けましょう。 次の例は検証済マークアップです (そして Mozilla の MathML エンジンによって正しく表示されます):
      <msup>
        <mrow>
          <mrow>
            <mrow>
              <mi>a</mi>
            </mrow>
          </mrow>
       </mrow>
       <mi>b</mi>
      </msup>
    

    しかしながら、パフォーマンスとメモリ消費の点でいくつか欠点があります:

    • ネットでファイルを取得する際のオーバーヘッド
    • すべての余分な <mrow> が DOM に記憶される
    • CSS フレームがそれぞれの余分な <mrow> で展開される
    • 再読込 (フォーマット)時に時間が無駄

    余分な <mrow> を取り除くことによってより単純に、 わかり易く(また読み易く)なります:

        <msup>
          <mi>a</mi>
          <mi>b</mi>
        </msup>
    
    同様に, 'sin' や 'mod' 関数に関しては、 <mi>s</mi><mi>i</mi><mi>n</mi><mi>m</mi><mi>o</mi><mi>d</mi> よりは、 <mo>sin</mo><mo>mod</mo> を用いて下さい。


  • トークン要素の始めや終りでの無視できる空白は避けましょう。
        <mi>       a       </mi>
    
    よりは
        <mi>a</mi>
    
    を用いて下さい:
    MathML は既に多弁なので、貴方が冗長を加える必要はないですよ? また、フォーマット時にコード中の空白をこらしめる為に、 多大な代償が支払われることも記しておきましょう。 WEB 上では、 コマンドライン上で長い TeX のコンパイルを最後まで待てる人でも サイトの遅さには負けてどこかへ出かけてしまう、 ということも覚えておいて下さい。 そのような空白をマークアップから排除し続けることによって、 フォーマット時のいくつかの作業を飛ばすことができ、 あなたのサイトを訪れた人に 速くより快適なブラウジングの経験をさせることができます。

  • 特定の表示を除きたいならば属性を用いましょう。 例えば: stretchy='false', lspace='0', accent='true', accentunder='true'. 既定値での振舞いは予想しているものと異なるかもしれません。

  • 数字の属性値には CSS の単位を用いましょう。 沢山の単位が用意されています (em, ex, px, in, cm, mm, pt, pc, %)。 特定の文書にどの単位を用いるかは貴方の自由です。 単位のない数字の属性値、例えば lspace='10' はあいまいで、 Mozilla の MathML エンジンはそのような属性をすべて無視してしまいます。 0 だけは明確な単位を必要としません。

  • マークアップに意味を持たせましょう、そして内容と見栄えを分けましょう。 例えば、<mi>(</mi> (or any <mi>symbol</mi>) のような使用は避けて下さい。 もし記号が別の方法でしか正しい識別子と示されるのでなければ、代りに <mo>symbol</mo> を用いて下さい。 このような記述よりは
            <mi fontweight='bold'>
    
    次のように
            <mi type='vector'>
    
    スタイルシートへの次のような記述と共に用いて下さい。
            mi[type='vector'] { 
              font-weight: bold; 
            }
    
    このように、 CSS を書き換えることによってすべてのベクトルの見栄えを変更することができます。

次も見て下さい: