このブログの更新は Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama

メールでのご連絡は hiyama{at}chimaira{dot}org まで。

はじめてのメールはスパムと判定されることがあります。最初は、信頼されているドメインから差し障りのない文面を送っていただけると、スパムと判定されにくいと思います。

参照用 記事

テキストバッファの文化圏

混合内容を必要とする文化圏も1つではありませんが、テキスト文書やワープロ文書の延長としてXML文書を扱いたい立場から言うと、混合内容を「テキストノードと要素ノード(その他の有象無象は無視)が混じって並んだもの」と見るのもうまくないのです。

混合内容文化圏(のひとつ)においても、テキストノードという概念は実は歓迎されません。なぜならDOMのテキストノードは:

  1. 長さ0の文字列をデータとするテキストノードは、あってもなくても同じ
  2. 2つのテキストノードが隣接するなら、それらの文字列データを連接したデータを持つ1つのテキストノードと同じ

といった“構造の不定性”を持ちます。この不定性はうれしくありません。

そもそも伝統的な文書では、テキストノードを基本単位にするのがふさわしくないのです。文書の処理単位は“文字”です。だから混合内容は、テキストエディタのテキストバッファのように、文字を詰め込む容器と考えるべきです。文字列のところどころに要素が混じり込んでいるのです。

概念的には:


mixed-content ::= (character | element)*
ということです。

例えば、


<p>これ<br/>とても<em>重要</em>。</p>
におけるpの内容は、次のようなバッファだと考えられます(番号は1からはじめる)。


[1] 'こ'
[2] 'れ'
[3] <br/>
[4] 'と
[5] 'て'
[6] 'も'
[7] <em>重要</em>
[8] '。'

このバッファに対してinsertBefore(3, 'は') すれば、「これは…」となるし、remove(3) すれば改行が消えます。カーソル移動は、forward, backward 以外に、要素へのenter-intoとか要素からのleave-fromが必要になります。

(続く)