HTML5.2の見出し毎の内容を雑にまとめる、2.4. Common microsyntaxes (共通のマイクロ構文)

2. Common infrastructure (共通基盤) の中の 2.4. Common microsyntaxes (共通のマイクロ構文)

ここの理解が不足していると、正しい属性値などを設定することができなくなってしまうので、気合を入れてひたすら読みます

2.4.5. Dates and times (日付と時刻) ではどう読んでも矛盾する箇所があり、結局issueを立てました

結果、以下の内容が変わってしまうかもしれません


内容についてはあくまで初学者の覚書ですので、正式な仕様はW3CのHTML5.2を確認してください

また、勉強のため、各仕様の邦訳文書、解説文書を読まずに自分で翻訳して覚書を書き終わってから答え合わせとして邦訳文書を参照するようにしています

このため、多くの訳語が一般的な訳と異なっていますのでご注意ください


2.4. Common microsyntaxes (共通のマイクロ構文)

この章ではHTMLで使う日付とか数字とかのデータの適合基準や解析方法を説明する

ユーザーエージェント実装者はこれらのデータを共有するサードパーティー製品のエラー処理の挙動がHTMLの定義する挙動とは異なる、そもそも未定義の可能性があるので注意が要る

2.4.1. Common parser idioms (共通の構文解析慣用句)

以下の用語についての説明がある

空白文字 (space characters)

次のいずれかの文字

  1. U+0020 " " SPACE
  2. U+0009 " " CHARACTER TABULATION (tab)
  3. U+000A " " LINE FEED (LF)
  4. U+000C " " FORM FEED (FF)
  5. U+000D " " CARRIAGE RETURN (CR)
空白類文字 (White_Space characters)
UnicodeのPropList.txt 参照 (リンクはUnicode 10.0.0の物)
制御文字
UnicodeのUnicodeData.txt 参照 (リンクはUnicode 10.0.0の物)
大文字ASCII文字
文字コード順で文字A (U+0041 "A" LATIN CAPITAL LETTER A) から文字Z (U+005A "Z" LATIN CAPITAL LETTER Z) の範囲の文字
小文字ASCII文字
文字コード順で文字a (U+0061 "a" LATIN SMALL LETTER A) から文字z (U+007A "z" LATIN SMALL LETTER Z) の範囲の文字
ASCII文字
大文字ASCII文字または小文字ASCII文字の文字
ASCII数字
文字コード順で文字0 (U+0030 "0" DIGIT ZERO (0)) から文字9 (U+0039 "9" DIGIT NINE (9)) の範囲の文字
ASCII英数字
大文字ASCII文字または小文字ASCII文字とASCII数字の文字
ASCII16進数
文字コード順で文字0 (U+0030 "0" DIGIT ZERO (0)) から文字9 (U+0039 "9" DIGIT NINE (9)) または文字A (U+0041 "A" LATIN LETTER A) から文字F (U+0046 "F" LATIN LETTER F)、文字a (U+0061 "a" LATIN SMALL LETTER A) から文字f (U+0066 "f" LATIN SMALL LETTER f) の範囲の文字
大文字ASCII16進数
文字コード順で文字0 (U+0030 "0" DIGIT ZERO (0)) から文字9 (U+0039 "9" DIGIT NINE (9)) または文字A (U+0041 "A" LATIN LETTER A) から文字F (U+0046 "F" LATIN LETTER F) の範囲の文字
小文字ASCII16進数
文字コード順で文字0 (U+0030 "0" DIGIT ZERO (0)) から文字9 (U+0039 "9" DIGIT NINE (9)) または文字a (U+0061 "a" LATIN SMALL LETTER A) から文字f (U+0066 "f" LATIN SMALL LETTER f) の範囲の文字
一連の文字の収集 (collect a sequence of characters) のアルゴリズム
呼び出したアルゴリズムと同じ判定によって行われる文字の収集アルゴリズム
(連続した複数の) 空白文字を飛ばす (skip white space)
空白文字を飛ばす場合、ユーザーエージェントは対象の文字列から(連続した複数の) 空白文字を収集し、収集した空白文字を使わないようにする必要がある
改行を取り除く (strip line breaks)
改行を取り除く場合、ユーザーエージェントは対象の文字列からLF (U+000A " " LINE FEED) 及びCR (U+000D " " CARRIAGE RETURN (CR)) を取り除く必要がある
先頭と末尾の空白文字を取り除く (strip leading and trailing white space)
先頭と末尾の空白文字を取り除く場合、ユーザーエージェントは連続した空白文字をスペース(U+0020 " " SPACE) 1文字に置き換えた上で、先頭と末尾のスペースを取り除く必要がある
厳密に文字列を分割する (trictly split a string) アルゴリズム

