XHTMLに於ける名前空間について簡単に解説します。
名前空間とは、XMLに於いて要素名や属性名が衝突しないようにするために考案された概念です。
XHTMLのベースとなっているXMLでは、複数の応用言語を一つの文書で利用する事が可能になります。
しかしながら、それを認めてしまうと、例えばXHTMLの<p>要素と別の言語での<p>要素の区別が付かなくなってしまいます。
また要素だけでなく、属性についても同様の問題が起こります。
そこで、名前空間と言う概念を設けて、どちらの応用言語の要素・属性かを区別出来るようにしております。
XHTMLでは<html>要素にxmlns="http://www.w3.org/1999/xhtml"属性で名前空間に対応するURIとして http://www.w3.org/1999/xhtml を指定します。
一般にXML応用言語では、最上位要素(ルート要素)にてxmlns属性で名前空間に対応するURIを指定します。
xmlns属性の実際の書式は以下のようになります。
<要素名xmlns:名前空間接頭辞="名前空間に対応するURI"…>〜</要素名>
名前空間接頭辞とは、当該要素内で用いられる名前空間に付けられた名前です。
以後、この接頭辞が前についている要素や属性は、当該名前空間に属しているものとみなします。
:」が付く事になります。例えば、<html>要素が
<xhtml:html xmlns:xhtml="http://www.w3.org/1999/xhtml"…>〜</xhtml:html>
となっている場合、
<xhtml:p>要素はURI http://www.w3.org/1999/xhtml で示される名前空間に属している<p>要素と言う事になります。xhtml:href属性はURI http://www.w3.org/1999/xhtml で示される名前空間に属しているhref属性と言う事になります。xhtml接頭辞が付いております。xmlns属性で指定された接頭辞は、当該要素とその下位で有効になります。従って、<xhtml:html>要素自身もURI http://www.w3.org/1999/xhtml で示される名前空間に属している事になります。ところで、幾つもの応用言語を組合わせるとしても、その中で最もよく使われる応用言語があると言うケースは多いと考えられます。
例えば、XHTML文書内に他の応用言語を混在させた場合、XHTMLの要素属性が他の応用言語の要素属性に較べて多く書かれる事になり、いちいち接頭辞を付けるのは大変です。
そこで、一つだけ、デフォルトの名前空間を名前空間接頭辞無しで指定出来るようになっております。
すなわち、
<html xmlns="http://www.w3.org/1999/xhtml"…>〜</html>
とする事で、
<p>要素はURI http://www.w3.org/1999/xhtml で示される名前空間に属している<p>要素と言う事になります。href属性はURI http://www.w3.org/1999/xhtml で示される名前空間に属しているhref属性と言う事になります。尚、一つの要素に複数の名前空間を指定出来ます。
例えば、XHTMLとSVG(ヴェクタ画像をXMLで書くマークアップ言語)の名前空間を同時に指定する場合、文書の最上位要素となるXHTMLの<html>要素では以下のようになるでしょう。
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:svg="http://www.w3.org/2000/svg"…>〜</html>
こうする事で、
<p>要素など)はXHTMLのものとなり、<svg:rect>要素)はSVGのものと判別出来るようになります。
XHTML 1.xの名前空間に対するURIは何度も書いているように http://www.w3.org/1999/xhtml です。
現行のユーザエージェントでは、このURIで示される名前空間に属する<a>要素をXHTMLの<a>要素と認識してアンカーの機能を持たせるようにしているようです。
http://www.w3.org/1999/xhtml で示される名前空間はそう言ったXHTML独自の取扱いを行うべき名前空間としてプログラムされている訳です。逆を言えば、 http://www.w3.org/1999/xhtml 以外のURIで示される名前空間に属する<a>要素はXHTML以外の他のXML応用言語のものと見なしてアンカーとして機能しませんし、<img>要素で画像を埋め込む事も<link>要素でスタイルシートをリンクする事も出来なくなります。
ですから、XHTML文書では正しく<html>要素にxmlns="http://www.w3.org/1999/xhtml"属性を与えないとXHTML文書として使えなくなってしまう恐れがあります。
尚、現在策定作業中のHTML 5は、XMLとして取扱う事でXHTML 5となりますが、名前空間をきっちり定めなければなりません。
尚、現在策定されている XHTML 2.0では、名前空間を示すURIはXHTML 1.xのそれとは異なるものになる予定です。
このため、XHTML 2.0勧告後もそれより前の世代のXML対応ユーザエージェントでは、XHTML 2.0でマークアップされたXHTML文書を正しく取扱えないかも知れません(やはりアンカーが機能しないなどの問題が生じるでしょう)。