#?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]]
*メモ