厳密に文字列を分割する場合、ユーザーエージェントは特定の区切り子 (delimiter character) を用いて次のアルゴリズムで処理を行う

  1. 入力された文字を解析対象とする
  2. 最初は入力の先頭となる、入力へのポインタをポジションをとする
  3. 最初は空の順序付きトークンを用意する
  4. ポジションが入力の末尾を超えない限り次を繰り返す

    1. 区切り子ではない連続する文字列を収集する
    2. 前項で収集した文字列をトークンに追加する
    3. ポジションを入力の次の文字に移動させる
  5. トークンを返す

スペース (U+0020 " " SPACE) とカンマ (U+002C "," COMMA) を区切り子とする特殊なケースではこのアルゴリズムを適用しない (そのような場合、空白の除去をおこなうアルゴリズムになる)

カンマ区切りトークンは 2.4.8. Comma-separated tokens 参照

2.4.2. Boolean attributes (ブール型 (真偽値) 属性)

ブール型 (真偽値) 属性を属性についての説明

属性自体の記述 (属性値は属性の名前と同じか、空白か、省略) があればtrueとなり、記述がない事でfalseになる (本文の例を参照)

ブール型属性の属性値はtrue、falseではない

2.4.3. Keywords and enumerated attributes (キィワードと列挙型属性 (列挙型は有限の識別子の集合))

列挙型属性 (値が有限のキィワードセットの内の1つを取る属性) についての説明

空白文字列は妥当なキィワードになる (そういう列挙型属性が存在し得る)

2.4.4. Numbers (数値)
2.4.4.1. Signed integers (符号付整数)

1桁以上のASCII数字と、先頭にマイナス (-) が付いているかも知れない10進数の整数についての説明

符号付整数 (Signed intege) であるが、プラス (+) を付けると (処理上は無視されるので意図通りに構文解析されるかもしれないが) 不適合である

2.4.4.2. Non-negative integers (負ではない整数)

1桁以上のASCII数字の10進数の負ではない整数についての説明

ゼロを含む

2.4.4.3. Floating-point numbers (浮動小数点数値)

浮動小数点数値及び、浮動小数点数値を解析するアルゴリズムについての説明

数値 n を浮動小数点数値にする最も良い方法は JavaScriptのToStrigを n に適用する事である


概ねIEEE Standard for Floating-Point Arithmetic (ANSI/IEEE Std 754-2008) の倍精度浮動小数点数値と思ってよい

ただし、負のゼロを除くIEEE 754の有限数値の集合に (内部でエラーとする値として) 21024と-21024を加えたものに変換される (Conversion: Let S be the set of finite IEEE 754 double-precision floating-point values except -0, but with two special values added: 21024 and -21024.) ので無限大、負の無限大、非数 (Not-a-Number (NaN)) はHTML5.2の妥当な浮動小数点数値ではなく、-0 は 0 と同じになり、更に内部でエラーとして扱われる数値として21024と-21024が存在する

2.4.4.4. Percentages and lengths (百分率と長さ)

大きさの値を解析する規則 (rules for parsing dimension values) についての説明と、それによって得られる 0.0 以上の10進数の数値となる百分率または長さについての説明

最後がパーセント文字 (%) の場合は値が百分率となり、そうでない場合は値が長さとなる

2.4.4.5. Non-zero percentages and lengths (ゼロではない百分率と長さ)

ゼロ以外の大きさの値を解析する規則 (rules for parsing non-zero dimension values) についての説明と、それによって得られる 0.0 より大きい10進数の数値となる百分率または長さについての説明

大きさの値を解析する規則 (rules for parsing dimension values) による処理を行った上で、更に解析結果が0の場合エラーとする

2.4.4.6. Lists of floating-point numbers (浮動小数点数値リスト)

