* [CODE(DOMi)@en[Attr]] インターフェイス (DOM) [13] [[DOM1]] で[RUBYB[属性節] [[CODE(DOM)[Attr]] node]]が持つことが出来る子[[節]]の種類は、 [[Text]] と [[EntityReference]] の2種類です。 [14] [[DOM]] の文書木・節モデルの中では、[[属性]]はやや特殊な位置づけになっています。 - [CODE(DOM)[Attr]] 節は、文書木の中には現れません。 - 親節・兄弟節はありません。 (取出す method の結果は [CODE(DOM)[null]]。) - [[DTD]] で既定値が宣言されている場合には、その要素の属性値が明示されていない場合に常にその既定値が設定されていることとなります。 - [CODE(DOM)[[[DocumentFragment]]]] 節の直接の子要素にはできません。 - [CODE(DOMattr)[[[nodeValue]]]] では属性値文字列が、 [CODE(DOMa)[[[childNodes]]]] では [CODE(DOM)[[[Text]]]] 節及び [CODE(DOM)[[[EntityReference]]]] 節の組合せによる属性値の表現が得られます。 [15] [CODE(DOMi)[[[Node]]]] を継承して、 ,読取専用属性 ,[CODE(DOMa)[[[name]]]] ,名前 ,[DOM1] ,読取専用属性 ,[CODE(DOMa)[[[specified]]]] ,指定されているか ,[DOM1] ,属性 ,[CODE(DOMa)[[[value]]]] ,値 ,[DOM1] ,読取専用属性 ,[CODE(DOMa)[[[ownerElement]]]] ,親要素節 ,[DOM2] - [DOM1] ''Document Object Model (Core) Level 1'' - [DOM2] ''Document Object Model Core'' - [4] 親節になれるのは [CODE(DOM)[[[Element]]]] 節だけです。 - [5] DOM 1 は、属性の型は分からないかもしれないから字句化値を扱う機能は提供しないといっています。ですから、例えば [CODE(XML)[IDREFS]] 型属性値の3番目の [CODE(XML)[ID]] を取り出したい、という場合には、属性値全体を受け取ってそれを勝手に解析する必要があります。 [16] [CODE(DOMi)[Attr]] 節点の子孫である [CODE(DOMi)[[[EntityReference]]]] 節点の子供は [CODE(DOMi)[[[EntityReference]]]] または [CODE(DOMi)[[[Text]]]] しか認められない・・・はずですが、 [[DOM]] の仕様書にはそんなこと一言も書いてないな。 [17] [[DOM]] の仕様書には [CODE(DOMi)@en[[[Attr]]]] は他の種類の [CODE(DOMi)@en[[[Node]]]] とは違って [CODE(DOMi)@en[[[Element]]]] と切り離せないものだとかなんとか説明がありますが、 それでいてなぜか [CODE(DOMi)@en[[[Attr]]]] が単独で存在できたりします。 それ自体は値を持たずに[[子孫]]がいたり。 [18] [PRE[ Interface AttrExtended IDL Definition attribute boolean type; Attributes isClassAttribute of type boolean Whether the attribute is a class attribute or not. If it is a class attribute, the value is "true"; otherwise, "false". Note that not all attributes whose local name is "class" is a class attribute. ]PRE] [19] [[Chrome]] は [[DOM3]] の規定通り [CODE(DOMi)@en[[[Attr]]]] の[[子供]]に [CODE(DOMi)@en[[[Text]]]] が来る構造になっていて、通常の [CODE(DOMi)@en[[[Node]]]] として操作できます。 しかし [[WinIE]] や [[Gecko]] は [[DOM4]] の規定のように [CODE(DOMi)@en[[[Attr]]]] の値を[[節点]]としては扱っていません。 [CODE(DOMa)@en[[[childNodes]]]] は空ですし、 [CODE(DOMm)@en[[[appendChild]]]] は [CODE(DOMe)@en[[[HierarchyRequestError]]]] になります。 [TIME[2012-12-15T13:41:44.200Z]] [20] [CITE[IRC logs: freenode / #whatwg / 20121213]] ( ([TIME[2012-12-17 21:09:20 +09:00]] 版)) [21] [CITE@en[Re: ''''''[''''''DOMCore'''''']'''''' Attr]] ( ([[Jonas Sicking]] 著, [TIME[2010-09-11 01:28:14 +09:00]] 版)) [22] [CITE@en-US[Attr - Document Object Model (DOM) | MDN]] ( ([TIME[2012-09-30 03:37:57 +09:00]] 版)) * 属性 (SGML) [1] > :(141) (要素の) 属性 [attribute (of an element)]: [[型]]及び[[内容]]を除く[[特質]]。 [SRC[[[JIS X 4151]]‐1992 3.]] [2] [[SGML]] では[[要素型]]や[[要素]]の[[内容]]も広い意味では[Q[属性]]に含まれます [SRC[JIS X 4151‐1992 参考]]。 [[SGML]] [[規格本体]]で特に [Q[要素の属性]]として定義されているものはそれ以外、 すなわち[[属性指定]]で指定され得る形式的な属性のみを指すべく >>1 のように説明されています。 * 属性 (XML) [3] > :[RUBYB[属性] [attribute]]: 属性は [[DTD]] で宣言される[[要素]]の[[引数]]です。 [[属性]]の[[型]]と[[値域]]、更に場合によっては[[既定値]]は [[DTD]] で定義されます。 仕様書: - [[XHTML 1.0]] -- [CITE[2.2. General Terms]] [7] [CITE[IRC logs: freenode / #whatwg / 20090925]] ([TIME[2009-11-17 00:09:05 +09:00]] 版) * 属性情報項目 (XML 情報項目) [6] [[Atom]] や [[AtomPub]] の仕様書では、「[[属性]]」は[[属性情報項目]]を意味します。 ;;[CITE@en[RFC 5023 - The Atom Publishing Protocol]] ([TIME[2008-11-20 18:52:14 +09:00]] 版) * 属性の変化 [23] [[要素]]の[[属性]]が変化した時の[[要素]]・[[属性]]依存の動作を記述するためのフックが [[DOM Standard]] で4つ定義されています [SRC[[[DOM Standard]]]]。 [FIG[ - [24] [DFN[[RUBYB[[[属性の設定]]]@en[attribute is set]]]] -- [[要素]]の [[ID]] と [CODE(HTMLa)@en[[[id]]]] [[属性]]の同期 -- [[要素]]の[[クラス]]と [CODE(HTMLa)@en[[[class]]]] [[属性]]の同期 - [25] [DFN[[RUBYB[[[属性の追加]]]@en[attribute is added]]]] - [26] [DFN[[RUBYB[[[属性の変更]]]@en[attribute is changed]]]] - [27] [DFN[[RUBYB[[[属性の削除]]]@en[attribute is removed]]]] -- [[要素]]の [[ID]] と [CODE(HTMLa)@en[[[id]]]] [[属性]]の同期 -- [[要素]]の[[クラス]]と [CODE(HTMLa)@en[[[class]]]] [[属性]]の同期 ]FIG] [28] 設定は追加・変更のどちらかと同時に起こります。 [29] [[HTML Standard]] はこれらのフックを使っていませんが、[[属性]]が変化した時に次のような処理が連動して行われます。 [FIG[ - [CODE(HTMLe)@en[[[base]]]] [CODE(HTMLa)@en[[[href]]]] - [[凍結基底URLを設定]] ]FIG]