日々適当にIT技術とか関係無いこととかをつらつらと。

誤ったDOCTYPE宣言@ZSBを見て、気になったので調べてみた。

XHTML文書の場合。XHTML1.0はXML1.0の規則に従う。DTDの書式は、以下の通り。
[28] doctypedecl ::= '<!DOCTYPE' S Name (S ExternalID)? S? ('[' intSubset ']' S?)? '>'

Nameにはルートとなる要素の名前が入る。ExternalIDにそれ以降の部分が含まれる。ExternalIDの展開部分は、以下。
[75] ExternalID ::= 'SYSTEM' S SystemLiteral | 'PUBLIC' S PubidLiteral S SystemLiteral

ここで、システム識別子(SYSTEM)と公開識別子(PUBLIC)とに分かれる。XHTMLの場合は、公開識別子なので、'PUBLIC' S PubidLiteral S SystemLiteralを参照する。XHTML1.0の場合、DTDのURL(URI)は必須と言える。

ちなみに、XML1.1の場合も、同様である。(doctypedeclExternalID参照)

残念ながら、SGML関連の文書は、SGML自体が有料のためか、まったく根拠となりうる記事は見つけられなかった。よって、HTMLに関してはExternalIDが必須かどうかは、不明。求む情報。


コメント

HTML 4.01におけるシステム識別子について
HTML 4.01ではDTDのURI(システム識別子)は省略可と解釈するのが一般的なようですし、私もそう解釈しています(ということは、HTML 4.01では「省略可」と明言されているわけではない)。

HTML鳩丸倶楽部さんの「文書型宣言の読み方」(URIを示すと横幅オーバーになってしまうので、ググッてください)に書かれている内容が、一般的な理解と言ってよいでしょう。

実際、SGML系で言えば、HTML 3.2までは公開識別子のみだったのですが、HTML 4.01では「If the document type declaration of your document includes a URI and your SGML parser supports this type of system identifier, it will get the DTD directly.」(19.1)という配慮から、システム識別子も含めていこうということになったんですね。

ばあどさんもご存知のとおり、あるブラウザの標準準拠/過去互換というモード切り替えで言えば、ZSBさんの言うようにシステム識別子をきちんと指定してあげたほうがよいのですが、XHTMLとは異なり、HTMLではシステム識別子を指定していないことが即、文法違反にはならないということですね。by 益子 date 2005年01月17日
情報どうもです
毎度お世話になります。
その情報は、以前参照したことがあるのですが、どうも腑に落ちない部分がありまして、SGML仕様書から引用しているものが無いか調べていたんです。

けれども、言われてみれば確かに、HTML3.2ではURLが付いてなかったですね。HTML 4.01の仕様書の書き方を見ても、そのとおりかも。by ばあど date 2005年01月17日
ISO-HTMLでは
なお、ISO-HTMLでは、システム識別子を書かず、公開識別子のみの書式となっています(9.1)。

他のSGMLアプリケーションで基本アーキテクチャとしてDTDを利用(拡張)するために、システム識別子を指定する書式も認められています(9.2)。

http://www.cs.tcd.ie/15445/15445.HTML~~http://www.... by 益子 date 2005年01月17日
参考になりました。
こんにちは。
詳細な情報ありがとうございます。
いやホント参考になります。by ZSB date 2005年01月18日
タグ

このページへのコメント

kym7d0 Thanks for sharing, this is a fantastic post.Much thanks again. Great.

0
Posted by check it out 2013年12月31日(火) 15:59:45 返信

OtSV41 Thanks so much for the article post.Thanks Again.

0
Posted by tips about seo 2013年12月19日(木) 13:02:14 返信

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

フリーエリア

編集にはIDが必要です