SGML宣言

SGML宣言

[172] SGML 宣言 (declaration) は、 SGML文書の先頭にあって、 SGML文書で使用する具象構文その他のオプションを記述したものです。実際にはほとんどの場合 SGML宣言は単一システム内であるために暗黙裡に合意されているとみなし、省略されます。

SGML 宣言の構文

[4] SGML 宣言は、必ず規格参照具象構文でないといけないこととなっています。 しかも、引数注釈にはマーク文字最小データ文字しか使うことができず、 それ以外が必要なら (可能な箇所では) 文字参照を使うこととなります。 実体参照は、まだ定義されていないので、使うことはできません。 (JISX4151‐1992 12. 参照。)

[8] WebSGML では、 SGML 宣言を外部実体にできるようになりました。

SGML 宣言の最小表記

[7] SGML 宣言の最初にある最小表記では、 その宣言が (ひいてはその文書が) 適合する (ことを主張する) 規格の版を示します。

最小表記の最小データ適合する規格
ISO 8879:1986規格本体
ISO 8879:1986 (ENR)規格本体 + 附属書 J (ENR)
ISO 8879:1986 (WWW)規格本体 + 附属書 J + 附属書 K (WebSGML)

ENR や Web SGML の JIS の印刷版では、 植字上の表現のために ISO 8879 : 1986 のように間隔が空いて見えますが、 ISO や JIS 原案委員会の HTML 版を見る限り間隔はないのが正しいようです。 技術規格では普通の出版物とは違って規定内容が曖昧でないように印刷時にも注意しないと駄目だと思う。。。

[9] Web SGML では、上3種のいずれかでなければならないとしています。 しかしながら、無印や ENR を選択する場合は SGML 宣言本体参照機能は使えなくなるでしょう。 もちろん Web SGML で追加された追加の引数は指定できなくなります。

SGML 宣言の追加要件

[11]

[12] Web SGML で追加された追加要件引数を使って、 SGML 宣言で表現できない追加の要件に言及できます。 追加の要件は、 SGML とは関係のないものであっても構いませんが、 SGML の規格の要求に矛盾するものであってはなりません。 また、追加要件を満たさなくても報告可能マーク誤りにはなりません。 (K.3.9 参照。)

K.3.9 備考に示されている要件の例 :

公開識別子をシステムが知らないとしても誤りとはしません。

[13] 附属書 L では、 XML の例を示しています。

SEEALSO "ISO 8879//NOTATION
         Extensible Markup Language (XML) 1.0//EN"

[15] でも、こう書いたところで XML システムは SGML に矛盾する要件を一杯持ってるので SGML に適合しないのは変わりないですけど。

SGML 宣言の省略

[2] SGML 宣言は、その SGML 文書を単一システムでのみ使用する場合は、省略することが出来ます。 (システムが補充します。) しかし、複数のシステムをまたいで使用する場合には省略できません。 (JISX4151‐1992 5.2.3 参照。)

[10] Web SGML では、適合SGML文書は SGML 宣言を含むことが望ましいとされています (K.3)。

[3] >>2 例えば XML で SGML 宣言が必要ない (実際には書くことが出来ない) のは、 XML処理系というシステムでの使用だけが仮定されているからです。 XML 以外の SGML システムに転送するときには、 SGML 宣言が補われることになります(が、それは整形式ではなくなってしまいます)

処理

[16] SGML は、その構文のいくつかの部分を独自に定めたり、 いくつかの機能を有効にするか無効にするか選択したりすることを認めています。 理論上 SGML文書は自己完結しており、 SGML宣言にそうした事項を記述し、 これをSGML文書の先頭に付与することで、任意のSGML文書を曖昧なく処理できることになっています。

[17] 実際これがどの程度機能していたか不明であり、怪しいものです。 いくつかの SGML の実装が、ある程度 SGML宣言に従って動作モードを切り替えることができることは知られていました。 しかし、一般に SGML応用は自身に適合するSGML文書が用いるべき SGML宣言を提供し、SGML文書は暗黙のうちにこれを採用することとし (宣言そのものは省略し)、そのSGML応用のみを扱う実装はそれを前提として他の SGML宣言を想定しないような運用がなされていました。

[18] また、実際にSGML文書で用いられる文字コードSGML における文書文字集合との関係については (時代背景もあって) 十分に整理されておらず、 SGML宣言における指定方法には様々な混乱が見られました。 現実的には SGML宣言に基づき文字コードに関わる処理が変更されることはほとんどなかったと思われます。

メモ

[6] >>5 でも構文参照文字集合と文書文字集合って矛盾しててもいいものなの? 規格参照具象構文で文字番号 0〜127 は旧 IRV に固定されていると考えないといけないのかも?

[14] 日本語用SGML DCL(宣言)ファイル <http://www.nihs.go.jp/dig/ich/multi/m2/e2b-m2/ICHICSR-sjis.dcl>

    SGML Declaration for ICH SGML Applications using sjis.
    This Declaration was written by James Clark for
    the SP parser.  

    This character set declaration is suitable for use with the ujis or
    sjis coding systems.  It's probably rather easier to lie a bit. 

たしかにこれはひどい。文書文字集合ISO Registration Number 87//CHARSET JIS X 0208 Japanese Character Set//ESC 2/6 4/0 ESC 2/4 4/20x800xFE1バイト符号化文字集合として定義されており、 名前文字にも 0x800xFE が追加されている。 (名無しさん)