1. 2.3 共通マイクロ構文
      1. 2.3.1 真偽属性
      2. 2.3.2 キーワードおよび列挙属性
      3. 2.3.3 数
        1. 2.3.3.1 符号付き整数
        2. 2.3.3.2 非負整数
        3. 2.3.3.3 浮動小数点数
        4. 2.3.3.4 浮動小数点数のリスト
      4. 2.3.4 日付および時刻
        1. 2.3.4.1 月
        2. 2.3.4.2 日付
        3. 2.3.4.3 年なし日付
        4. 2.3.4.4 時刻
        5. 2.3.4.5 ローカル日付および時刻
        6. 2.3.4.6 タイムゾーン
        7. 2.3.4.7 グローバル日付および時刻
        8. 2.3.4.8 週
        9. 2.3.4.9 継続時間
        10. 2.3.4.10 時刻における曖昧な瞬間
      5. 2.3.5 空白区切りトークン
      6. 2.3.6 コンマ区切りトークン
      7. 2.3.7 参照
      8. 2.3.8 メディアクエリー
      9. 2.3.9 一意の内部値

2.3 共通マイクロ構文

HTMLには、日付や数など、特定のデータ型を受け入れるさまざまな箇所がある。この節では、これらの形式の内容の適合基準が何か、そしてどのように解析するかを説明する。

2.3.1 真偽属性

いくつかの属性は真偽属性である。要素での真偽属性の存在は真の値を表し、属性の不在は偽の値を表す。

属性が存在する場合、その値は先頭または末尾の空白なしで、空の文字列または属性の正規名にASCII大文字・小文字不区別で一致する値でなければならない。

値"true"および"false"は真偽属性で許可されない。偽の値を表すため、属性は完全に省略される必要がある。

checkedおよびdisabledとなるチェックボックスの例を示す。checkedおよびdisabled属性は真偽属性である。

<label><input type=checkbox checked name=cheese disabled> Cheese</label>

これは次に書かれるものと等価であるべきである:

<label><input type=checkbox checked=checked name=cheese disabled=disabled> Cheese</label>

スタイルを混在させることもできる。以下は依然として等価である:

<label><input type='checkbox' checked name=cheese disabled=""> Cheese</label>

2.3.2 キーワードおよび列挙属性

列挙属性と呼ばれる一部の属性は、状態の有限集合を取る。このような属性の状態は、属性の値、一連のキーワードおよび状態のマッピング、ならびに属性の仕様で指定できる3つの特殊な状態を組み合わせることによって導出される。これらの特殊な状態は、無効値のデフォルト、欠損値のデフォルト、および空の値のデフォルトである。

複数のキーワードを同じ状態にマップできる。

属性の状態を判別するには、次のステップを利用する:

  1. 属性が指定されていない場合:

    1. 属性が欠損値のデフォルト状態が定義されている場合、その欠落値のデフォルト状態を返す。

    2. そうでなければ、状態なしを返す。

  2. 属性の値が、属性に定義されているキーワードの1つとASCII大文字・小文字不区別でマッチする場合、そのキーワードで表される状態を返す。

  3. 属性が空の値のデフォルト状態が定義されており、その属性の値が空の文字列である場合、その空の値のデフォルト状態を返す。

  4. 属性が無効値のデフォルト状態が定義されている場合、その無効値のデフォルト状態を返す。

  5. 状態なしを返す。

オーサリングの適合のため、列挙属性を指定する場合、属性の値は次のいずれかでなければならない:

反射の目的で、マッピングされているキーワードがある状態は、正規のキーワードを持つと言われる。これは次のように決定される:

  1. 特定の状態にマッピングされているキーワードが1つしかない場合、そのキーワードである。

  2. 特定の状態にマッピングされている適合キーワードが1つしかない場合、それはその適合キーワードである。

  3. 指定された状態にマッピングする2つの適合キーワードがあり、1つが空文字列である場合、正規キーワードは空の文字列ではない適合キーワードになる。

  4. そうでなければ、状態の正規キーワードは、属性の仕様で明示的に指定される。

