HyperText Markup Language

HTMLまたはHyperText Markup Language（ハイパーテキスト マークアップ ランゲージ）は、ハイパーテキストを記述するためのマークアップ言語の1つで、プログラミング言語ではない。主にWorld Wide Web（WWW）において、ウェブページを表現するために用いられる。ハイパーリンクや画像等のマルチメディアを埋め込むハイパーテキストとしての機能、見出しや段落といったドキュメントの抽象構造、フォントや文字色の指定などの見た目の指定、などといった機能がある。 ティム・バーナーズ＝リーによってSGMLを元に開発された。1993年に最初のドラフトが公開され、最初期においてはIETFが、1996年以降はW3Cが、2019年以降はWHATWGが規格の策定、仕様公開を行なっている。 HTMLは木構造（入子構造）のマークアップ言語であり、形式言語である。「プレーンテキストの文書を要素で括って意味付け」という一般的な説明は間違いである。「『タグ』と『タグ』で括られたもの全体」が「要素」（element）であり、タグすなわち要素ではない。マークアップ言語としての特徴は、先祖であるSGMLや、兄弟のXMLと共通しているため、以下ではWWWというシステムにおける「ハイパーテキスト記述言語」としての側面についてのみ記述する。 HTMLの要素には、文書を表現するものとしてごく一般的なものである見出し（ヘッドライン、h1〜）、段落（パラグラフ、p）、ハイパーテキストとして特徴的な「アンカー」（a）に関係するもの、画像など（imgなど）の電子メディア的なもの、などがある。また文字色の指定などといった、意味ではなく直接見た目のみを指定するようなものは、近年ではスタイルシートなどに分離するべきとされているが、歴史的事情、及び、スタイルシートよりもこの、HTMLでの記述が簡便になる場合が度々あることから現在でもしばしば使われている。その他主要な要素は、HTMLの要素の記事で解説している。 形式言語として見た場合「構文規則」（あるいは文法）に相当する「スキーマ」は、HTML4まではDTDとして公開され要素ごとに記載することの出来る属性、内容に含むことの出来る要素などが定められていた。HTML 4.01では厳密なもの、HTML 3.2からの移行過渡期のためのもの、フレームを用いた文書のためのものといった3つのDTDが定義されていた。 HTML 3.2では見た目を左右する要素や属性が追加されたがHTMLは本来文書構造を示すためだけにその存在意義があり、それらの要素は目的に反するものとされた。そのため視覚的・感覚的効果を定義する手段としてスタイルシート（一般にはその中のCSS）が考案された。見た目を左右する要素や属性の一部はHTML4以降では非推奨とされており、HTML 4.01 Strictでは定義されていないので使用できない。ただしHTML 4.01 Strictで定義され、非推奨とされない要素や属性の一部にも見た目を左右するものがある。装飾的な視覚表現のためにそれらの要素や属性を用いているのであればその内容に適する要素を用いた上で、スタイルシートで表現を指定するのが望ましいとされている。 2023年4月現在、HTMLの有効な標準仕様は以下の2点である。 下表は失効済みのかつての標準仕様（またはドラフト）の一覧である。 以下、言語仕様については歴史的な経緯など特別な事情がない限り、WHATWGの策定する「HTML Living Standard」を基準に説明を行う。失効済みの仕様については下記「#歴史」の項も参照。 HTMLはドキュメント構造（モデル）、各要素の役割/意味（セマンティクス）、表現する構文（シンタックス）を定義する。 HTMLは要素（Element）の木構造を扱う。各要素は以下の3つから構成される。 要素名 属性（attribute）: 0個以上。属性名と値のペア、値は文字列に限定 子要素: 0個以上 要素が子要素をもつため、総体として要素の木構造でモデル化される。 HTMLを表現するための構文としては、HTML構文（HTML Syntax）およびXML構文（XML Syntax）が存在する。XML構文で記述されたHTMLはかつてXHTMLと呼ばれていたが、現在の仕様ではそのような呼び分けは行わない。また、現在の仕様ではHTML構文の使用が推奨されている。 HTML文書は文書型宣言とHTML要素、そして（任意の）BOM、コメント、空白文字からなる。 HTML構文の場合、要素は <要素名 属性名=値>コンテンツ</要素名> というテキスト形式で記述される。コンテンツを挟む <要素名>...</要素名> はタグと呼ばれ、前方部分は開始タグ、後方部分は終了タグと呼ばれる。コンテンツ部に子要素をもつことで総体としての木構造が表現される。 注意点として、要素はタグではない。要素は構造上規定される存在であり、構文上の表現であるタグと併記されるものではない。また要素はタグ+コンテンツで表現されるため、タグは要素を表現するものの一部に過ぎない。 HTMLは異なる意味をもつ様々な要素を定義する。各要素では受け入れ可能な属性が定義され、要素の振る舞いを調整できるようになっている。ほとんどの要素では、要素名が機能を指し、属性が自身の特性を指し、子要素が収納される別コンテンツを指す。 例えば <title> はタイトルを意味し、<a> はハイパーテキストアンカーを意味する。<a href="https://example.com"> では href 属性によってリンク先が指定されている。 HTMLは要素のセマンティクスを定義しているに過ぎないので、それを具体的にどう表現・利用するかは利用側に委ねられている。通常はウェブブラウザでの利用が想定されているが、音声対話エージェントが利用するケースもあり得る。 制約検証プロセス 制約検証は、制約検証 API を通じて、単一のフォーム要素、またはフォームレベルの <form> 要素自体に対して行われます。制約検証は以下の方法で行われます。 checkValidity() または メソッドをフォーム関連 DOM インターフェイス (HTMLInputElement, HTMLSelectElement, HTMLButtonElement, HTMLOutputElement, HTMLTextAreaElement) に対して呼び出すことによって、この要素のみの制約を評価し、スクリプトがこの情報を取得できるようにします。 メソッドは、この要素の値が制約に合格するかどうかを論理値で返します。（これはふつう、 CSS 擬似クラスの :valid または :invalid のどちらを適用するかを判断する際に、ブラウザーが呼び出します。）一方、 メソッドはあらゆる制約違反をユーザーに報告します。reportValidity()checkValidity()reportValidity() checkValidity() または メソッドを HTMLFormElement インターフェイスに対して呼び出すことによって。reportValidity() フォーム自身を送信することによって。 checkValidity() を呼び出すことは、制約を静的に検証するといい、 を呼び出したり、フォームを送信したりすることは、制約を対話的に検証するといいます。reportValidity() HTMLで書かれた文書をHTML文書と言い、HTMLでは、まず文書型宣言を書く。HTML構文を用いる場合は文書型宣言を以下の通り書かなければならない。 <!DOCTYPE html> 次にHTML文書の例を挙げる。 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <link rel="author" href="mailto:mail@example.com"> <title lang="en">HyperText Markup Language - Wikipedia</title> </head> <body> <article> <h1 lang="en">HyperText Markup Language</h1> <p>HTMLは、<a href="http://ja.wikipedia.org/wiki/SGML">SGML</a> アプリケーションの一つで、ハイパーテキストを利用してワールド ワイドウェブ上で情報を発信するために作られ、 ワールドワイドウェブの<strong>基幹的役割</strong>をなしている。 情報を発信するための文書構造を定義するために使われ、 ある程度機械が理解可能な言語で、 写真の埋め込みや、フォームの作成、 ハイパーテキストによるHTML間の連携が可能である。</p> </article> </body> </html> このHTML文書は次のような構造を示している。 <!DOCTYPE html>:文書型宣言 このテキストが最新のHTMLであることを示す。 <html lang="ja">:html要素。また、lang="ja"で、言語コードjaの言語が使われていることの明示。 <head>:head要素（この文書のヘッダ情報の明示） <meta ... />:meta要素（文書のメタ情報）。ここでは、charset="UTF-8"で、文字コードが、「UTF-8」であることを示す。 <link ... />要素（他のリソースとの関連を明示。この場合、作者の明示） <title lang="en">:title要素（この文書のタイトル)の明示。また、この部分はenの言語が使われていることの明示。 <body>:body要素（この文書の内容の明示） <article>:article要素（この要素が、記事であることを明示） <h1 lang="en">:h1要素（第一レベル)の見出しを明示。また、lang="en"で、この部分の見出しは enの言語が使われていることを明示。 <p>:p(段落)要素の明示。 <a href="http://ja.wikipedia.org/wiki/SGML/">SGML</a>:a(アンカー)要素（他のリソースへのアンカー)であることの明示。hrefで、「""」内にリンク先のURLを記述する。ちなみに、このURLの場合は、ウィキペディア日本語版のSGMLの記事。 <strong>:strong要素（強い強調であることの明示） タグによって文字列を括ることによりその文字列の意味付けがなされる。ユーザーエージェントはそれを解釈して、例えば h1要素で括られたテキストは「その文書中で最も重要な見出し」という意味を持つようになり、 GUI によるウェブブラウザであれば大きく太字で表示するなどする。また、スタイルシートを用いることで見た目などを指定することができるようになっている。 なお、通常はマークアップ中に改行文字を挿入してもウェブブラウザ上では描画されない。改行を行う場合はbr要素を用いる必要があるが、br要素は本来見た目のためではなく、詩や住所のように実際にコンテンツの一部である改行のためにのみに使用されなければならない。 1989年、CERNのティム・バーナーズ＝リーは、オリジナルのHTML（および多くの関連したプロトコル、HTTPなど）のメモを提案し、1990年5月にコード化した。NEXTSTEPの動作するNeXTcubeワークステーション上で開発された。当時のHTMLは仕様ではなく、直面していた問題を解決するためのツール群であった。直面していた問題とは、ティム・バーナーズ＝リーやその同僚たちがどのように情報や進行中の研究を共有するかということである。彼の成果は後に国際的かつ公開のネットワークの出現として結実し、世界的な注目を集めることになった。 HTMLの初期のバージョンはゆるい文法規則によって定義されており、ウェブ技術になじみのない層に受け入れられる助けとなった。ウェブブラウザはウェブページの意図を推測し、レンダリングを実行するのが一般的であった。やがて公式規格においては厳格な言語構文を作ることを志向するようになっていったが、それに加え、ウェブブラウザの挙動を元に構文エラーの取り扱いも規格に含めることで、既存のウェブページに対する互換性の維持が図られている。 HTMLが公式な仕様として定義されたのは1990年代からである。それは従来のマークアップ言語であるSGMLに、インターネットのためのハイパーテキストの機能を取り入れるというティム・バーナーズ＝リーの提案に大きく影響を受けたものだった。 1993年にはIETFからHTML仕様書バージョン1.0が公開され、SGMLからの拡張として文法定義のDTDを持つようになった。また1994年にIETFのHTMLワーキンググループが発足した。しかし、2.0以降のIETFの元での開発は他の開発との競合から停滞した。1996年からはW3Cによって商用ソフトウェア・ベンダーからの支援も受け、HTMLの仕様が標準化されている。また2000年からは国際標準ともなった（ISO/IEC 15445:2000）。W3Cから勧告された最新のHTML仕様はHTML 5.2である。 1993年6月に、IETFのIIIR Workingグループより提出されたHTML仕様書がインターネット・ドラフトとして発表された。本来はバージョン番号が付いていないが通常HTML 1.0と呼ぶ。このドラフトはティム・バーナーズ＝リーおよびダニエル・コノリーによって、ティム・バーナーズ＝リーの出したHTML Design Constraintsに極力従うように書かれた。 1993年11月に、HTMLの上位互換な HTML+が発表された。テーブルなどが追加になっている。HTML+仕様書。 1995年11月に、IETFのHTMLワーキンググループによってRFC 1866 （日本語訳）として仕様が発表された。下記の補助的なRFCもリリースされた。HTML 2.0はRFC 2854によって廃止されHTMLはIETFではなくW3Cが管理することとなった。 1995年11月：フォームベースのファイルアップロード。RFC 1867 1996年5月：テーブル。RFC 1942 1996年8月：クライアントサイドイメージマップ。RFC 1980 1997年1月：HTMLの国際化。RFC 2070（非公式な日本語訳）。「HTML i18n」とも呼ばれる。日本語を扱えるHTMLのバージョンとしては、最も古い。 HTML 3.0は策定作業が行われたが、ドラフトの段階で策定途中に破棄された。HTML 3.0仕様書。 1997年1月14日に、HTML 3.2がW3C勧告として仕様が発表された。HTML 3.2 Reference Specification（非公式な日本語訳）。 1997年12月18日に、W3C勧告としてHTML 4.0の仕様が発表された。HTML 4.0は1998年4月24日に仕様が改訂された。この仕様にいくらかのマイナーな修正が加えられたHTML 4.01は1999年12月24日にW3C勧告となった。Strict DTDの他にHTML 3.2からの移行過渡期のためのTransitional DTDとフレームを使うことのできる Frameset DTDの3つのスキーマを持つ。 この後、HTML 4.01をベースとしてXHTML 1.0が策定されることになる。 2018年3月28日に代替された勧告に指定され、最新の勧告を参照することを推奨されている。 HTML 4.0 Specification HTML 4.0 Specification (revised) 日本規格協会による和訳を原案とする経済産業省の標準情報 TR X 0033:2002 HTML 4.01 Specification 内田明らによる和訳 ISO/IEC JTC 1による規格。HTML 4.01を参考にし、より厳密に規格化された。これは2000年に翻訳されJIS X 4156:2000というJIS規格になった。 ISO/IEC 15445:2000は2003年に訂正版が発行された（ただし訂正なので、その後も名称はISO/IEC 15445:2000のまま）。JIS X 4156は2005年に改正され、JIS X 4156:2005（日本産業標準調査会、経済産業省）となっている。 その後、HTMLの改良にW3Cが興味を示さなかったことから、2004年にWHATWGが開発を開始した。2007年には、W3Cもワーキンググループを設立し、WHATWGと共同での開発が始まった。しかし、2012年7月、両者は別個に作業する体制となった。WHATWGの仕様策定はHTML Living Standard（英語版）として継続している。 2014年10月28日にHTML5がW3Cより勧告された。ブログや記事向けの「article」要素やマルチメディアのための「audio」および「video」要素などをはじめとした新要素・属性が追加され、以前は見た目を規定していた要素の殆どは変更または削除された。2016年11月1日に HTML 5.1が勧告され、2017年12月14日に HTML 5.2が勧告された。 HTML5関連仕様のメモ HTML5.JP W3CによるHTML5～HTML 5.2は、WHATWGのHTML Living Standardを元に編集が加えられたものであり、HTML Living Standardとの差異が発生している状態となっていた。これについてWHATWGのIan Hickson（英語版）がW3C側を強く非難する事態となっている。W3CはHTML 5.3への作業を進められていたものの、2019年のWHATWGとの合意により、取りやめている。 HTML Living Standardは WHATWGが更新し続けている HTMLの最新仕様。2019年まではW3CのHTML5～HTML 5.2と並行して仕様策定が進められている状態だった。これを元にしてW3Cの勧告が作られていた。