ここでは,XHTML 1.0 で書かれた文書を既存の HTML 4 UA(ブラウザ)でできるだけ問題なく処理(閲覧)するためのヒントを挙げておく。
XML では,内容が空の要素と終了タグを取らない要素は,ともに <...></...>
,<... />
のいずれの形式で書いてもよいことになっている。だが,既存の HTML UA で問題なく処理させるためには,
<...></...>
(例:<p></p>
)<... />
(例:<br />
)と書くのがよい。
また,本来,<... />
の形式のタグは,“/>
”の直前に空白を入れる必要はないのだが(例:<br/>
),これも既存の HTML UA に問題なく処理させるために空白を入れておくのがよい(例:<br />
)。
XHTML においては,style
および script
要素の内容を未対応 UA から隠すためにコメントアウト(<!-- ... -->
)すると,本物のコメントとして扱われ,スタイルシートおよびスクリプトが機能しない UA がありうる。また,Section 4 で触れたように,HTML 4 ではスクリプト・スタイルシート中で「<
」「>
」「&
」は文字参照なしで書くが,XHTML ではスクリプト・スタイルシートを CDATA セクションとしてマークしない限りこれらの記号は文字参照の必要がある。これは,
<![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 の,a
,form
,img
,map
,HTML 4 Transirtional ではそれに加えて,applet
,iframe
,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>