XHTML1.1 と XHTML1.0 の違い、XHTML1.0 から移行する際の注意点や推奨MIMEタイプ(application/xhtml+xml)への対処法。
XHTML1.1 は XHTML1.0厳密型(Strict バリエーション)DTD をモジュール化(Modularization of XHTML)により再形式化したものです。
モジュール化とは、要素や属性の定義を、構造モジュール(html, head, title, body)、リストモジュール(ul, ol, li, dl, dt, dd)、テーブルモジュール(table, th, tr, td, caption, col, colgroup, tbody, thead, tfoot)のように、それぞれ機能別にいくつかのモジュールに分割し、ブラウザだけでなく、モバイル・デバイス(携帯電話など)、テレビ(テレビベースのウェブブラウザ)など多種多様な UA が利用することを想定して、一部のモジュールのみをサポートできるように、または独自に定義したモジュールを組み合わせたりと、必要な機能だけを選択できるように許可しました。
もともと、XHTML1.0 は HTML4 を XML を応用して再形式化したものであり、さらに XHTML1.0 を再形式化した XHTML1.1 においても、HTML4.01厳密型DTD から何ら意味的にほとんど修正はありません。つまり、XHTML1.0 も XHTML1.1 も、まだまだ HTML と XHTML の間の架け橋となる仕様でしかなく、特別新しいことはありません。XHTML1.0 Strict から XHTML1.1 における主な変更点は以下の3つです。
lang属性が廃止され、代わりに xml:lang属性に統一された。a要素と map要素からも name属性が廃止され id属性の指定のみに統一された。以下、XHTML1.0 から XHTML1.1 へ移行する際の注意点や対処法を解説します。
XHTML1.1 は XHTML1.0厳密型DTD をモジュール化により再形式化したものであり、HTML4.01 や XHTML1.0 にあった厳密型(Strict), 移行型(Transitional), フレーム設定型(Frameset)のようなカテゴリ分け(バリエーション)はありません。つまり、W3C の仕様において「推奨しない」とされる要素や属性、さらにフレーム機能用の内容は一切使えなくなります。XML宣言に続いて XHTML1.1 用の文書型定義(DTD)を宣言します。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
XHTML1.0 からの変更点は lang属性の廃止です。XHTML1.0 では lang属性と xml:lang属性の両方を同じ値で指定するように定義されていましたが、XHTML1.1 では lang属性は廃止され、代わりに xml:lang属性のみを指定します。当該文書のデフォルト言語の設定においても html要素に xmlns属性の XMLネームスペース(名前空間)の指定に続いて xml:lang属性のみで指定します。
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">
xml:lang属性lang属性html要素W3C XHTML Media Types によると、XHTML文書の MIMEタイプは "application/xhtml+xml" が最も適切であり、次に適切なのが "application/xml"、または "text/xml" であると定義されています。従来の HTML や XHTML1.0 では head要素内に設定する HTTPヘッダ(ファイルを読み込む際に UA とウェブサーバーの間で交わされるメッセージ)の追加情報で文書の MIMEタイプを設定することができましたが、XHTML1.0 における meta http-equiv宣言は HTML互換のためであり、XHTML1.1 では、meta http-equiv宣言を指定すること自体が非推奨となっています。
つまり、meta http-equiv宣言を使わずに、XHTML文書の MIMEタイプを設定する必要があります。そこで、直接、HTTPヘッダに MIMEタイプを設定する方法をとります。サーバーソフトウェアに Apache を利用しているウェブサーバーであれば、.htaccess を使うことができるので、HTTPヘッダに直接、"application/xhtml+xml " のMIMEタイプを設定する方法をとります。しかし、その結果は致命的なことにブラウザシェア率の大半を占める Internet Explorer では、MIMEタイプ を "application/xhtml+xml" に設定していると XHTML文書として扱われずに、ダウンロードファイルとして扱われることになります。
では、次に望ましいとされる "application/xml" と "text/xml" を順に HTTPヘッダに設定してみると、またもや Internet Explorer でのみエラーがでて正しく処理できませんでした。これは Internet Explorer が Webコンテンツとしてアクセスできる XHTML文書の MIMEタイプは、"text/html" でなければならいといった致命的な実装が原因となっているようです。つまり、仕様に準拠した MIMEタイプを設定すると Internet Explorer では、最新版の Windows版Internet Explorer 7 も含めて、XHTML文書を観覧することができません。しかし、裏を返せば MIMEタイプを HTML互換用に "text/html" に設定すれば、実装に問題のある Internet Explorer においてもXHTML文書を問題なく観覧することは可能です。
そこで、"text/html" のMIMEタイプで HTTPヘッダを設定し、meta http-equiv宣言が指定できないため同時に文字コードも指定します(ここでは仮に XHTML文書の拡張子を "html" または "htm" として、記述されている文字コードを "Shift_JIS" とします。MIMEタイプに対する拡張子や文字コードの設定に関する詳細な説明は、MIMEタイプ・文字コードの設定を参照してください)。.htaccess ファイルには次のように記述します。
AddType "text/html; charset=Shift_JIS" html htm
多くのユーザーの観覧環境を配慮するとなると、HTTPヘッダには "text/html" のMIMEタイプを設定するのが、現状では最良の方法だと考えられます。確かに、XHTML文書を HTML文書として読み込ませることには、XHTML文書としての意味がほとんどありません。これではただ、XMLベースのマークアップをしただけで、実際は HTML文書とほとんど変わりがないからです。しかし、現実的な XHTML文書のためには、XHTML文書を読み取る UA を考慮して、HTML文書として読み込ませなければならない状況にあります。また、仕様においても XHTML文書の MIMEタイプ に "text/html" を指定することは非推奨(Should not)とあるだけで、禁止(Must not)といった記述は見当たらないので、現状では UA の対応状況を考慮した上で XHTML文書の MIMEタイプを "text/html" と指定することは現実的な XHTML文書としての意味合いでは、強ち間違いではないでしょう。
meta要素先も述べたとおり、XHTML1.1 については、HTML や XHTML1.0 では当該文書に有効な HTTPヘッダの追加情報(meta http-equiv宣言)は、HTML互換のためであり非推奨とされ、指定すること自体が認められていません。さらに、XHTML1.1 の推奨MIMEタイプとなっている "application/xhtml+xml" を XHTML文書の MIMEタイプに設定すると、ブラウザシェア率の大半を占める Internet Explorer ではダウンロードファイルとして扱われ、XHTML文書として正常に観覧できないという致命的な実装を抱えています。以上の理由から、現状では XHTML文書を作成するにあたっては XHTML1.1 の規格を採用しないのが一般的です。ここで HTML4.01, XHTML1.0, XHTML1.1 の各バージョンにおける推奨MIMEタイプを整理しておきましょう。
| MIMEタイプ | HTML4.01 | XHTML1.0(互換) | XHTML1.0(非互換) | XHTML1.1 |
|---|---|---|---|---|
| text/html | 推奨(Should) | 可能(May) | 非推奨(Should not) | 非推奨(Should not) |
| application/xhtml+xml | 禁止(Must not) | 推奨(Should) | 推奨(Should) | 推奨(Should) |
| application/xml, text/xml | 禁止(Must not) | 可能(May) | 可能(May) | 可能(May) |
結局のところ、現状での UA の対応状況を考慮するとなると、XHTML文書は HTML互換の XHTML1.0 の規格を採用するのが妥当ということに落ち着きます。ただし、UA の対応を必要としないのであれば、HTML互換を必要としない XHTML1.0、または XHTML1.1 の規格を採用するためには宣言した DTD に応じて、仕様が推奨する "application/xhtml+xml" を HTTPヘッダに XHTML文書の MIMEタイプとして設定するべきです。
XHTML1.0の場合: <a id="top" name="top"> XHTML1.1の場合: <a id="top">
HTML では要素の識別子として name属性、または id属性を指定できました。続いて、XHTML1.0 では id属性を参照できない UA との後方互換のために a要素, applet要素, frame要素, form要素, iframe要素, img要素, map要素については name属性と id属性の両方を同じ値で指定することが認められていました(XHTML1.0厳密型DTD では a要素と map要素の2つにしか認められていません)。
しかし、XHTML1.1 では name属性は完全に廃止されたため、要素の識別子には name属性に代わって id属性のみを指定します。name属性の指定は a要素, applet要素, frame要素, form要素, iframe要素, img要素, map要素に限定されていましたが、id属性はほぼすべての要素(base要素, head要素, html要素, meta要素, script要素, style要素, title要素を除く)に指定するこができます。a要素に name属性を指定して使っていた目的地アンカー(終点アンカー)も、他の要素に id属性を指定することで代替が可能です。id属性の目的地アンカーには Internet Explorer 4, Netscape 6 より対応しています。
id属性XHTML1.1 では、文書中に新たに追加されたルビ関連のマークアップを施すことでルビを作成することができます。ルビは、主に読みがな (発音ガイド) をつけるために使われ、ベーステキストとルビテキストから構成されます。 ルビを振る対象となる本文部分がベーステキストと呼ばれ、読みがなの部分がルビテキストと呼ばれます。
ルビを作成するための基本形は、"<ruby><rb>ベーステキスト</rb><rt>ルビテキスト</rt></ruby>" なのですが、これではルビのレンダリングに対応していない環境では、ベーステキストとルビテキストが横並びで表示されてしまうため、文章の内容がわかりにくくなってしまいます。そこで非対応環境用にルビテキストを括弧(カッコ)で囲んだ「ベーステキスト(ルビテキスト)」という形で表示して意味が通るようにしておくのが適切です。そこで基本形に rp要素を加えて "<ruby><rb>ベーステキスト</rb><rp>括弧開き</rp><rt>ルビテキスト</rt><rp>括弧閉じ</rp></ruby>" という形で使います。ルビのレンダリングには Windows版Internet Explorer(5, 6, 7)と Macintosh版Internet Explorer 5 が対応しています。
また、rbc要素, rtc要素を用いることでそれぞれ複数の rb要素, rt要素をまとめて、複雑ルビマークアップを行うことができます。複雑ルビマークアップを用いることで、ベーステキストの上下にルビを振って、複合ルビを作成することができます。複雑ルビマークアップでは、ルビマークアップのレンダリングに対応していない環境のための rp要素を指定することはできません。なお、現時点では複雑ルビマークアップのレンダリングに対応している UA はありません。
<ruby><rb>仙人掌</rb><rp>(</rp><rt>さぼてん</rt><rp>)</rp></ruby> ...... <ruby><rbc><rb>英</rb><rb>語</rb></rbc> <rtc><rt>えい</rt><rt>ご</rt></rtc> <rtc><rt rbspan="2">English</rt></rtc></ruby>
![]()

最初のルビマークアップは1997年2月に IETF に Internet Draft(草稿)として提出されていた Ruby in the Hypertext Markup Language という span要素などに専用の属性を指定する方法が提案されていました。その後、1999年3月にリリースされた Internet Explorer 5.0 が独自機能として先取り実装し、ようやく XHTML1.1 で Ruby Annotation として W3C より正式に勧告されました。
rb要素rbc要素rp要素rt要素rtc要素ruby要素