マーク区間宣言

マーク区間宣言

マーク付き区間

[6]

(254) マーク区間 (marked section)
特別の目的のために認識される文書区間JIS X 4151-1992 3.

[11] マーク区間はマーク区間宣言としてではなくても、 実体宣言を使って定義することもできます。 例えば: <!ENTITY ent MS " CDATA [ something included "> [ (dso) だけが区切子として入って対応する括弧がないので不恰好ですが、そういうもんです。

マーク付き区間宣言

[15] マーク区間識別し、 その取扱いを指定するマーク宣言。 Marked section declaration。 JISX4151‐1992 定義 (257), 9.4 参照。

[16]

[17] マーク区間は、そのマーク区間宣言が位置する文脈での構文上及び意味上の要件に従わなければなりません。 (例えば、文書実現値内で INCLUDE なマーク区間を使ったからといって、そこに実体宣言とかを書くのは無茶というもんです。)

[18] また、マーク区間宣言の外側でマーク宣言終了を使うと、誤りとなります。 (多分これが、 XML文字データ ] ] > を直接かけない根拠です。)

[19] JISX4151 には確かに「マーク区間宣言の外側に現れたマーク宣言終了は,誤りとする」とありますが、これは『マーク区間終了』の typo でしょうね。

[20] 開いているマーク区間宣言の個数は TAGLVL 以下でなければなりません。 (9.4.1)

[21] マーク区間宣言(93)が使える場所は、(27)他の内容と [CODE'(SGML)[(71)ds]] だけです。前者はつまり (25)混合内容(26)要素内容です。従って、マーク区間宣言が書けるのは、(1)子要素又は子文字データを持ち得る要素内, (2) 文書型宣言の「地の文」のいずれかとなります。

マーク区間の見出し語

[23] 次の見出し語がありました。

見出し語説明SGMLXML 文書実現値XML DTDHTML 外来要素HTML要素
CDATA文字データ (CDATA区間)××
IGNORE無視する (条件区間)×××
INCLUDE含める (条件区間)×××
RCDATA置換可能文字データ××××
TEMP一時××××

[2] SGML では、実体参照を展開した時の便宜を考えて、 複数の見出し語を指定することも出来ます。たとえば、 <![CDATA TEMP [ ほげほげ ]]> は正当です。

[3] 特に IGNORE, CDATA, RCDATA, INCLUDE の4つは状態見出し語といい、この順 (無視→含める) で優先します。状態見出し語が無い時には INCLUDE とみなされます。

[4] XML では、マーク区間を DTD の内部部分集合で使うことは出来ません。

[5] また、 XML では文書要素内で使えるマーク区間は CDATA のみです。

実体境界によるマーク区間の分断

[9] 完結記憶文書実現値の定義は「全ての要素及びマーク区間が、それが開始した実体の中で終了する文書実現値」なんですけど、この条件がマーク区間に関して満たされない場合ってあります? 素の SGML でも必ずマーク区間は完結していると思うんですが。

[10] >>9 それがそうでもないらしい。 JIS X 4151‐1992 8.4.3:

  1. (2) 文字データ若しくは置換可能文字データと宣言してある要素若しくはマーク区間の内容又は無視するマーク区間の内容は、 同じ実体の中で始まって終わらなければならない (他の要素の内容又は他のマーク区間の内容も、そうすることが望ましい。)。
  2. (3) (2) に該当しない要素又はマーク区間に対しては、 その開始タグ及び終了タグ (又はそのマーク区間開始及びマーク区間終了) が、共に同じ実体の中にあるか、 同じ実体の中から参照している実体の置換文となっているかであることが望ましい。

ところで「マーク区間の内容」とはどこからどこまでのことだろう? >>13

[14] で、 >>12 のように解釈するとして、 (2), (3) をまた読んだら、余計意味が分からなくなりましたが何か?

マーク区間の内容

[13] JIS X 4151‐1992 8.4.3 (2) で未定義のまま使われている 「マーク区間の内容」とはなんだろう。

JIS X 4151 での「内容」の定義は、内容 (>>6)である。 ここではマーク区間のマの字も出てこない。

[12] ここで、8.4.3 (3) において、要素における開始タグ及び終了タグがそれぞれそマーク区間におけるマーク区間開始及びマーク区間終了に対応させていることに注目したい。 そこで、要素についての「内容」の定義を書き換えてみる。

文書の中でマーク区間宣言マーク区間開始マーク区間終了との間に出現する文字。

なるほど、それらしい定義である。この解釈が正しいとすると、

<![CDATA[something]]>

の内容は CDATA[something である。

しかもこれは >>11 に例のある、マーク区間実体の実体値に指定する内容と一致する。 なお、マーク区間実体は置換文をマーク区間開始・終了で括ってから解釈する (9.5.4) ので、この定義でマーク区間実体をもカバーできます。

メモ

[22] マーク付き区間って何かかっこ悪い訳じゃないですか? 使い慣れたマーク区間の方がいいなあ。