HTMLを作成する場合、その要素と属性に関する仕様書に従った記述をしなくてはなりません。そうした仕様書を参照するために、明示的に宣言する DTD (Document Type Definition) があるように、XHTMLにも同様に DTDの宣言が必要です。
XHTMLの DTDは、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は厳密になっています。html と HTML は異なります。上記のように記述すれば問題ありません。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">
XMLでも同じような意味があります。XMLでは独自のマークアップ言語(語彙:ボキャブラリ)を自由に設計できますが、多くの人が利用する語彙は、標準的な語彙を共有する方が効率が良く、相互運用性も高まります。そこで、ひとつの XML文書を作成するのに、さまざまなマークアップ言語から語彙を拝借し、組み合わせて利用できるような仕組みが必要になります。たとえば論文を公開するのに、全体の構造や本文は XHTMLで記述しつつ、数式部分には MathML の語彙を、グラフには SVG の語彙を利用するという方法です。titleという名前を持つ要素が、ある時はページの「タイトル」を表したり、別の時は作者の「肩書き」を表したりすることがあり得るからです。W3Cから勧告された XML名前空間 [ xmlns ] です。 XML名前空間は、語彙(要素タイプ名、属性名)を URIと組み合わせる(修飾する)ことで、複数の語彙を混在させるメカニズムです。title要素がページの題目を示す XML文書とする。<title>XHTML講座</title>
XML文書とする<title>Producer banban</title>
XML文書に記述すると<ComplexDocument> <title>XHTML講座</title> <title>Producer banban</title> </ComplexDocument>
title要素を区別できず、うまく扱うことができなくなります。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>
title要素が別のものを示していることが明確に分かります。また、区別が可能になるだけでなく、具体的に何を示しているのかも分かります。 URI は、全世界でユニークな名前を確保するために使用されているもので、URI の示す先に何かの情報が存在する必要はありません。また、何かの情報があることを期待してはいけません。DTDにおける名前空間のサポートが不十分といわれているので、そのために、他の スキーマ言語を求めるニーズが生まれる理由の1つとなっています。W3Cの勧告であり、XMLを一部拡張するような形で構成されています。