Edition for Web Developers — Last Updated 17 December 2024
HTMLには、日付や数など、特定のデータ型を受け入れるさまざまな箇所がある。この節では、これらの形式の内容の適合基準が何か、そしてどのように解析するかを説明する。
いくつかの属性は真偽属性である。要素での真偽属性の存在は真の値を表し、属性の不在は偽の値を表す。
属性が存在する場合、その値は先頭または末尾の空白なしで、空の文字列または属性の正規名に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つの可能な特殊な状態を組み合わせることによって導出される。これらの特別な状態は、無効値のデフォルトおよび欠損値のデフォルトである。
複数のキーワードを同じ状態にマップできる。
空文字列は妥当なキーワードとなりうる。欠損値のデフォルトは、属性が欠損している場合にのみ適用され、空の文字列値が存在する場合には適用されないことに注意する。
属性の状態を判別するには、以下のステップを利用する:
属性が指定されていない場合:
属性が欠損値のデフォルト状態が定義されている場合、その欠落値のデフォルト状態を返す。
そうでなければ、状態なしを返す。
属性の値が、属性に定義されているキーワードの1つとASCII大文字・小文字不区別でマッチする場合、そのキーワードで表される状態を返す。
属性が不正値のデフォルト状態が定義されている場合、その不正値のデフォルト状態を返す。
状態なしを返す。
オーサリング適合性の目的で、列挙属性が指定されている場合、属性の値は、先頭または末尾の空白なしで、その属性の適合キーワードの1つとASCII大文字・小文字不区別でマッチしなければならない。
反射の目的で、マッピングされているキーワードがある状態は、正規のキーワードを持つと言われる。これは次のように決定される:
特定の状態にマッピングされているキーワードが1つしかない場合、そのキーワードである。
特定の状態にマッピングされている適合キーワードが1つしかない場合、それはその適合キーワードである。
そうでなければ、状態の正規キーワードは、属性の仕様で明示的に指定される。
文字列が1つ以上のASCII 数字、任意で接頭辞U+002D HYPHEN-MINUS文字(-)を持つ場合、文字列は妥当な整数である。
接頭辞U+002D HYPHEN-MINUS(-)接頭辞なしの妥当な整数は、10進数を表す。U+002D HYPHEN-MINUS文字(-)接頭辞ありの妥当な整数は、U+002D HYPHEN-MINUSに続く10進数を表し、0から減算される。
1つ以上のASCII数字からなる場合、文字列は妥当な非負整数である。
妥当な非負整数は、10進数である数を表す。
次の場合、文字列は妥当な浮動小数点数である:
任意で、1つのA U+002D HYPHEN-MINUS文字(-)。
次のいずれかまたは両方の、与えられた順:
任意で:
1つの U+0065 LATIN SMALL LETTER E文字(e)か1つのU+0045 LATIN CAPITAL LETTER E文字(E)のいずれか。
任意で、1つのU+002D HYPHEN-MINUS文字(-)または1つのU+002B PLUS SIGN文字(+)。
ひと続きの1つ以上のASCII数字。
妥当な浮動小数点数は、10の累乗による仮数部の乗算によって得られる。ここで乗算は最初の数であり、10進数として解釈される(もしあれば、小数点および小数点の後の数を含み、文字列全体がU+002D HYPHEN-MINUS文字(-)で始まるおよび数値が0でない場合、負数として仮数部を解釈する)。またここで、もしあれば、指数はEの後の数字である(Eと数字と数字の間にU+002D HYPHEN-MINUS文字(-)がある場合、負数として解釈され、数字が0でない、またはその他Eと数字の間にU+002B PLUS SIGN文字(+)が存在する場合無視できる)。Eが存在しない場合、指数は0として扱われる。
無限大および非数(NaN)値は妥当な浮動小数点数ではない。
妥当な浮動小数点数リストは、U+002C COMMA文字によって区切られる多数の妥当な浮動小数点数であり、他の文字を持たない(たとえばASCII空白文字のない)。さらに、与えられる浮動小数点数の数、または許可される値の範囲には制限があるかもしれない。
下記のアルゴリズムにおいて、年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
要素の節も参照のこと。
月は、タイムゾーン情報および年と月を超えた日付を持たない、特定の先発グレゴリオ暦から成る。[GREGORIAN]
与えられた順で以下のコンポーネントからなる場合、文字列は、年yearおよび月monthで表される妥当な月文字列である:
日付は、年月日からなりタイムゾーン情報を持たない、特定の先発グレゴリオ暦からなる。[GREGORIAN]
与えられた順で以下のコンポーネントからなる場合、文字列は年year、月month、日dayで表される妥当な日付文字列である:
年なし日付はグレコリオ月とその月の日からなるが、年を伴わない。[GREGORIAN]
与えられた順で以下のコンポーネントからなる場合、文字列は月monthおよび日dayで表される妥当な年なし日付文字列である:
言い換えると、2月を意味するmonthが"02
"である場合、あたかもその年は閏年かのように、日は29であってもよい。
時刻は、時、分、秒、秒以下からなりタイムゾーン情報を持たない、特定の時刻からなる。
与えられた順で以下のコンポーネントからなる場合、文字列は、時hour、分minute、秒secondで表される妥当な時刻文字列である:
secondコンポーネントは60または61にはなり得ない。閏秒を表すことはできない。
ローカル日付および時刻は、年、月、日、時、分、秒、秒以下からなる特定の先発グレコリオ暦からなるが、タイムゾーン情報を持たない。[GREGORIAN]
与えられた順で以下のコンポーネントからなる場合、文字列は妥当なローカル日付および時刻文字列である:
与えられた順で以下のコンポーネントからなる場合、文字列は妥当な規格化ローカル日付および時刻文字列である:
タイムゾーンオフセットは符号付きの時と分の数字からなる。
次のいずれかからなる場合、文字列は、タイムゾーンオフセットを表す妥当なタイムゾーンオフセット文字列である:
タイムゾーンがUTCの場合のみ許される、U+005A LATIN CAPITAL LETTER Z文字(Z)
または、与えられた順で以下のコンポーネント:
この形式は、-23:59から+23:59までのタイムゾーンオフセットを許可する。特に、実際のタイムゾーンオフセットの範囲は-12:00から+14:00までであり、実際のタイムゾーンオフセットの分コンポーネントは常に00、30または45のいずれかである。とはいえ、タイムゾーンは政争の具として使用され、非常に気まぐれな政策決定の対象とされるので、永遠に保持される保証はない。
正式なタイムゾーンの形成以前に遡る歴史的な時代でのタイムゾーンのオフセットを使用についての詳細は、下記のグローバル日付および時刻の節にある使用上の注意と例を参照のこと。
グローバル日付および時刻は、符号付き時分からなるタイムゾーンオフセットとともに年、月、日、時、分、秒、秒以下からなる特定先発グレコリオ暦で構成する。[GREGORIAN]
与えられた順で以下のコンポーネントからなる場合、日付、時刻、タイムゾーンオフセットを表す文字列は妥当なグローバル日付および時刻である:
20世紀半ばにUTCを形成する前の日付の時刻は、UTC(UT1の近似がSI秒を刻む)ではなく、UT1(0°経度での現代の地球太陽時)の見地から表現および解釈されなければならない。タイムゾーンを形成する前の時刻は、適切なローカル時刻とロンドンのグリニッジで観測された時刻との間のおおよその現代的な違いのある明示的なタイムゾーンとともにUT1の時刻として表現および解釈されなければならない。
以下は妥当なグローバル日付および時刻として記述される例の一部である。
0037-12-13 00:00Z
"1979-10-14T12:00:00.001-04:00
"8592-01-01T02:09+02:09
"以下の日付に関していくつかの注目に値する点がある:
T
"が空白に置換される場合、単一の空白文字でなければならない。文字列"2001-12-21 12:00Z
"(コンポーネントの間に2つの空白)はうまく解釈されないだろう。週は、週番号年と週番号からなる。週番号は、月曜日から始まる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か月は正確な秒数ではなく、その正確な長さは、測定された正確な1日に依存する期間である)ので、この仕様で定義される継続時間は月を含めることはできない(また年は12か月に等しい)特定の秒数を記述する継続時間のみが記述可能である。
以下のいずれかからなる場合、文字列は、継続時間tで表す妥当な継続時間文字列である:
与えられた順でリテラルにU+0050 LATIN CAPITAL LETTER P文字の後に以下のサブコンポーネントが続く。ここで日、時、分および秒数はtとして同じ秒数に対応する:
U+0044 LATIN CAPITAL LETTER D文字の後に続く、日数を表す1つ以上のASCII数字。
与えられた順で、U+0054 LATIN CAPITAL LETTER T文字の後に以下のサブコンポーネントが続く:
これは、この仕様で定義される他の日付および時刻依存のマイクロ構文と同様に、ISO 8601で定義される形式の1つに基づく。[ISO8601]
任意の順で、それぞれ異なる継続時間コンポーネントのスケールを伴う、1つ以上の継続時間コンポーネント。秒数tと等価である秒数で表される合計。
継続時間コンポーネントは以下のコンポーネントからなる文字列である:
0個以上のASCII空白文字。
秒数を表現するために指定された継続時間コンポーネントスケール(下記参照)でスケールされる時刻単位数で表す、1つ以上のASCII数字。
指定された継続時間コンポーネントスケールが1(すなわち単位が秒)の場合、任意で、U+002E FULL STOP文字(.)文字の後に続く秒以下を表す1、2、または3つのASCII数字。
0個以上のASCII空白文字。
継続時間コンポーネントの数字部で用いられる時刻単位の継続時間コンポーネントスケールを表す、以下の文字の1つ:
0個以上のASCII空白文字。
これはISO 8601での形式のいずれにも基づかない。ISO 8601継続時間形式の代わりに、より人間に読みやすくすることを意図する。
以下のいずれかである場合、文字列は任意の時刻を持つ妥当な日付文字列である:
空白区切りトークンの集合は、1つ以上のASCII空白文字によって区切られた0個以上の単語(トークンとして知られる)を含む文字列である。ここで、単語は1つ以上の文字を含み、ASCII空白文字を含まない。
空白区切りトークンの集合を構成する文字列は、先頭または末尾にASCII空白文字を持ってもよい。
順不同の一意な空白区切りトークンの集合は、繰り返しトークンのない空白区切りトークンの集合である。
順序付きの一意な空白区切りトークンの集合は、繰り返しトークンはないが、トークンの順序が意味のある空白区切りトークンの集合である。
空白区切りトークンの集合は時折定義された許可される値の集合を持つ。許可された値の集合が定義される場合、トークンはすべて許可される値のリストでなければならない。その他の値は不適合である。そのような許可される値の集合が用意されない場合、すべての値は適合である。
空白区切りトークンの集合のトークンがどのように比較されるか(たとえば、大文字小文字を区別するかどうか)は、セットごとに定義される。
コンマ区切りトークンの集合は、それぞれ単一のU+002C COMMA文字(,)で区切られる0個以上のトークンを含む文字列である。ここでトークンは0個以上の任意の文字列からなり、先頭も末尾もASCII空白文字でなく、U+002C COMMA文字(,)を含まず、任意でASCII空白文字に囲まれるものである。
たとえば、文字列" a ,b,,d d
"は4つのトークンからなる。"a"、"b"、空文字列および"d d"。各トークンの周りの先頭と末尾の空白はトークンの一部としてカウントされず、空文字列はトークンであるかもしれない。
コンマ区切りトークンの集合は時に妥当なトークンを構成するさらなる制約を持つ。そのような制限が定義される場合、トークンはすべてその制限に収まるようにしなければならない。その他の値は不適合である。そのような制限が指定されない場合、すべての値は適合である。
タイプtype要素の妥当なハッシュ名参照は、 U+0023 NUMBER SIGN文字(#)の後に同じツリーでタイプtypeをもつ要素のname
属性の値に正確に一致する文字列から構成される文字列である。
Media Queriesの<media-query-list>
生成物に一致する場合、文字列は妥当なメディアクエリーリストである。[MQ]
空文字列、ASCII空白文字のみからなる文字列、またはMedia Queriesで与えられる定義に従ったユーザー環境にマッチするメディアクエリーの場合、文字列はユーザー環境に一致する。[MQ]
一意の内部値は、シリアル化可能で、値によって比較可能であり、スクリプトに公開されることのない値である。
新しい一意の内部値を作成するには、このアルゴリズムによって以前に返されたことのない一意の内部値を返す。