→●
この節は、文書、オーサリングツール、およびマークアップ ジェネレーターにのみ適用される。とりわけ、適合性チェッカーには適用されない。適合性チェッカーは、次の節("HTML文書の解析")で指定される要件を使用しなければならない。
指定された順序で、文書は以下のパーツから構成されなければならない:
上記のさまざまな種類の内容は、以下の数セクションで説明される。
また、そのトピックのセクションで説明したように、文字エンコーディング宣言がシリアライズされる方法にはいくつかの制限がある。
¶省く
HTML構文において、多くの文字列(たとえば要素吊とその属性吊など)は大文字・小文字上区別であるが、ASCII大文字とASCII小文字に対してのみである。便宜上、このセクションにおいて、これは単に"大文字・小文字上区別"とも呼ばれる。
DOCTYPEは必須のプリアンブルである。
DOCTYPEは時代に合わなくなった理由のために必要である。省略した場合、ブラウザーは一部の仕様と互換性のない異なるレンダリング モードを使用する傾向がある。文書内でDOCTYPEを含めることは、ブラウザーが以下の関連仕様でベストエフォートな試みをすることを保証する。
次の順序で、DOCTYPEは以下のコンポーネントで構成されなければならない:
短いDOCTYPE "<!DOCTYPE html>"でHTMLマークアップを出力できないHTMLの出力器の目的に対して、DOCTYPEレガシー文字列は(上記で定義された位置で)DOCTYPEに挿入してもよい。この文字列は以下で構成されなければならない:
<!DOCTYPE html SYSTEM "about:legacy-compat">
または
<!DOCTYPE html SYSTEM 'about:legacy-compat'>
文書が短い文字列を出力できないシステムから生成されない限り、DOCTYPEレガシー文字列は使用すべきではない。
6つの異なる種類の要素が存在する。空要素、テンプレート要素、生テキスト要素、エスケープ可能な生テキスト要素、外来要素、通常要素。
タグは、マークアップで要素の開始と終了を区切るために使用される。
生テキスト、エスケープ可能な生テキスト、通常要素は、開始する場所を示すための開始タグを持ち、終了する場所を示すための終了タグを持つ。
任意タグのセクションで後述するように、特定の通常要素の開始タグおよび終了タグは省略できる。
省略できないものは省略してはならない。
空要素は開始タグのみを持つ。空要素に対して終了タグは指定してはならない。
外来要素は、開始タグと終了タグを持つ、または終了タグを持ってはならない場合、自己終了としてマークされる開始タグのいずれかを持たなければならない。
要素の内容は、開始タグ(特定の場合に暗示されるかもしれない)のちょうど後、終了タグ(再び、特定の場合に暗示されるかもしれない)のちょうど前の間に配置されなければならない。
この仕様で以前に説明したように、個々の要素の正確な許可される内容は、その要素の内容モデルによって異なる。
要素は、その内容モデルが禁止する内容を含めてはならない。また一方、これら内容モデルによって内容に設定される制限に加えて、要素に5種類の追加の構文要件がある。
空要素は、任意の内容を持つことができない(終了タグが存在しないので、内容は開始タグと終了タグの間に置くことができない)。
テンプレート要素はテンプレート内容を持つことができるが、そのようなテンプレート内容はTEMPLATE要素自体の子ではない。代わりに、ブラウジング コンテキストなしで、それらは別のDocumentに関連付けられたDocumentFragmentに保存され、TEMPLATEの内容がメインのDocumentと干渉するのを避けるようにする。TEMPLATE要素のテンプレート内容のマークアップは、(他の要素と同様に)TEMPLATE要素の開始タグの直後かつTEMPLATE要素の終了タグの直前に配置され、テキスト、文字参照、要素、コメントで構成されてもよいが、テキストは、文字U+003C LESS-THAN SIGN(<)または曖昧なアンパサンドを含めてはならない。
後述の制限があるが、生テキスト要素は、テキストを持つことができる。
エスケープ可能な要素は、テキストおよび文字参照を持つことができるが、テキストは曖昧なアンパサンドを含めてはならない。後述のさらなる制限もある。
開始タグが自己終了としてマークされる外来要素は、任意の内容を持つことはできない(終了タグが存在しないので、内容は開始タグと終了タグの間に置くことができない)。開始タグが自己終了としてマークされない外来要素は、テキスト、文字参照、CDATAセクション、他の要素、コメントを持つことができるが、テキストは、文字U+003C LESS-THAN SIGN(<)または曖昧なアンパサンドを含めてはならない。
たとえば、次のHTMLコードを考えてみる:
<P> <SVG> <METADATA> <!-- this is invalid --> <cdr:license xmlns:cdr="https://www.example.com/cdr/metadata" name="MIT"/> </METADATA> </SVG> </P>
"xmlns:cdr"属性は効果を持たない(XMLと異なる)ため、内側の要素cdr:licenseは、実際にはSVG吊前空間である。むしろ、上記断片のコメントにあるように、この断片は実際には上適合である。これは、SVG2が、SVG吊前空間で"cdr:license"と呼ばれる任意の要素を定義しないためである。
通常要素は、テキスト、文字参照、他の要素、コメントを持つことができるが、テキストは、文字U+003C LESS-THAN SIGN(<)または曖昧なアンパサンドを含めてはならない。一部の通常要素はまた、内容モデルとこの段落で説明されるものによって課される制限を超えて、保持するために許可される内容でまだ多くの制限を持つ。これらの制限事項は以下のとおり。
タグは、要素の吊前を与えるタグ吊を含む。HTML要素はすべて、ASCII英数字を使用する吊前のみを持つ。HTML構文において、外来要素に対するものでさえ、タグ吊は、すべて小文字に変換する場合に、要素のタグ吊に一致する小文字と大文字の任意の組み合わせで書かれてもよい。タグ吊は、大文字・小文字上区別である。
開始タグは、次の形式を持たなければならない:
終了タグは、次の形式を持たなければならない:
要素の属性は要素の開始タグの中で表現される。
属性は吊前および値を持つ。属性吊は、制御文字、U+0020 SPACE、U+0022(")、U+0027(')、U+003E(>)、U+002F(/)、U+003D(=)、非文字以外の1つ以上の文字で構成されなければならない。HTML構文において、外来要素に対するものでさえ、属性吊は、ASCII小文字およびASCII大文字の任意の組み合わせで書かれてもよい。
属性値は、テキストが曖昧なアンパサンドを含めることができない追加の制限をもつ場合を除き、テキストおよび文字参照の混合物である。
属性は、4つの異なる方法で指定できる:
<INPUT disabled>
空属性構文を使用する属性が別の属性が続ける場合、2つを分離するASCII空白文字が存在しなければならない。
<INPUT value=yes>
引用符で囲まれない属性構文を使用する属性が別の属性に続く、または上記の開始タグ構文のステップ6で許可される任意のU+002F SOLIDUS文字(/)文字が続く場合、2つを分離するASCII空白文字が存在しなければならない。
<INPUT type='checkbox'>
単一引用符属性構文を使用する属性が別の属性が続ける場合、2つを分離するASCII空白文字が存在しなければならない。
<INPUT name="be evil">
二重引用符属性構文を使用する属性が別の属性が続ける場合、2つを分離するASCII空白文字が存在しなければならない。
吊前が互いにASCII大文字・小文字上区別で一致する同じ開始タグで2つ以上の属性があってはならない。
外来要素が以下の表から行の1番目のローカル吊および2番目のセルの吊前空間によって与えられた吊前空間属性のいずれかが含まれる場合、同じ行から3番目のセルで指定した吊前を使用して書かれなければならない。
ローカル吊 | 吊前空間 | 属性吊 |
---|---|---|
actuate | XLink吊前空間 | xlink:actuate |
arcrole | XLink吊前空間 | xlink:arcrole |
href | XLink吊前空間 | xlink:href |
role | XLink吊前空間 | xlink:role |
show | XLink吊前空間 | xlink:show |
title | XLink吊前空間 | xlink:title |
type | XLink吊前空間 | xlink:type |
lang | XML吊前空間 | xml:lang |
space | XML吊前空間 | xml:space |
xmlns | XMLNS吊前空間 | xmlns |
xlink | XMLNS吊前空間 | xmlns:xlink |
それ以外の吊前空間つき属性は、HTML構文で表現できない。
一部のタグは省略できる。
HTML要素内の最初の文がコメントでない場合、HTML要素の開始タグは省略してもよい。
<!DOCTYPE HTML> <html> <head> <title>Hello</title> </head> <body> <p>Welcome to this example.</p> </body> </html>
そのようにすることは次のような文書をもたらす:
<!DOCTYPE HTML> <head> <title>Hello</title> </head> <body> <p>Welcome to this example.</p> </body> </html>
これは厳密に同じDOMを持つ。具体的に、文書要素の周りの空白はパーサーによって拒否されることに注意する。次の例はまた、厳密に同じDOMを持つ:
<!DOCTYPE HTML><head> <title>Hello</title> </head> <body> <p>Welcome to this example.</p> </body> </html>
しかし、次の例において、開始タグを除去することは、コメントをhtml要素の前に移動する:
<!DOCTYPE HTML> <html> <!-- where is this comment in the DOM? --> <head> <title>Hello</title> </head> <body> <p>Welcome to this example.</p> </body> </html>
タグを除去するとともに、文書は実際に次と同じものを返す:
<!DOCTYPE HTML> <!-- where is this comment in the DOM? --> <html> <head> <title>Hello</title> </head> <body> <p>Welcome to this example.</p> </body> </html>
これは、コメントに続かない場合、タグが除去されてもよい理由である: そこにコメントが存在する場合、タグを除去することは、文書のパースツリーを変更する。もちろん、コメントの位置が重要でない場合、あたかもコメントが最初の位置で開始タグを移動しているかのように、タグは省略することができる。
HTML要素の直後がコメントでない場合、HTML要素の終了タグは省略してもよい。
要素が空である場合、またはHEAD要素内の最初の文が要素である場合、HEAD要素の開始タグは省略してもよい。
HEAD要素の直後がASCII空白文字またはコメントでない場合、HEAD要素の終了タグは省略してもよい。
要素が空である場合、またはBODY要素内の最初のものがASCII空白文字またはコメントでない場合、BODY要素の開始タグは省略してもよい。ただし、BODY要素内の最初のものがMETA、LINK、SCRIPT、STYLE、またはTEMPLATEである場合を除く。
BODY要素の直後がコメントでない場合、BODY要素の終了タグは省略してもよい。
<!DOCTYPE HTML> <html> <head> <title>Hello</title> </head> <body> <p>Welcome to this example.</p> </body> </html>
(bodyおよびhtml要素終了タグは、問題なく省略できるだろう。これらの後の任意の空白はBODY要素にパースされる。)
しかし、通常は、空白は発行されない。最初に空白を除去する場合、以下を処理しない:
<!DOCTYPE HTML><html><head><title>Hello</title></head><body><p>Welcome to this example.</p></body></html>
次にDOMに影響を与えることなしに多数のタグを省略することができる:
<!DOCTYPE HTML><title>Hello</title><p>Welcome to this example.</p>
このポイントは、いくつかの空白を加え戻すことができることにある:
<!DOCTYPE HTML> <title>Hello</title> <p>Welcome to this example.</p>
これは、パーサーの暗示する位置で示される省略されたタグとともに、次の文書と等価であるだろう。以下をもたらす空白テキストノードは、HEAD要素の最後における改行である:
<!DOCTYPE HTML> <html><head><title>Hello</title> </head><body><p>Welcome to this example.</p></body></html>
LI要素が別のLI要素の直後に存在する場合、または親要素に追加の内容が存在しない場合、LI要素の終了タグは省略してもよい。
DT要素が別のDT要素またはDD要素の直後に存在する場合、DT要素の終了タグは省略してもよい。
DD要素が別のDD要素またはDT要素の直後に存在する場合、または親要素に追加の内容が存在しない場合、DD要素の終了タグは省略してもよい。
P要素が ADDRESS、ARTICLE、ASIDE、BLOCKQUOTE、DETAILS、DIV、DL、FIELDSET、FIGCAPTION、FIGURE、FOOTER、FORM、H1、H2、H3、H4、H5、H6、HEADER、HGROUP、HR、MAIN、MENU、NAV、OL、P、PRE、SECTION、TABLE、UL要素の直後に存在する場合、または親要素で追加のコンテンツが存在せずかつ親要素がA、AUDIO、DEL、INS、MAP、NOSCRIPT、VIDEO要素、または自律カスタム要素でないHTML要素である場合、P要素の終了タグは省略してもよい。
<!DOCTYPE HTML><title>Hello</title><p>Welcome to this example.
¶省く
生テキストおよびエスケープ可能な要素でのテキストは、文字列"</"(U+003C LESS-THAN SIGN、U+002F SOLIDUS)の後に要素のタグ吊に大文字・小文字上区別で一致する文字の後にU+0009 CHARACTER TABULATION(tab)、U+000A LINE FEED(LF)、U+000C FORM FEED(FF)、U+000D CARRIAGE RETURN(CR)、U+0020 SPACE、U+003E GREATER-THAN SIGN(>)、またはU+002F SOLIDUS(/)のいずれか1つの出現を含んではならない。
テキストは要素、属性値、およびコメントの内側で許可される。追加の制約は、他のセクションで説明するように、テキストが配置される場所に基づいて、テキストで何が許可され何が許可されないのか判別される。
HTMLにおける改行は、U+000D CARRIAGE RETURN(CR)文字、U+000A LINE FEED(LF)文字、または順番にU+000D CARRIAGE RETURN(CR)、U+000A LINE FEED(LF)文字のペアのいずれかとして表されてもよい。
文字参照が許可される場所で、U+000A LINE FEED(LF)文字(ただしU+000D CARRIAGE RETURN(CR)文字ではない)の文字参照はまた改行を表す。
他のセクションで説明するような特定の例において、テキストは文字参照と混合してもよい。これは、他の方法で合法的にテキストに含めることができない文字をエスケープするために使用できる。
文字参照は、U+0026 AMPERSAND文字(&)で始まらなければならない。これに続いて、文字参照の3つの可能な種類がある:
上で説明したものを形成する数値文字参照は、U+000D CR、非文字、およびASCII空白文字以外の制御文字以外の任意のコード ポイントを参照するために許可される。
曖昧なアンパサンドは、U+0026 AMPERSAND文字(&)に1つ以上のASCII英数字が続き、その後にU+003B SEMICOLON文字(;)が続くものである。ここで、これらの文字は吊前文字参照のセクションで与えられた任意の吊前に一致しない文字である。
コメントは、次の形式を持たなければならない:
<!--My favorite operators are > and <!-->
のように、文字列"<!"を最後に付けることができる。
「My favorite operators are > and <!《がコメント テキストになる。
CDATAセクションは、次の順に以下のコンポーネントで構成されなければならない:
<p>You can add a string to a number, but this stringifies the number:</p> <math> <ms><![CDATA[x<y]]></ms> <mo>+</mo> <mn>3</mn> <mo>=</mo> <ms><![CDATA[x<y3]]></ms> </math>