制作者の活動(PR)。

アイドル女優・堀北真希ちゃんはうさぎの耳が似合うと思って創造した女子大生キャラクタ
主な作品

制作者に依るイラストと動画作品のサンプル

XHTML文書を公開する際の注意事項。

XHTML文書を公開する際にユーザエージェントの実装状況から気をつけなければならない事を覚書として纏めておきました。

正直、XHTML文書の配信には充分な注意が必要かと思われます。

このため、全面的に書き直す事としました。(平成19年 8月26日)

XHTML文書を公開する際の注意事項・目次。

XHTML文書はHTML文書ではありません。

XHTMLはXMLの応用言語であり、SGMLの応用言語である在来HTMLとは別物です。

現行のXHTMLは利用出来る要素・属性とも在来HTMLと殆ど変わりませんが、だからと言って在来HTMLの代わりに利用する事は好ましくない事とされております。

このため、理念としてはXHTML文書は在来HTML文書とは別物として配信する必要があります。

XHTML文書を問題無く扱えるようにするには。

文字実体参照は使わないようにしましょう。

XHTMLはXMLの応用言語ですので、当然XMLの文法に従っている(整形式である)必要があります。

その一方で、文書型宣言を持つXHTMLでマークアップした場合、文書型宣言で指定したDTDに従っている事(妥当である事)も必要です。

しかし、現状では殆どのウェブブラウザはXHTML文書の妥当性を検証しません。

通常、妥当かどうかは整形式かどうかより厳しいとされております。

このため、

  1. 妥当であれば整形式となる
  2. だから妥当なXHTML文書なら妥当性を検証しない多くのブラウザでも整形式と判定される
  3. つまり、妥当性を検証しない多くのブラウザでも妥当な文書なら問題は無い筈

…と思われがちですが、実際にはそうは行かないのです。

妥当性を検証しないウェブブラウザは当然DTDを見る事はありません。

一方、XHTMLなどXML応用言語一般に於いて、XMLの仕様で定義されていない文字実体参照は全て実体宣言で定義され、これらはDTD内に記述されております。

と言う事は、妥当性を検証しないブラウザでこれら以外の文字実体参照が使われているXHTML文書を読み込むと、不正な実体参照が使われていると見なされてしまい、結果致命的エラーが生じてしまいます。

つまり、妥当なら整形式と言う論法自体が間違っていると言う訳です

対策としては、XMLの仕様で定められている文字実体参照以外は一切使わず、数値文字参照で代用する事です。

数値文字参照なら、DTDを読まない場合であっても不正な実体参照と見なさず、結果エラーとはならなくなります。

XHTML文書のMIMEタイプ。(平成19年 8月30日 訂正)

XHTMLでマークアップされた文書のMIMEタイプは、application/xhtml+xml が最も適切とされております。

一方、在来HTMLでマークアップされたHTML文書は、必ず text/html をMIMEタイプとして配信しなければなりません。

XHTML 1.0を在来HTMLの代わりに利用する場合も text/html をMIMEタイプとする必要があります事が出来ますが、この場合でもapplication/xhtml+xml の方が望ましいとされております

XHTML文書に独自のMIMEタイプがある理由。

XHTML文書のためのMIMEタイプとして application/xhtml+xml が定義されているのはいくつかの理由があります。

XHTMLがXMLの応用言語である以上、他のXML応用言語と組み合わせて利用する事が考えられます。

実際、XHTML 1.1MathML(数式を記述するためのXML応用言語)やSVG(ヴェクタグラフィックを記述するXML応用言語)を組み合わせたDTDなどが公開されております。

このように複数応用言語に対応する事は、在来HTML文書と同じ扱いでは出来ない事です。

XSLスタイルシートを併用する事も考えられます。

非公式な独自の要素を定め、それをXSLスタイルシートでXHTMLや在来HTMLに変換して取扱うと言う事も考えられます。

XMLに対応した現行のクライアントなら、後述の<?xml-stylesheet?>処理命令でXSLスタイルシートのリンクを指定すればクライアント側がXSLTを利用して文書を閲覧出来るでしょう

しかし、XSLスタイルシートはXML応用言語の一つですので、やはり在来HTML文書扱いとした場合には利用出来なくなります。

XHTMLには一般のXMLとは異なる機能があります。

一般のXML文書に対しては text/xml、一般のXMLアプリケーションに対しては application/xml と言うMIMEタイプが定義されております

しかし、XHTMLには<a>要素href属性など、特定の要素属性に固有の機能が与えられております。

このため、一般のXMLとして取扱おうとすると、これらの独自の要素属性が機能しなくなる恐れがあります。

結局、XHTML文書に対しては特殊なXMLアプリケーションとして独自のMIMEタイプを定める必要があったのです。

XHTML文書のMIMEタイプ・application/xhtml+xmlの実装上の問題。

しかし、実際にはXHTML文書のためのMIMEタイプとされている application/xhtml+xml について以下のような問題があります。

インターネットエクスプローラ

インターネットエクスプローラは現行の7.0になっても未だに application/xhtml+xmlを認識しません。

application/xhtml+xml をMIMEタイプとするコンテンツを受け取ると、意味不明のコンテンツと見なしてローカル保存を行おうとします。

勿論、通常のXMLアプリケーションとして扱う事は不可能ではありませんが、ヴァージョンに依っては正常に取扱う事は出来ません。

また、<?xml-stylesheet?>処理命令にも不具合があります。

オペラ 6.0

オペラ 6.0ではMIMEタイプに application/xhtml+xml が与えられると、<link>要素でのスタイルシートへのリンクが機能しなくなります。