浮動小数点数値をカンマ (U+002C "," COMMA) で区切って列記した数値

区切り子はカンマ (U+002C "," COMMA) であり、他の文字 (例えば空白文字) ではない


浮動小数点数値リストを解析する規則 (rules for parsing a list of floating-point numbers) が定められているが、見る限り空白文字やセミコロン (U+003B ";" SEMICOLON) を区切り子としても非適合だが意図したエラーとならず解析結果が得られるように思える

おそらくカンマ前後の空白文字と終端記号としてセミコロン (U+003B ";" SEMICOLON) を許容するための処理であろう

また、解析できなかった浮動小数点数値 (のようなもの) は非適合だが 0 として扱われる

2.4.4.7. Lists of dimensions (大きさの値リスト)

数値と単位 (パーセンテージ、絶対値、相対値) からなるゼロ個以上のペアリストの説明

大きさの値リストを解析する規則 (rules for parsing a list of dimensions) が定められている

区切り子はカンマ (U+002C "," COMMA) であり、小数点を持つ 0.0 以上の10進数の数値、更に単位としてパーセント (%) を持つ百分率、または単位としてアスタリスク (U+002A "*" ASTERISK) を持つ相対値からなるリスト

2.4.5. Dates and times (日付と時刻)

この仕様は日時の記述方法を ISO 8601 (Data elements and interchange formats – Information interchange – Representation of dates and times) の共通サブセットとして規定しているが、解析規則はISO 8601より詳細であるためユーザーエージェント実装者は注意を要する (単にISO 8601に対応したライブラリで解析すると誤りとなる場合がある)

先発グレゴリオ暦を用いており、グレゴリオ暦以外の暦が使われている地域や時代の日付はグレゴリオ暦に変換する必要がある

また、うるう秒の書き方は存在しない

ASCII数字を用いて表現する場合、10進数となる

その年の月の日数 (number of days in month month of year year) は

  1. 月が1、3、5、7、8、10、12なら31
  2. 月が4、6、9、11なら30
  3. 月が2で年が400で割り切れるか、4で割り切れて100で割り切れないなら29、そうでないなら28

となる


先発グレゴリオ暦先発グレゴリオ暦 - Wikipediaから引用すると1582年から施行されたグレゴリオ暦暦法を、1582年以前にも適用したものである。この語は英語を翻訳したものだが日本語の定訳がなく、遡及グレゴリオ暦、予測的グレゴリオ暦、予期的グレゴリオ暦などとも訳されるとの事。


NOTEの Dates are expressed in the proleptic Gregorian calendar between the proleptic year 0000, and the year 9999. Other years cannot be encoded. の記述は恐らく誤りであろう

上記に関する考察は別記事 HTML5.2のdates and timesで先発グレゴリオ暦の紀元前1年と10000年より未来は妥当な値になるのかに詳しく書いた


2.4.5.1. Months (月 (年と月))

月は、特定の先発グレゴリオ暦の月で、時間帯の情報を持たず、年と月以上の情報を持たない (この場合、年と月以上の情報とは、情報の精度なので日にちや時刻を指す)

妥当な月の文字列は以下の通り

  1. 年を表す4桁以上の0以上のASCII数字 (ゼロパディング)
  2. ハイフン (U+002D "-" HYPHEN-MINUS)
  3. 月を表す01から12まで2桁のASCII数字 (ゼロパディング)

桁指定があるのでゼロパディングする必要がある

例えば2005年2月は2005-02となる

325年3月を325-03と書くのは誤りである

2.4.5.2. Dates (日付 (年月日))

日付は、特定の先発グレゴリオ暦の日付で、時間帯の情報を持たず、年月日以上の情報を持たない (この場合、年月日以上の情報とは、情報の精度なので時刻を指す)

妥当な日付の文字列は以下の通り

  1. 月を表す文字列
  2. ハイフン (U+002D "-" HYPHEN-MINUS)
  3. 日にちを表す01からその年の月の日数までの2桁のASCII数字 (ゼロパディング)

桁指定があるのでゼロパディングする必要がある

例えば2016年2月29日は2016-02-29となる

325年3月3日を325-03-03と書くのは誤りである

2.4.5.3. Yearless dates (年の無い日付 (月と日))

年がない日付はグレゴリオ暦の月と日で構成され、年の情報はない

