[[#comment]] * SGML 宣言の構文 [4] SGML 宣言は、必ず[[規格参照具象構文]]でないといけないこととなっています。 しかも、[[引数]]・[[注釈]]には[[マーク文字]]と[[最小データ文字]]しか使うことができず、 それ以外が必要なら (可能な箇所では) [[文字参照]]を使うこととなります。 [[実体参照]]は、まだ定義されていないので、使うことはできません。 ([[JISX4151]]‐1992 12. 参照。) - [PRE[ [DFN[SGML 宣言]] := [CODE(SGML)[[[mdo]]]] "SGML" 1*[[ps]] [[最小表記]] ;; SGML の版 1*ps [[文書文字集合]] 1*ps [[容量集合]] 1*ps [[具象構文適用範囲]] 1*ps [[具象構文]] 1*ps [[機能使用]] 1*ps [[応用特有情報]] *ps [CODE(SGML)[[[mdc]]]] ;; (171) ]PRE] - [CODE(ABNF)[[DFN[ps]] := [[s]] / [[注釈]] ;; / [[引数実体参照]] / [[Ee]]]] - [CODE(ABNF)[[DFN[注釈]] := [CODE(SGML)[[[com]]]] *文字 [CODE(SGML)[com]]]] - [CODE(ABNF)[[DFN[mdo]] := "<"]] - [CODE(ABNF)[[DFN[mdc]] := ">"]] - [CODE(ABNF)[[DFN[com]] := "--"]] - [CODE(ABNF)[[DFN[文字]] := [[最小データ文字]] / <[&#<>!|%;*@^_{}~]> / "[" / "]" / <"> / [[TAB]] ;; = TAB / CR / LF / SP / 印字可能文字 − <[$\`]> = %x09 / %x0A / %x0D / %x20-23 / %x25-%x5B / %x5D-5F / %x61-7E]] [8] [[WebSGML]] では、 SGML 宣言を外部実体にできるようになりました。 - [CODE(ABNF)[[DFN[SGML 宣言]] := "" ;; [171] ]] - [CODE(ABNF)[[DFN[SGML 宣言参照]] := <名前(規格参照具象構文)> [ [[外部識別子]] ] ;; [171.1] ]] -- 外部識別子は、 SGML 宣言本体を参照するものでなければなりません。既定値は [CODE(SGML)[[[SYSTEM]]]] です。 -- [[公式公開識別子]]を使う場合、[[公開文種別]]は [CODE(SGML)[[[SD]]]] とすることが推奨されています。 - [PRE[ [DFN[SGML 宣言本体]] := [[最小表記]] ;; SGML の版 1*ps [[文書文字集合]] 1*ps [[容量集合]] 1*ps [[具象構文適用範囲]] 1*ps [[具象構文]] 1*ps [[機能使用]] 1*ps [[応用特有情報]] [ 1*ps 追加要件 ] ;; [171.2] ]PRE] [[#comment]] * SGML 宣言の最小表記 [7] SGML 宣言の最初にある最小表記では、 その宣言が (ひいてはその[[文書]]が) 適合する (ことを主張する) 規格の版を示します。 ,最小表記の最小データ ,適合する規格 ,[CODE(SGML)[ISO 8879:1986]] ,規格本体 ,[CODE(SGML)[ISO 8879:1986 (ENR)]] ,規格本体 + 附属書 J ([[ENR]]) ,[CODE(SGML)[ISO 8879:1986 (WWW)]] ,規格本体 + 附属書 J + 附属書 K ([[WebSGML]]) ENR や Web SGML の JIS の印刷版では、 植字上の表現のために [CODE(SGML)[ISO 8879'' : ''1986]] のように間隔が空いて見えますが、 ISO や JIS 原案委員会の HTML 版を見る限り間隔はないのが正しいようです。 [WEAK[技術規格では普通の出版物とは違って規定内容が曖昧でないように印刷時にも注意しないと駄目だと思う。。。]] [9] Web SGML では、上3種のいずれかでなければならないとしています。 しかしながら、無印や ENR を選択する場合は SGML 宣言本体参照機能は使えなくなるでしょう。 もちろん Web SGML で追加された追加の引数は指定できなくなります。 [[#comment]] * SGML 宣言の追加要件 [11] - [CODE(ABNF)[[DFN[追加要件]] := "SEEALSO" 1*ps ("NONE" / 1*(1*ps 公開識別子)) ;; [199.1] ]] [12] Web SGML で追加された追加要件引数を使って、 SGML 宣言で表現できない追加の要件に言及できます。 追加の要件は、 SGML とは関係のないものであっても構いませんが、 SGML の規格の要求に矛盾するものであってはなりません。 また、追加要件を満たさなくても[[報告可能マーク誤り]]にはなりません。 (K.3.9 参照。) K.3.9 備考に示されている要件の例 : - 特定の[[実体]]制約に関する表明の要件 - 指定された[[要素型]]に関する[[書式付け]]の慣習 - [[表]]の[[行]]中の[[こま]]の数がある[[属性]]で指定された数を超えないなどの[[データ]]に関する制限 公開識別子をシステムが知らないとしても誤りとはしません。 [13] 附属書 L では、 [[XML]] の例を示しています。 [PRE[ SEEALSO "ISO 8879//NOTATION Extensible Markup Language (XML) 1.0//EN" ]PRE] ;; でも、こう書いたところで XML システムは SGML に矛盾する要件を一杯持ってるので SGML に適合しないのは変わりないですけど。 [[#comment]] * SGML 宣言の省略 [2] [[SGML]] 宣言は、その SGML 文書を単一システムでのみ使用する場合は、省略することが出来ます。 (システムが補充します。) しかし、複数のシステムをまたいで使用する場合には省略できません。 ([[JISX4151]]‐1992 5.2.3 参照。) [10] Web SGML では、[[適合SGML文書]]は SGML 宣言を含むことが望ましいとされています (K.3)。 [3] >>2 例えば [[XML]] で SGML 宣言が必要ない [WEAK[(実際には書くことが出来ない)]] のは、 [[XML処理系]]というシステムでの使用だけが仮定されているからです。 XML 以外の SGML システムに転送するときには、 SGML 宣言が補われることになります[WEAK[(が、それは整形式ではなくなってしまいます)]]。 [[#comment]] * 参考文献 - [1] ''マニアックな文法論議 - SGML宣言の読み方'' [[#comment]] * メモ - [5] SGML 宣言は規格参照具象構文でないといけないから、[[前書き]]や[[文書実現値]]と同じ実体に含めるとしたら [[ISO/IEC646]] [[旧IRV]] の[[超集合]]か、最低でも [[ISO/IEC646の版]]の超集合で符号化されていないと役に立たないんじゃ・・・と思ったんだけど、よく考えれば[[文書文字集合]]は具象構文とは別立てだから、たとえ [[EBCDIC]] だろうと問題はないんだ。 [6] >>5 でも構文参照文字集合と文書文字集合って矛盾しててもいいものなの? 規格参照具象構文で文字番号 0〜127 は旧 IRV に固定されていると考えないといけないのかも? [[#comment]] * メモ [14] [CITE@ja[日本語用SGML DCL(宣言)ファイル]] > [PRE{ 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. ]PRE] たしかにこれはひどい。[[文書文字集合]]で [CODE(SGML)@en[[[ISO Registration Number 87//CHARSET JIS X 0208 Japanese Character Set//ESC 2/6 4/0 ESC 2/4 4/2]]]] が [CODE(char)[[[0x80]]]]〜[CODE(char)[[[0xFE]]]] の[[1バイト符号化文字集合]]として定義されており、 [[名前文字]]にも [CODE(char)[[[0x80]]]]〜[CODE(char)[[[0xFE]]]] が追加されている。 ([[名無しさん]])