マーク区間終了

MSE (SGML)

[1]SGMLマーク区間宣言を閉じる区切子。 Marked section end。 JISX4151‐1992 3. (256) 参照。

[8] 規格参照具象構文や XML など多くの環境では ] ] > が使われます。

シフトJIS に配慮した具象構文では *>*>> が使われることがあるそうです。 なんとも奇妙な・・・。

[9] MSE は、文脈上の制約区切子に割当ててある文字列の直後に mdc が続く場合、文脈依存区切子として認知する。 (JIS X 4151‐1992 8.6.2(1)(d) 参照)

[10] >>9 ではなんのことだかさっぱりですが、要はマーク区間終了のことを言っているのです。

MSE (に相当する文字列) を書けない場所

[4] マーク区間終了の文字列 (規格参照具象構文や XML では ] ] >) を認知様相 COM, DSM の場所で書くと、マーク区間終了とみなされてしまいます。

たとえば、

<element>]]> と書いてはいけません。</element>

と書くと、 element 要素の内容はマーク区間終了と と書いてはいけません。 になってしまいます。ところが、

マーク区間宣言の外側に現れたマーク区間終了は, 誤りとする

に従い、このマーク区間終了は誤りになるのです。

[5] 以下は古い説明。

[2] マーク区間終了の文字列は、「マーク区間宣言の外」では出現してはいけないことになっています。「外」とはどこからどこまでかはよくわかりませんが、 SGML 処理系や XML 仕様の解釈から推測すると、要素の内容と文書型宣言 (後者は元からありえない。) では駄目みたいです。属性値表記内とか、注釈内とかに書いても問題なさげです。

[3] >>2 XML では CharData(14) <http://www.w3.org/TR/REC-xml#NT-CharData> で表される場所 (要素の内容) には ] ] > を書くことが出来ません。 ( ] ] &gt; などとしなければなりません。)

[6] <http://www.satoshii.org/markup/notes/2003/11> より:

msc は認知様相 CON DSM 制約 MSE, mdc は認知様相 CTX MD. ここで、マーク区間終了 = msc, mdc — (95) であるから、MSE は CON DSM でしか認知されない。つまり、リテラルや注釈の内部に ]]> という文字列を記述したところで、]] が msc と認知されることはないから、これは MSE とは見なされない。すなわち、この文脈での文字列 ]]> は、マーク区間宣言の外側に現れたマーク区間終了は, 誤りとするという JIS X 4151 の文言には抵触しないのである。

以下、]] が msc として認知される範囲で考える。認知様相 DSM で msc を認知するケースでは、MSE は常に正しい MSE として扱われるので、エラーの要因とはならない (DSM というのはマーク区間の内側なのだから当然)。結局、マーク区間宣言の外側に現れたマーク区間終了というのは、「マーク区間宣言の外側の内容として現れた文字列 ]]>」に他ならないわけである。

[7] >>6 その通りでした。認知様相を考えるのを忘れてました。

メモ

[11] msc として認知され得る文字列が見つかった時に、制約 MSE となります。ここで文字列 mdc が続いていることがわかれば、文脈依存区切子が認知されます。すなわち、 msc + mdc がマーク区間終了とみなされ、継続中だったマーク区間がそこに終了します。

[12] >>11規格参照具象構文を仮定して言い直すと、マーク区間を解釈中に ] ] を発見すると、その直後に > がないか探します。あった場合は ] ] > を認知し、もってマーク区間を終了させます。