妥当な年の無い日付の文字列は以下の通り

  1. 2文字のハイフン (U+002D "-" HYPHEN-MINUS)があってもよい
  2. 月を表す2桁の01から12までASCII数字 (ゼロパディング)
  3. ハイフン (U+002D "-" HYPHEN-MINUS)
  4. 日にちを表す01からその年の月の日数までの2桁のASCII数字 (ゼロパディング) からなる文字列が妥当な年がない日付の文字列となる (2月はうるう年として29日にすることができる)

桁指定があるのでゼロパディングする必要がある

例えば2月29日は02-29となる

2.4.5.4. Times (時刻 (時分秒))

時刻は時間帯の情報を持たない特定の時、分、秒及び小数点以下の秒で構成されます

妥当な時刻の文字列は以下の通り

  1. 時を表す0以上23以下の2文字のASCII数字
  2. コロン (U+003A ":" COLON)
  3. 分を表す0以上59以下の2文字のASCII数字
  4. 秒が0でないか、0を書く場合

    1. コロン (U+003A ":" COLON)
    2. 秒を表す0以上59以下の2文字のASCII数字
    3. 秒が0が整数ではないか、整数だが小数点以下を書く場合

      1. ピリオド (U+002E "." FULL STOP)
      2. 小数点以下の秒を表す1桁から3桁のASCII数字

60秒や61秒は書けないため、うるう秒は表現できない

例えば時は24時制で記述するため、午後7時45分は19:45となり、19:45は午後7時45分0秒となる

19:45:45.456は午後7時45分45.456秒となる


秒を書かなかった場合は0.0秒と見做され、小数点以下の秒を書かなかった場合は小数点以下0秒と見做される

2.4.5.5. Floating dates and times (浮動日時 (時間帯の情報がない日時 (年月日時分秒)))

浮動日時 (時間帯の情報がない日時)は特定の先発グレゴリオ暦の日付で、年月日時分秒及び小数点以下の秒をもち、時間帯の情報を持ちません

妥当な浮動日時の文字列は以下の通り

  1. 妥当な日付の文字列
  2. T (U+0054 "T" LATIN CAPITAL LETTER T) またはスペース (U+0020 " " SPACE)
  3. 妥当な時刻の文字列

正規化した (normalized) 妥当な浮動日時の文字列は以下の通り

  1. 妥当な日付の文字列
  2. T (U+0054 "T" LATIN CAPITAL LETTER T)
  3. 可能な限り短い文字列になるよう表記された妥当な時刻の文字列 (例えば秒が0.0の場合、秒の記述そのものを省略する)

年月日と時分秒の間に挿入されるスペースは、厳密にASCIIの文字コード U+0020 " " SPACEであって、2.4.1. Common parser idiomsの空白文字 (space characters) ではない

正規化した場合、日付と時刻の区切り子としてスペースは使えない為、Tにしておいた方が無難

2.4.5.6. Time zones (時間帯)

時間帯の相殺分 (time-zone offset; 以下単に時間帯) は符号付の時と分で構成される

妥当な時間帯の文字列は以下の通り

  • 時間帯が標準時間帯 (UTCと同じ) 場合、Z (U+005A "Z" LATIN CAPITAL LETTER Z) 1文字
  • または、次の順序の構成要素

    1. 時間帯の符号を表すプラス (U+002B "+" PLUS SIGN) または、時間帯の相殺分が0でない場合、マイナス (U+002D "-" HYPHEN-MINUS)
    2. 時間帯の時を表す0以上23以下の2文字のASCII数字
    3. コロン (U+003A ":" COLON) があってもよい
    4. 時間帯の分を表す0以上59以下の2文字のASCII数字

実際の時間帯の範囲は-12:00から+14:00で、時間帯の分は00、30、45のしかないが、将来を保証するものではないため、この書式では-23:59から+23:59となっている

正式な時間帯成立前の時代の時刻で時間帯を使用する場合、global date and timeも参照すること


ちなみに時点ではReady to check - Nu Html Checkerだと<time>2018-01-13T00:34-00:00</time>でもエラーもワーニングも表示されない

