C. HTML 互換性ガイドライン

目次

本付録は参考的。

本付録は XHTML 文書を既存の HTML ユーザエージェントでレンダリングできるように望む製作者のためのデザインガイドラインをまとめたものである。本勧告では HTML 適合ユーザエージェントが HTML 文書をどのように処理すべきかについては定義しないということに注意されたい。また、インターネット・メディア・タイプ text/html の意味も定義しない。これらの定義については、おのおの [HTML4] と [RFC2854] を参照されたい。

C.1. 処理命令と XML 宣言 (Processing Instructions and the XML Declaration)

処理命令はいくつかのユーザエージェントでは描画されることに注意すること。また、いくつかのユーザエージェントは XML 宣言を、その文書が HTML 以外の認識できない XML であることを意味すると解釈する。その結果、文書が予期したようにはレンダリングされないかもしれない。これらのタイプのレガシーなブラウザとの互換性のためには、処理命令や XML 宣言を避けることを望むかもしれない。しかしながら、文書に XML 宣言が含まれなければ、その文書はデフォルト符号化方法 UTF-8 か UTF-16 だけしか使えないということを覚えておかなければならない。

C.2. 空要素 (Empty Elements)

空要素の末尾の /> の前にスペースを含めること。例えば、<br />, <hr />, <img src="karen.jpg" alt="Karen" />。また、空要素のタグ・シンタックスには最小化を使うこと。例えば、XML で許されているが多くの既存のユーザエージェントで予想外の結果を与える <br></br> の代わりに <br />

C.3. 要素の最小化と空要素の内容 (Element Minimization and Empty Element Content)

コンテントモデルが EMPTY ではない要素で内容が空のもの(例えば、空のタイトルや空の段落)があっても、最小化形は使わない(例えば、<p /> は使わず <p> </p> を使う)。

C.4. 埋め込みスタイルシートとスクリプト (Embedded Style Sheets and Scripts)

スタイルシートで lt;&]]>-- を使うときは、外部スタイルシートを使うこと。スクリプトで lt;&]]>-- を使うときは、外部スクリプトを使うこと。XML パーサはコメント内部を何もしないで取り除くことが許されていることに注意すること。そのため、歴史的実践である後方互換のための「コメント」内部の「隠蔽」されたスクリプトやスタイルシートは XML ベースのユーザエージェントでは働かないかもしれない。

C.5. 属性値内の改行 (Line Breaks within Attribute Values)

属性値内での改行や複数の空白文字は避けること。これらはユーザエージェントで一致しない取り扱いを受ける。

C.6. Isindex

文書の head 内で一つでも isindex 要素を使わないこと。isindex 要素は廃止予定であり、 input 要素が望ましい。

C.7. langxml:lang 属性 (The lang and xml:lang Attributes)

要素の言語を指定するときは langxml:lang の両方を使うこと。xml:lang 属性の値が優先する。

C.8. 断片識別子 (Fragment Identifiers)

XML では、"foo" という形の断片識別子で終わる URI-references [RFC2396] は、属性 name="foo" を持った要素を参照するのではない;そうではなく、それらは、ID 型に定義された属性(例えば HTML 4 で定義された id属性)を持つ要素を参照する。多くの既存の HTML クライアントはこのような形で ID 型属性をサポートしていない、そのため前方互換性と後方互換性を最大化するためには、識別する値は両方の方法で提供して良い(例えば、<a id="foo" name="foo">...</a>)。

更に、ID 型属性の合法的な値のセットは CDATA 型のそれよりもだいぶ少ないので、name 属性の型は NMTOKEN に変更された。この属性は ID 型か Name production in XML 1.0 Section 2.3, production 5 のいずれかと同じ値しか持てないように制限されている。不幸にも、この制限は XHTML 1.0 DTD では表現できない。この変更のために、既存の HTML 文書を変換するときには注意しなければならない。これらの属性の値は文書中で一意でなければならず、妥当でなければならず、万一変換時にこれらの値が変更されるようならば、これらの断片識別子の参照(内部的でも外部的でも)は、更新されなければならない。

