[13] [DFN[[[AttrExodus]]]] は、[[DOM]] の [CODE(DOMi)@en[[[Attr]]]]
の仕様を大幅に簡略化しようとする試みです。

[15] [[W3C DOM]] が規定していた[[内容属性]]に関する機能のうち、
[[XML]] に対応することなどを目的に必要以上に複雑化していた部分は、
2007年頃より [[Web DOM Core]] (現 [[DOM Standard]]) が新たに [[DOM]] 
仕様を規定しなおした際に省かれ、実装と仕様を大幅に簡略化することが試みられました。

[16] その後数年かけて徐々に実装も追随を試みましたが、その結果多くは
[[Web互換性]]のために必要であることがわかり、2014年にはほとんどの機能が仕様上も復活しています。

* 削除された機能

[34] 
[FIG(short list)[
- [CODE(DOMa)@en[[[isId]]]]
- [CODE(DOMm)@en[[[setIdAttribute]]]]
- [CODE(DOMm)@en[[[setIdAttributeNS]]]]
- [CODE(DOMm)@en[[[setIdAttributeNode]]]]
- [CODE(DOMa)@en[[[specified]]]] の値・[[偽]]
- [[子節点]]
- [[既定属性]]の暗黙的生成
]FIG]

* 削除に失敗し復活した機能

[14] 次の機能は削除されていました (一部は仕様書の[[注釈]]として隠されていました)
が、[TIME[2014年8月][2014-08]]までに削除できないことが明確になり、復活しました。

[35] [CODE(DOMi)@en[Node]] との継承関係は、[TIME[2016年8月][2016-08]]に復活しました。

[FIG(short list)[
- [CODE(DOMi)@en[[[Attr]]]] と [CODE(DOMi)@en[[[Node]]]] の継承関係
- [CODE(DOMm)@en[[[createAttribute]]]]
- [CODE(DOMm)@en[[[createAttributeNS]]]]
- [CODE(DOMm)@en[[[getAttributeNode]]]]
- [CODE(DOMm)@en[[[getAttributeNodeNS]]]]
- [CODE(DOMm)@en[[[setAttributeNode]]]]
- [CODE(DOMm)@en[[[setAttributeNodeNS]]]]
- [CODE(DOMm)@en[[[removeAttributeNode]]]]
- [CODE(DOMm)@en[[[hasAttributes]]]]
- [CODE(DOMa)@en[[[ownerElement]]]]
- [CODE(DOMa)@en[[[value]]]] [[setter]]
- [CODE(DOMa)@en[[[textContent]]]]
- [CODE(DOMa)@en[[[specified]]]]
- [CODE(DOMi)@en[[[NamedNodeMap]]]]
- [CODE(DOMe)@en[[[InUseAttributeError]]]]
]FIG]

* 歴史

[17] 対象となる機能は [[DOM0]] や [[IE4 DOM]] には存在せず、
[[W3C DOM]] 時代に追加されたものです。

[18] [[DOM1]] では [CODE(DOMi)@en[[[Node]]]] の一種としての [CODE(DOMi)@en[[[Attr]]]]
が導入され、それを操作する多くのメソッドが [CODE(DOMi)@en[[[Document]]]]
や [CODE(DOMi)@en[[[Element]]]] に追加されました。

[19] [[DOM2]] では[[XML名前空間]]に対応するために多くのメソッドに「NS」
をつけたコピーが追加されました。

[20] [[DOM3]] では [[ID属性]]に関する理論上不足していた機能を補うメソッドが追加されました。

[21] [[DOM2]] までの機能はほとんどの [[Webブラウザー]]が、
[[DOM3]] の機能は一部の [[Webブラウザー]]が実装しましたが、
全般的に必ずしも仕様通りの実装とはなっていませんでした。