Microsyntax descriptions · validator/validator Wiki · GitHub でdatetime-tzの記載がthe time-zone information must be either “Z” or in the form “+hh:mm” or the form “-hh:mm”となっている為と思われる (実装は仕様だが、その仕様がHTML5.2の記述と異なっている)


2.4.5.7. Global dates and timesのvalid normalized global date and time stringを考えると、UTCと時差がない場合、必ずZを書くのが無難か

2.4.5.7. Global dates and times (世界的な日時)

世界的な日時は特定の先発グレゴリオ暦の日付で、年月日時分秒及び小数点以下の秒と時間帯の情報を持つ

妥当な世界的な日時の文字列は以下の通り

  1. 妥当な日付の文字列
  2. T (0054 "T" LATIN CAPITAL LETTER T) またはスペース (U+0020 " " SPACE)
  3. 妥当な時刻の文字列
  4. 妥当な時間帯の文字列

正規化した (normalized) 妥当な世界的な日時の文字列は以下の通り

  1. UTC時間帯に変換された妥当な日付の文字列
  2. T (0054 "T" LATIN CAPITAL LETTER T)
  3. UTC時間帯に変換された可能な限り短い文字列になるよう表記された妥当な時刻の文字列 (例えば秒が0.0の場合、秒の記述そのものを省略する)
  4. Z (U+005A "Z" LATIN CAPITAL LETTER Z) 1文字

年月日と時分秒の間に挿入されるスペースは、厳密にASCIIの文字コード U+0020 " " SPACEであって、2.4.1. Common parser idiomsの空白文字 (space characters) ではない

正規化した場合、日付と時刻の区切り子としてスペースは使えない為、Tにしておいた方が無難


20世紀半ばに世界標準時が形成される前の日時は、UTCではなくUT1 (経度から算出する太陽時) を用いる

また、ある場所の時間帯は夏時間の為に異なる可能性がある。

詳しくは W3C Working Group NoteのWorking with Time Zones参照

2.4.5.8. Weeks (週)

週は週の年と、月曜日から始まる7日間の期間を表す週の番号で構成されている

週の年、52または53の7日間の期間を有している

グレゴリオ暦に始まる7日間の期間は、1970年の週番号1と定義されている

グレゴリオ暦に始まる7日間の期間は、1970年の週番号1と定義されている

連続する週には順番に番号が割り振られる

その1年の週は、先発グレゴリオ暦が木曜日である場合53週になる

また、先発グレゴリオ暦が水曜日で年が400で割り切れるか、4で割り切れるが100で割り切れない場合53週になる (要するにうるう年)

それ以外の年は52週である

週の最終番号は、その年が53週の時53で、52週の時52である

その年の最初の週は先発グレゴリオ暦でも最初の木曜日を含む週である

ここで定義している週はISO 8601の週に相当する

妥当な週の文字列は以下の通り

  1. 年を表す4桁以上の0以上のASCII数字 (ゼロパディング)
  2. ハイフン (U+002D "-" HYPHEN-MINUS)
  3. W (U+0057 "W" LATIN CAPITAL LETTER W)
  4. 週番号を1以上、その年の最終番号以下の2文字のASCII数字 (ゼロパディング)
2.4.5.9. Durations (期間)

期間は特定の秒数で表す事の期間で構成される

月や年 (12か月) は特定の秒数ではないため、この仕様では月 (や年) を期間とすることはできない