XML 1.0 Section 2.3, production 5 の合法的な値の集合は HTML 4 で定義されている IDNAME 型で使うことが許されているものよりもだいぶ大きいことに注意すること。断片識別子を後方互換になるように定義するときは、パターン [A-Za-z][A-Za-z0-9:_.-]* にマッチする文字列を使うべきである。より詳細な情報は [HTML4] を参照されたい。

最終的には、 XHTML 1.0 では a, applet, form, frame, iframe, img, map 要素の name 属性を廃止予定としており、後継バージョンでは XHTML から取り除かれることになる。

C.9. 文字符号化方法 (Character Encoding)

歴史的には、HTML 文書の文字符号化方法は HTTP Content-Type ヘッダの charset パラメタを通してウェッブ・サーバで指定されていた。もしくは、文書自身の meta 要素で指定されていた。XML 文書では、文書の文字符号化方法は XML 宣言で指定される(例えば、<?xml version="1.0" encoding="EUC-JP"?>)。文書に対して特定の文字符号化方法を過搬的に提示するために、最善のアプローチはウェッブ・サーバが正しいヘッダを提供することを保障することである。もしこれが可能でないならば、文字符号化方法をセットしたい文書に、 XML 宣言の符号化方法宣言と、 meta http-equive ステートメント(例えば、<meta http-equiv="Content-type" content="text/html; charset=EUC-JP" />)の両方を、明示的に含めなければならない。XHTML 適合ユーザエージェントでは、 XML 宣言の符号化方法宣言の値が優先する。

注:もし文書が meta http-equiv ステートメントでの文字符号化方法を含んでいなければならないならば、その文書は HTTP サーバやユーザエージェントによって常にそのステートメントで定義されたインターネット・メディア・タイプとして解釈されなければならない。もし文書が複数のメディア・タイプで提供されるならば、 HTTP サーバはその文書の符号化方法をセットするために使われなければならない。

C.10. ブーリアン属性 (Boolean Attributes)

いくつかの HTML ユーザエージェントは、ブーリアン(ブール代数)属性が完全形(非最小化形)で現れると、 XML 1.0 で要求されたとおりには解釈することができない。この問題は HTML 4 準拠のユーザエージェントには影響しないことに注意すること。次の属性が関係する:compact, nowrap, ismap, declare, noshade, checked, disabled, readonly, multiple, selected, noresize, defer.

C.11. DOM と XHTML (Document Object Model and XHTML)

Document Object Model level 1 勧告 [DOM] は、 XML と HTML 4 に対するドキュメント・オブジェクト・モデルのインタフェースを定義する。HTML 4 文書のオブジェクト・モデルは、 HTML の要素と属性の名前が大文字で返されるように指定されている。XML 文書のオブジェクト・モデルは、要素と属性の名前がその指定された文字種で返されるように指定されている。XHTML 1.0 では要素と属性は小文字で指定されている。この明確な差異には、二つの方法で取り組むことができる:

  1. DOM を通して、インターネット・メディア・タイプが text/html で配布されるXHTML 文書にアクセスするユーザエージェントは、HTML DOM を使うことが可能であり、要素と属性の名前がそのインタフェースからは大文字で返されることを期待することができる。
  2. インターネット・メディア・タイプが text/xml, application/xml, or application/xhtml+xml として配布される XHTML 文書にアクセスするユーザエージェントは、 XML DOM も使うことができる。要素と属性は小文字で返される。また、いくつかの XHTML の要素はオブジェクト・ツリーに現れても現れなくても良い。というのも、それらの要素が内容モデルではオプショナルだからである(例えば、 table 要素内の tbody 要素)。HTML 4 では、この現象はいくつかの要素が開始タグと終了タグの両方を省略可能な最小化(SGML 機能)が許されていることから発生する。これは XML では許されない。XHTML では、文書製作者に無関係な要素を挿入するように要求するのではなく、それらの要素をオプショナルにした。ユーザエージェントは、これに従って適合する必要がある。この話題に関する更に詳細な情報は [DOM2] を参照。

C.12. 属性値内(および任意の場所)でのアンパーサンドの利用 (Using Ampersands in Attribute Values (and Elsewhere))

