web-dev-qa-db-ja.com

HTMLで厳密な解析が選択されなかったのはなぜですか?

HTMLを作成するときに厳密な解析が選択されなかった理由をよく疑問に思いました。ほとんどのインターネットの歴史において、ブラウザはあらゆる種類のマークアップを受け入れ、それを解析するために最善を尽くしてきました。このプロセスにより、パフォーマンスが低下し、意味不明な記述が可能になり、古い機能を中止することが難しくなります。

HTMLが厳密に解析されない特定の理由はありますか?

38
Shubham

その理由は単純です。最初のグラフィカルブラウザー、NCSA Mosiac、およびその後のNetscape Navigatorの当時、ほとんどすべてのHTMLは手動で作成されていました。ブラウザの作者(Netscapeは元のモザイクの人々によって作成されました)は、正しくないHTMLのレンダリングを拒否することは、ユーザーによって阻止されることをすぐに認識し、そしてvoila!

39
Ross Patterson

ブラウザメーカーの観点から、最良の推測を行うことが正しいことであるためです。状況を考慮してください。理想的には、受け取るHTMLは完全に正しく、仕様どおりです。それは素晴らしいことです。しかし、興味深い部分は、HTMLがnotであるときに何が起こるかです。私たちは影響を与えないソースからの入力を扱っているので、実際には、これに備える必要があります。それが起こったとき、私たちは何ができますか? a)失敗する、b)エラーから回復するために最善の努力をするという2つのオプションがあります。失敗した場合、ユーザーには役に立たないエラーメッセージしか表示されず、サーバーを制御できないため、ユーザーにできることは何もありません。私たちが最善を尽くす場合、ユーザーは少なくともページに対して何ができるかを理解しており、ほとんどの場合、推測は正しいです。

これの唯一の本当の問題は必要エラーメッセージであり、これは通常開発状況にあります-生成したHTMLが正しいことを確認したい場合、そして「ブラウザーXで動作する」ので「正しい」と同等ではないので、ブラウザーで実行して機能するかどうかを確認することはできません。ブラウザーが修正した正しいHTMLと間違ったHTMLの違いはわかりません。ただし、これは解決可能な問題です。標準違反を報告するブラウザプラグイン、W3Cバリデーター、その他多くの同様のツールがあります。

35
tdammers

HTML作成者と作成ツールは、安っぽいマークアップを生成します。ブラウザーは、競争上の理由で最善を尽くします。ほとんどのWebページを妥当な方法でレンダリングできないブラウザーは、ユーザーが拒否します。

プログラミング言語の実装が行うこととはかなり異なります。コンパイラーとインタープリターはプログラマーによって作成されたと想定できるコードを処理しますが、誰もと彼の兄弟は最小限のトレーニングで、またはトレーニングなしでHTMLを作成できます。 HTMLマークアップはある意味でコードですが、プログラミング言語の命令ではなくデータであり、ソフトウェアの(良い)伝統はデータに寛容であることです。

XHTMLは原則として厳格な(XML)構文解析規則を課すため、XMLコンテンツタイプで提供されるXHTMLドキュメントは、XMLの意味で整形式である場合にのみ表示されます。それ以外の場合は、最初のエラーのみがユーザーに通知されます。これはWebオーサリングで人気が高まることはありませんでした。周りのほとんどすべての「XHTML」は、text/htmlとして提供され、非常に寛大な方法で従来のタグスープとして処理されます。

17

要するに、HTMLは、ドキュメントやマニュアルなどでよく使用されるSGMLと呼ばれるハイパーリンクされていない別のマークアップ言語に基づいていたということです。

HTMLの歴史について 記事 から:

Timは、初期のHTMLドキュメントの一部はCERNがすでに使用していた古いSGML言語に基づいていたと述べていました:-HTMLには、CERNで使用され、かつてCERGでサポートされていたSGMLタグセットの一部のタグが含まれています[...]HTMLパーサーは、理解できないタグを無視し、CERN-SGMLタグを理解しない属性を無視します。