2.3.3 数

2.3.3.1 符号付き整数

文字列が1つ以上のASCII 数字、任意で接頭辞U+002D HYPHEN-MINUS文字(-)を持つ場合、文字列は妥当な整数である。

接頭辞U+002D HYPHEN-MINUS(-)接頭辞なしの妥当な整数は、10進数を表す。U+002D HYPHEN-MINUS文字(-)接頭辞ありの妥当な整数は、U+002D HYPHEN-MINUSに続く10進数を表し、0から減算される。

2.3.3.2 非負整数

1つ以上のASCII数字からなる場合、文字列は妥当な非負整数である。

妥当な非負整数は、10進数である数を表す。

2.3.3.3 浮動小数点数

次の場合、文字列は妥当な浮動小数点数である:

  1. 任意で、1つのA U+002D HYPHEN-MINUS文字(-)。

  2. 次のいずれかまたは両方の、与えられた順:

    1. ひと続きの1つ以上のASCII数字。

    2. 次の両方の、与えられた順で:

      1. 1つのU+002E FULL STOP文字(.)。

      2. ひと続きの1つ以上のASCII数字。

  3. 任意で:

    1. 1つの U+0065 LATIN SMALL LETTER E文字(e)か1つのU+0045 LATIN CAPITAL LETTER E文字(E)のいずれか。

    2. 任意で、1つのU+002D HYPHEN-MINUS文字(-)または1つのU+002B PLUS SIGN文字(+)。

    3. ひと続きの1つ以上のASCII数字。

妥当な浮動小数点数は、10の累乗による仮数部の乗算によって得られる。ここで乗算は最初の数であり、10進数として解釈される(もしあれば、小数点および小数点の後の数を含み、文字列全体がU+002D HYPHEN-MINUS文字(-)で始まるおよび数値が0でない場合、負数として仮数部を解釈する)。またここで、もしあれば、指数はEの後の数字である(Eと数字と数字の間にU+002D HYPHEN-MINUS文字(-)がある場合、負数として解釈され、数字が0でない、またはその他Eと数字の間にU+002B PLUS SIGN文字(+)が存在する場合無視できる)。Eが存在しない場合、指数は0として扱われる。

無限大および非数(NaN)値は妥当な浮動小数点数ではない。

2.3.3.4 浮動小数点数のリスト

妥当な浮動小数点数リストは、U+002C COMMA文字によって区切られる多数の妥当な浮動小数点数であり、他の文字を持たない(たとえばASCII空白文字のない)。さらに、与えられる浮動小数点数の数、または許可される値の範囲には制限があるかもしれない。

2.3.4 日付および時刻

下記のアルゴリズムにおいて、年yearの月monthの日数は:monthが1、3、5、7、8、10、12ならば31である。monthが4、6、9、11ならば30である。monthが2かつyearが400で割り切れる数、またはyearが4で割り切れるが100で割り切れないならば29であり、そうでなければ28である。これは、グレゴリオ暦の閏年を考慮に入れている。[GREGORIAN]

ASCII数字がこの節で定義される日付および時刻の構文で使用される場合、これらは10進数で表現される。

この仕様が先発グレゴリオ暦を参照する場合、これは、1年に遡って挿入された現代のグレゴリオ暦を意味する。先発グレゴリオ日付として明示的に参照される先発グレゴリオ暦での日付は、たとえ暦が問題の時刻(または場所)で使用されていないとしても、その暦を使用して説明される。[GREGORIAN]

この仕様においてワイヤ形式としてのグレゴリオ暦の使用は、決定に関わる人々の文化的なバイアスに起因する恣意的な選択肢である。フォームの日付、時刻、数値の形式およびtime要素の節も参照のこと。

2.3.4.1 月