SGML および XML では、アンパーサンド文字 ("&") は実体参照(例えば、登録商標記号 "®" に対する &reg;)の開始を宣言する。不幸にも、多くのユーザエージェントは、 HTML 文書内の不正なアンパーサンド文字を何もしないで無視してきた -実体参照に見えないアンパーサンドはリテラル・アンパーサンドとして取り扱うのである。XML ベースのユーザエージェントは、この不正な利用を許容せず、アンパーサンドを不正に利用している文書は全て「妥当」ではなくなり、その帰結として本仕様書にも適合しない。文書が、歴史的 HTML ユーザエージェントと XML ベースのユーザエージェントと互換であることを保障するために、リテラル文字として扱われる、文書内で使われるアンパーサンドはそれ自身実体参照で表現されなければならない(例えば、 "&amp;")。例えば、 a 要素の href 属性がパラメタをとる CGI スクリプトを参照するとき、それは http://my.site.dom/cgi-bin/myscript.pl?class=guest&name=user ではなく、 http://my.site.dom/cgi-bin/myscript.pl?class=guest&amp;name=user として表現されなければならない。

C.13. CSS と XHTML (Cascading Style Sheets (CSS) and XHTML)

Cascading Style Sheets level 2 Recommendation [CSS2] は HTML や XML 文書の構文解析木(パース・ツリー)に適用するスタイル・プロパティを定義している。構文解析における差異は、利用されるセレクタに応じて、異なる視覚的、音声的結果を生成する。次のヒントは、両方のメディア・タイプの変更がなく提供されている文書に対して、この効果を減らすことになる:

  1. XHTML に対する CSS スタイルシートは要素と属性の名前に小文字を使うべきである。
  2. テーブルでは、tbody 要素は HTML ユーザエージェントのパーサには存在するものとして扱われるが、 XML ユーザエージェントのパーサではそうではない。従って、 CSS セレクタで参照されるならば、tbody 要素を常に明示的に追加しておくべきである。
  3. XHTML 名前空間内では、ユーザエージェントは "id" 属性は ID 型の属性として認識することが期待される。従って、ユーザエージェントが DTD を読まなくとも、スタイルシートは省略された "#" セレクタ・シンタックスを使い続けられるべきである。
  4. XHTML 名前空間内では、ユーザエージェントは "class" 属性を認識することが期待される。従って、スタイルシートは省略された "." セレクタ・シンタックスを使い続けられるべきである。
  5. CSS は HTML と XML 文書に異なる適合規則を定義する; HTML として配布される XHTML 文書には HTML 規則が適用され、 XML として配布される XHTML 文書には XML 規則が適用されることを意識すること。

C.14. XML として提供されるときのスタイル要素の参照 (Referencing Style Elements when serving as XML)

HTML 4 と XHTML では、style 要素は文書内スタイル規則を定義するために使うことができる。XML では、 XML スタイル宣言がスタイル規則を定義するために使われる。この慣習に互換であるために、style 要素は断片識別子に id 属性を使うようにすべきであり、XML スタイルシート宣言はこの断片を参照する。例:

<?xml-stylesheet href="W3C-REC.css" type="text/css"?>
<?xml-stylesheet href="#internalStyle" type="text/css"?>
<!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>内部スタイルシートの例</title>
<style type="text/css" id="internalStyle">
  code {
    color: green;
    font-family: monospace;
    font-weight: bold;
  }
</style>
</head>
<body>
<p>
  これは我々の
  <code>internal stylesheet</code>
  を使っているテキストである。
</p>
</body>
</html>

C.15. 空白文字における HTML vs XML (White Space Characters in HTML vs. XML)

HTML 文書で合法的ないくつかの文字は、 XML 文書では非合法的である。例えば、 HTML ではフォームフィード文字(訳注:新規ページの表示要求) (U+000C) は空白文字として取り扱われ、 XHTML では XML の文字定義によれば非合法的である。

C.16. 命名文字参照 &apos; (The Named Character Reference &apos;)

命名文字参照 &apos; (アポストロフィー、U+0027)は XML 1.0 で導入されたが、 HTML では現れていない。従って、HTML 4 ユーザエージェントで想定されたように動作するためには、製作者は &apos; の代わりに &#39; を使うべきである。


SEO [PR] !uO z[y[WJ Cu