* 仕様書 [REFS[ - [1] [CITE@en-US-x-hixie[HTML Standard]] ([TIME[2012-12-31 05:55:07 +09:00]] 版) - [4] [CITE[DOM Parsing and Serialization Standard]] ([TIME[2012-12-24 08:36:45 +09:00]] 版) ]REFS] [2] >>1 では [CODE(DOMi)@en[[[Document]]]] や [CODE(DOMi)@en[[[Element]]]] の[[子孫]]の[[直列化]]が規定されています。 >>4 では各種 [CODE(DOMi)@en[[[Node]]]] の[[直列化]]が規定されています。 * 誤り処理 [3] >>1 は[[名前空間整形式]]にならない場合[[例外]]を投げると規定しています。また適宜[[名前空間]]の [[fixup]] を行うよう指示しています。 >>4 でも[[例外]]は投げられますが[[名前空間]]の [[fixup]] はされないことがあります。 [5] [[Chrome]] はそれなりに[[名前空間]]の [[fixup]] を行なっているようです。しかし正しく直列化できない場合であっても[[例外]]は投げないようです。 [TIME[2013-01-02T07:57:35.700Z]] ;; [6] [[HTMLの直列化]]との整合性を考慮するなら、[[例外]]は投げないで無理に直列化する方が一貫した動作ではあります。 もちろんその場合再度[[構文解析]]しても元には戻りませんが。 * 名前空間 fixup [7] [[Chrome]] [SRC[[TIME[2013-01-03T13:03:33.100Z]]]] は [[XML文書]]での [CODE(DOMa)@en[[[innerHTML]]]] 取得の時、 - 元の[[要素]]・[[属性]]の [[QName]] をそのまま使います。 - [[名前空間接頭辞]]が[[宣言]]されていなければ、初出の[[属性]]の直後 ([[要素]]名なら最初) に追加の[[属性]]として[[名前空間宣言]]が出力されます。 -- [[名前空間接頭辞]]のない[[属性]]なら、 [CODE(XMLa)@en[[[xmlns]]]] になります。 -- その結果[[属性]]が重複したり、他の [[QName]] の解釈に影響してしまったりしても気にしません。 -- 同じ[[名前空間URL]]で他の[[名前空間接頭辞]]が[[宣言]]されているかどうかはこれに影響しません。 [8] [[Firefox]] [SRC[[TIME[2013-01-03T13:05:46.00Z]]]] は [[XML文書]]での [CODE(DOMa)@en[[[innerHTML]]]] 取得の時、 = 元の[[名前空間接頭辞]]が有効ならそのまま使います。 = そうでなければ同じ[[名前空間URL]]で最後に[[宣言]]された[[名前空間接頭辞]]があれば使います。 = [[要素]]の[[名前空間接頭辞]]が[[宣言]]されていなければ、最初に追加の[[属性]]として[[名前空間宣言]]が出力されます。 = [[属性]]の[[名前空間接頭辞]]が無いか[[宣言]]されていなければ、 [CODE[a0]]、[CODE[a1]]、... と順に割り振られた[[名前空間接頭辞]]が使われます。[[属性]]の直後に追加の[[属性]]として[[名前空間宣言]]が出力されます。 - [[null名前空間]]の[[要素]]に [CODE(XMLa)@en[[[xmlns]]]] [[属性]]で[[名前空間URL]]が指定されている場合、最上位の[[要素]]ならその[[属性]]は削除され、他の[[既定名前空間]]がある[[要素]]の[[子要素]]なら [CODE(XML)[xmlns=""]] が追加されます。 - [[要素]]の[[名前空間URL]]が[[名前空間属性]]と矛盾するなら、 [CODE[a0]]、... が割り振られます。