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
を一部拡張するような形で構成されています。