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に属することになるようです。

HTML / XHTML / XML / HTML5 違いについて

過去にこれらの違いについて理解しようと色々調べて、結局よく分からずモヤモヤした感じで終わってしまったのを覚えています。

多分それをあまり理解できていなくてもHTMLを書く上で問題ないとは思うのですが、技術書を読んでいて目にする度に少し気持ち悪いです。

スッキリしたいですし、良い機会なのでもう一度調べてみます。

HTMLとXML

元々、SGML(Standard Generalized Markup Language)というマークアップ言語が存在していて、それを改良して生まれたのがHTMLになります。

HTMLはWeb文書を書くのに特化して作られました。

その一方で、SGMLからまた別のXMLという言語も生まれました。

つまりHTMLとXMLは別の言語ではありますが、元を辿るといずれもSGMLという一つの言語から派生したものになります。

それぞれには以下のような特徴があります。

HTML

  • Web文書向け
  • あらかじめ使用できるタグが固定で決められている。
  • XMLより文法ルールが緩い(大文字・小文字の混在がOKなど)
  • レイアウト情報を持つ。 など

XML(eXtensible Markup Language)

  • データを保管するためのマークアップ言語
  • 名前の通り、拡張が可能(extensible)。つまり自分で好きなようにタグを定義できる。名前を表すタグが欲しいと思ったら、自分で作って”<名前></名前>”のような感じに使用できます。
  • HTMLより文法ルールが厳しい(要素名は小文字で統一しなければいけないなど)
  • レイアウト情報を持たない。 など

具体的にXMLマークアップされた文書は以下のようなものです。

<?xml version="1.0" encoding="Shift_JIS"?>
<?xml-stylesheet type="text/xsl" href="testxsl.xsl"?>
<おこづかい帳>
 <支出>
  <内容>
   <日付>1月20日</日付>
   <交通費>780</交通費>
   <食費>980</食費>
   <嗜好品>250</嗜好品>
  </内容>
  <内容>
   <日付>1月21日</日付>
   <交通費>950</交通費>
   <食費>1200</食費>
   <嗜好品>300</嗜好品>
  </内容>
  <内容>
   <日付>1月22日</日付>
   <交通費>500</交通費>
   <食費>1500</食費>
   <嗜好品>250</嗜好品>
  </内容>
 </支出>
</おこづかい帳>

*1

どちらも文書を構造化(意味付け)するための言語ですが、用途が違ったり異なる特徴を持っているんですね。

XHTML

のちに、HTMLをXMLの様に拡張可能にしてもっと便利にしたい!ということになりました。そして、HTMLをXMLの文法を用いて再定義することで生まれたのがXHTMLになります。

なんとなくXHTMLと聞くと、HTMLがバージョンアップしてできたものでは?と考えそうになりますが、それは正しくありません。正確には、XHTMLXMLを元にして生まれた言語です。

そのため、XHTMLとHTMLは異なる言語になります。XHTMLはHTMLにとても良く似たXMLと考えたほうが良いです。

XHTML

  • 既存のHTMLタグが使える。つまり普通にWeb文書が書ける。
  • 拡張が可能。XMLのように独自タグを作って使用できる。
  • HTMLより文法ルールが厳しい。

HTML5

XHTMLが登場してからは、HTMLとXHTMLの両方が長いあいだ利用されました。

しかしWebが更に普及・進化していくにつれて、Webページは文書構造を記述するだけではなく、PCやスマホにインストールして使用されるネイティブアプリケーションに近い見た目や使用感を持った、今でいうWebアプリケーションとしての役割も求められるようになっていきます。 当時のHTMLとXHTMLのままでは、Webアプリケーションとしての機能を実現することは困難でした。

そのため、のちにHTMLの機能を見直す大幅な改定が行われました。そうして、現在主流となっているHTML5が誕生した、ということらしいです。

[参考] *2 *3 *4 *5