[1] [[MathML]] における[[空白]]の取り扱いについて。 * 仕様書 - [10] [CITE[MathML Fundamentals]] ([TIME[2010-10-21 05:51:46 +09:00]] 版) * 定義 [4] [[MathML]] における[DFN[[RUBY[[[空白]]] [くうはく] @en[whitespace]]]][[文字]]は、 [[XML]] の [CODE@en[[[S]]]] と同じで - [CODE(char)@en[[[U+0009]]]] [CODE(charname)@en[[[HORIZONTAL TAB]]]] - [CODE(char)@en[[[U+000A]]]] [CODE(charname)@en[[[LINE FEED]]]] - [CODE(char)@en[[[U+000D]]]] [CODE(charname)@en[[[CARRIAGE RETURN]]]] - [CODE(char)@en[[[U+0020]]]] [CODE(charname)@en[[[SPACE]]]] ... の4種類です [SRC[>>10]]。 ;; [11] [[MathML]] 仕様書では [Q@en[white space]] ではなく [Q@en[whitespace]] と綴っています。 * 処理モデル ** 字句要素外の空白 [2] [[字句要素]]の''外''にある[[空白]]は、無視されます。 [SRC@en[MathML1 2.3.5, MathML2 2.4.6, >>10]] [14] [[字句要素]]外で[[空白]]''以外''の[[文字]]は認められていません。 [SRC@en[MathML1 2.3.5, MathML2 2.4.6, >>10]] ** 字句要素内の空白 [15] [[字句要素]]の''中''では [SRC@en[MathML1 2.3.5, MathML2 2.4.6, >>10]]、 - [[要素]]の最初と最後の[[空白]]は、除去されます。 - それ以外の[[空白]]列は、1つの [CODE(charname)@en[[[SPACE]]]] で置き換えられます。 - ただし、 [CODE(XMLe)@en[[[cs]]]] [[要素]]の場合を除きます [SRC[>>10]]。 * 歴史 = [8] [[MathML 1]] -- [CSECTION@en[2.3.5 Collapsing Whitespace in Input]] = [9] [[MathML 2]] -- [CSECTION@en[2.4.6 Collapsing Whitespace in Input]] * 関連 ** データとしての空白の表現 [16] [[字句要素]]の中で正規化されない[[空白]]を本当に表現したい時は、 [CODE(charname)@en[[[NBSP]]]] など [[MathML]] でいう[[空白]]以外の[[空白]]文字を使う必要があります [SRC[>>10]]。 [17] [[字句要素]]外で[[空白]]を表現したいときは、 [CODE(charname)@en[[[NBSP]]]] だけが入った [CODE(XMLe)@en[[[mtext]]]] [[要素]]を使ったりするのでは''なく''、 [CODE(XMLe)@en[[[mspace]]]] [[要素]]を使う[RUBYB[べき]@en[should]]です [SRC[>>10]]。 ** XML としての空白処理との関係 [12] [[MathML]] を [[XML文書]]として記述した場合、それを解釈する際には [[XML]] で規定された[[空白]]の処理を行った結果が [[XML]] [[処理器]]から [[MathML]] [[処理器]]に渡されます。 [[DTD]] を使って[[検証]]した場合はそれに基づく[[空白]]の処理が行われます。 ;; [[XML//空白]]参照。 [13] [[MathML]] [[文書]]を [[XML Schema]] で[[妥当性検証]]し、 [[PSVI]] を [[MathML]] [[処理器]]に渡す場合は、 [[XML]] としての[[空白]]の処理だけでなく、 [[XML Schema]] に基づく[[空白]]の処理も行われます。 [3] [[MathML]] では [CODE(XMLa)@en[[[xml:space]]]] [[属性]]は使われません。 [SRC@en[MathML1 2.3.5, MathML2 2.4.6]] 先述の [[MathML]] としての[[空白]]の正規化処理は [[XML]] としての処理の後で行われるので、 [CODE(XMLa)@en[[[xml:space]]]] の値が結果に反映されることはありません [SRC[>>10]]。 * メモ [5] [CODE(XMLe)@en[[[declare]]]] [[要素]]との一致は [[XML情報集合]]として比較するそうです (、 [[MathML 1]] () には規定なし)。 [Q@en[after XML space normalization]] とは書いてあるものの、 [[MathML]] としての[[空白]]の処理をした後とは書いてありませんが、よいのでしょうか? ([[名無しさん]]) [6] 仕様書にある [PRE(XML example code)[ 12342 2342342 ]PRE] のような例は、 [CODE(XMLe)@en[[[sep]]]] の前後の[[空白]]が除去されることを想定していると思うのですが、どうなのでしょうか? >>2 の規則だけでは除去されず、特別な規則もないようですが・・・。 ;; [CODE(XMLe)@en[[[cn]]]] の[[内容]]は [[MathML]] で厳密には決められていなくて、著者と実装が割と自由にできるみたいですが。。。 ([[名無しさん]]) [7] [[要素]]の[[内容]]の[[空白]]に関する正規化は [[DOM]] に反映されるようです。 ;;