妥当な期間 t を表す文字列は次の何れかの構成となる

  • P (U+0050 "P" LATIN CAPITAL LETTER P) とそれに続く1つ以上の順序性のある副構成要素で構成される

    日数、時数、分数は同数の秒数に対応する

    1. 日数を表す、1文字以上のASCII数字と D (U+0044 "D" LATIN CAPITAL LETTER D)
    2. T (U+0054 "T" LATIN CAPITAL LETTER T) とそれに続く1つ以上の順序性のある副構成要素で構成される

      1. 時 (間) 数を表す、1文字以上のASCII数字と H (U+0048 "H" LATIN CAPITAL LETTER H)
      2. 分数を表す、1文字以上のASCII数字と H (U+004D "M" LATIN CAPITAL LETTER M)
      3. 続く構成要素として

        1. 秒数を表す、1文字以上のASCII数字
        2. 秒数を表す、1文字以上のASCII数字
        3. ピリオド (U+002E "." FULL STOP) とそれに続く小数点以下の秒を表す1桁から3桁のASCII数字があってもよい
        4. S (U+0053 "S" LATIN CAPITAL LETTER S)

    この章の他の日付や時刻のマイクロ構文同様、ISO 8601で定義された形式の一つに基づく書式である

  • 任意の順序の、1つ以上の尺度 (scale) の異なる期間構成要素で、各構成要素を秒数で表した時の合計したものが、期間 t を秒数のみで表した場合と等しくなる

    妥当な継続時間 (duration time) を構成する文字列は次の通り

    1. 0文字以上の空白文字 (HTMLの用語でいうところの空白文字)
    2. 次に述べる秒数に等しい継続時間の尺度を時間単位とした、秒数を表す1文字以上のASCII数字
    3. もし、継続時刻の構成要素の尺度が1 (すなわち秒) である場合、ピリオド (U+002E "." FULL STOP) とそれに続く小数点以下の秒数を表す1から3文字のASCII数字
    4. 0文字以上の空白文字 (HTMLの用語でいうところの空白文字)
    5. 継続時間の数値時部分の尺度を表す文字を次の内から1文字

      W (U+0057 "W" LATIN CAPITAL LETTER W)
      w (U+0077 "w" LATIN SMALL LETTER W)
      週、尺度は604800
      D (U+0044 "D" LATIN CAPITAL LETTER D)
      d (U+0064 "d" LATIN SMALL LETTER D)
      日、尺度は86400
      H (U+0048 "H" LATIN CAPITAL LETTER H)
      h (U+0068 "h" LATIN SMALL LETTER H)
      時、尺度は3600
      M (U+004D "M" LATIN CAPITAL LETTER M)
      m (U+0006D 073 "m" LATIN SMALL LETTER M)
      分、尺度は60
      S (U+0053 "S" LATIN CAPITAL LETTER S)
      s (U+0073 "s" LATIN SMALL LETTER S)
      秒、尺度は1
    6. 0文字以上の空白文字 (HTMLの用語でいうところの空白文字)

    人間への可読性を優先し、ISO 8601に基づかない書式にしている

2.4.5.10. Vaguer moments in time (時刻が曖昧な瞬間)

次のいづれかに該当する文字列は、任意の時刻となる妥当な日付の文字列である

2.4.6. Colors (色)

単純な色、それぞれがsRGB色空間の赤緑青の色味を表す (10進法で) 0から255の3桁の8-bitの数値で構成されます

妥当な単純な色 (simple color) の文字列は7文字で、最初の文字は # (U+0023 # NUMBER SIGN)で、残り6文字はASCII16進数となり、最初の2桁が赤色、中間の2桁が緑色、最後の2桁は青色を表した16進数の数値になる (全てゼロパディング)

妥当な小文字の単純な色 (lowercase simple color) の文字列は7文字で、A (U+0041 "A" LATIN CAPITAL LETTER A) から F (U+0046 "O" LATIN CAPITAL LETTER F) を使わない妥当な単純な色である


HTML執筆者向けには大文字を使わない単純な色 (simple color) は小文字の単純な色 (lowercase simple color) と言う名前で記載されているが、ユーザーエージェント実装者向けの解析規則では連続する単純な色 (serializing simple color values) という表現が用いられているが、内容は同じようである

また、仕様では廃れた使われなくなった属性の中の色 (obsolete legacy attributes parse colors) を解析する為に、使われなくなった色の値の解析規則 (rules for parsing a legacy color value) も定められている

2.4.7. Space-separated tokens (空白区切りトークン)

一揃えの空白区切りトークン (set of space-separated tokens) とは、1文字以上の空白文字 (space characters) で区切られた0個以上の単語 (トークン (token)) 含む文字列で、単語は空白文字 を含まない1文字以上の文字列である

一揃えの空白区切りトークンの文字列は先頭または末尾に (連続する複数の) 空白文字を持っても良い

順不同の一揃えの一意の空白区切りトークン (unordered set of unique space-separated tokens) とは、トークンが重複していない一揃えの空白区切りトークンである

順序あり一揃えの一意の空白区切りトークン (ordered set of unique space-separated tokens) とは、トークンが重複していない一揃えの空白区切りトークンだが、トークンの順序に意味がある

