1. 12 HTML構文
    1. 12.1 HTML文書を記述する
      1. 12.1.1 DOCTYPE
      2. 12.1.2 要素
        1. 12.1.2.1 開始タグ
        2. 12.1.2.2 終了タグ
        3. 12.1.2.3 属性
        4. 12.1.2.4 任意のタグ
        5. 12.1.2.5 コンテンツモデルの制約
        6. 12.1.2.6 生テキストおよびエスケープ可能な生テキスト要素のコンテンツの制約
      3. 12.1.3 テキスト
        1. 12.1.3.1 改行
      4. 12.1.4 文字参照
      5. 12.1.5 CDATAセクション
      6. 12.1.6 コメント

12 The HTML syntax

このセクションは、HTML MIMEタイプで標識されたリソースのための規則のみを説明する。Rules for XML resources are discussed in the section below entitled "The XML syntax".

12.1 HTML文書を記述する

この節は、文書、オーサリングツール、およびマークアップジェネレータにのみ適用される。とりわけ、適合性チェッカーには適用されない。適合性チェッカーは、次の節("HTML文書の解析")で指定される要件を使用しなければならない。

指定された順序で、文書は以下のパーツから構成されなければならない。

  1. 任意で、単一のU+FEFF BYTE ORDER MARK(BOM)文字。
  2. 任意の数のコメントおよびASCII空白文字
  3. DOCTYPE
  4. 任意の数のコメントおよびASCII空白文字
  5. html要素の形式で、文書要素
  6. 任意の数のコメントおよびASCII空白文字

上記のさまざまな種類のコンテンツは、以下の数セクションで説明される。

また、そのトピックのセクションで説明したように、文字エンコーディング宣言がシリアライズされる方法にはいくつかの制限がある。

ASCII whitespace before the html element, at the start of the html element and before the head element, will be dropped when the document is parsed; ASCII whitespace after the html element will be parsed as if it were at the end of the body element. Thus, ASCII whitespace around the document element does not round-trip.

これは、改行がDOCTYPEの後、文書要素の前にある任意のコメントの後、(省略されていない場合)html要素の開始タグの後、およびhead要素の前を除くhtml要素の内部にある任意のコメントの後に挿入されることが示唆される。

Many strings in the HTML syntax (e.g. the names of elements and their attributes) are case-insensitive, but only for ASCII upper alphas and ASCII lower alphas. 便宜上、このセクションにおいて、これは単に"大文字・小文字不区別"とも呼ばれる。

12.1.1 DOCTYPE

DOCTYPEは必須のプリアンブルである。

DOCTYPEは時代に合わなくなった理由のために必要である。省略した場合、ブラウザーは一部の仕様と互換性のない異なるレンダリングモードを使用する傾向がある。文書内でDOCTYPEを含めることは、ブラウザーが以下の関連仕様でベストエフォートな試みをすることを保証する。

次の順序で、DOCTYPEは以下のコンポーネントで構成されなければならない:

  1. "<!DOCTYPE"に一致するASCII大文字・小文字不区別の文字列。
  2. One or more ASCII whitespace.
  3. "html"に一致するASCII大文字・小文字不区別の文字列。
  4. Optionally, a DOCTYPE legacy string.
  5. 0個以上のASCII空白文字
  6. U+003E GREATER-THAN SIGN文字(>)。

言い換えると、大文字・小文字不区別で<!DOCTYPE html>


短いDOCTYPE"<!DOCTYPE html>"でHTMLマークアップを出力できないHTMLの出力器の目的に対して、DOCTYPEレガシー文字列は(上記で定義された位置で)DOCTYPEに挿入してもよい。この文字列は以下で構成されなければならない:

  1. One or more ASCII whitespace.
  2. "SYSTEM"に一致するASCII大文字・小文字不区別の文字列。
  3. One or more ASCII whitespace.
  4. U+0022 QUOTATION MARKまたはU+0027 APOSTROPHE文字(引用符)。
  5. リテラルに文字列"about:legacy-compat"。
  6. U+0022 QUOTATION MARKまたはU+0027 APOSTROPHEに一致する文字(すなわち、前のステップで引用符とラベル付けされたものと同じ文字)。

