[1]
名前空間URI <http://www.w3.org/2000/xmlns/
>
は、XML名前空間において名前空間接頭辞を宣言するための属性で使われる特別な名前空間接頭辞
xmlns
と関連付けられている名前空間名です。
xmlns:
で始まる名前の属性
(名前空間接頭辞を宣言するもの) と、
修飾名全体が xmlns
である属性
(既定名前空間を宣言するもの)
の名前空間名
(だけ) が
http://www.w3.org/2000/xmlns/
となると定義されています。
[6] 仕様書:
[3] 名前空間接頭辞として xmlns
を使うときは、
この接頭辞と名前空間URI と関連付ける宣言
xmlns:xmlns="http://www.w3.org/2000/xmlns/"
を要素の属性として記述してはなりません。
[8]
DOM では、名前空間属性も通常の属性と同じように要素の
attributes
NamedNodeMap
に含まれていて、 Attr
節点として表されます。
そして、その namespaceURI
属性の値が http://www.w3.org/2000/xmlns/
となります。既定名前空間のための修飾名が xmlns
の属性についても、そうです。 getAttributeNS
などの属性にアクセスするメソッド類や createAttributeNS
のような属性節点を作成するメソッドも、
正しい名前空間属性の扱いに関して他の属性と区別はありません。
[9]
ただし、 setAttributeNS
や createAttributeNS
のような属性を作成するメソッドでは、名前空間URI
と修飾名をチェックして、不整合があると例外 NAMESPACE_ERR
が発生することになっています。とはいえ、
そのチェックは全組合わせが仕様書 DOM2, DOM3
で規定されているわけではなく、この漏れ
が意図的なのか誤りなのかはよくわかりません。
仮に仕様書の漏れが誤りであるなら、あるいは誤りとみなして独自にチェックを行う実装では、
属性節点に関する処理で名前空間URI と修飾名が整合していることを暗黙の過程として処理できます。
例えば prefix
属性を見るだけである属性が名前空間接頭辞を定義するための属性かどうかを判断できます。
(既定名前空間のための属性の扱いには注意。)
仕様書の漏れが意図的なもので、名前空間URI と修飾名が不整合な内部状態が可能だとすると、 名前空間に関する実装の内部処理が煩雑化する可能性もあります。
[5] この URI は、はじめ DOM水準2
で名前空間属性の namespaceURI
属性の値として定義されました。
[7]
同様に特別な扱いがなされる名前空間URI
として <http://www.w3.org/XML/1998/namespace>
(名前空間接頭辞 xml
) があります。