倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

NamespaceContext

javax.xml.namespace.NamespaceContext インターフェース


NamespaceContenxt は、簡単に言えば、接頭辞と名前空間 URI のマップです。 接頭辞をキーにして名前空間 URI を取得したり、その逆をしたりできます。

ただし、1つの名前空間 URI に複数の接頭辞が関連づけられていることがあるので注意が必要です。 全ての接頭辞を取得したい場合は getPrefixes() メソッド*1を、任意の1つの接頭辞を取得したい場合は getPrefix() メソッドを用います。

もう少し具体的に各メソッドで返される文字列を見ていきましょう。

getNamespeceURI(String) メソッド

引数(接頭辞) 返り値(名前空間 URI
定義されている接頭辞 対応する名前空間 URI
定義されていない接頭辞 ""
"" デフォルト名前空間 URI*2  ただし、定義されていない場合は ""
"xml" "http://www.w3.org/XML/1998/namespace"
"xmlns" "http://www.w3.org/2000/xmlns/"
null IllegalArgumentException が投げられる

getPrefixes(String) メソッド

引数(名前空間 URI) 返り値(接頭辞の Iterator)
定義されている名前空間 URI (デフォルト名前空間 URI を含む) 対応する接頭辞全てを含む Iterator
定義されていない名前空間 URI 要素を持たない Iterator
"http://www.w3.org/XML/1998/namespace" "xml" のみを含む Iterator
"http://www.w3.org/2000/xmlns/" "xmlns" のみを含む Iterator
null IllegalArgumentException が投げられる

Iterator で返される接頭辞の順番は実装に依存します。

getPrefix(String) メソッド

引数(名前空間 URI) 返り値(接頭辞)
デフォルト名前空間 URI ""
定義されている名前空間 URI 対応する接頭辞(複数ある場合は適当に選出される)
定義されていない名前空間 URI null
"http://www.w3.org/XML/1998/namespace" "xml"
"http://www.w3.org/2000/xmlns/" "xmlns"
null IllegalArgumentException が投げられる

*1:このインターフェースは Java 5 以降から追加されたにもかかわらず、getPrefixes() で返される java.util.Iterator オブジェクトは Generics に対応していません。

*2:「デフォルト名前空間 URI」とは、「xmlns="..."」の形で宣言された名前空間です。