こんな質問、ほんとによくあるのか? というのは置いといてください。
W3Cのサーヴィスは、HTMLをDTD的に検証するだけです。しかし、W3Cの策定しているHTMLの仕様書中や、DTDのコメント中には、DTDでは表現できない多種多様な制約事項が述べられています。W3Cの検証ではそのようなチェックは一切行なわれません。例えばHTML4などで、<OL type> の値は、DTDではCDATAとしか書かれていませんが、実際は "(1|a|A|i|I)" であるべきことがコメント中に明記されています。DTDではそのような表現ができないからです。W3Cの検証はそのようなチェックはしません(できません)。つまり、<OL type="USO800"> と書いてもエラーにはなりません。Another HTML-lint 5 はそのようなことも含めて、仕様書中の瑣末なことまで、なるべくチェックするよう努力しています。
というわけで、はっきり言って、W3Cの検証でお墨付きをもらったとしても、DTD的に正当なだけで、HTML的に正当かどうかの保証は一切ありません。しかし、Another HTML-lint 5 のDTD的検証は独自の物です。W3Cの検証も是非行なってください。
そんな保証はありません。指定された文法的なチェックをするだけで、見え方まではわかりません。特定の環境でちゃんと見えるようにするためには、減点が不可避なこともあります。
また、WAIで言われているアクセス性に関するチェックは、ごく一部しかできません。この勧告文書(加藤泰孝氏が訳されています)をちゃんと読んで、よりよいHTMLを書いてください。
満点である必要はありません。
人の言うことは、眉唾だと思うことが基本です。相手がどんな権威でも、盲信するのは危険です。信用に足るかどうかは自分で判断するしかありません。そういう判断ができる知識を身に付けましょう。評論家になるのはその後です。
あなたの環境でちゃんと見えているのであって、隣の人もちゃんと見えるかどうかはわかりません。大勢の人々に見てもらおうというのなら、誰もがちゃんと見えるようにしなければならないのですが、それには決められた文法を守って書くことが必要です(十分ではありません)。
しかし、現実には文法を守らなくても、優秀なWWWブラウザが適当に不備を補ってくれるので、かなりいいかげんに書いても多くの人々にはちゃんと見えます。だから、今のところ文法に関してルーズでも困ることはあまりありません。でも、文法的に正しければより多くの人にちゃんと見てもらえます。HTMLの未来がXMLにあるのなら、文法違反はご法度になる方向にあるということです。
チェックで満点を目指すというのは、「正しい日本語を話しましょう」というのと似ていなくもないですが、HTML文法は自然言語じゃないのでちと違います。ちょいとばかし堅苦しいところがある点は同じです。満点だからといって、それでは十分でないことに気付いてください。Another HTML-lint 5 がチェックするのは文書の内容ではないのです。正しい日本語でたわけたことを言っていてもしょうがありません。文法よりも、内容が大事なことは明々白々ですが、文法を正したからといって、内容が損なわれることはありません。
その超有名サイトの技術者が、W3Cの仕様を守る技術力を持っていないというだけのことでしょう。もし、思惑通りに表示させるためにあえて違反を犯しているのなら、HTMLを採用すべきではありません。どうしてもHTMLを使いたいなら、W3Cに仕様変更を求めるべきです。あるいは、HTMLより優れたプロトコルを設計し、広く世間に流布させればいいのです。
なるべく平易に書くように努めているつもりなのですが(どこがじゃ)、どうもHTMLの基礎的なことは端折ってしまいがちです。部分部分で「ここがわからない」という指摘はその都度書き換えなどをしたいと思いますが、総体的にわからないというのであれば、他の優れた方々のサイトを巡ってHTMLの基礎を勉強してください。
残念なことに、正しいHTML文法の認知度が非常に低いからです。このような間違ったHTMLを生成するオーサリングツールの開発者達は、MozillaやMSIEなどの目的とするWWWブラウザでちゃんと見えればよいようにHTMLタグを生成しようとしているのです。そのようなオーサリングツールは、最初のラフなHTML生成用に使用し、その後テキストエディタで手直しする必要があるかも知れません。
これはとてもおかしな話で、これでは何のためのオーサリングツールかわかりませんね。
残念ながらできません。チェックするときに得られるHTMLからは、それが広告主によって挿入されたものか、ページ製作者の意図したものかの区別が文法的にできないからです。
しかし、広告を除いてチェックして高得点を得ても、あなたが広告付きプロバイダを利用する限り意味がありません。あなたのサイトを訪れる人は広告付きのHTMLを表示しようとするからです。広告部分に致命的な欠陥があるのなら、あなたのサイトは閲覧できない可能性が高いことに変わりはありません。あなたのサイトの評価は広告込みで行なわれるべきです。そこに広告が表示されるのは、そのプロバイダを選んだあなたの責任であり、広告はあなたのHTMLの一部です。
プロバイダ提供のCGI等でも同様です。
基本的なタグ付けの方法が正しくないと思われますので、HTMLの基礎を勉強し直しましょう。
また、DOCTYPE宣言がないときは、とりあえず、文書の先頭に
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">と書いておいてください。そして、この行の意味を勉強してください。
もし、すでにDOCTYPE宣言があるのにエラーが多い場合は、HTMLヴァージョンにいろいろあることをあまり理解できていないために、不適切なDOCTYPE宣言であることが考えられますが、深く理解するのなんかさらさらごめん、という方は、やはり上のDOCTYPEに改めてみてください。Transitionalがあるとないでは大違いなので注意しましょう。
宗教的なチェックなどを無効にしても、エラーがずいぶん減ります。
満点を取ることを目標にしてはいけません。例えば以下のような修正は、あなたのHTMLを満点に導きます。
<font color="red">
⇒<span class="red">
<div align="center">
⇒<div style="text-align:center">
<br /><br />
⇒<br /> <br />
<a target="...">
⇒<a onclick="window.open(...)">
でも、これらは表現方法を変えてはいるものの、相変わらず物理的な記述をしており、とてもよいHTMLとは言えません。文章に論理的な意味を与えていません。なぜ文字を赤くしたいのか、なぜ中央寄せしたいのかを考えましょう。<br /> の例などはとてもひどいもので、涙が出ちゃうくらいです。targetによる方向付けは、そういう行為自体を戒めているものなのに、targetじゃなければいいなどという発想自体がおかしいのです。
書かれているHTML文書が、どういったHTMLかを示すためのものです。これは、例えば、「この文書は津軽弁で記述されています」といったようなことに相当します。HTMLにいろいろなものがあるのは、HTML4.0だとかHTML3.2だとかいうのがあるので、薄々気付いているでしょう。だから、HTML3.2の参考書を見て書いたHTMLの先頭には、「HTML3.2で書かれた文書です」と宣言するわけです。結果の解説などを読んでください。
MozillaやMSIEにはHTMLの正式な文法がありません。この文法は Document Type Definition (DTD/文書型定義) と呼ばれるものです。DOCTYPEは、HTML文書がどのDTDに則って書かれているかを示すものなので、DTDの存在しないMozillaやMSIE用のHTML文書にDOCTYPE宣言をすることはできません。HTMLをMozillaやMSIE用としてチェックさせるには、HTMLヴァージョンをそれぞれ該当するものに変更してからチェックしてください。
ほとんどすべてのエラーは、主観によるものではありません。エラーにはすべて出典があります。出典元(W3CとかIETFとか)を参照しております。宗教的や経験的とされているものでもそうなのですが、出典元が多少怪しい場所や、多少主観の入っているものもあります。納得できない理由を客観的に分析してみてください。プログラムミスによって間違った判定をされることもあり得ますので、「変だ」と思ったら support@heartcore.co.jp までメールでもしてください。
まれに、日本語の文字コードを誤判定することがあります。これは、日本語の文字コードがごくわずかしか含まれないときや、短い日本語文字コードが最初に現れてから、次が現れるまでだいぶ間が空いているようなときです。HTML文書の最初の方に、コメントとして適当な日本語を入れておくことで回避できます。
Mozillaのヴァージョンによって、いくつかの書籍のあらさがしなどの一部のページを見ようとすると、クラッシュしてしまうことがあるようです。Mozillaがスタイルシートの処理をうまく行なえないのが原因なのですが、どのような記述が直接の引き金になっているのか特定できていません。クラッシュするページでJavaScriptは使用していませんが、当該ページを見る前に一度でもJavaScriptが動作しているとだめなようです。JavaScriptを無効にするなどしてください。申し訳ありません。
蛇足ですが、Mozilla4.5(やそれ以前)のスタイルシートの対応度は評価以前のレベルです。MSIE3のスタイルシートは使わないでください。MSIE4.5やMSIE5だと問題は少なくなります。
たぶんMacのMozilla(4.5)などのJavaScript処理で、JISコードの扱いがうまくないのが原因のようです。再読み込みさせればちゃんと見えると思います。
cgi-lib.pl: Unknown Content-type: application/x-www-form-urlencoded; charset=iso-2022-jp
と出てチェックできません。一部のユーザエージェント(Lynx2.8jなど)が、フォームの送出に際してこのようなContent-typeを送出するようで、cgi-lib.plを利用しているとこのような症状が出るようです。cgi-lib.plをパッチするか、Content-typeに charset=iso-2022-jp を付けないようにLynxを改造してください。
CGI.pmではこのようなことはないようです。
Another HTML-lint 5 は、CGIとして次のように動作します。
- 指定されたURLに対応するリソースを取得し、それをワークファイルに保存します。ファイルサイズには上限を設けています。
- データ領域に直接指定されている場合や、クライアント上のファイル名が指定されている場合は、それをワークファイルに保存します。
- URLから取得したものがHTMLでなかった(text/htmlでなかった)場合は、それを消去してエラーとして処理を終えます。
- 取得したファイルを htmllint.pm でチェックします。
- HTML中のリンク先が実存チェックの指定があるときは、そのURLのヘッダ情報を求めます。URLの内容取得は行ないません。
- ワークファイルを消去します。
- 結果を返します。
秘密のURLを指定してチェックを行なえば、サーバはそれを知り得ます。ログにも残ります。具合の悪いときは、ローカルなサーバを用意するなどしてください。 また、ゲートウェイである htmllint.html/htmllinte.html は、JavaScriptを利用してクッキーを操作します。この情報はクライアント側でのみ利用するもので、チェックの状態などの保持を行ないます。クッキーを使ってのサーバとのやり取りはありません。
しかし、代替でよそ様のサーバへアクセスする性格上、不正アクセスの踏み台とされ得ます。 DoSアタックやパスワードファイルの参照要求などさまざまな不正が考えられます。Ringでは逐次セキュリティ強化対策を行なっています。
プロトコルが全然違うので、ちょっと難しいです。 データ領域指定などだけなら可能かもしれません。
Another HTML-lint 5は、石野恵一郎氏によるAnother HTML-lintをベースに、ハートコア株式会社(旧:株式会社ジゾン)がHTML5に対応させました。基本的なロジックやHTML5以外のチェック機能は従来のAnother HTML-lintを利用しており、ハートコア株式会社ではプログラムの一般公開は行っておりません。
HTML5には対応していませんが、元となるAnother HTML-lintではプログラムを公開しています。 商用利用については、石野氏のサイトをご確認ください。