月は、タイムゾーン情報および年と月を超えた日付を持たない、特定の先発グレゴリオ暦から成る。[GREGORIAN]

与えられた順で次のコンポーネントからなる場合、文字列は、年yearおよび月monthで表される妥当な月文字列である:

  1. 4桁以上で表されるyear。ここでyear > 0である。
  2. A U+002D HYPHEN-MINUS文字(-)
  3. 1 ≤ month ≤ 12の範囲で、月monthを表す2つのASCII数字
2.3.4.2 日付

日付は、年月日からなりタイムゾーン情報を持たない、特定の先発グレゴリオ暦からなる。[GREGORIAN]

与えられた順で次のコンポーネントからなる場合、文字列は年year、月month、日dayで表される妥当な日付文字列である:

  1. yearおよびmonthで表される、妥当な月文字列
  2. A U+002D HYPHEN-MINUS文字(-)
  3. 1 ≤ day ≤ maxdayの範囲でのdayで表される2つのASCII数字。ここでmaxdayは年yearおよび月monthでの日の数である。
2.3.4.3 年なし日付

年なし日付はグレコリオ月とその月の日からなるが、年を伴わない。[GREGORIAN]

与えられた順で次のコンポーネントからなる場合、文字列は月monthおよび日dayで表される妥当な年なし日付文字列である:

  1. 任意で、2つのA U+002D HYPHEN-MINUS文字(-)
  2. 1 ≤ month ≤ 12の範囲で、月monthを表す2つのASCII数字
  3. A U+002D HYPHEN-MINUS文字(-)
  4. 1 ≤ day ≤ maxdayの範囲でのdayで表される2つのASCII数字。ここでmaxdayは月monthかつ任意の閏年(たとえば4または2000)における日数である。

言い換えると、2月を意味するmonthが"02"である場合、あたかもその年は閏年かのように、日は29であってもよい。

2.3.4.4 時刻

時刻は、時、分、秒、秒以下からなりタイムゾーン情報を持たない、特定の時刻からなる。

与えられた順で次のコンポーネントからなる場合、文字列は、時hour、分minute、秒secondで表される妥当な時刻文字列である:

  1. 0 ≤ hour ≤ 23の範囲で、hourを表す2つのASCII数字
  2. A U+003A COLON文字(:)
  3. 0 ≤ minute ≤ 59の範囲でminuteを表す2つのASCII数字
  4. If second is nonzero, or optionally if second is zero:
    1. A U+003A COLON文字(:)
    2. 0 ≤ s ≤ 59の範囲で、second整数部を表す2つのASCII数字
    3. secondが非整数である場合、または任意でsecondが整数である場合:
      1. A U+002E FULL STOP character (.)
      2. second分数部で表される、1、2、また3桁

secondコンポーネントは60または61にはなり得ない。閏秒を表すことはできない。

2.3.4.5 ローカル日付および時刻

ローカル日付および時刻は、年、月、日、時、分、秒、秒以下からなる特定の先発グレコリオ暦からなるが、タイムゾーン情報を持たない。[GREGORIAN]

与えられた順で次のコンポーネントからなる場合、文字列は妥当なローカル日付および時刻文字列である:

  1. 日付を表す妥当な日付文字列
  2. U+0054 LATIN CAPITAL LETTER T文字(T)またはU+0020 SPACE文字
  3. 時刻を表す妥当な時刻文字列

与えられた順で次のコンポーネントからなる場合、文字列は妥当な規格化ローカル日付および時刻文字列である:

  1. 日付を表す妥当な日付文字列
  2. A U+0054 LATIN CAPITAL LETTER T文字(T)
  3. 時刻を表す妥当な時刻文字列は、与えられた時刻に対して可能な限り最短の文字列として表現される(たとえば、与えられた時刻がその分の0秒である場合、完全に秒のコンポーネントを省略する)
2.3.4.6 タイムゾーン

タイムゾーンオフセットは符号付きの時と分の数字からなる。

