text/html
としてwebで公開している理由の一つとしてMSIE では application/xhtml+xml を認識出来ないからという意見が少なからず散見されます。
XHTML 1.1 (あるいは XHTML Basic など、XHTML 1.1 ベースのもの)では、「HTMLに即した記述」が排除されており、 XML に即した記述に置き換わっています。
lang
属性は排除され、 xml:lang
属性に置き換わっています。ただし、 text/html
では xml:lang
属性は「無用の長物」です。例えば Mozilla では、 text/html として認識された文書内では、 xml:lang
属性は認識されません。ex:element
要素が認識される際、 HTML ではあくまで「ex:element
という名前の要素」であり、 XML で定義されているような「xmlns:ex
属性で定義されたURIに結び附けられた element
要素」という扱いがなされません(この考え方は、DOMやCSS を扱う際に、特に重要です)。XHTML 1.1 文書を、極力仕様に沿った形で WinIE/MSXML 上で認識させることは、事実上可能です。指針は、以下の通りです。
html
接頭辞を附加する。xmlns:html="http://www.w3.org/1999/xhtml"
とする。
DOCTYPE 宣言の中身を、以下のように修正する。
<!DOCTYPE html:html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" [ <!ENTITY % NS.prefixed "INCLUDE"> <!ENTITY % xhtml-prefw-redecl.mod ""> <!ENTITY % xhtml-postfw-redecl.mod ""> <!ENTITY % XHTML.prefix "html"> ]>
名前空間接頭辞を有効にし、IGNORE 区間の中身も読み込んでしまう MSXML の不具合を考慮した記述をする。
application/xml として認識させる。「XHTML Media Types」では、 XHTML 文書を text/xml や application/xml として認識させても良いことになっています。
XHTML 1.1 や basic などは、元来 XML パーザーに認識させるべきものとして規格化された以上、今までの HTML の規格とは一線を引くべきでしょう。そのため、現存する多くの「XHTML 1.1 文書」は間違ったものであると言わざるを得ません。
NN 4.x や MacIE などのような XML を認識出来ない Web ブラウザのことを考慮するのであれば、 XHTML 1.0 として記述するのが、最も現実的であると言えます。