[...]初期のHTMLタグのほとんどは、実際にはCERN SGMLGuid言語から取得されたもので、それ自体がAAP(初期SGML言語)のバリアントでした。たとえば、title、hn、p、olなどはすべてこの言語から取得されたようです。唯一の根本的な変更は、すべての重要なアンカー()リンクの追加でした。これがなければ、WWWは離陸しませんでした。

私が太字にした部分に注目すると、基本的には、使い慣れたSGMLシステムで使用可能なタグのサブセットを実装し、新しいアンカー<a>タグを追加しました。そして、彼らが気にしていないか、または理由もなくサポートしたい多くのタグ(参考文献リストのタグ、「例」のxmp、テキストのブロックの周りにボックスを描画するための「box」タグなど)を無視することを選択し、等)。したがって、これを行う最も簡単な方法は、パーサーに認識されていないマークアップを許容し、原因がユーザーの入力した不正なマークアップであるか、既存のドキュメントを最も簡単に変換する最も簡単な方法であるかにかかわらず、不明なマークアップをできるだけ無視することですこの新しいHTML形式は、既存のSGMLドキュメントにいくつかのハイパーリンクを追加し、サポートまたは実装されていないタグを無視します。

9
Jessica Brown

これは部分的にはブラウザ戦争の歴史的な名残です

IEとnetscapeは市場を引き継ぐために競争しており、ますます「すごい」になり続ける新機能をリリースし続け、他のブラウザー用に設計されたページを受け入れることを余儀なくされました。

これは、委員会が関与し始めた後、ブラウザーが未知のタグを黙って受け入れ、無視することを意味します...まあ、あなたは committee designing stuff を持ち、その結果、多くの異なるバージョン(あいまいな言葉の仕様)があります。ブラウザーがそれらのほとんどをサポートする必要がある場合、バージョンごとに個別のパーサーを作成するのは非常に肥大化します。したがって、異なるモードで単一のパーサーを使用する方が(比較的)簡単です。

別の部分では、netscapeとIEは、一般の人が(当時の流行であったように)HTMLにアクセスできることを望んでいました。つまり、ユーザーが言ったことではなく、ユーザーがやりたいことを実行しようとしました。ぶら下がっているすべてのタグをトリップします。

問題をさらに悪化させるのは、間違った事柄を教え、彼らが正しいことが正しいと考える「チュートリアル」サイトもいくつかあるということです。

最終的にこれは、厳密なhtmlのみを解析して、99%のサイトを解析するブラウザーを作成した場合、機能しないことを意味します。

5
ratchet freak

さて、000年代にニースの厳密なオプションを設定しようとしましたが、「ベストプラクティス」を盲目的に実行している人々が、不適切なマークアップが厳密モードで断片化されたときにブラウザーを非難したため、うまくいきませんでした。そして、ブラウザベンダーは非難されることを好まなかった。

彼らは、専門家ではない人がWebにもっとアクセスできるようにしたかったが、誰もが最も寛容な形式のHTML 4の使用を止められなかったからだと主張しました。

とはいえ、厳密なスタイルのレイアウトが必要な場合でも、HTML5をXMLとして提供できます。 IMOこれは、実際のリスクなしで厳格にしたい、または望まない可能性がある他の人に渡す前に、より厳密なモードでレイアウトまたはUI作業を行う利点を享受する良い方法になる可能性があります(Doctypeを取り除いてしまうため、彼らは実際には奇妙なモードを支持しています-2017年(この編集の時点)に撮影する必要があります。したがって、基本的にはまだありますが、いくつかの調査を行います。XHTMLにはなかった、XHTMLにはなかった警告があったことを覚えているようですレイアウト作業に本当に影響します。「正しく実行するための唯一の方法」であるというWordを広めないでください。そうしないと、その種の話に賛同するツイットがアイデアを混乱させ、ブラウザーのせいにします。私たちが残した唯一の厳密な代替案のうち(2017年の編集:これがまだ機能するかどうかわかりません-あきらめました)

http://mathiasbynens.be/notes/xhtml5

2
Erik Reppen