次のいずれかからなる場合、文字列は、タイムゾーンオフセットを表す妥当なタイムゾーンオフセット文字列である:

この形式は、-23:59から+23:59までのタイムゾーンオフセットを許可する。特に、実際のタイムゾーンオフセットの範囲は-12:00から+14:00までであり、実際のタイムゾーンオフセットの分コンポーネントは常に00、30または45のいずれかである。とはいえ、タイムゾーンは政争の具として使用され、非常に気まぐれな政策決定の対象とされるので、永遠に保持される保証はない。

正式なタイムゾーンの形成以前に遡る歴史的な時代でのタイムゾーンのオフセットを使用についての詳細は、下記のグローバル日付および時刻の節にある使用上の注意と例を参照のこと。

2.3.4.7 グローバル日付および時刻

グローバル日付および時刻は、符号付き時分からなるタイムゾーンオフセットとともに年、月、日、時、分、秒、秒以下からなる特定先発グレコリオ暦で構成する。[GREGORIAN]

与えられた順で次のコンポーネントからなる場合、日付、時刻、タイムゾーンオフセットを表す文字列は妥当なグローバル日付および時刻である:

  1. 日付を表す妥当な日付文字列
  2. U+0054 LATIN CAPITAL LETTER T文字(T)またはU+0020 SPACE文字
  3. 時刻を表す妥当な時刻文字列
  4. タイムゾーンオフセットを表す妥当なタイムゾーンオフセット文字列

20世紀半ばにUTCを形成する前の日付の時刻は、UTC(UT1の近似がSI秒を刻む)ではなく、UT1(0°経度での現代の地球太陽時)の見地から表現および解釈されなければならない。タイムゾーンを形成する前の時刻は、適切なローカル時刻とロンドンのグリニッジで観測された時刻との間のおおよその現代的な違いのある明示的なタイムゾーンとともにUT1の時刻として表現および解釈されなければならない。

以下は妥当なグローバル日付および時刻として記述される例の一部である。

"0037-12-13 00:00Z"
ネロ(ローマ皇帝)の誕生日にロンドン時を用いた地域での真夜中。これが実際に対応している日付のさらなる議論については下記を参照のこと。
"1979-10-14T12:00:00.001-04:00"
夏時間の間にアメリカ東海岸で使用されるタイムゾーンで、1979年10月14日の正午1ミリ秒後。
"8592-01-01T02:09+02:09"
8592年1月1日のUTCで夜中。現在の実際のタイムゾーンではない、UTCより早く時刻が2時9分であるタイムゾーンに関連付けられるが、それでもなお、許可される。

次の日付に関していくつかの注目に値する点がある:

2.3.4.8 週

週は、週番号年と週番号からなる。週番号は、月曜日から始まる7日間を示す。次の定義に従って、このカレンダーシステムにおける週番号年は52または53の7日間を持つ。グレゴリオ暦の日付で1969年12月29日(1969-12-29)月曜日で始まる7日間は、1970週番号年で週番号1として定義される。連続した週は連番が付けられる。週番号年で1週目の前の週は、前の週番号年の最終週である。逆もまた同様である。[GREGORIAN]

最初の日(1月1日)が木曜である先発グレコリオ暦の年year、または最初の日(1月1日)が木曜である先発グレコリオ暦の年yearのいずれかに対応する場合、数字yearとともに週番号年は53週を持つ。ここで、yearは400で割り切れる数字、または4で割り切れるが100で割り切れない数字である。他のすべての週番号年は52週である。

53週をもつ週番号年の最終日の週番号は53であり、52週をもつ週番号年の最終日の週番号は52である。

特定の日の週番号年の数は、先発グレゴリオ暦で、その日を含む年の数と異なる場合がある。週番号年yでの最初の週は、グレコリオ年yの最初の木曜を含む週である。

現代の用途に対して、ここで定義される週は、ISO 8601で定義されるようなISO週に相当する。[ISO8601]

