XHTMLはHTMLにXMLの拡張性を持たせた拡張可能なHTML(Extensible HyperText Markup Language)です。ここではその拡張性はひとまず置いといてHTMLからの移行とその注意点を取り上げていきたいと思います。
文字コードがUTF-8、UTF-16ではない場合には最初の行にXML宣言を追加する必要があります。また、XMLではXML宣言から始めるのが好ましいということでUTF-8であったとしても宣言しておいたほうがいいかもしれません。
文字コードがShift_JISの場合は
<?xml version="1.0" encoding="Shift_JIS"?>
の一行を最初に追加します。
XHTMLにはもちろんXHTMLのDTDがありますので文書型の宣言も変更します。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
HTMLでは言語の指定にlang属性を使用していましたがXHTMLではxml:langを使用します。またHTMLとの互換性のためにlang要素も残しておきます。
HTMLでは
<html lang="ja">
XHTMLでは
<html lang="ja" xml:lang="ja">
XMLはその拡張性からしばしば同じ名前の属性などがマークアップ言語間で違う意味で宣言されていたりします。そうしたことを防ぐためにマークアップ言語に一意の名前を与えるためのものです。
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja">
HTMLでは終了タグが省略可能なもの、またはHTML要素のように開始タグさえも省略可能な要素が存在しましたが、XHTMLではそれはできません。段落やリストの終了タグなどを見直してみる必要があります。
HTMLでは大文字も許可されていましたがXHTMLでは要素名、属性名はすべて小文字で書く必要があります。また、定義済みの属性値も大文字と小文字を区別するようにと第2版で修正されました。
HTMLでは場合によっては省略できましたが、これもすべて囲まなければいけません。
BRなどの空要素はXHTMLでは閉じる必要があります。XMLでは<br/>の形で閉じるのですが、XHTMLでは認識できないブラウザがあるかもしれないので<br />のように半角スペースをひとつ入れて閉じたほうがよいでしょう。
Button要素のDisabled属性のように属性名とその値が同じ属性は必ず属性名="属性値"と書く必要があります。
<button disabled="disabled">
JavaScriptやスタイルシートなどで<か & か ]]>を使用している場合、または対応していないブラウザのためにコメントの内容としていたものはすべて外部ファイルを使用しなければなりません。
CGIなどへパラメータを渡したりする場合に&が含まれている場合は実体参照で書く必要があります。
アンカーの名前付けやMap要素の名前付けなどで使用していたName属性ですが、XHTMLではこれはid属性へ置換する必要があります。
ここまで読んで嫌になった方もいらっしゃるかもしれませんが、HTML Tidyを使えばいくらか楽ができます。Tidyを使うにある、XHTML用のコンフィグサンプルを使用して既存のHTML文書をコマンドで渡せば上で書いたことはかなりの割合で変換してくれます。ざっと見たところ1行目に追加されるXML宣言にencoding属性を追加するくらいでしょうか。一度試してみてくださいね。