一揃えの空白区切りトークンは、時に使える値が定められている

使える値が定められている場合、すべてのトークンは使える値でなければならず、他の値は不適合となる

使える値が定められていない場合、どんな値でも適合となる

一揃えの空白区切りトークンの値がどのようであるか (例えば、大文字小文字を区別するかどうか) は、その空白区切りトークン毎に定められている


区切り子としての連続する空白文字は、空白文字を飛ばす (skip white space) 処理により一括して飛ばされ、トークンとして収集されないアルゴリズムとなっているため、連続する空白文字 (space characters) は単一の区切り子となる

split a string on spacesアルゴリズムにはLet tokens be an ordered list of tokens, initially empty.と書かれているので、順不同の一揃えの一意の空白区切りトークン (unordered set of unique space-separated tokens) であっても内部的には順序を保持した状態のトークンに分割される

2.4.8. Comma-separated tokens (カンマ区切りトークン)

一揃いのカンマ区切りトークンは、カンマ (U+002C ","COMMA) で区切られた文字0個以上のトークンを含む文字列で、各トークンは0文字以上のカンマを含まない任意の文字で、トークンの前後を空白文字が囲んでいてもよい

例えば " a ,b, ,d d ""a""b"、空文字列、"d d"の4つのトークンになる

トークンの先頭と末尾の空白文字はトークンに含まれず、空文字列 (0文字の文字列) はトークンになる

一揃いのカンマ区切りトークンは、時に使える値が定められている

使える値が定められている場合、すべてのトークンは使える値でなければならず、他の値は不適合となる

使える値が定められていない場合、どんな値でも適合となる


空白区切りトークン (Space-separated tokens) と異なり、unorderedまたはordered Comma-separated tokensの記載は見当たらないが、split a string on commasアルゴリズムにはLet tokens be an ordered list of tokens, initially empty.と書かれているので内部的には順序を保持した状態のトークンに分割される

また、仕様に制約として記述はないがsplit a string on commasアルゴリズム上、emptyのトークンが1つだけのカンマ区切りトークンは記載できないものと思われる (""は0個のトークンとなり、","は2つのemptyのトークンとなるため)

2.4.9. References (参照)

Type型の要素に対する妥当なハッシュ名による参照 (valid hash-name reference) は、1文字の # (U+0023 "#" NUMBER SIGN) に続く、文書内のtype型の要素のname属性の値と正確に一致する文字列です

Type型の要素に対するハッシュ名による参照の解析規則は、コンテキストノードから解析範囲 (scope) が与えられた場合次の通りです

  1. 解析対象の文字列に # (U+0023 "#" NUMBER SIGN) が含まれていないか、文字列の最初の文字が最後の文字である場合、null を返却して処理を中断する
  2. 解析対象の文字列の # (U+0023 "#" NUMBER SIGN) の直後の文字から最後の文字までを文字列 s とする
  3. 文字列 s と大文字小文字を区別する (case-sensitive>) 比較で同一の値を持つid属性か、文字列 s と互換活字状態を区別しない (compatibility caseless) 比較で同一の値を持つname属性を持つ、解析範囲 (scope) をルートとした木構造の順序 (tree order)で最初の type 型を持つ要素を返す

自分で翻訳しておいて何ですが、何言っているかさっぱり分からない

文脈から、そのHTMLのURL末尾に#とname属性やid属性の値を記述すると、その属性を持つ要素をアンカーとして参照できる奴なのは分かるのだが

2.4.10. Media queries (メディアクエリー)

妥当なメディアクエリーリスト (valid media query list) の文字列は、Media Queriesの仕様の<media-query-list>製造物に一致するものである

空文字列、空白文字 (space characters) のみの文字列、メディアクエリーの仕様で定義されたユーザーの環境に一致するメディアクエリーリストの何れかに一致する場合、文字列はユーザの環境に一致する


自分で翻訳しておいて何ですが、何言っているかさっぱり分からない、その2

とりあえず、Syntaxの文脈なので Media Queries 参照

更に3. Syntax - Media Queries中でThe media query syntax is described in terms of the CSS2 grammar. As such, rules not defined here are defined in CSS2. The media_query_list production defined below replaces the media_list production from CSS2. [CSS21] と書かれているので更に 7.Media types - CSS2.1 も参照