最近「XHTML文書にはXML宣言を入れることが強く推奨されているので入れるべきだ」というような意見を何度か目にしました。しかし、その説明の中で、メディア・タイプ（「text/html」や「application/xhtml+xml」など）については触れられていませんでしたので、ちょっと補足しておきたいと思います。



XHTML1.0の仕様書では、確かにXML宣言をつけることが強く推奨されており、具体的には次のように書かれています。

An XML declaration is not required in all XML documents; however XHTML document authors are strongly encouraged to use XML declarations in all their documents.

しかし、ここで言うXHTML文書とは、仕様書が意図している本来のXHTML文書、つまりメディア・タイプが「application/xhtml+xml」のXHTML文書を指していて、「text/html」として配信されるXHTML文書の場合はまた別の話となる点に注意が必要です。わかりやすく言えば、XHTML1.0の仕様書は「XMLとして処理される本来のXHTML文書（application/xhtml+xml）」の話をしていて、現実的に大多数を占めてはいるがXHTMLとしては実は例外的な「HTMLとして処理されるXHTML文書（text/html）」の場合は、話がちょっと違うということです。

「text/html」の場合にどうすればいいのかは、「XHTML Media Types – Second Edition」という W3C Working Group Note に書かれています。

The ‘text/html’ media type [RFC2854] is primarily for HTML, not for XHTML. In general, this media type is NOT suitable for XHTML except when the XHTML is conforms to the guidelines in Appendix A.

—–

「text/html」は主としてHTML用のメディアタイプであって、XHTML用のものではありません。XHTML文書が付録Aのガイドラインに準拠している場合を除き、一般にこのメディアタイプはXHTML用としてふさわしいものではありません。

この説明から、XHTML文書を「text/html」として配信する場合は、付録Aのガイドラインに準拠させるべきであろうことがわかります。ちなみに、そのガイドラインとは、「Compatibility Guidelines（互換性ガイドライン）」という、もともとはXHTML1.0の仕様書の中にあったものの最新版で、その最初の項目としては次のように書かれています。

・DO NOT include XML processing instructions NOR the XML declaration.

・XMLの処理命令やXML宣言を入れない。

これらをまとめると、XHTML文書を「text/html」として配信する場合は「互換性ガイドライン」に準拠させるべきであり、「互換性ガイドライン」に準拠させるならXML宣言は入れられないということになります。現在あるXHTML文書の多くは「text/html」として配信されていますが、XML宣言を入れると「互換性ガイドライン」に準拠しない文書となってしまうことを覚えておきましょう。