与えられた順で次のコンポーネントからなる場合、文字列は、週番号年yearおよび週weekを表す妥当な週文字列である:

  1. 4桁以上で表されるyear。ここでyear > 0である。
  2. A U+002D HYPHEN-MINUS文字(-)
  3. U+0057 LATIN CAPITAL LETTER W文字(W)
  4. 1 ≤ week ≤ maxweekの範囲で、週weekを表す2つのASCII数字。ここで maxweekは週番号年yearの最終日の週番号である。
2.3.4.9 継続時間

継続時間は複数秒からなる。

月と秒は同等ではない(1か月は正確な秒数ではなく、その正確な長さは、測定された正確な1日に依存する期間である)ので、この仕様で定義される継続時間は月を含めることはできない(また年は12か月に等しい)特定の秒数を記述する継続時間のみが記述可能である。

次のいずれかからなる場合、文字列は、継続時間tで表す妥当な継続時間文字列である:

2.3.4.10 時刻における曖昧な瞬間

次のいずれかである場合、文字列は任意の時刻を持つ妥当な日付文字列である:

2.3.5 空白区切りトークン

空白区切りトークンの集合は、1つ以上のASCII空白文字によって区切られた0個以上の単語(トークンとして知られる)を含む文字列である。ここで、単語は1つ以上の文字を含み、ASCII空白文字を含まない。

空白区切りトークンの集合を構成する文字列は、先頭または末尾にASCII空白文字を持ってもよい。

順不同の一意な空白区切りトークンの集合は、繰り返しトークンのない空白区切りトークンの集合である。

順序付きの一意な空白区切りトークンの集合は、繰り返しトークンはないが、トークンの順序が意味のある空白区切りトークンの集合である。

空白区切りトークンの集合は時折定義された許可される値の集合を持つ。許可された値の集合が定義される場合、トークンはすべて許可される値のリストでなければならない。その他の値は不適合である。そのような許可される値の集合が用意されない場合、すべての値は適合である。

空白区切りトークンの集合のトークンがどのように比較されるか(たとえば、大文字小文字を区別するかどうか)は、セットごとに定義される。

2.3.6 コンマ区切りトークン

コンマ区切りトークンの集合は、それぞれ単一のU+002C COMMA文字(,)で区切られる0個以上のトークンを含む文字列である。ここでトークンは0個以上の任意の文字列からなり、先頭も末尾もASCII空白文字でなく、U+002C COMMA文字(,)を含まず、任意でASCII空白文字に囲まれるものである。

たとえば、文字列" a ,b,,d d "は4つのトークンからなる。"a"、"b"、空文字列および"d d"。各トークンの周りの先頭と末尾の空白はトークンの一部としてカウントされず、空文字列はトークンであるかもしれない。

コンマ区切りトークンの集合は時に妥当なトークンを構成するさらなる制約を持つ。そのような制限が定義される場合、トークンはすべてその制限に収まるようにしなければならない。その他の値は不適合である。そのような制限が指定されない場合、すべての値は適合である。

2.3.7 参照

タイプtype要素の妥当なハッシュ名参照は、 U+0023 NUMBER SIGN文字(#)の後に同じツリーでタイプtypeをもつ要素のname属性の値に正確に一致する文字列から構成される文字列である。

2.3.8 メディアクエリー

Media Queriesの<media-query-list>生成物に一致する場合、文字列は妥当なメディアクエリーリストである。[MQ]

空文字列、ASCII空白文字のみからなる文字列、またはMedia Queriesで与えられる定義に従ったユーザー環境にマッチするメディアクエリーの場合、文字列はユーザー環境に一致する。[MQ]

2.3.9 一意の内部値

一意の内部値は、シリアル化可能で、値によって比較可能であり、スクリプトに公開されることのない値である。

新しい一意の内部値を作成するには、このアルゴリズムによって以前に返されたことのない一意の内部値を返す。