XHTML1.1の変更点

Updated / Published

XHTML1.1 と XHTML1.0 の違い、XHTML1.0 から移行する際の注意点や推奨MIMEapplication/xhtml+xml)への対処法。

XHTML1.0 と XHTML1.1 の違い

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)のように、それぞれ機能別にいくつかのモジュールに分割し、PCブラウザだけでなくモバイル・デバイス(携帯電話など)、テレビ(テレビベースのウェブブラウザ)など多種多様な UA が利用することを想定して、一部のモジュールのみをサポートできるように、または独自に定義したモジュールを組み合わせたり、必要な機能だけを選択することができる設計になっています。

これにより開発ベンダーであれば自社製品の使用用途に応じた必要限の機能のみの実装を行ったり、ユーザ側では必要に応じて機能を追加したりなどの使い方ができるようになることが想定されます。用途次第では、最低限の基盤となるコアモジュールである Structure(構造)モジュール, Text(テキスト)モジュール, HyperText(ハイパーテキスト)モジュール, List(リスト)モジュールのみを実装したデバイスなどが今後出てくることがあったりするのかもしれません。

記述における変更としては、XHTML1.0 は HTML4 を XML を応用して再形式化したものであり、さらに XHTML1.0 を再形式化した XHTML1.1 においても、HTML4.01厳密型DTD から何ら意味的にほとんど修正はなく、XHTML1.0 Strict から XHTML1.1 におけるおさえてくべき主な変更点は以下の3つぐらいです。

  • lang属性が廃止され、代わりに xml:lang属性に統一された。
  • a要素と map要素からも name属性が廃止され id属性の指定のみに統一された。
  • 振り仮名を処理するルビ関連の要素が新しく追加された。

以下、ここからはXHTML1.0 から XHTML1.1 へ移行する際の注意点や対処法について解説します。

DOCTYPE宣言(文書型宣言)

XHTML1.1 は XHTML1.0厳密型DTD をモジュール化により再形式化したものであり、HTML4.01 や XHTML1.0 にあった厳密型(Strict), 移行型(Transitional), フレーム設定型(Frameset)のようなカテゴリ分け(バリエーション)はありません。つまり、W3C の仕様において「推奨しない」とされる要素や属性、さらにフレーム機能用の内容は一切使えなくなります。XML宣言に続いて XHTML1.1 用の文書型定義(DTD)を宣言します。

XHTML1.1 DTD

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

xmlns属性と xml:lang属性の指定

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">
関連

HTTPレスポンスヘッダで文書のMIMEを設定する

W3C XHTML Media Types によると、XHTML文書の MIMEは "application/xhtml+xml" が最も適切であり、次に適切なのが "application/xml"、または "text/xml" であると定義されています。従来の HTML や XHTML1.0 では head要素内にUAにとってHTTPレスポンスヘッダと同様の働きをする補足情報(メタ情報)として機能するmeta http-equiv宣言で文書のMIMEを指定することができましたが、XHTML1.1 では、meta http-equiv宣言をすること自体が非推奨となっています。

つまり、meta http-equiv宣言を使わずに、XHTML文書の MIMEを設定するには、サーバ設定ファイルでHTTPレスポンスヘッダ内に直接MIMEを指定する必要があります。サーバ設定ファイルとは、UNIX系OSの多くが採用しているApacheウェブサーバであればhttpd.confや.htaccess、WindowsのIISであればWeb.configなどのファイルを使って設定することができます。

しかし、古いUAにはHTTPレスポンスヘッダに"application/xhtml+xml" のMIMEを設定した文書を読み込むことができないという大きな問題があります。これは、Internet Explorer9からは"application/xhtml+xml"のXHTML文書を読み込むことができるのですが、未だ大きなブラウザシェア率を占めている Internet Explorer6, 7, 8 では、"application/xhtml+xml"のXHTML文書をダウンロードファイルとして扱うことになります。

そこで、これらInternet Explorer6, 7, 8 の問題を考慮して、次に望ましいとされる "application/xml" と "text/xml" をHTTPレスポンスヘッダに設定してみるも、またもエラーがでてXHTML文書として正しく処理することができません。これは Internet Explorer6, 7, 8 が Webコンテンツとしてアクセスできる XHTML文書のMIMEが、"text/html" でなければならいといった致命的な実装が原因となっているためです。

つまり、仕様に準拠した MIMEを設定すると Internet Explorer6, 7, 8では、XHTML文書を観覧することすら適いません。そのため、HTML互換用に "text/html" のMIMEを設定することで、実装に問題のある Internet Explorer6, 7, 8 においても問題なく観覧することは可能です。

ここまでのHTTPレスポンスヘッダの設定をまとめると、"text/html" のMIMEで HTTPレスポンスヘッダを設定し、meta http-equiv宣言が指定できないため同時に文字コードも指定します(ここでは仮に XHTML文書の拡張子を "html" または "htm" として、記述されている文字コードを "UTF-8" とします。たとえば、Apacheウェブサーバであれば、.htaccess ファイルには次のように記述します。

AddType "text/html; charset=UTF-8" 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設定は以上のようにまとめることができると考えられます。そのため現状では XHTML文書に XHTML1.1 の規格を採用しないのが一般的です。

関連

HTTPレスポンスヘッダに設定すべき推奨MIME

HTML4.01, XHTML1.0, XHTML1.1 の各バージョンにおける推奨MIMEをまとめておくので確認してください。XHTML1.0では、HTML互換と非互換の2タイプをとることができます。

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 の規格を採用すべきです。

name属性の廃止と id属性への統一

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 より対応しています。

関連

ルビ関連の機能の追加

XHTML1.1 では、文書中に新たに追加されたルビ関連のマークアップを施すことでルビを作成することができます。ルビは、主に読みがな (発音ガイド) をつけるために使われ、ベーステキストとルビテキストから構成されます。 ルビを振る対象となる本文部分がベーステキストと呼ばれ、読みがなの部分がルビテキストと呼ばれます。

ルビを作成するための基本形は、"<ruby><rb>ベーステキスト</rb><rt>ルビテキスト</rt></ruby>" なのですが、これではルビのレンダリングに対応していない環境では、ベーステキストとルビテキストが横並びで表示されてしまうため、文章の内容がわかりにくくなってしまいます。そこで非対応環境用にルビテキストを括弧(カッコ)で囲んだ「ベーステキスト(ルビテキスト)」という形で表示して意味が通るようにしておくのが適切です。そこで基本形に rp要素を加えて "<ruby><rb>ベーステキスト</rb><rp>括弧開き</rp><rt>ルビテキスト</rt><rp>括弧閉じ</rp></ruby>" という形で使います。

また、rbc要素, rtc要素を用いることでそれぞれ複数の rb要素, rt要素をまとめて、複雑ルビマークアップを行うことができます。複雑ルビマークアップを用いることで、ベーステキストの上下にルビを振って、複合ルビを作成することができます。複雑ルビマークアップでは、ルビマークアップのレンダリングに対応していない環境のための rp要素を指定することはできません。

単純ルビマークアップにはInternet Explorer, Safari, Chrome, Blink版Operaが対応していますが、複雑ルビマークアップに対応する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 が独自機能として先取り実装し、2年遅れでXHTML1.1 で Ruby Annotation として W3C より正式に勧告されました。

関連