言い換えると、単一または二重引用符の部分を除いて大文字・小文字不区別で、<!DOCTYPE html SYSTEM "about:legacy-compat">または<!DOCTYPE html SYSTEM 'about:legacy-compat'>

文書が短い文字列を出力できないシステムから生成されない限り、DOCTYPEレガシー文字列は使用すべきではない。

12.1.2 要素

5つの異なる種類の要素が存在する。空要素生テキスト要素エスケープ可能な生テキスト要素外来要素通常要素

空要素
area, base, br, col, embed, hr, img, input, link, meta, param, source, track, wbr
生テキスト要素
scriptstyle
エスケープ可能な生テキスト要素
textareatitle
外来要素
MathML名前空間およびSVG名前空間由来の要素。
通常要素
他の許容されるすべてのHTML要素が通常要素である。

タグは、マークアップで要素の開始と終了を区切るために使用される。生テキストエスケープ可能な生テキスト、および通常要素は、開始する場所を示すための開始タグを持ち、終了する場所を示すための終了タグを持つ。任意タグのセクションで後述するように、特定の通常要素の開始タグおよび終了タグは省略できる。省略できないものは省略してはならない。空要素は開始タグのみを持つ。空要素に対して終了タグは指定してはならない。外来要素は、開始タグと終了タグを持つ、または終了タグを持ってはならない場合、自己終了としてマークされる開始タグのいずれかを持たなければならない。

要素のコンテンツは、開始タグ(特定の場合に暗示されるかもしれない)のちょうど後、終了タグ(再び、特定の場合に暗示されるかもしれない)のちょうど前の間に配置されなければならない。この仕様で以前に説明したように、個々の要素の正確な許可されるコンテンツは、その要素のコンテンツモデルによって異なる。要素は、そのコンテンツモデルが禁止するコンテンツを含めてはならない。また一方、これらコンテンツモデルによってコンテンツに設定される制限に加えて、要素に5種類の追加の構文要件がある。

空要素は、任意のコンテンツを持つことができない(終了タグが存在しないので、コンテンツは開始タグと終了タグの間に置くことができない)。

後述の制限があるが、生テキスト要素は、テキストを持つことができる。

エスケープ可能な要素は、テキストおよび文字参照を持つことができるが、テキストは曖昧なアンパサンドを含めてはならない。後述のさらなる制限もある。

開始タグが自己終了としてマークされる外来要素は、任意のコンテンツを持つことはできない(終了タグが存在しないので、コンテンツは開始タグと終了タグの間に置くことができない)。開始タグが自己終了としてマークされない外来要素は、テキスト文字参照CDATAセクション、他の要素、およびコメントを持つことができるが、テキストは、文字U+003C LESS-THAN SIGN(<)または曖昧なアンパサンドを含めてはならない。

外来要素であっても、HTML構文は、名前空間宣言をサポートしない。

たとえば、次の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名前空間である。むしろ、上記断片のコメントにあるように、この断片は実際には不適合である。これは、SVG仕様が、SVG名前空間で"cdr:license"と呼ばれる任意の要素を定義しないためである。

通常要素は、テキスト文字参照、他の要素、およびコメントを持つことができるが、テキストは、文字U+003C LESS-THAN SIGN(<)または曖昧なアンパサンドを含めてはならない。一部の通常要素はまた、コンテンツモデルとこの段落で説明されるものによって課される制限を超えて、保持するために許可されるコンテンツでまだ多くの制限を持つ。これらの制限事項は以下のとおり。

タグは、要素の名前を与えるタグ名を含む。HTML elements all have names that only use ASCII alphanumerics. HTML構文において、外来要素に対するものでさえ、タグ名は、すべて小文字に変換する場合に、要素のタグ名に一致する小文字と大文字の任意の組み合わせで書かれてもよい。タグ名は、大文字・小文字不区別である。

12.1.2.1 開始タグ

