HTMLとXHTMLの違いはどこにある?
HTMLをどう書き換えればXHTMLになるのでしょうか。両者の違いを教えてください。また、HTMLをXHTMLに書き換えても、同じようにWebブラウザで表示できますか?

回答/富士ソフトABC株式会社 技術センター
2001/6/28

 まず、HTMLと XHTML の違いを簡単に説明しましょう。

 HTMLは、SGML(Standard Generalized Markup Language)に基づいて書かれた実装の1つです。一方のXHTMLは、バージョンアップごとに複雑多様化するHTMLを、XMLに基づいて書き直した実装の1つで、HTMLの後継仕様となります。また、XHTMLはXML文書でもありますので、XMLパーサを利用して各種の処理をすることができます。

HTML
XHTML
SGML XML
 
HTMLはSGMLから生まれたが、XHTMLは、SGMLからXMLを経て生まれた

 ある程度、記述の内容に自由度のあったHTMLに比べると、XHTMLは、XMLの持つ特徴をそのまま引き継ぎ(XML文書ですから当然ですが)、書式が厳密になっています。また、拡張のたびに複雑になる傾向のあったHTMLと異なり、XHTMLではモジュール化による拡張性も視野に入れた仕様になっています(モジュール化をベースとしたXHTML 1.1は現在勧告案の段階ですが、携帯電話やカーナビなどの表示能力が乏しいデバイス用であるXHTML Basicから、将来の拡張性までを考慮した仕様になります)。

 XHTMLに関連する W3C勧告は以下のとおりです。

 次に、HTMLからXHTMLへの書き換えについてですが、現在ではWeb上に豊富な情報があるようですので、ここでは、基本的な事柄について説明します(「Ask XML Expert!」の「WebページをXHTMLに変換したい」も参考にしてください)。

 W3Cの勧告には、HTML4とXHTMLとの相違点として以下の10項目が挙げられています。

  1. 文書は整形式でなければならない
  2. 要素名及び属性名は小文字でなければならない
  3. 非空要素には終了タグが必要である
  4. 属性値は常に引用符で括られなければならない
  5. 属性の省略化はしてはならない
  6. meta、hr、br、img などは、空要素として書く
  7. 属性値内での改行を含む複数の空白は1つと見なす
  8. スクリプトおよびスタイル要素の定義が異なる
  9. 要素の入れ子などSGMLの排除機能を再現できない
  10. ‘id’および‘name’属性をもつ要素は、‘id’属性を使用する

 どこを書き換えればよいかという質問に回答するのはとても難しいので、上記の相違点を含んだ例を以下に示します。詳細に関しては、W3C勧告の「HTML互換性ガイドライン」を参照してください。

  1. HTML.html (上記の10項目を抜き出したHTMLファイル)
  2. XHTML.html (同じ内容をXHTMLで書き直したもの)
  3. XHTML.xml (上記とまったく同じファイルで、拡張子をXMLにしたもの)

 実際の例で、HTMLとXHTMLの違いを見てみましょう。上記のHTMLとXHTMLの文書を、先頭から1行ずつ比較し、その違いを表にしてみました。

HTML.html XHTML.html
<?xml version="1.0" encoding="UTF-16"?>
XHTMLでは、XML宣言が必要
<!DOCTYPE HTML PUBLIC "-//W3C//DTD
HTML 4.0 Transitional//EN">
<!DOCTYPE html PUBLIC "
-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1
/DTD/xhtml1-strict.dtd">
XHTMLでは、参照するDTD(文書宣言)が異なる
<HTML> <html xmlns="http://www.w3.org/
1999/xhtml" xml:lang="jp"
lang="jp">
XHTMLでは、html名前空間を指定
<HEAD> <head>
要素名は小文字に統一
<META HTTP-EQUIV=Content-Type CONTENT="text/html; charset=UTF-16"> <meta http-equiv="Content-Type" content="text/html;
charset=UTF-16" />
属性を必ず引用符で囲む
<TITLE>HTML4との相違点</TITLE>
<HR>
<title>HTML4との相違点</title>
<hr />
<HR>は空要素として記述。ただし、下位互換性のために"/"の前に空白を入れる
<OL>
<LI>文書は<b><u>整形式</b>でなければならない</u>
<ol>
<li>文書は<u><b>整形式</b>でなければならない</u></li>
XHTML文書は整形式でなければならず、
開始タグと終了タグが入れ子になってはならない
<LI>要素名及び属性名は小文字でなければならない
<LI>非空要素には終了タグが必要である
<li>要素名及び属性名は小文字でなければならない</li>
<li>
非空要素には終了タグが必要である</li>
</li>のように必ず終了タグが必要
<LI>属性値は常に引用符で括られなければならない
<LI>属性の省略化はしてはならない

