この章では、 HMTL 4 と XHTML 1.0 の違いに注目します。
contents
XML 文書では、デフォルトでは、UNICODE である UTF-8 か UTF-16 が設定されますが、それ以外の文字コードを用いる場合は、必ず XML 宣言で、 encoding
属性を与えなければなりません。
XML 宣言の encoding 属性
<?xml version="1.0" encoding="ISO-2022-JP"?>
XHTML では、これに重ねて、 head
要素内の meta http-equive 宣言でも指定する必要が有ります。
head 要素内の meta-http-equiv 宣言
<meta http-equiv="Content-type" content='text/html; charset="ISO-2022-JP"'/>
XML 宣言における encoding 属性の方が優先されますが、必ず同時に同じコードを指定しましょう。
XML では、大文字と小文字を厳格に区別します。 XHTML の要素と属性はすべて小文字でしか定義されていません。属性値は HTML の場合と同様の扱いですが、要素名と属性名は必ず小文字で書かなければなりません。例えば、<P>
と <p>
は異なるタグとして解釈されます。
HTML では、ある種の要素に対しては、終了タグが省略可能でした。例えば、LIST要素のLI要素や、TABLE要素のTD要素などは習慣的にも省略されてきました。
しかし、 XML では全ての要素に付いて、終了タグが必須になりました。
正しい XHTML ;終了タグが有る
<ul> <li>項目一</li> <li>項目二</li> </ul>
誤った XHTML ;終了タグが省略されている
<ul> <li>項目一 <li>項目二 </ul>
<meta>
, <br>
, <hr>
, <img>
, <frame>
などの空要素に付いては、終了の目印として、<meta />
, <br />
, <hr />
, <img />
等のように、 />
で終わる必要が有ります。
また、 <br></br>
のように記述する事が XML で認められていますが、旧来の HTML 解釈ブラウザでは、どのように振る舞うか分かりません。
W3C の仕様書では、後方互換性を保つ為に、/>
の直前に半角スペースを挿入するよう、示唆されています。
<img src="./image.gif" />
HTML では、属性値の引用符はある場合には省略可能でした。しかし、 XHTML では全ての属性値を引用符で括るように定義されています。
正しい XHTML ;引用符が有る
<table border="2"> <tr> <td> hogehoge </td> </tr> </table>
誤った XHTML ;引用符が無い
<table border=2> <tr> <td> hogehoge </td> </tr> </table>
HTML では、ある種の属性は属性値を省略できました。例えば、<frame noresize>
, <dl compact>
などです。
しかし、 XML では、属性は必ず属性値を持たなければなりません。
正しい XHTML ;属性値を持つ
<frame noresize="noresize" />
誤った XHTML ;属性値が省略されている
<frame noresize />
空要素のタグの末尾が />
になっている事に注意して下さい。
XML では、<
, &
などの実体が記述されていると、スクリプトとして処理される前に、実体参照として、<
, &
であると認識してしまう。これらの実体の展開を避けるには、 CDATA
マークされた内側に記述する必要が有る。
Cデータ部;
<script> <![CDATA[ ... エスケープされていないスクリプト内容 ... ]]> </script>
CDATA section 内( <![CDATA[
から ]]>
まで)では、マークアップとして認識される文字列が解釈されるのをエスケープするために用いられる。例えば、 < (less than) や、 & (and) は、 CDATA section 内部では、単なるテキストとして扱われ、意味を持たない。そのため、 & や < を用いてエスケープする必要は無いし、エスケープできない。但し、 > は、CDATA部の終了 ]]>
で無い場合、混乱を避けるために、 >
を用いてエスケープする必要がある。
また、従来は、サポートしていないブラウザが、ソースをモニタに表示してしまうのを避ける為、スクリプトやスタイルは、 <!--
と -->
でコメント・アウトするのが慣習だった。しかし、 XML 解釈では、コメントは何もせず無視する事が許されるので、スクリプトやCSSが全く働かない可能性も有る。これを避ける為には、スクリプトやスタイルをコメント・アウトしないか、外部スタイルシートを利用するよう示唆されている。
機能を持たない単なるコメントは、 <!--
と -->
を用いれば良い。但し、--
と云う文字列(ダブル・ハイフン)は、コメント内部では用いられないが、コメント内部では、 <
, &
などの要素の開始文字を直接含んでも構わない。
コメント;
<!-- ここはコメント。 <p> の様にエスケープしないで記述しても構わないし、 DTD の中に記述しても構わない。 -->
HTML では、幾つかの要素に対して、name
属性が用意されていた。
しかし、 XHTML 1.0 では、name
属性は廃止予定であり、変わりに id
属性を用いなければならない。働きは、 HTML 4 で定義されたままである。
W3C では、後方互換の為に、XHTML 文書において、name
属性と id
属性を同時に併用するよう示唆されている。
正しい XHTML
<frame name="hogehoge" id="hogehoge" />
非推奨な XHTML
<frame name="hogehoge" />
HTML 4 では、 name
属性は限られた要素にしか定義されていなかったが、 id
属性はあらゆる要素に対して与える事が可能。
暫定的な対応としては、name 属性と id 属性の両方を与えることで、後方互換を保つことができる。N.C.4.xなどでは有効。
要素の言語は、 lang
属性と、 xml:lang
属性の双方を同時に用いなければならず、 xml:lang
属性の方が優先される。
<p xml:lang="ja" lang="ja">
XML の DTD では、要素に対して、その子孫要素の禁止が指定できない。しかし、原則 HTML 4 に従うべきだろう。 W3C の「 XHTML 1.0 仕様書」で挙げられている禁止事項は次の通り;
a
a
要素を含んではならない。pre
img
, object
, big
, small
, sub
, sup
要素を含んではならない。button
input
, select
, textarea
, label
, button
, form
, fieldset
, iframe
, isindex
要素を含んではならない。label
label
を含んではならない。form
form
要素を含んではならない。HTML 4 も構造化文書でした。しかし、 XML ではその利用目的や可能性からして、より木目細かいマークアップが望まれます。そうすることで、データとしての有用性が高まります。 XHTML も XML の一例ですからその恩恵は当然受けられます。
正しい HTML 4 ; XML としては望ましくない;
<h1>LaTeX 入門</h1> <h2>TeX と LaTeX</h2> <p> LaTeX は、 Donald Knuth 氏が 78 年から 82 年に掛けて作った TeX と云う文書処理システムに、 Leslie Lamport 氏が 大量のマクロを書き加えて使い易くしたものです。 </p> <p> LaTeX や LaTeX2e などのマクロ集と区別する為に、 TeX 本体の事を Plain TeX と呼びます。 </p> <h2>LaTeX の例</h2> <p> LaTeX の文書は必ず、 \documentstyle{...style...} と \begin{document} で始まり、\end{document} で終わります。 </p>
このサンプルコードをXML文書として表示させてみましょう;
何が望ましくないのでしょうか?ヒントはインデントです。
上の例では、わかりやすくする為に、意味の階層に対して、インデントが付いています。 XML では、このように区別できる場合は全てマークアップしておいた方が、後々扱い易い事が良くあります。
望ましい XML ;
<div class="chapter"> <h1>LaTeX 入門</h1> <div class="section"> <h2>TeX と LaTeX</h2> <div class="paragraph"> <p> LaTeX は、 Donald Knuth 氏が 78 年から 82 年に掛けて作った TeX と云う文書処理システムに、 Leslie Lamport 氏が 大量のマクロを書き加えて使い易くしたものです。 </p> <p> LaTeX や LaTeX2e などのマクロ集と区別する為に、 TeX 本体の事を Plain TeX と呼びます。 </p> </div> </div> <div class="section"> <h2>LaTeX の例</h2> <div class="paragraph"> <p> LaTeX の文書は必ず、 \documentstyle{...style...} と \begin{document} で始まり、\end{document} で終わります。 </p> </div> </div> </div>
このサンプルコードもXML文書として表示させてみましょう;
いかにもファイルサイズが大きくなってしまいました。しかし、XML としてはこれで良いのです。
こうする事で、例えば h1 以下の固まり(チャプター)は div.chapter
で、h2 以下の固まり(セクション)は div.section
で、セクション内の段落の固まりは div.paragraph
で指定して一まとめに扱えます。
もし、特定の固まりだけ特別扱いしたい場合は、 id
属性を用いて、固有の名前を付けて区別する事が出来ます。 id 属性の属性値は一つのファイルの中でユニークでなければなりません。複数回同一の id 属性値が表れるファイルはエラーになりますので、注意して名付けて下さい。命名には、数字以外の、普通の文字から始まる以外には制約は有りません。