[1] [[名前空間URI]] [DFN[<[CODE(URI)@en[http://www.w3.org/2000/xmlns/]]>]] は、[[XML名前空間]]において[[名前空間接頭辞]]を[[宣言]]するための[[属性]]で使われる特別な[[名前空間接頭辞]] [CODE(XML)@en[[[xmlns]]]] と関連付けられている[[名前空間名]]です。 [CODE(XMLa)@en[[[xmlns]]:]] で始まる名前の[[属性]] [WEAK[([[名前空間接頭辞]]を宣言するもの)]] と、 [[修飾名]]全体が [CODE(XMLa)@en[[[xmlns]]]] である[[属性]] [WEAK[([[既定名前空間]]を宣言するもの)]] の[CODE(InfoProp)[[[名前空間名]]]] (だけ) が [CODE(URI)@en[[[http://www.w3.org/2000/xmlns/]]]] となると定義されています。 [6] 仕様書: - [DOM2] - [DOM3] @@書きかけ * XML 構文との関係 @@書きかけ [3] [[名前空間接頭辞]]として [CODE(XML)@en[[[xmlns]]]] を使うときは、 この接頭辞と[[名前空間URI]] と関連付ける宣言 [CODE(XML bad example)[xmlns:xmlns="http://www.w3.org/2000/xmlns/"]] を[[要素]]の[[属性]]として記述しては'''なりません'''。 [[#comment]] * XML 情報集合との関係 @@書きかけ [[#comment]] * DOM との関係 [8] [[DOM]] では、[[名前空間属性]]も通常の[[属性]]と同じように[[要素]]の [CODE(DOMa)@en[[[attributes]]]] [CODE(DOMi)@en[[[NamedNodeMap]]]] に含まれていて、 [CODE(DOMi)@en[[[Attr]]]] [[節点]]として表されます。 そして、その [CODE(DOMa)@en[[[namespaceURI]]]] [[属性]]の値が [CODE(URI)@en[[[http://www.w3.org/2000/xmlns/]]]] となります。[[既定名前空間]]のための[[修飾名]]が [CODE(XMLa)@en[[[xmlns]]]] の[[属性]]についても、そうです。 [CODE(DOMm)@en[[[getAttributeNS]]]] などの[[属性]]にアクセスする[[メソッド]]類や [CODE(DOMm)@en[[[createAttributeNS]]]] のような[[属性節点]]を作成する[[メソッド]]も、 正しい[[名前空間属性]]の扱いに関して他の[[属性]]と区別はありません。 [9] ただし、 [CODE(DOMm)@en[[[setAttributeNS]]]] や [CODE(DOMm)@en[[[createAttributeNS]]]] のような[[属性]]を作成する[[メソッド]]では、[[名前空間URI]] と[[修飾名]]をチェックして、不整合があると[[例外]] [CODE(DOM)@en[[[NAMESPACE_ERR]]]] が発生することになっています。とはいえ、 そのチェックは全組合わせが仕様書 [SRC[DOM2, DOM3]] で規定されているわけではなく、この[Q[漏れ]]が意図的なのか誤りなのかはよくわかりません。 仮に仕様書の漏れが誤りであるなら、あるいは誤りとみなして独自にチェックを行う実装では、 [[属性節点]]に関する処理で[[名前空間URI]] と[[修飾名]]が整合していることを暗黙の過程として処理できます。 例えば [CODE(DOMa)@en[[[prefix]]]] [[属性]]を見るだけである[[属性]]が[[名前空間接頭辞]]を定義するための[[属性]]かどうかを判断できます。 [WEAK[([[既定名前空間]]のための[[属性]]の扱いには注意。)]] 仕様書の漏れが意図的なもので、[[名前空間URI]] と[[修飾名]]が不整合な内部状態が可能だとすると、 [[名前空間]]に関する実装の内部処理が煩雑化する可能性もあります。 @@書きかけ [[#comment]] * XPath 1.0 データ・モデルとの関係 @@書きかけ [[#comment]] * XML 以外の名前空間機構における扱い @@書きかけ [[#comment]] * 歴史 [5] この [[URI]] は、はじめ [[DOM水準2]] で[[名前空間属性]]の [CODE(DOMa)@en[[[namespaceURI]]]] [[属性]]の[[値]]として定義されました。 - [2] この名前空間名 [[URI]] は当初の仕様では規定されておらず、接頭辞 [CODE(XML)[xmlns]] は名前空間名には対応しない特殊なものとされていたが、 errata でこの URI と関連付けられた。 - [4] XML 名前空間 1.1 もこの名前空間名 URI を引き続き使用するようだ ()。属性値 (名前空間名) が URI から [[IRI]] に変更されていたり細かい点で色々違いがあるはずなのだが、基本的には上位互換だから同じ名前空間でもよいということか。 [[#comment]] * 関連 [7] 同様に特別な扱いがなされる[[名前空間URI]] として [CODE(URI)@en[<[[http://www.w3.org/XML/1998/namespace]]>]] ([[名前空間接頭辞]] [CODE(XML)@en[[[xml]]]]) があります。 [[#comment]] * メモ