Another HTML-lint と text/html と XHTML 1.1

http://hxxk.jp/2004/09/28/0248

記事データ

投稿者

望月真琴

投稿日時

2004-09-28T02:48+09:00

タグ
概要

PHP を用いて、 application/xhtml+xml として XHTML 文書を送出しつつ IE には text/html を送出する方法。同様に、 Another HTML-lint の XHTML 1.1 検証におけるエラーについて解説。

リプライ

リプライはまだありません。

記事本文

XHTML 1.1 において、 text/html で Another HTML-lint による検証を行う

DOCTYPE 宣言において XHTML 1.1 を宣言していて、かつ meta 要素内で <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP" /> といった記述を行っている場合、 Another HTML-lint gateway ではエラーとして扱われます。

hxxk.jp は XHTML 1.0 Strict を宣言しており、更にこの辺りにあれこれ手を加えているので、このエラーは生じていません。 なので、ぱっと頭に思い浮かんだサイトを勝手に検証してエラーを再現させてもらいました。

http://mushline.com/junky/ を XHTML1.1 としてチェックしました。 14個のエラーがありました。このHTMLは 99点です。タグが 41種類 590組使われています。文字コードは UTF-8 のようです。

先頭の数字はエラーのおおまかな重要度を 0〜9 で示しています(減点数ではありません)。 少ない数字は軽く、9 になるほど致命的です。0 は減点対象外のごく軽度のエラーで (グレイのかっこつき) でメッセージされています。

  • 1: line 5: <meta> に指定されているメディアタイプ text/html は XHTML1.1 には指定しないようにしましょう。 → 解説 143
  • 1: line 554: HTTPレスポンスヘッダに指定されているメディアタイプ text/html は XHTML1.1 には指定しないようにしましょう。 → 解説 143

Should not? Must not?

なぜこのようなエラーを出力するのか。 おそらく W3C Note の記述を根拠にしているのだと思われます。

Note that a meta http-equiv statement will not be recognized by XML processors, and authors SHOULD NOT include such a statement in an XHTML document served as 'application/xml' (and 'application/xhtml+xml' as well for that matter).

なお、XML プロセサは meta http-equiv による指定を解釈しないこと、そのため制作者は application/xml として提供される XHTML 文書にそのような指定を記述すべきでないことも記しておく。 これは application/xhtml+xml についても同様である。

この記述を元に、 1: line 5: <meta> に指定されているメディアタイプ text/html は XHTML1.1 には指定しないようにしましょう。 → 解説 143 というエラー項目を作成しているのだと私は想像しました。

これはあくまで Note であり、 This document is a Note made available by the World Wide Web Consortium (W3C) for your information. Publication of this Note by W3C indicates no endorsement by W3C or the W3C Team, or any W3C Members. と冒頭で書かれてあるとおり、参考情報に過ぎません。 ( W3C勧告プロセスの概要 - W3C Notes / Working Group Notes )

そして、 記述すべきでない という表現は Should not であり、してはならないということではないのです。 ( XHTML Media Types - 2. Terms and Definitions )

XHTML Media Types - 3.5. Summary によると、 meta http-equiv による指定のみならず、 Media Type 自体についても XHTML 1.1 における text/html は Should not であると書かれています。

よって、減点対象のエラーとする必要はないのかもしれませんが、そこは作者である石野 恵一郎さんなりの判断基準があるのでしょう。

何故 text/html にこだわるのか

XHTML 1.1 において、 text/html が Should not で、 application/xhtml+xml が Should であるなら、 application/xhtml+xml を指定すればいいのです。 しかし、実際は text/html としているところがほとんどです。

依然ブラウザのシェアの大部分を占める IE が application/xhtml+xml に対応しておらず、 application/xhtml+xml が指定された XHTML 文書を表示できないということが理由として挙げられます。 実装に妥協して text/html を指定することの是非はここでは論じませんが、こういった現状のブラウザ事情への配慮の結果だと私は思います。

IE にのみ text/html を指定する

私は閑古鳥 -> 呟き -> Content-Typeを振り分けるいくつかの方法のコードをそのまま用いて、 application/xhtml+xml に対応している UA には application/xhtml+xml を、そうでない UA には text/html を送出するようにしています。

閑古鳥 -> 呟き -> Content-Typeを振り分けるいくつかの方法では目的に応じたコードがそれぞれ書かれてあり、また追記等もあってコード全体が書かれていないため、勝手にまとめたコードをここに記述しておきます。

<?php

$accept = $_SERVER['HTTP_ACCEPT'];
$ua = $_SERVER['HTTP_USER_AGENT'];

if (eregi("Opera", $UA)) {
  header ("Content-Type: application/xhtml+xml; charset=EUC-JP");
}  elseif (eregi("Another_HTML-lint", $_SERVER['HTTP_USER_AGENT'])) {
  header ("Content-type: application/xhtml+xml; charset=EUC-JP");
} elseif (ereg("application/xhtml\+xml",$accept)) {
  header ("Content-Type: application/xhtml+xml; charset=EUC-JP");
} else {
  header ("Content-Type: text/html; charset=EUC-JP");
}

?>

これをそのまま PHP ファイルの先頭に記述するなり、このコードだけを別ファイルに保存して PHP ファイルの先頭にて include するなりすれば、 UA の対応状況に応じた HTTP ヘッダが送出されます。

Another HTML-lint と text/html と Movable Type にて Movable Type でのテンプレートへのコード記述方法を書きました。 Movable Type ユーザーの方は合わせてお読みください。

Another HTML-lint の小技

Another HTML-lint : How to use htmllint.cgi - 問い合わせ変数一覧に書いてありますが、 HTTP ヘッダがどのように送られているかを調べることができます。 HTTPHeader という変数に on を代入すればいいのです。

たとえば、 hxxk.jp のトップページの検証を行い、かつソースの表示および HTTP ヘッダの表示を行いたい場合、 http://openlab.ring.gr.jp/k16/htmllint/htmllint.cgi?URL=http://hxxk.jp/;ViewSource=on;HTTPHeader=on という URI をリクエストすると、前述の条件で検証結果を返してくれます。

Another HTML-lint gateway にて、 URL指定のときHTTPレスポンスヘッダを表示します。 にチェックを入れても同様のことが行えますが、上記の方法は検証結果に直接リンクできるので、記事などの中で用いるときに便利かもしれません。

リプライ

リプライはまだ送られていないか、管理者の承認待ち状態です。

この記事に対するご意見やご質問、ご感想などありましたらこのフォームに簡潔に記入して下さい。 簡潔に記入できない場合や、関連記事にてご意見をお寄せいただく場合は、ご自身の weblog にて記事を書かれた上で あてにトラックバックとして送信してください。

記入フォーム

補足情報

著作、講演、制作実績など