開始タグは、次の形式を持たなければならない:

  1. 開始タグの最初の文字は、U+003C LESS-THAN SIGN文字(<)でなければならない。
  2. 開始タグの次の数文字は、要素のタグ名でなければならない。
  3. If there are to be any attributes in the next step, there must first be one or more ASCII whitespace.
  4. 次に、開始タグは、以下で説明される構文を属性の数だけ持ってもよい。Attributes must be separated from each other by one or more ASCII whitespace.
  5. After the attributes, or after the tag name if there are no attributes, there may be one or more ASCII whitespace. (一部の属性は、スペースが続くことが要求される。下記の属性セクションを参照のこと。)
  6. 次に、要素が空要素のいずれかである、または要素が外来要素である場合、単一のU+002F SOLIDUS文字(/)があってもよい。この文字は、空要素に影響しないが、外来要素で自己終了として開始タグをマークする。
  7. 最後に、開始タグはU+003E GREATER-THAN SIGN文字(>)で閉じなければならない。
12.1.2.2 終了タグ

終了タグは、次の形式を持たなければならない:

  1. 終了タグの最初の文字は、U+003C LESS-THAN SIGN文字(<)でなければならない。
  2. 終了タグの2番目の文字は、U+002F SOLIDUS文字(/)でなければならない。
  3. 終了タグの次の数文字は、要素のタグ名でなければならない。
  4. After the tag name, there may be one or more ASCII whitespace.
  5. 最後に、終了タグはU+003E GREATER-THAN SIGN文字(>)で閉じなければならない。
12.1.2.3 属性

要素の属性は要素の開始タグの中で表現される。

