朝顔日記

xhtml1.1 の media type

2004-02-03

Another HTML-lint が xhtml1.1 が text/plain だと警告を出すようになったからというわけではないのですが、いずれ通らねばならない道ということで、ちょっと試したみた。でっち上げてみたのが以下のaccept.cgiUA の吐く ACCEPT ヘッダを見て、application/xhtml+xml が受け入れ可能であれば、application/xhtml+xml で送出し、そうでなければ text/html で送るというものです。


#!/usr/local/bin/perl
$accept = $ENV{'HTTP_ACCEPT'};
if($accept =~ /application\/xhtml\+xml/g){
  print "Content-type: application/xhtml+xml\n\n";
}
else {
  print "Content-type: text/html\n\n";
}
  print <<EOF;
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  <html xml:lang="ja" xmlns="http://www.w3.org/1999/xhtml">
  <head>
  <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=Shift_JIS" />
  <link rel="index" href="/index.html" />
  <link rev="made" href="/mailto:nori&#64;noasobi.net" />
  <title>UA によって media type を変えてみるテスト</title>
  </head>
  <body>
  <p>UA によって media type を変えてみるテスト</p>
  </body>
  </html>
EOF
exit;

こんな感じでやれば、application/xhtml+xml に対応していない IE などでも、ページを読むことが出来ますね。しかし、考えてみたら IE が受け取るのは、依然、不思議マークアップとまでは言いませんが、AHLで、警告される html なわけです。実際 この cgi をAHL に渡すと、以下のように警告されます。

8: line 5: HTTPレスポンスヘッダに指定されているメディアタイプは `text/html` ですが、<meta> に指定されているのは `application/xhtml+xml` です。 → 解説 139

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

ということは、たとえコンテントネゴシェーションによって、text/html なファイルと、application/xhtml+xml なファイルを選択して送出するようにしたとしても、ファイル内容が同じであれば、結局、text/html なほうは完璧たりえないという事です。であれば、application/xhtml+xml に未対応な UA には、xhtml1.1 なファイルでなく、xhtml1.0 なファイルを渡すべきということでしょうか。

なんかややこしいなぁ。とりあえずこのサイトでは当分 text/html で行くつもりなんですが、もう少し考えてみよう。

「xhtml1.1 の media type」へコメントをつける

書き込み時の挙動について
URI らしき文字列には自動的にリンクが張られます。また "<" や、">" は実体参照化されます。
スパム対策のため、リファラを切っていると投稿できません。

この記事の永続的 URI ならびに トラックバック ping URI
http://diary.noasobi.net/2004/02/diary_040203a.html