Section 6 : 互換性のための記述(1)

 ここでは,XHTML 1.0 で書かれた文書を既存の HTML 4 UA(ブラウザ)でできるだけ問題なく処理(閲覧)するためのヒントを挙げておく。

空の要素と終了タグを取らない要素のタグ

 XML では,内容が空の要素と終了タグを取らない要素は,ともに <...></...><... /> のいずれの形式で書いてもよいことになっている。だが,既存の HTML UA で問題なく処理させるためには,

と書くのがよい。

 また,本来,<... /> の形式のタグは,“/>”の直前に空白を入れる必要はないのだが(例:<br/>),これも既存の HTML UA に問題なく処理させるために空白を入れておくのがよい(例:<br />)。

スタイルシートとスクリプト

 XHTML においては,style および script 要素の内容を未対応 UA から隠すためにコメントアウト(<!-- ... -->)すると,本物のコメントとして扱われ,スタイルシートおよびスクリプトが機能しない UA がありうる。また,Section 4 で触れたように,HTML 4 ではスクリプト・スタイルシート中で「<」「>」「&」は文字参照なしで書くが,XHTML ではスクリプト・スタイルシートを CDATA セクションとしてマークしない限りこれらの記号は文字参照の必要がある。これは,

という事態が想定される。これらの記号がないスタイルシート・スクリプトでは,(要素の内容をコメントアウトしなければ,未対応 UA で表示されてしまうかもしれないが)そのまま書いても問題は生じない。

 これらを互換性の点で解決するには,いずれも外部のファイルとしてスタイルシート・スクリプトを用意し,それを呼び出すことである。参考までに,CSS のスタイルシートを呼び出すには,link 要素をヘッダに書き,

<link rel="stylesheet" type="text/css" href="...." />

または,CSS の @import ルールを使用して,

<style type="text/css">
  @import url(...);
</style>

のようにする。後者の方法では,url(...) に入る URI には,「<」「>」「&」の記号が入らないようにすることが必要である。

 スクリプトの場合は,src 属性にファイルの URI を指定する。たとえば,JavaScript を使用する場合,

<script type="text/javascript" src="..."></script>

となる。

 スタイルシート・スクリプトでは,互換性を考慮した記述の条件は煩雑である。確実な方法は,“外部のファイルで用意する”ことである(古い HTML UA では,外部ファイルのスクリプトをサポートしない場合もあるが)。わかりにくい場合はこの方法を採るとよいだろう。

 このような問題は,style および script 要素の内容が,HTML 4 では CDATA であったのに対し,XHTML 1.0 では #PCDATA に変更されているために生じている。詳しくは Soar through HTML の Section 13 を参照されたい。

 蛇足であるが,文字列を与える属性値では「<」「>」「&」は文字参照するということに気をつけていただきたい。

name 属性

 HTML 4 の,aformimgmap,HTML 4 Transirtional ではそれに加えて,appletiframe,HTML 4 Frameset では frame の各要素は,要素を指し示すものとして(id 属性とほぼ同じ意味として)name 属性を持っている。

 HTML 4 では,URI“#abc”に対して,name 属性または id 属性が“abc”であるものをいずれも指しえたが(HTML 3.2 以前の UA では name 属性が“abc”であるものしか指さなかった),XML においては,URI“#abc”は id 属性が“abc”であるものしか指さない。

 これらの事情を考慮すると,前述の要素では,name 属性と id 属性とに同じ値を指定しておくのがよい方法だといえる。

<a id="abc" name="abc">...</a>