[1] [CITE[IRC logs: freenode / #whatwg / 20140818]]
( ([TIME[2014-08-19 05:54:17 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20140818#l-224>

[2] [CITE@en[Bug 25016 – AttrExodus: Element.getAttributeNode]]
( ([TIME[2014-08-19 08:31:14 +09:00]] 版))
<https://www.w3.org/Bugs/Public/show_bug.cgi?id=25016>

[3] [CITE@en[Bug 21986 – AttrExodus: Element.attributes needs to have a named getter]]
( ([TIME[2014-08-19 08:36:52 +09:00]] 版))
<https://www.w3.org/Bugs/Public/show_bug.cgi?id=21986>

[4] [CITE@en[Bug 25093 – AttrExodus: "Setting the value attribute must change value t..."]]
( ([TIME[2014-08-19 08:37:36 +09:00]] 版))
<https://www.w3.org/Bugs/Public/show_bug.cgi?id=25093>

[5] [CITE@en[Bug 21522 – AttrExodus: Restore hasAttributes()]]
( ([TIME[2014-08-19 08:39:17 +09:00]] 版))
<https://www.w3.org/Bugs/Public/show_bug.cgi?id=21522>

[6] [CITE@en[Bug 26596 – Attr.value cannot be readonly]]
( ([TIME[2014-08-19 08:40:13 +09:00]] 版))
<https://www.w3.org/Bugs/Public/show_bug.cgi?id=26596>

[7] [CITE@en[Bug 25086 – AttrExodus: Attr should retain ownerElement property]]
( ([TIME[2014-08-19 08:40:56 +09:00]] 版))
<https://www.w3.org/Bugs/Public/show_bug.cgi?id=25086>

[8] [CITE@en[Bug 25370 – AttrExodus: Specify document.createAttributeNS]]
( ([TIME[2014-08-19 08:42:08 +09:00]] 版))
<https://www.w3.org/Bugs/Public/show_bug.cgi?id=25370>

[9] [CITE@en[Bug 25370 – AttrExodus: Specify document.createAttributeNS]]
( ([TIME[2014-08-19 08:42:08 +09:00]] 版))
<https://www.w3.org/Bugs/Public/show_bug.cgi?id=25370>

[10] [CITE[DOM: attributes sadness — Anne’s Blog]]
( ([TIME[2014-08-20 01:01:32 +09:00]] 版))
<http://annevankesteren.nl/2014/08/attributes>

[11] [CITE@en[611787 – (AttrExodus) Make Attr not inherit from Node]]
( ([TIME[2014-08-20 01:02:25 +09:00]] 版))
<https://bugzilla.mozilla.org/show_bug.cgi?id=611787>

[12] [CITE[IRC logs: freenode / #whatwg / 20140820]]
( ([TIME[2014-08-21 02:08:18 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20140820#l-424>

[22] [CITE@en[Define getAttributeNode''''''[''''''NS'''''']'''''' and removeAttributeNode · 5a881d9 · whatwg/dom]]
( ([TIME[2014-08-21 12:52:48 +09:00]] 版))
<https://github.com/whatwg/dom/commit/5a881d9b5f328f8e32f0fa8e73b4e8799772cb0c>

[23] [CITE@en[Re: ''''''[''''''DOMCore'''''']'''''' Attr]]
( ([[Jonas Sicking]] 著, [TIME[2010-09-11 01:28:14 +09:00]] 版))
<http://lists.w3.org/Archives/Public/public-webapps/2010JulSep/0797.html>

[24] [CITE@en[Put Attr.prototype.ownerElement back; give Attr.prototype.value a setter... · f64b0c8 · whatwg/dom]]
( ([TIME[2014-08-21 13:18:03 +09:00]] 版))
<https://github.com/whatwg/dom/commit/f64b0c82896d68ad534544ed8109ac41c175840d>

[25] [CITE@en[Add createAttribute and createAttributeNS :-( · 522710b · whatwg/dom]]
( ([TIME[2014-08-21 13:18:21 +09:00]] 版))
<https://github.com/whatwg/dom/commit/522710bc4be13d2e1d826f94c54d1de9956ec920>

[26] [CITE@en[Put hasAttributes() back. Fixes https://www.w3.org/Bugs/Public/show_bug.... · d0ff369 · whatwg/dom]]
( ([TIME[2014-08-21 13:21:30 +09:00]] 版))
<https://github.com/whatwg/dom/commit/d0ff369b1ccbbd428fd22c283d94535e5befe5c7>

[27] [CITE@en[Introduce NamedNodeMap for attributes. Clean up algorithms around attrib... · 8af4826 · whatwg/dom]]
( ([TIME[2014-08-21 13:21:33 +09:00]] 版))
<https://github.com/whatwg/dom/commit/8af48267390b971a2ac02c7005ba42c08264b7e1>

[28] [CITE@en[Define Element.prototype.setAttributeNode''''''[''''''NS'''''']'''''', removeAttributeNode, Name... · 12d0114 · whatwg/dom]]
( ([TIME[2014-08-21 13:32:42 +09:00]] 版))
<https://github.com/whatwg/dom/commit/12d011437faef5ada7b816c94aab39b10cdb2f4b>

[29] [CITE@en[INUSE_ATTRIBUTE_ERR makes a comeback · 142a129 · whatwg/dom]]
( ([TIME[2014-08-21 13:34:07 +09:00]] 版))
<https://github.com/whatwg/dom/commit/142a12980cf1b8a2da97b9d0624d9df001c7e926>

[30] [CITE@en[Add Attr.prototype.nodeValue per https://www.w3.org/Bugs/Public/show_bug... · 2b76ab8 · whatwg/dom]] ([TIME[2014-11-22 17:18:42 +09:00]] 版) <https://github.com/whatwg/dom/commit/2b76ab8f2426d545550d81053a962aac2f6d9e49>

[31] [CODE(DOMi)@en[[[Attr]]]] は [CODE(DOMi)@en[[[Node]]]] を[[継承]]しないとした変更も、
未だ実装がなく、実現が疑問視されています。この先旧来の仕様に戻される可能性もあります。
[TIME[2016-02-23T01:44:19.00Z]]

[32] [CITE@en[Fix #171: Add Attr#nodeName as an alias for name · whatwg/dom@90427aa]]
([TIME[2016-02-23 11:07:08 +09:00]] 版)
<https://github.com/whatwg/dom/commit/90427aa0aa267da88937fc83fb9023eb99f4dbcd>

[33] [CITE@en[Make Attr inherit from Node again]]
([[annevk]]著, [TIME[2016-08-19 21:44:07 +09:00]])
<https://github.com/whatwg/dom/commit/625a0747f137454c155a7b577a9e45be1aa35a34>