xhtml1.1 の media type
2004-02-03
Another HTML-lint が xhtml1.1 が text/plain だと警告を出すようになったからというわけではないのですが、いずれ通らねばならない道ということで、ちょっと試したみた。でっち上げてみたのが以下のaccept.cgi。UA の吐く 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@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 ならびに トラックバック ping URI
- http://diary.noasobi.net/2004/02/diary_040203a.html