* マーク付き区間

[6]
>
:(254) マーク区間 (marked section):
特別の目的のために認識される[[文書]]の[[区間]]。
[SRC[[[JIS X 4151]]-1992 3.]]

[11] マーク区間は[[マーク区間宣言]]としてではなくても、
[[実体宣言]]を使って定義することもできます。
例えば: [SAMP(SGML)[<!ENTITY ent MS " CDATA [ something included ">]] [WEAK[ [SAMP(SGML)[ [ ]] ([CODE(SGML)[[[dso]]]]) だけが区切子として入って対応する括弧がないので不恰好ですが、そういうもんです。]]

* マーク付き区間宣言

[15] [[マーク区間]]を[[識別]]し、
その取扱いを指定する[[マーク宣言]]。 
Marked section declaration。 
[[JISX4151]]‐1992 定義 (257), 9.4 参照。

[16] 
- マーク区間宣言 = マーク区間開始 状態見出し語指定 [[dso]] マーク区間 マーク区間終了 ;; (93)
- マーク区間開始 = [[mdo]] [[dso]] ;; (94) [SAMP(SGML)[ <![ ]]
- マーク区間終了 = [[msc]] [[mdc]] ;; (95) [SAMP(SGML)[ ]> ]]
- マーク区間 = *[[SGML文字]] ;; (96)

[17] [[マーク区間]]は、そのマーク区間宣言が位置する[[文脈]]での[[構文]]上及び[[意味]]上の要件に従わなければなりません。
[WEAK[(例えば、[[文書実現値]]内で [CODE(SGML)[[[INCLUDE]]]] なマーク区間を使ったからといって、そこに[[実体宣言]]とかを書くのは無茶というもんです。)]]

[18] また、マーク区間宣言の外側で[CODE(SGML)[マーク宣言終了]]を使うと、[[誤り]]となります。
[WEAK[(多分これが、 [[XML]] で[[文字データ]]に [CODE(XML)[ ] ] > ]] を直接かけない根拠です。)]]

[19] [[JISX4151]] には確かに「マーク区間宣言の外側に現れたマーク'''宣言'''終了は,誤りとする」とありますが、これは『マーク'''区間'''終了』の typo でしょうね。

[20] 開いているマーク区間宣言の個数は[[量]] [CODE(SGML)[[[TAGLVL]] 以下でなければなりません。 (9.4.1)

[21] [CODE(SGML)[マーク区間宣言(93)]]が使える場所は、[CODE(SGML)[(27)他の内容]]と [CODE'(SGML)[(71)[[ds]]]] だけです。前者はつまり [CODE(SGML)[(25)[[混合内容]]]]と [CODE(SGML)[(26)[[要素内容]]]]です。従って、マーク区間宣言が書けるのは、(1)[[子要素]]又は子文字データを持ち得る[[要素]]内, (2) [[文書型宣言]]の「地の文」のいずれかとなります。

*マーク区間の見出し語

[23] 次の[[見出し語]]がありました。

,*[[見出し語]],*説明,*[[SGML]],*[[XML]] [[文書実現値]],*[[XML DTD]],*[[HTML]] [[外来要素]],*[[HTML要素]]
,*[CODE(SGML)@en[[[CDATA]]]]  ,[[文字データ]] ([[CDATA区間]]),○,○,×,○,×
,*[CODE(SGML)@en[[[IGNORE]]]] ,無視する ([[条件区間]]),○,×,○,×,×
,*[CODE(SGML)@en[[[INCLUDE]]]],含める ([[条件区間]]),○,×,○,×,×
,*[CODE(SGML)@en[[[RCDATA]]]] ,[[置換可能文字データ]],○,×,×,×,×
,*[CODE(SGML)@en[[[TEMP]]]]   ,一時,○,×,×,×,×

[2] [[SGML]] では、[[実体参照]]を展開した時の便宜を考えて、
複数の見出し語を指定することも出来ます。たとえば、
[SAMP(SGML)[<!'''['''CDATA TEMP [ ほげほげ ]''']'''>]] は正当です。

[3] 特に [CODE(SGML)[IGNORE]], [CODE(SGML)[CDATA]], [CODE(SGML)[RCDATA]], [CODE(SGML)[INCLUDE]] の4つは[DFN[状態見出し語]]といい、この順 (無視→含める) で優先します。状態見出し語が無い時には [CODE(SGML)[INCLUDE]] とみなされます。

[4] XML では、マーク区間を DTD の内部部分集合で使うことは出来ません。

[5] また、 XML では[[文書要素]]内で使えるマーク区間は [CODE(XML)[CDATA]] のみです。

*実体境界によるマーク区間の分断

[9] [[完結記憶文書実現値]]の定義は「全ての要素及びマーク区間が、それが開始した実体の中で終了する文書実現値」なんですけど、この条件がマーク区間に関して満たされない場合ってあります? 素の SGML でも必ずマーク区間は完結していると思うんですが。

[10] >>9 それがそうでもないらしい。 JIS X 4151‐1992 8.4.3:
= (2) [[文字データ]]若しくは[[置換可能文字データ]]と宣言してある[[要素]]若しくはマーク区間の内容又は無視するマーク区間の内容は、
同じ実体の中で始まって終わらなければならない (他の要素の内容又は他のマーク区間の内容も、そうすることが望ましい。)。
= (3) (2) に該当しない要素又はマーク区間に対しては、
その開始タグ及び終了タグ (又はその[[マーク区間開始]]及び[[マーク区間終了]]) が、共に同じ実体の中にあるか、
同じ実体の中から参照している実体の置換文となっているかであることが望ましい。

ところで「マーク区間の内容」とはどこからどこまでのことだろう?
>>13

[14] で、 >>12 のように解釈するとして、 (2), (3)
をまた読んだら、余計意味が分からなくなりましたが何か?

[[#comment]]

* マーク区間の内容

[13] JIS X 4151‐1992 8.4.3 (2) で未定義のまま使われている
「マーク区間の内容」とはなんだろう。

JIS X 4151 での「内容」の定義は、[[内容]>>6]である。
ここではマーク区間のマの字も出てこない。

[12] ここで、8.4.3 (3) において、要素における開始タグ及び終了タグがそれぞれそマーク区間におけるマーク区間開始及びマーク区間終了に対応させていることに注目したい。
そこで、要素についての「内容」の定義を書き換えてみる。

> 文書の中で[INS[マーク区間宣言]]の[INS[マーク区間開始]]と[INS[マーク区間終了]]との間に出現する文字。

なるほど、それらしい定義である。この解釈が正しいとすると、
[PRE[
<![''CDATA[something'']]>
]PRE]
の内容は [SAMP(SGML)[CDATA[something]] である。

しかもこれは >>11 に例のある、マーク区間実体の[[実体値]]に指定する内容と一致する。
[WEAK[なお、マーク区間実体は[[置換文]]をマーク区間開始・終了で括ってから解釈する (9.5.4) ので、この定義でマーク区間実体をもカバーできます。]]

*メモ

[22] [[マーク付き区間]]って何かかっこ悪い訳じゃないですか? 使い慣れた''マーク区間''の方がいいなあ。

- [1] ''マニアックな文法論議 - SGML のマーク区間'' <http://www.ne.jp/asahi/minazuki/bakera/html/sgml/markedsection>
- [7] ''鳩丸よもやま話 : マーク区間とは'' <http://altba.com/bakera/hatomaru.aspx/yomoyama/markedsection>: >>1 の新版
- [8] SGML におけるマーク区間の使い方については、 JIS X 4151‐1992 参考3 8. に解説があります。分かりやすいですから是非ご覧あれ。