Wrong HTML - XHTML 1.0へ移行する

HTMLとの違い

XHTMLはHTMLにXMLの拡張性を持たせた拡張可能なHTML(Extensible HyperText Markup Language)です。ここではその拡張性はひとまず置いといてHTMLからの移行とその注意点を取り上げていきたいと思います。

XML宣言を追加する

文字コードがUTF-8、UTF-16ではない場合には最初の行にXML宣言を追加する必要があります。また、XMLではXML宣言から始めるのが好ましいということでUTF-8であったとしても宣言しておいたほうがいいかもしれません。

文字コードがShift_JISの場合は

<?xml version="1.0" encoding="Shift_JIS"?>

の一行を最初に追加します。

DOCTYPEの変更

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名前空間を追加する

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やスタイルシートなどで<か & か ]]>を使用している場合、または対応していないブラウザのためにコメントの内容としていたものはすべて外部ファイルを使用しなければなりません。

属性値の中でも&amp;を使う

CGIなどへパラメータを渡したりする場合に&が含まれている場合は実体参照で書く必要があります。

name属性はid属性へ

アンカーの名前付けやMap要素の名前付けなどで使用していたName属性ですが、XHTMLではこれはid属性へ置換する必要があります。

Tidyを使って書きかえる

ここまで読んで嫌になった方もいらっしゃるかもしれませんが、HTML Tidyを使えばいくらか楽ができます。Tidyを使うにある、XHTML用のコンフィグサンプルを使用して既存のHTML文書をコマンドで渡せば上で書いたことはかなりの割合で変換してくれます。ざっと見たところ1行目に追加されるXML宣言にencoding属性を追加するくらいでしょうか。一度試してみてくださいね。