<LI>meta, hr, br, img などは、空要素として書く
<LI>属性値内での改行を含む複数の空白は1つと見なす
<LI>スクリプト及びスタイル要素の定義が異なる
<LI>要素の入れ子などSGMLの排除機能を再現できない

<LI>'id'及び'name'属性をもつ要素は'id'属性を使用する
</OL>
<BR>
参考<BR>
<A HREF="http://www.w3.org/TR
/2000/REC-xhtml1-20000126/">
XHTML(TM) 1.0: The Extensible HyperText Markup Language - A Reformulation of HTML 4 in XML 1.0
</BODY>
</HTML>
<li>属性値は常に引用符で括られなければならない</li>
<li>属性の省略化はしてはならない</li>
<li>meta, hr, br, img などは、空要素として書く</li>
<li>属性値内での改行を含む複数の空白は1つと見なす</li>
<li>スクリプト及びスタイル要素の定義が異なる</li>
<li>要素の入れ子などSGMLの排除機能を再現できない</li>
<li>'id'及び'name'属性をもつ要素は'id'属性を使用する</li>
</ol>
<br />参考<br />
<a HREF="http://www.w3.org/TR
/2000/REC-xhtml1-20000126/">
XHTML(TM) 1.0: The Extensible HyperText Markup Language - A Reformulation of HTML 4 in XML 1.0</a>
</body>
</html>

 最も大きい違いは、タグが小文字になること、<BR><HR>といったタグが、空要素になることなどでしょう。また、ポイントとなるのは、文書の先頭部分です。

 XHTMLはXML文書ですので、最初にXML宣言が必要です(必須ではありませんが、エンコーディングがUTF-8、UTF-16以外の場合には、必ず記述します)。文書型宣言もHTMLから、XHTML のものに変更する必要があります。現在以下のものが公式に公開されています。

  • XHTML 1.0 Strict
  • XHTML 1.0 Transitional
  • XHTML 1.0 Frameset
  • XHTML Basic 1.0

 文書のルート要素であるhtmlのXML名前空間も、xmlns属性を使って定義しなければなりません。

 最後に、「XHTMLに書き換えても、同じようにWebブラウザから見えますか?」という質問についても回答します。すべてのWebブラウザに対して動作を確認することは難しいので、明言することはできませんが、一般のコンピュータ(Windows、Unix、Macintosh)上で使用されているほとんどのWebブラウザでは、一部の例外を除き問題なくXHTMLを表示できるようです(ただし、Macintosh版Internet Explorer 4.51以前のバージョンでは、正常に表示できないことが報告されています)。

 また、XHTML文書のMIMEタイプをどうするかという問題が存在しますが、W3C勧告の「HTML互換性ガイドライン」に従った文書であれば、インターネットメディア型“text/html”として問題なくほとんどのブラウザで表示できます。“text/xml”とした場合には、ブラウザによって表示が変わってしまいます。

 例えば、Internet Explorer 5.5で、上記のXHTML.xmlを表示した場合、整形式のXML文書として扱われ、ツリー構造が表示されます(Netscape Navigator 6では意図したイメージが表示されます)。しかし拡張子を.htmlに変更して同じ文書を表示すれば、意図したイメージが表示されるのが確認できるでしょう。つまり、当面の間はXHTML文書の拡張子として「.html」を使用するのがよい、ということがいえるでしょう。

 HTMLではなく、XHTMLあるいは、モジュール化XHTMLで文書を作成することには、いろいろな面でメリットがあります。

  • 仕様が厳格なので、ユーザーエージョント間での解釈の相違が少なく、またエラー処理が軽減されるので小型のデバイスでも使用できる
  • DOMやSAXを利用して文書を操作することができる
  • XSL(T)を使用することによって文書の変換が容易に行える
  • モジュール化により文書を表示デバイスによらず統一でき、拡張も容易である

 そのほか、HTMLとXMLの利点の多くを受け継いでいるといえます。

 既存のHTML文書をXHTMLに置き換えるには手間が掛かりますので、必要に応じて変換していくとして、今後新たに作成する文書からXHTML文書にしていくのがいいと思われます。

「Ask XML Expert」


XML & SOA フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

HTML5+UX 記事ランキング

本日月間