* 列挙属性 (HTML)
[7] [[HTML]] では、有限個の[[キーワード]]のいずれかを取る[[属性]]を[DFN[[RUBY[列挙属性][れっきょぞくせい]@en[enumerated attribute]]]]といいます。
[SRC[[[Web Applications 1.0]]]]
[8] [[列挙属性]]は、それに対応する[DFN[[RUBY[状態]@en[じょうたい]@en[state]]]]]を持ち、
[[属性値]]によってどの[[状態]]にあるかが決定します。
** 仕様書
- [9] [[Web Applications 1.0]]
--
** 状態
[11] [[列挙属性]]では、
-[[属性値]]となるキーワード ([[空文字列]]であることもある)
-キーワードが[[適合]]か[[不適合]]か
-キーワードと[[状態]]の対応
-[[非妥当値既定値]]
-[[欠値既定値]]
が定義されます。 (2つの既定値はないこともあります。)
= [[属性値]]がキーワードと[[ASCII大文字・小文字不区別]]でいずれかのキーワードに一致すれば、そのキーワードに相当する[[状態]]であるとします。(キーワードが適合か不適合かはここには関係しません。)
= そうでない場合で、[[属性]]が[[指定]]されている場合は、[DFN[[RUBYB[非妥当値既定値]@en[invalid value default]]]]があれば、その[[状態]]であるとします。
= そうでない場合で、[DFN[[RUBYB[欠値既定値]@en[invalid value default]]]]があれば、その[[状態]]であるとします。
= それ以外の場合、どの[[状態]]でもありません。
** 歴史
*** SGML HTML 時代
[10] [[HTML]] の[[列挙属性]]は [[SGML]] の[[列挙型]]の[[属性]]に遡ります。
[[HTML4]] までの [[HTML]] 仕様は [[SGML DTD]] を使って記述されていましたので、
[[SGML]] で[[属性型]]が[[列挙型]]で規定されているものが[[列挙属性]]とされていました。
それらは後に [[XHTML]] でも [[XML DTD]] 上で[[列挙型]]として記述されました。
** Web Forms 2.0
[2]
[[Web Forms 2.0]] では、いくつかの[[属性]]が、
決められた値のうちのいずれかを取ると定義されていました。
従来の版の [[HTML]] では[[列挙型]]の[[属性]]や[[ブール型属性]]と呼ばれていたものがそれにふくまれました。
*** 仕様書
[3]
- [[Web Forms 2.0]]
-- [CSECTION@en[2.3. Changes to existing controls]]
*** 比較と正規化
[4] '''大文字と小文字''':
[[属性値]]の[[比較]]は、[[大文字・小文字不区別]]で行います。
[SRC@en[WF2 2.3]]
[5] '''空白''':
[[Web Forms 2.0]] では、 [[HTML 4]] の定義とは異なり、
[[空白]]の削除は[['''してはなりません''']]。
[SRC@en[WF2 2.3]]
;; 但し、使用している [[DTD]] によっては、
[[XML]] の規則に従い、 [[HTML]] レベルの処理以前に[[属性値]]の[[空白]]の[[正規化]]が行われているかもしれません。
[6] 従って、 [[HTML文書]]
[PRE(HTML invalid example code)[
]PRE]
は[[不適合]]です。
* 列挙型 (SGML)
[1] [[WebSGML]] では同じ[[要素型]]の複数の列挙型の[[属性]]で、選択肢として同じ[[名前字句]]が含まれていてもかまいません。
例 : (素の SGML では不当、 Web SGML では妥当)
[PRE[
]PRE]
しかしながら、この場合、重複した値が使われる[[属性指定]]では[[属性名]]の省略ができなくなります。
(K.4.4.2 参照。)
例 :
-○ [SAMP(SGML)[]]
-○ [SAMP(SGML)[]]
-× [SAMP(SGML)[]]
-○ [SAMP(SGML)[]]
-× [SAMP(SGML)[]]