属性は名前および値を持つ。Attribute names must consist of one or more characters other than controls, U+0020 SPACE, U+0022 ("), U+0027 ('), U+003E (>), U+002F (/), U+003D (=), and noncharacters. In the HTML syntax, attribute names, even those for foreign elements, may be written with any mix of ASCII lower and ASCII upper alphas.

属性値は、テキストが曖昧なアンパサンドを含めることができない追加の制限をもつ場合を除き、テキストおよび文字参照の混合物である。

属性は、4つの異なる方法で指定できる:

空属性構文

単に属性名。値は、暗黙的に空文字列である。

次の例において、disabled属性は、空属性構文で与えられる:

<input disabled>

If an attribute using the empty attribute syntax is to be followed by another attribute, then there must be ASCII whitespace separating the two.

引用符で囲まれない属性値構文

The attribute name, followed by zero or more ASCII whitespace, followed by a single U+003D EQUALS SIGN character, followed by zero or more ASCII whitespace, followed by the attribute value, which, in addition to the requirements given above for attribute values, must not contain any literal ASCII whitespace, any U+0022 QUOTATION MARK characters ("), U+0027 APOSTROPHE characters ('), U+003D EQUALS SIGN characters (=), U+003C LESS-THAN SIGN characters (<), U+003E GREATER-THAN SIGN characters (>), or U+0060 GRAVE ACCENT characters (`), and must not be the empty string.

次の例において、value属性は、引用符で囲まれない属性値構文で与えられる:

<input value=yes>

If an attribute using the unquoted attribute syntax is to be followed by another attribute or by the optional U+002F SOLIDUS character (/) allowed in step 6 of the start tag syntax above, then there must be ASCII whitespace separating the two.

単一引用符で囲まれた属性値構文

The attribute name, followed by zero or more ASCII whitespace, followed by a single U+003D EQUALS SIGN character, followed by zero or more ASCII whitespace, followed by a single U+0027 APOSTROPHE character ('), followed by the attribute value, which, in addition to the requirements given above for attribute values, must not contain any literal U+0027 APOSTROPHE characters ('), and finally followed by a second single U+0027 APOSTROPHE character (').

次の例において、type属性は、単一引用符で囲まれた属性値構文で与えられる:

<input type='checkbox'>

If an attribute using the single-quoted attribute syntax is to be followed by another attribute, then there must be ASCII whitespace separating the two.

二重引用符で囲まれた属性値の構文

The attribute name, followed by zero or more ASCII whitespace, followed by a single U+003D EQUALS SIGN character, followed by zero or more ASCII whitespace, followed by a single U+0022 QUOTATION MARK character ("), followed by the attribute value, which, in addition to the requirements given above for attribute values, must not contain any literal U+0022 QUOTATION MARK characters ("), and finally followed by a second single U+0022 QUOTATION MARK character (").

次の例において、name属性は、二重引用符で囲まれた属性値構文で与えられる:

<input name="be evil">

If an attribute using the double-quoted attribute syntax is to be followed by another attribute, then there must be ASCII whitespace separating the two.

名前が互いに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構文で表現できない。

上記の表の属性が適合しているかは、他の仕様(たとえばSVGやMathML仕様など)によって定義される。属性がHTML構文を使用してシリアライズされる場合、このセクションは、構文規則についてのみ説明する。

12.1.2.4 任意のタグ

一部のタグは省略できる。

以下で説明される状況で要素の開始タグを省略することは、要素が存在しないことを意味するものではない。そのように暗示するが、要素は依然としてそこに存在する。たとえば、たとえマークアップのどこにも文字列<html>が出現しない場合でも、HTML文書は常にルートhtml要素を持つ。

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>

This has the exact same DOM. In particular, note that whitespace around the document element is ignored by the parser. 次の例はまた、厳密に同じ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要素の開始タグは省略してもよい。

A head element's end tag may be omitted if the head element is not immediately followed by ASCII whitespace or a comment.

A body element's start tag may be omitted if the element is empty, or if the first thing inside the body element is not ASCII whitespace or a comment, except if the first thing inside the body element is a meta, link, script, style, or template element.

body要素の直前がコメントでない場合、body要素の終了タグは省略してもよい。

Note that in the example above, the head element start and end tags, and the body element start tag, can't be omitted, because they are surrounded by whitespace:

<!DOCTYPE HTML>
<html>
  <head>
    <title>Hello</title>
  </head>
  <body>
    <p>Welcome to this example.</p>
  </body>
</html>

bodyおよびhtml要素終了タグは、問題なく省略できるだろう。これらの後の任意の空白はbody要素にパースされる。)

Usually, however, whitespace isn't an issue. If we first remove the whitespace we don't care about:

<!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>

At that point, we can also add some whitespace back:

<!DOCTYPE HTML>
<title>Hello</title>
<p>Welcome to this example.</p>

This would be equivalent to this document, with the omitted tags shown in their parser-implied positions; the only whitespace text node that results from this is the newline at the end of the head element:

<!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要素がaddressarticleasideblockquotedetailsdivdlfieldsetfigcaptionfigurefooterformh1h2h3h4h5h6headerhgrouphrmainmenunavolppresectiontableul要素の直後に存在する場合、または親要素で追加のコンテンツが存在せずかつ親要素がaaudiodelinsmapnoscriptvideo要素、または自律カスタム要素でないHTML要素である場合、p要素の終了タグは省略してもよい。

このように前の例をさらに単純化することができる:

<!DOCTYPE HTML><title>Hello</title><p>Welcome to this example.</p>

rt要素が別のrtまたはrp要素の直後に存在する場合、または親要素に追加のコンテンツが存在しない場合、rt要素の終了タグは省略してもよい。

rp要素が別のrtまたはrp要素の直後に存在する場合、または親要素に追加のコンテンツが存在しない場合、rp要素の終了タグは省略してもよい。

optgroup要素が別のoptgroup要素の直前に存在する場合、または親要素に追加のコンテンツが存在しない場合、optgroup要素の終了タグは省略してもよい。

option要素が別のoption要素またはoptgroup要素の直前に存在する場合、または親要素に追加のコンテンツが存在しない場合、option要素の終了タグは省略してもよい。

colgroup要素内の最初の文がcol要素である場合、かつ終了タグが省略されている別のcolgroup要素の直前に存在しない場合、colgroup要素の開始タグは省略してもよい。(要素が空である場合、省略できない。)

A colgroup element's end tag may be omitted if the colgroup element is not immediately followed by ASCII whitespace or a comment.

A caption element's end tag may be omitted if the caption element is not immediately followed by ASCII whitespace or a comment.

thead要素がtbodyまたはtfoot要素の直前に存在する場合、thead要素の終了タグは省略してもよい。

tbody要素内の最初の文がtr要素である場合、かつこの要素が終了タグが省略されているtbodythead、またはtfoot要素の直前に存在しない場合、tbody要素の開始タグは省略してもよい。(要素が空である場合、省略できない。)

tbody要素が別のtbodyまたはtfoot要素の直前に存在する場合、または親要素に追加のコンテンツが存在しない場合、tbody要素の終了タグは省略してもよい。

親要素に追加のコンテンツが存在しない場合、tfoot要素の終了タグは省略してもよい。

tr要素が別のtr要素の直前に存在する場合、または親要素に追加のコンテンツが存在しない場合、tr要素の終了タグは省略してもよい。

td要素が別のtdまたはth要素の直前に存在する場合、または親要素に追加のコンテンツが存在しない場合、td要素の終了タグは省略してもよい。

th要素が別のtdまたはth要素の直前に存在する場合、または親要素に追加のコンテンツが存在しない場合、th要素の終了タグは省略してもよい。

これらテーブル関連要素をすべて省略するための能力は、テーブルマークアップをより簡潔にする。

例を取ってみる:

<table>
 <caption>37547 TEE Electric Powered Rail Car Train Functions (Abbreviated)</caption>
 <colgroup><col><col><col></colgroup>
 <thead>
  <tr>
   <th>Function</th>
   <th>Control Unit</th>
   <th>Central Station</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>Headlights</td>
   <td>✔</td>
   <td>✔</td>
  </tr>
  <tr>
   <td>Interior Lights</td>
   <td>✔</td>
   <td>✔</td>
  </tr>
  <tr>
   <td>Electric locomotive operating sounds</td>
   <td>✔</td>
   <td>✔</td>
  </tr>
  <tr>
   <td>Engineer's cab lighting</td>
   <td></td>
   <td>✔</td>
  </tr>
  <tr>
   <td>Station Announcements - Swiss</td>
   <td></td>
   <td>✔</td>
  </tr>
 </tbody>
</table>

The exact same table, modulo some whitespace differences, could be marked up as follows:

<table>
 <caption>37547 TEE Electric Powered Rail Car Train Functions (Abbreviated)
 <colgroup><col><col><col>
 <thead>
  <tr>
   <th>Function
   <th>Control Unit
   <th>Central Station
 <tbody>
  <tr>
   <td>Headlights
   <td>✔
   <td>✔
  <tr>
   <td>Interior Lights
   <td>✔
   <td>✔
  <tr>
   <td>Electric locomotive operating sounds
   <td>✔
   <td>✔
  <tr>
   <td>Engineer's cab lighting
   <td>
   <td>✔
  <tr>
   <td>Station Announcements - Swiss
   <td>
   <td>✔
</table>

この方法ではセルがより少ない空間を占めるため、これは1行で各列を持つことによってより簡単に作成できる:

<table>
 <caption>37547 TEE Electric Powered Rail Car Train Functions (Abbreviated)
 <colgroup><col><col><col>
 <thead>
  <tr> <th>Function                              <th>Control Unit     <th>Central Station
 <tbody>
  <tr> <td>Headlights                            <td>✔                <td>✔
  <tr> <td>Interior Lights                       <td>✔                <td>✔
  <tr> <td>Electric locomotive operating sounds  <td>✔                <td>✔
  <tr> <td>Engineer's cab lighting               <td>                 <td>✔
  <tr> <td>Station Announcements - Swiss         <td>                 <td>✔
</table>

The only differences between these tables, at the DOM level, is with the precise position of the (in any case semantically-neutral) whitespace.

ただし、任意の属性を持つ場合、開始タグは省略してはならない。

Returning to the earlier example with all the whitespace removed and then all the optional tags removed:

<!DOCTYPE HTML><title>Hello</title><p>Welcome to this example.

この例でbody要素がclass属性を持つ必要があり、かつhtml要素がlang属性を持つ必要がある場合、マークアップはこのようになる必要があるだろう:

<!DOCTYPE HTML><html lang="en"><title>Hello</title><body class="demo"><p>Welcome to this example.

この節は文書が適合している、具体的に、コンテンツモデルの違反がないことを仮定する。この仕様で説明されるコンテンツモデルに適合しない文書で説明される流行のタグ省略は、予期しないDOMの違いをもたらすことになるだろう(部分的には、これは、コンテンツモデルが無効にされるよう設計されている)。

12.1.2.5 コンテンツモデルの制約

歴史的な理由により、特定の要素は、その内容モデルによって与えられても、制限を超えて追加の制限がある。

table要素は、これらの要素がこの仕様で説明された内容モデルに従ってtable要素内で技術的に許可されているにもかかわらず、tr要素を含めてはならない。(tr要素がマークアップ内のtableの内側に配置される場合、実際にはその前のtbody開始タグを暗示するだろう。)

単一の改行は、pretextarea要素の開始タグの直後に置かれてもよい。これは、要素の処理には影響を与えない。要素のコンテンツ自身が改行で開始した場合、(内容に他の方法でリーディング改行は任意の改行、および無視のように扱われることになるため)他のオプションの改行が含まれなければならない

以下の2つのpreブロックは等価である:

<pre>Hello</pre>
<pre>
Hello</pre>
12.1.2.6 生テキストおよびエスケープ可能な生テキスト要素のコンテンツの制約

生テキストおよびエスケープ可能な要素でのテキストは、文字列"</"(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つの出現を含んではならない。

12.1.3 テキスト

テキストは要素、属性値、およびコメントの内側で許可される。追加の制約は、他のセクションで説明するように、テキストが配置される場所に基づいて、テキストで何が許可され何が許可されないのか判別される。

12.1.3.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)文字ではない)の文字参照はまた改行を表す。

12.1.4 文字参照

他のセクションで説明するような特定の例において、テキスト文字参照と混合してもよい。これは、他の方法で合法的にテキストに含めることができない文字をエスケープするために使用できる。

文字参照は、U+0026 AMPERSAND文字(&)で始まらなければならない。これに続いて、文字参照の3つの可能な種類がある:

名前文字参照
アンパサンドは、同じ文字を使用して、名前文字参照のセクションに記載のいずれかの名前が続かなければならない。名前は、その後にU+003B SEMICOLON文字(;)で終了されなければならない。
10進数の数値文字参照
The ampersand must be followed by a U+0023 NUMBER SIGN character (#), followed by one or more ASCII digits, representing a base-ten integer that corresponds to a code point that is allowed according to the definition below. 数字は、その後にU+003B SEMICOLON文字(;)が続かなければならない。
16進数の数値文字参照
The ampersand must be followed by a U+0023 NUMBER SIGN character (#), which must be followed by either a U+0078 LATIN SMALL LETTER X character (x) or a U+0058 LATIN CAPITAL LETTER X character (X), which must then be followed by one or more ASCII hex digits, representing a hexadecimal integer that corresponds to a code point that is allowed according to the definition below. 数字は、その後にU+003B SEMICOLON文字(;)が続かなければならない。

The numeric character reference forms described above are allowed to reference any code point excluding U+000D CR, noncharacters, and controls other than ASCII whitespace.

An ambiguous ampersand is a U+0026 AMPERSAND character (&) that is followed by one or more ASCII alphanumerics, followed by a U+003B SEMICOLON character (;), where these characters do not match any of the names given in the named character references section.

12.1.5 CDATAセクション

CDATAセクションは、次の順に以下のコンポーネントで構成されなければならない:

  1. 文字列"<![CDATA["。
  2. テキストが文字列"]]>"を含んではならないという追加の制約ととともに、任意のテキスト
  3. 文字列"]]>"。

CDATAセクションは外来コンテンツ(MathMLまたはSVG)でのみ使用できる。この例において、CDATAセクションはMathML ms要素のコンテンツをエスケープするために使用される:

<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>

12.1.6 コメント

Comments must have the following format:

  1. The string "<!--".
  2. Optionally, text, with the additional restriction that the text must not start with the string ">", nor start with the string "->", nor contain the strings "<!--", "-->", or "--!>", nor end with the string "<!-".
  3. The string "-->".

The text is allowed to end with the string "<!", as in <!--My favorite operators are > and <!-->.