NT

技術ブログ

XHTMLの名前空間宣言とは

現在、Webページの作り方を学ぶなら主流のHTML5を勉強することになると思うのですが、 私が参考にしている「ごく簡単なHTMLの説明」というサイトでは、大部分がHTMLとXHTMLがまだ主流だった頃の内容が解説されているようです。

そのため、唐突にXHTMLに関する解説が出てくるので、それがHTML5でも当てはまる知識なのか、覚えておいた方がいいのか、それともスルーすべきなのか迷います。。。

そのサイトの別のページを見ていると、名前空間なる概念が出てきました。これもXHTMLに関係するみたいです。なんでしょうかこれ。気持ち悪いので調べてみます。

また、 XHTML文書として多様な応用を可能にするために、html要素には名前空間を示すxmlns属性を記述します。

<html xmlns=“http://www.w3.org/1999/xhtml”>

名前空間

[参考] XML名前空間の簡単な説明

XHTMLXMLを用いて作られています。そのため、上述したように独自タグを使用できるという特徴を持ちます。自分で作ったタグを使用することもできますが、誰かが作った出来合いのタグのセットを拝借して使用することもできます。

後者の場合、複数のタグのセットを組み合わせて利用することもあるかと思います。そうなると気をつけなければいけないのが名前の衝突(ダブリ)です。

例えばAとBのタグセットを組み合わせたときに、たまたまAとBの両方にtitleという名前を持つ要素がそれぞれ存在していました。 Aの中にあるtitle要素は本の題名を表しており、Bの中のtitle要素は作者の肩書を表しています。 しかし、なにも対策をしない状態でのように使用してしまうと、それがAとBのどちらのタグセットからのtitle要素なのか分からないですね。要は名前の衝突が起きてしまっています。

これを解消するために利用するのが、xmlns属性です。 先程の問題を解決するには、title要素を使用する前に名前空間の宣言を行います。

以下が名前空間宣言で、bookはAのタグセット(を表すURI)、profはBのタグセット(を表すURI)に対応していますよ、と宣言しています。

<body xmlns:book=“http://example.com/ns/book/“
      xmlns:prof=“http://example.com/ns/profile/“><book:title>ユニバーサルHTML/XHTML</book:title>   (1)
  …
  <prof:title>コントラバス奏者</prof:title>                 (2)
   …

*1

↑をみると、宣言のあとに使用しているtitle要素の頭にはbookやprofという接頭辞が付与されています。このようにして、どのタグセットからの要素なのかを明示することで、名前の衝突を回避しているわけですね。

で、先程はxmlns:book="URI"xmlns:prof="URI"のように宣言されていましたが、xmlns="URI"のように接頭辞が省略されている場合はどういった意味を持つのでしょうか。

このように接頭辞を省略したxmlns属性による宣言をデフォルト名前空間といいます。こうすることで、宣言のある要素以下の接頭辞の付いていないタグ(デフォルトのタグ)はデフォルト名前空間宣言で指定したURIに属することになるようです。