名前空間とは、名前が格納される1次元空間である。name spaceの直訳である。
概要
名前は、異なるものを区別するためにつけられる。従って違うものに同じ名前をつけることは許されない。つまり、ある名前が使われると、その名前は原則として他のものを指すために使うことはできないのである。
一方で、辞書を思い浮かべればわかるように、すべての名前を辞書順に並べることができる。
空間(数学)について知識があるのならば、辞書順に並んだ名前を数直線という1次元空間上の点に見立てて、あるものが使っている名前を他のものが使うことができないという名前の性質が、空間内の点(名前)を占有されると他のものがその空間(名前)を使うことができなくなるという空間の性質に合致することがイメージできるはずである。[1]
名前が被ってしまう事態(名前空間における衝突などと呼んだりする)を、いかにして回避しているかということについて、各分野について個別に述べる。
ニコニコ大百科
ニコニコ大百科でも記事が増えるに従って、名前空間上の衝突が増え、曖昧さ回避で解決することが一般的となった。特に生放送については衝突が非常に多かったため、生放送カテゴリが作られるに至った。
Document Type Definition(DTD)
HTMLやXMLのソースを読んだことがある人なら、そのヘッダーに <html lang="ja" xmlns="http://www.w3.org/1999/xhtml" xmlns:og="http://ogp.me/ns#" xmlns:fb="http://www.facebook.com/2008/fbml"> といったURLを含んだ呪文のような文言を目にしたことがあるのではないだろうか。
このURLの部分はオフラインではアクセスできないのにどうするんだろうかと疑問に思ったことはないだろうか。
xmlnsというのは、XML name spaceの略で、XMLのタグに使用する名前が被っても、異なるxmlnsに属するなら区別できるようにするためのものである。
つまり、本当はURLでなくてもよいはずだが、通常は世界中で他人と被らず、XMLを使う人がたいてい持っていそうなものということでURLを使うのが慣習になっている。別にxmlnsに定義されているURLにアクセスして何かをダウンロードしてくるわけではない。
プログラミング
プログラミングでは変数などに名前をつけることは日常茶飯事だが、プログラミングが大きくなってくるに従ってnameとかindexとか、つけようとする名前がかぶることが多くなってくる。
多くのプログラミング言語ではスコープという概念を導入し、変数を参照できる範囲を制限している。スコープが重ならなければ、同じ名前でも違う変数を参照していることがわかるので問題ないという仕組みである。
他の人が作ったライブラリのインポートによりライブラリの変数名と、自分の書いたソースコードにある変数名がかぶってしまったりすると、名前空間が汚染されるなどといったりする。ライブラリの変数側にライブラリ名を付け足したりして名前の重複を回避することが多い。
現実
そうはいいつつも、実社会では、文脈によって問題なく通じてしまうことも多く、同じ名前に2つ以上意味があってもそのままになっているのが実情である。こまけぇこたぁいいんだよ!!
もっとも、登録商標のようにお金が絡むような場合はその限りではない。完全に一致していない名前ですら、似ている似ていないで激しい争いになったりする。細かい事が大切です。
関連項目
- 空間(数学) / 1次元
- 辞書
- ニコニコ大百科:記事名 / 曖昧さ回避 / 生放送記事 / カテゴリ
- XML / HTML
- プログラミング / 変数 / プログラミング関連用語の一覧
- 登録商標 / 不正競争防止法
- 可算無限と非可算無限
脚注
- *さらに想像力が働くのならば、その1次元空間には可算無限の密度で要素(名前)が存在していて、旧支配者のような正確に呼ぶことが出来ない存在の名前はその要素の隙間に不可算無限の密度で存在しているかもしれないと思い当たるかもしれないが、それ以上深く考えてはいけない。ああ、窓に!窓に!
- 1
- 0pt