しかも、<?xml-stylesheet?>処理命令にも不具合があります。

サファリ

ウィンドウズ版のサファリ 3.0ではMIMEタイプに application/xhtml+xml が与えられると、JAVAスクリプトでのDOMが機能しなくなります。

また、<?xml-stylesheet?>処理命令に不具合があります。

ネットスケープ 4.x 以前の旧型ブラウザ

ネットスケープ 4.x 以前は、XML自体認識しないため、MIMEタイプに application/xhtml+xml が与えられると意味不明のファイルと見なしてローカル保存を行おうとします。

以上のように、多くのウェブブラウザで application/xhtml+xml 型には問題がある事が分かります。

結局、MIMEタイプに application/xhtml+xml を与えても問題が起こらないのは

くらいとなってしまいます。

XHTMLでは<meta http-equiv="">要素も使えません。(平成19年 8月30日)

application/xhtml+xml 型に於いては、<meta>要素にhttp-equiv属性を付けるのは好ましくありません。

なぜなら、一般のXMLパーサにはHTTPで文書を取得した際に受け取った応答ヘッダを読込時に修正する機能は想定されていないからです。

完全には禁止しておりませんが、これらの要素での応答ヘッダ修正は機能しない恐れがある事は知っておいた方が良いでしょう。

但し、text/html 型で配信する場合には<meta http-equiv="content-type">要素での文字コード指定も併用する事が望ましいとされております。

XHTML文書でのスタイルシート言語。

XHTMLはHTMLをXML上で再定義したものですので、当然<link>要素でスタイルシートをリンク出来ます。

一方、XMLでは共通のスタイルシートリンク機構として<?xml-stylesheet?>処理命令が用意されております。

現状、XHTML文書ではどちらの方法でもスタイルシートをリンク出来ますが、XML応用言語である事を考えるとやはり<?xml-stylesheet?>処理命令が望ましいと思われます。

<?xml-stylesheet?>処理命令。

<?xml-stylesheet?>処理命令はXML共通のスタイルシートリンク機構として策定されたもので、以下の書式に従います。

<?xml-stylesheet type="スタイルシート言語のタイプ" href="スタイルシートへのURI" media="対応するメディア型" alternate="代替スタイルシートとすべきか" title="スタイルシート名"?>

ご覧の通り、alternate擬似属性以外は<link>要素と殆ど同じです。

alternate擬似属性は

をそれぞれ与えます。

尚、<?xml-stylesheet?>処理命令は通常<?xml?>宣言の直後、文書型宣言(文書型宣言が無い場合にはルート要素開始タグ)の直前に記述します。

<?xml-stylesheet?>処理命令の実装上の問題。

<?xml-stylesheet?>処理命令には以下のブラウザでバグが見られます。

いずれも、media擬似属性を認識しません。

この結果、複数メディアのスタイルシートを<?xml-stylesheet?>処理命令を並べて記述した場合、無視されるべきスタイルシートまでリンクしてしまい、スタイル定義がごちゃ混ぜになってしまう事があります。

以下の例で言えば、PC上のインターネットエクスプローラ, オペラ 6.0またはサファリで当該XHTML文書を開いた場合、携帯電話向けのスタイルシートである css-mobi.css も一緒に取り込んでしまい、このスタイルシートの内容で一部セレクタの一部プロパティが上書きされてしまうかも知れません。

<?xml version="1.0" encoding="shift_jis"?>
<?xml-stylesheet type="text/css" href="css-PC.css" media="screen, projection"?>
<?xml-stylesheet type="text/css" href="css-mobi.css" media="handheld"?>

XHTML文書でのJAVAスクリプト。

XHTML文書(MIMEタイプとして application/xhtml+xml などが与えられている文書)では、JAVAスクリプトについて以下の点に注意しなければなりません。

XHTML文書ではdocument.write()メソッド(HTMLの書出し)が使えません。

XHTML文書ではdocument.write()メソッドで文書中にHTMLを書き加える事が出来ません。

このため、XHTML文書でスクリプトに依り文書を書き加えたい場合にはDOMを利用する必要があります。

しかし、オペラ 6.0ではDOMでのHTML追加に便利なinnerHTMLプロパティが実装されておりません。

また、innerHTMLプロパティを用いてHTMLを付け足したり書き直したりする場合、そのHTMLもまた整形式となっている必要があります。

そうでないと、スクリプトの処理中にパースエラーが発生するからです。

また、ウィンドウズ版サファリ 3.0では application/xhtml+xml 型のXHTML文書ではDOMが機能しません。

敢えて言うなら無理にXHTML文書として配信しない方が良いかも知れません。

XHTML文書のMIMEタイプ・application/xhtml+xmlの実装上の問題でも書いた通り、XHTML文書をXHTML文書として配信する、すなわちXHTMLでマークアップされた文書を application/xhtml+xml と言うMIMEタイプで配信するのは、まだ実装上問題が残っております。

現状、もじら系ブラウザとオペラ 7.0以降くらいしか完全に取扱えるウェブブラウザがありません。

特に他のXML応用言語と組み合わせるとか、Another HTML-lintで減点されたくないと言うのでも無い限り、大人しく text/html 型で配信した方が良いのかも知れません。

勿論、無理してXHTMLを使わずに大人しくHTML 4.01などの在来HTMLか、或いは在来HTML扱いが許されているXHTML 1.0でマークアップするのが一番良い方法なのは言うまでもありません。

しらぎくのウェブサイト作成入門サイトマップ

ページ外へのご案内。

marguerite.site@gmail.com