[1] [[文書型]]の[[名前]]を、[DFN[[RUBYB[文書型名]@en[document type name]]]]といいます。 文書型名は、[[文書要素]]の[[要素型名]]と同じです。 [112] [[文書型名]]は、[[文書型宣言]] ([CODE(SGML)@en[[[DOCTYPE]]]]) の[[名前]]として記述します。 [2] [[SGML]] では複数の[[文書型宣言]]や[[連結型宣言]]を記述することができますが、[[文書型名]]は同じ[[文書]]の他の[[文書型名]]や[[連結型名]]とは異なっていなければなりません。 [SRC[[[JIS X 4151]]‐1992 10.1]] ;; [113] [[文書型指定]]などで[[文書型]]の区別のために[[文書型名]]を使います。 [3] また、 [[SGML]] では[[文書型名]]に対応する[[要素型宣言]]は必須です。 [SRC[[[JIS X 4151]]‐1992 10.1]] [117] [[DTD]] は[[要素]]とその[[内容モデル]]の情報が含まれていますが、[[文書]]全体がどの[[要素]]によって表されるかの情報は含まれていません。 ですから[[文書型宣言]]でそれを指定する必要があるのです。 ;; [[生成規則]]における[[開始記号]]に相当するものですね。 [118] [[DTD]] レベルではどの[[要素]]が[[文書要素]]になり得るかの情報もありませんから、 [[DTD]] に含まれる任意の[[要素名]]を[[文書型名]]として使えます。 ([[アプリケーション]]レベルの要件で[[文書要素]]として使えるものが限定されているかもしれませんが。) * [CODE(SGML)@en[#IMPLIED]] [FIG[ - [4] [CODE(ABNF)[[DFN[文書型名]] := [[共通識別子]] / [CODE(SGML)[[[rni]]]] [[IMPLIED]] ;; [[WebSGML]] [111] ]] ]FIG] [114] [[文書型名]]は[[文書型宣言]]にわざわざ明記せずとも、 [[文書要素]]を見れば良いんです。ということで [[Web SGML]] では[[文書型名]]として [DFN[[CODE(SGML)[[[#IMPLIED]]]]]] と書けるようになりました。 [SRC[[[Web SGML]] K.4.5]] [115] 但し、 - [[文書要素]]の[[開始タグ]]が省略されている場合 - [[文書要素]]の開始タグが[[共通識別子]]を含まない場合 は[[報告可能マーク誤り]]です。 [116] また、 [CODE(SGML)[[[LINK]] [[EXPLICIT]] YES]] ([[明示連結機能]]使用) 又は [CODE(SGML)[[[CONCUR]] YES]] のときは使えません。 * 文書型名と文書要素名の相違 [5] >>1,>>3 [[妥当性]]の[[表明]]を行わない時には ([[Web SGML]] の [CODE(SGML)[[[NOASSERT]]]] 参照)、 文書型名と文書要素の要素型名が異なっていたり、 文書型名と同じ要素型名の要素型宣言が欠けていたりしても構いません。 ;; そのような場合、 [[XML]] 的には、[[妥当]]ではありませんが[[整形式]]です。 [119] [[SGML]] は [[DTD]] がないと構文解析ができず、[[文書型名]]が決まることで[[文書要素]]が決まる仕組みになっていました。 [[文書要素]]の[[開始タグ]]は省略可能にできました。しかし [[XML]] は [[DTD]] なくても構文解析できますし、 [[開始タグ]]の省略はできず、関係が逆転しているといえます。 * 関連 [6] [[体系]]では、[Q[[[体系文書要素形式名]]]]が文書型名に相当します。 文書型名は文書型宣言で宣言しますが、 体系文書要素形式名は[[体系支援宣言]]の[[体系支援属性]]で指定します。