
● システム開発 XHTML
HTMLとXHTMLの両者が混同され、区別がつき難くなっているのでこの両者の仕様の要点を示します。システム開発者はPHP、データベースに注意が行きがちですが。
HTML非常に原始的な言語ですが今日はそれを拡張して携帯などにも利用されてきました。このままのHTMLの仕様ですと柔軟性に問題が出てきた為、XMLの概念を取り入れたXHTMLが利用されることになりました。
HTMLで目的を達すれば、特にXHTMLで記載しなければならない、とは個人としては思っていません。コンテンツがそこまで必要としているか、でしょう。
・整形式XML
XHTMLは、開始タグと終了タグがきちんとバランスし、要素が正しいツリーを形成する整形式であることが一番の基本です。
タグを省略せず、大小文字を統一して記述したHTMLは、少しの修正だけで整形式XMLとすることができます。
空要素タグを />で閉じる
属性値を全て引用符で囲み、属性名を省略した最小化を行わない基本的には、もとのHTMLが適切に書かれていればこれだけで整形式XMLとなるはずで、XSLTなどのツールを利用できるようになります。
これがXHTMLの第一歩です(HTML4などのDTDには適合しなくなるので、この場合は文書型宣言は書きません)。
・XML名前空間を宣言
もっとも、整形式XMLにしただけでは、厳密にはHTMLともXHTMLとも言えない、自己流のXMLということになってしまいます。
利用しているタグセットがXHTMLのものであることを示すためには、ルート要素(html要素)でXHTMLのXML名前空間を宣言しておきます。
(例) <html xmlns="http://www.w3.org/1999/xhtml">
XML対応ツールやブラウザは、これによって文書で用いられているタグセットがXHTMLのものであることを認識できます。多くの場合、文書をXHTMLとして標準的に表示してくれます。
適切な名前空間を宣言すれば、他のXML言語の語彙を組み込んでXHTML文書内で利用することも可能です。当サイトの「XHTMLを拡張し、メタデータを直接記述する」を参照してください(ただしこの場合、一般には次の厳密適合にはなりません)。
・厳密適合のXHTML
XHTML文書をスキーマ(DTDなど)に対して検証したり、仕様書に厳密適合させる必要がある場合は、昔ながらの文書型宣言を置きます。また、一般にXML文書はXML宣言で始めることが推奨され、特に文字コードの扱いによってはこの宣言が必須になることがあります。これらを加えたXHTML1.0適合文書は、次のようなものです。
(例)
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja"
lang="ja">
<head>
<title>XHTMLの書き方と留意点</title>
</head>
<body>
<p>XHTMLについて説明しましょう。</p>
</body>
</html>
上の例は、次の「妥当な(Valid)XHTML文書」の要件に従って書かれています。
適切なDTDに従っていること
文書はhtmlをルート要素(root element=一番の親要素)として記述されていること
このルート要素において、xmlns属性でXHTMLのXML名前空間を指定すること
ルート要素の前に有効な文書型宣言を行っていること
スキーマに対して検証を行ったり厳密適合を求めたりする必要がなければ、4.の文書型宣言は特になくても構いません。
単純に整形式にしてツールを利用するだけならば3.の名前空間も省略可能ですが、これでは広く認識されているX/HTMLを使うメリットもなくなってしまうので、これは記述しておく方が賢明です。
XML宣言は文字コードがUTF-8もしくはUTF-16以外の(かつサーバーからの応答ヘッダなどで文字コードを示していない)場合は先頭に記述しなければなりません。
・HTMLとの互換性について
重要なのは、どんなタグの記法を用いれば、HTMLとの互換性を保ちつつXML(XHTML)としての機能を加えることができるのかということです。いくつかポイントを列挙します。
全てのタグ(要素タイプ名、属性名)は小文字で記述する
HTMLでは大文字と小文字は区別されませんでしたが、XMLではこれを区別するため、IMGとimgは別の要素タイプになってしまいます。
XHTMLでは全ての要素タイプと属性は小文字で定義されたので、タグの記述にあたっても小文字を用いなければなりません(これまで書いたHTMLを書き直すのは大変…)。
また、属性名だけでなく、method="post"等のように、属性値がDTDで選択肢が定義されているものは、その通り記述する必要があります。これらもみな小文字で定義されているので、「タグは小文字で書く」と考えておくのがよいでしょう。
属性の値は必ず引用符で囲む
HTML(SGML)においては、値が数字など特定の値のみの場合は引用符を省略して
width=100 のような記述が認められていましたが、XHTMLでは全ての属性値を引用符で囲んで width="100" のようにしなければなりません。
終了タグを省略しない
HTML(SGML)ではDTDの定義によっては終了タグを省略することができました。たとえば、リスト項目要素のLIの場合、
(誤りの例)
<ul>
<li>ある項目
</ul>
という具合に終了タグを省略することが認められ、それが一般的な書法となっていましたが、XMLではこれが認められません。必ず
(正しい例)
<ul>
<li>ある項目</li>
</ul>
のように終了タグを加えなければなりません。内容モデルを持たない空要素を除いて、全ての要素は開始タグと終了タグのペアで記述します。
空要素のタグは />で閉じる
また、HTMLのimg要素やbr要素のように、内容モデルを持たない空要素(HTMLでは開始タグしか使わないもの)は、XMLにおいては<br/>という具合に、タグを閉じるときに
/> を使わなければなりません(空要素タグと呼ばれています)。ただし、この書式ではHTMLブラウザがタグを正しく認識できない可能性があるので、/ の前にスペースを置いて、
<br /> のように記述します。
ファイル内の位置を示すにはid属性を併記する
HTMLではファイル内の特定の位置へのリンクのためにname属性を使って
(誤りの例)
<a href="#foo">アンカーをクリックすると</a>
....
<a name="foo">ここにジャンプする</a>
という記述をしていましたが、XHTMLではファイル内部の位置を示す属性は id属性 になりました。従って、ジャンプ先は <a id="foo">
となるわけですが、このid属性をサポートしないブラウザもあるため、
(正しい例)
<a href="#foo">アンカーをクリックすると</a>
....
<a name="foo" id="foo">ここにジャンプする</a>
という具合に、name属性とid属性を同じ値で併記することが推奨されています(id属性そのものは、HTML 4.0から導入されています)。なお、XHTML1.1ではname属性は廃止され、id属性のみでフラグメントを示します。
&はあらゆるところで&と記述する
HTMLでも普通&は&と記述することになっていますが、XHTMLの場合、その用法が徹底していて、たとえばCGIを呼び出すためのURLでも
(誤りの例)
<a href="/cgi-bin/myscript?name=kanzaki&score=100">
ではなく
(正しい例)
<a href="/cgi-bin/myscript?name=kanzaki&score=100">
と記述する必要があります(本当はHTML 2.0の時からこの点も明記されていたが、ブラウザは&のままでもきちんと処理するように求められていたこともあり、これでも機能していた。cf.
[RFC1866] 8.2.1. The form-urlencoded Media Type)。
属性の省略書式は使わない
HTMLでは、属性の名前と値が同じ場合に、属性名を記述せずに
(誤りの例) <input type="radio" name="bar"
checked>
としていましたが、XHTMLではこれは認められず
(正しい例) <input type="radio" name="bar"
checked="checked" />
と書かなければなりません。こうすると古い(新しいものでも一部)ブラウザでは正しく働かないことがありますが、それに対する解決策は示されていないようです。
head要素内のスクリプトやスタイルシートの注意
HTMLとは異なり、XHTMLにおいてはスタイルやスクリプトも#PCDATA(字句解析を受けるデータ)として定義されたため、<
はタグの開始と見なされ、コメントした内容は無視されることになります。
たとえばJavascriptで数値の比較をするような式を記述していると、XHTMLではエラーになり、スタイルシートを古いブラウザから隠すために
(誤りの例)
<style type="text/css">
<!--
p {color:red}
-->
</style>
のように記述していると、その定義は無視されてしまう可能性が高いとされています。解決策としては、外部ファイルにスタイルシートやスクリプトを記述することが推奨されています。
XHTMLファイル内にスクリプト要素を記述するときは、不等号などが問題を生じないように、その内部をCDATAセクションとして宣言しておきます。ただし、CDATAの宣言をそのまま書くとスクリプトのエラーになるので、宣言を//でスクリプトのコメントにしておきます。
(例)
<script type="text/javascript">
//<![CDATA[
function dmmy(){
//some script code
}
//]]>
</script>
このCDATAセクションの中に「HTMLのコメント宣言」に相当するものを書けば、XMLの処理には影響を与えませんが、古いブラウザがスクリプトのコードを表示しないようにする効果はあります。
ちなみに本サイトはXHTMLではなく、HTMLです。特に問題が無いからですが。
製作業者ではW3Cの仕様を天からの声のように作っているところもありますが。
私はシステム開発の処理、実行、表示のスタンスからいくと、なんでもHTMLをXHTMLに・・・までは思いませんが。
XMLで記載する必要があるものに関してはその仕様に従います。
腕時計のご紹介
R.KIKUCHI
SEIKOFIVE
|