1 イントロダクション(1.7節〜1.8節)


1.7 設計に関するメモ

HTML5 は、一見すると多くの面で支離滅裂で一貫性がないように見えるということは認めざるを得ません。

HTML とそれを支える DOM API、そして同様にそれを支える技術は、お互いの存在を知らない様々な優先順位を持った様々な人々によって何十年もかけて開発されてきました。

機能はこのように様々なところから発生したものであり、いつも特に一貫性を持って設計されてきたわけではありません。 さらに、Web 固有の性質により、実装上のバグがあっても、それらが修正される前にコンテンツの方が意図せずそれらのバグに依存する形で記述されるため、しばしばそれらのバグがデファクト・スタンダードになり、最終的に正式な標準になったりしています。

このような状況にもかかわらず、ある程度の設計上の目標を固守する努力がなされてきました。それらの目標は次の節で説明されています。

1.7.1 スクリプトの実行の直列化可能性

Web 制作者からマルチスレッド処理の複雑さを隠すために、HTML と DOM API はスクリプトが他のスクリプトが同時に実行されることを感知できないように設計されています。 Workers でさえ、実装の挙動が全ての ブラウジング・コンテキスト において全てのスクリプトの実行が完全に直列化していると見なせるようにするという意図があります。

注: navigator.yieldForStorageUpdates() メソッドは、このモデルにおいて、スクリプトの呼び出し側がブロックされている間に他のスクリプトの実行を許可することと同等です。

ここに出てくる「Workers」というのは、JavaScript で並列処理を実現する仕様である「Web Workers」の事ですね。

1.7.2 他の仕様との整合性

本仕様は、その他の様々な仕様と互いに影響し合い、依存し合っています。 残念な事に、特定の状況においては、これらの他の仕様の要件に違反する相反した要求が本仕様にもたらされています。このような事が発生した場合、それぞれの違反は「故意の違反」と記され、違反の理由が説明されています。

1.8 HTML vs XHTML

この仕様はドキュメントとアプリケーションを記述するための抽象言語を定義しており、この言語を使用するリソースのメモリ内の表現と相互作用するAPIもあります。

メモリ内の表現は「DOM HTML」あるいは単に「DOM」として知られています。

この抽象言語を使用するリソースを送信するために使用できるいくつかの具体的な構文がありますが、この仕様ではそのうちの2つが定義されています。

そのような具体的な構文の一つは HTML 構文です。こちらがほとんどの著者に推奨される形式です。 HTML 構文はほとんどのレガシーなブラウザと互換性があります。 もしドキュメントが text/htmlMIME形式
で送信される場合、それは Web ブラウザによって HTML ドキュメントとして処理されます。 この仕様では、単に「HTML」として知られる、最新の HTML 構文を定義します。

2つめの具体的な構文は XHTML 構文です。 これは HTML に XML を適用したものです。 ドキュメントが application/xhtml+xml のような XML MIME 型で送信された場合、それは Web ブラウザによって XML ドキュメントとして処理され、XML プロセッサによって解析されます。 Web 制作者は、XML と HTML の処理が異なる事に注意する必要があります。 特に、XML と指定されているドキュメントでは、ちょっとした文法ミスがあるだけでページ全体が表示されなくなってしまいますが、HTML の場合はそのような文法ミスは無視されるといった違いがあります。 本仕様では、「XHTML5」として知られる XHTML のバージョン 5 を定義します。

DOM、HTML 構文、XHTML 構文は、全て同じコンテンツを表現できるわけではありません。 例えば、名前空間は HTML 構文では表現できませんが、DOM と XHTML では利用できます。 同様に、noscript の機能は HTML では表現できますが、DOM や XHTML では表現できません。 「-->」という文字列を含むコメントは、DOM でのみ表現でき、HTML や XHTML 構文では表現できません。

HTML イントロダクション 1.9節

Leave a Reply