#?SuikaWiki/0.9 *prefix 属性 (DOM Node 界面) [1] [[DOM2]] の属性 [CODE[[VAR(DOMi)[[[Node]]]].[CODE(DOMa)[prefix]]]] は、その節の[[名前空間接頭辞]]です。 [2] 値: ,[CODE(DOM)[[[DOMString]]]],名前空間接頭辞,下記以外の場合 ,[CODE(DOM)[null]],==,接頭辞なしの場合 ,[CODE(DOM)[null]],==,節の種類が要素又は属性のいずれでもない場合 ,[CODE(DOM)[null]],==,節が DOM 1 method で作成された場合 [3] 設定時の[[例外]]: ,[CODE(DOM)[INVALID_CHARACTER_ERR]],接頭辞に不正な文字 ,[CODE(DOM)[NO_MODIFICATION_ALLOWED_ERR]],節は読取専用 ,[CODE(DOM)[NAMESPACE_ERR]],予約名の不正な使用 [4] この属性の変更により、自動的に [CODE(DOMa)[[[nodeName]]]] 属性などの値も変更されます。 (逆はありません。 [CODE(DOMa)[nodeName]] などは読取専用です。) この属性を変更しても、それに合わせて [CODE(DOMa)[[[namespaceURI]]]] 属性などが変化することはありません。 また、この属性を変更することによって、 既定値を持つ属性が再生されることはありません。 [5] >>4 の3つ目の話は、たとえばこんな例です。 [PRE[ DTD 断片: 文書実現値断片: ]PRE] ここで、 [SAMP(XML)[prefix1:attr1]] 属性の節の [CODE(DOMa)[prefix]] 属性の値を [SAMP(XML)[prefix2]] に変更したとします。 これが接頭辞の変更ではなく、 例えば属性節の削除であったなら、 [CODE(DOMa)[nodeName]] が [SAML(XML)[prefix1:attr1]] で [CODE(DOMa)[nodeValue]] が [SAMP(XML)[default]] である新たな属性節が「再生」 してくるところです。しかし、単なる接頭辞の変更の場合は、 この「再生」は起こりません。 [6] >>5 もし [SAMP(XML)[prefix2:attr1]] が DTD の既定値で定義されていたらとか考えてみると嫌になりますね。 [7] >>6 こんな処理とか。 =[SAMP(XML)[prefix2:attr]] を [SAMP(XML)[prefix3:attr]] にする。 =[SAMP(XML)[prefix1:attr]] を [SAMP(XML)[prefix2:attr]] にする。 =[SAMP(XML)[prefix3:attr]] を削除する。 =元来の [SAMP(XML)[prefix2:attr]] が既定値で復活する。 =この後、 [SAMP(XML)[prefix2:attr]] を呼んだ時に、どちらの節が選ばれるかは処理系定義。 [8] >>5-7 [[DTD]] と XML 名前空間の相性の悪さに、 DOM と XML 名前空間の相性の悪さ, DOM と DTD の相性の悪さが絡まってやな感じになっているというか。 教訓: -名前空間接頭辞の編集なんてするな。 -名前空間[[宣言]]はできるだけ当たり障りのないように。 -それ以前に名前空間を考えない文書・処理系は作るな。 -[DOM2] ''Document Object Model Core'' [[#comment]] *メモ