XHTMLのDTDと名前空間

HTMLを作成する場合、その要素と属性に関する仕様書に従った記述をしなくてはなりません。そうした仕様書を参照するために、明示的に宣言する DTD (Document Type Definition) があるように、XHTMLにも同様に DTDの宣言が必要です。

基本的なDTD
XHTMLDTDは、XML宣言後、次のように記述します。
 <?xml version="1.0" encoding="Shift_Jis"?>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" 
     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
HTMLでは、DTDの記述にも大文字と小文字の区別はありませんでしたが、XHTMLは厳密になっています。htmlHTML は異なります。上記のように記述すれば問題ありません。
DTDの記述によるブラウザの対応は、基本的には区別なく処理されるのが好ましいのですが、Microsoft Internet Explorerなどでは少々勝手が異なります。詳しくは、XHTML対応ブラウザをお読みください。
XHTMLのデフォルトの DTDは、上記 URIから参照されますが、XML文書でもあるので、別の DTDも参照できるのが大きな特徴でしょう。
名前空間
HTMLにおける html要素は最上位に位置づけられ言語コードなどが属性として記述されますが、XHTMLでは、さらに xmlns属性によって「名前空間」の URI を明示的に記述しなければなりません。XHTMLが、まさに XML文書であることを示すものです。
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">
名前空間(name space)とは、他のプログラム言語、例えば C言語では、プログラム内の変数や関数、クラスなどの識別子の住所として扱われていますが、XMLでも同じような意味があります。
XMLでは独自のマークアップ言語(語彙:ボキャブラリ)を自由に設計できますが、多くの人が利用する語彙は、標準的な語彙を共有する方が効率が良く、相互運用性も高まります。そこで、ひとつの XML文書を作成するのに、さまざまなマークアップ言語から語彙を拝借し、組み合わせて利用できるような仕組みが必要になります。たとえば論文を公開するのに、全体の構造や本文は XHTMLで記述しつつ、数式部分には MathML の語彙を、グラフには SVG の語彙を利用するという方法です。
このように複数の言語をモジュールとして組み合わせるためには、それぞれの語彙をきちんと区別できなければなりません。しばしば取り上げられる例としては、titleという名前を持つ要素が、ある時はページの「タイトル」を表したり、別の時は作者の「肩書き」を表したりすることがあり得るからです。
この問題を解決するためには、それぞれの語彙がユニバーサルな名前、つまり世界で一意に定まる名前を持つための方法が必要です。これを実現するのが、1999年に W3Cから勧告された XML名前空間 [ xmlns ] です。 XML名前空間は、語彙(要素タイプ名、属性名)を URIと組み合わせる(修飾する)ことで、複数の語彙を混在させるメカニズムです。
名前空間は、タグセットを組み合わせて利用できるようにするだけでなく、ウェブ上で共有または、交換される情報の意味を正確に示し、コンピュータに理解可能にするためにも、非常に重要な役割を果たします。以下はそのサンプルです。
以下は title要素がページの題目を示す XML文書とする。
 <title>XHTML講座</title> 
以下はtitle要素が作者の肩書きを示す XML文書とする
 <title>Producer banban</title> 
上記の2つの情報を1つの XML文書に記述すると
 <ComplexDocument>
 <title>XHTML講座</title>
 <title>Producer banban</title>
 </ComplexDocument> 
このデータを処理するアプリケーションソフトは、2種類の title要素を区別できず、うまく扱うことができなくなります。
そこで、それぞれの要素や属性に対して、名前空間と呼ばれるものを定義します。名前空間は、URIで識別され、上の例の前者は、http://banban/person という名前空間に属すると仮定してみます。そして、後者は http://banban/document という名前空間に属すると仮定した場合、この文書は以下のように記述できます。
 <ComplexDocument 
   xmlns:person="http://banban/person"
   xmlns:document="http://banban/document"> 
 <person:title>XHTML講座</person:title>
 <document:title>Producer banban</document:title> 
 </ComplexDocument> 
このように記述することで、それぞれの要素が具体的に、2つの title要素が別のものを示していることが明確に分かります。また、区別が可能になるだけでなく、具体的に何を示しているのかも分かります。
名前空間を示す URI は、全世界でユニークな名前を確保するために使用されているもので、URI の示す先に何かの情報が存在する必要はありません。また、何かの情報があることを期待してはいけません。
名前空間の問題は、DTDにおける名前空間のサポートが不十分といわれているので、そのために、他の スキーマ言語を求めるニーズが生まれる理由の1つとなっています。
名前空間は W3Cの勧告であり、XMLを一部拡張するような形で構成されています。


This Page is HTML4.01 Valid! 初版公開日 2002年12月22日   最新更新日 2004年3月17日
Copyright(C)2002〜 2004 banban@scollabo.com