XHTML利用者エージェント適合性

XHTML利用者エージェント適合性

[10] XHTML1適合することを主張する利用者エージェントは、 各 XHTML 1 規格で規定された適合性要件を満たす必要がありました。

[25] XHTML 1.0 FE/SE と m12n では、要件はほとんど同じでしたが、 >>9 の空白の処理についてが若干違いがありました。

[26] 本項で説明しているのは旧 HTML WG / XHTML2 WG / RDFa WG によって定義されていた XHTML1マーク付け言語に関する利用者エージェントの適合性に関する規定です。現在の一般的な WebブラウザーHTML Standard が定義する XHTML (旧 XHTML5) の規定に従っているので、 本項の説明とは一致しないことがあります。

仕様書

要件

[1] [整形式性・妥当性] XHTML 文書整形式であることを検査しなければなりません。 妥当利用者エージェントであることを主張する場合は、 加えて妥当性を検証しなければなりません。

[2] [機能定義適合] XHTML 1.0 仕様書で定義された、 又は XHTML 1.0 の規定参考文献として必須とされている機能対応していることを主張する利用者エージェントは、 その機能を、その機能の定義の通りにしなければなりません。

[3] [素片識別子] 利用者エージェントが一般 (generic) XML として XHTML 文書を扱う時には、 ID 型の属性だけを素片識別子に使える値として扱います。

[4] [未知要素型] 利用者エージェントが認知していない要素型要素が現れたら、 その内容を処理しなければなりません。

[5] [未知属性] 利用者エージェントが認知していない属性が現れたら、 その属性指定は無視しなければなりません。

[6] [未知属性値] 利用者エージェントが認知していない属性値が現れたら、 既定値を使わなければなりません。

[7] [未知実体] XHTML 1.0 仕様書で定義されておらず、 かつ実体宣言が読まれていない一般実体参照された場合、 そのままの実体参照を構成する文字列 (例: &ent;) として処理するべきです (should)。

[8] [表示不能文字] 文字又は文字実体参照を利用者エージェントが認知しているものの表示出来ない時は、 それと同じ意味のほかの rendering をしてもかまいません (may) し、 又は通常の rendering が行われなかったことが自明なようにしなければなりません (must)。

[11] >>8 後半の must が前半の may の時にも適用されるのかよく分からん...

[9] [空白の処理]

空白は次の規則に従って取り扱います。 XML 仕様書では次の文字が空白文字として定義されています。

(XHTML 1.0 FE にのみ存在:)

XHTML 利用者エージェントは加えて次の文字を空白として扱わなければなりません。

xml:space 属性が preserve に設定されている要素では、利用者エージェントは全ての空白文字を触らずに残しておかなければなりません (must)。 (例外として、先頭と最後尾の空白文字は削除するべき (should) です。) それ以外では、空白は次の規則に従って処理します。

m12n にのみ存在:

利用者エージェントは XML 処理系から受け取ったデータ中の空白文字を次のように処理しなければなりません (must)。

(XHTML 1.0 FE 及び m12n に存在:)

  • ブロック要素を囲む全ての空白は削除するべき (should) です。
  • 注釈は完全に削除し、空白の取扱いには影響しません。 注釈のいずれかの1つの空白文字は2つの空白文字として扱います。 なぜ?

  • xml:space 属性が preserve に設定されている時は、 空白文字は保持しなければなりません (must)。 よって、ブロック中の LINE FEED 文字は変換してはなりません (must)。
  • xml:space 属性が preserve に設定されていない時には、
    • ブロック要素の内側の先頭と最後尾の空白は削除しなければなりません (must)。
    • LINE FEED 文字は
    • のいずれかに変換しなければなりません。 結果文字の選択は利用者エージェント依存で、 LINE FEED 文字の前後にある文字の用字形の特性により決まります。
    • LINE FEED 文字を含まない空白文字の連続は、 単一の SPACE 文字に減らさなければなりません (must)。
    • LINE FEED 文字を含む空白文字の連続は、 単一の LINE FEED 文字の場合と同様に減らさなければなりません (must)。

(XHTML 1.0 FE に存在:)

  • ブロック要素の内側の先頭と最後尾の空白は削除しなければなりません (must)。
  • ブロック要素中の改行文字は1つの間隔に変換しなければなりません (must)。 (例外として、 xml:space 属性が preserve の時をのぞきます。
  • 空白文字の連続は減らして単一の空白文字としなければなりません (must)。 (例外として、 xml:space 属性が preserve の時をのぞきます。
  • rendering に当たって、利用者エージェントは内容が書かれている言語について適当な方法で内容を rendering するべきです (should)。主用字系ラテン文字である言語では、 ASCII 間隔文字は典型的に文法的語境界と写植的空白の両方を符号化するのに使います。 Nagari に関連する用字形 (例えば梵字タイ文字など) では、文法的境界は ZWSP 文字で符号化されるかもしれませんが、 rendering 出力では典型的には写植的空白として表現されません。 アラブ文字系用字系を使う言語では空白を間隔文字を使って符号化しますが、 「内部」の文法的境界を区切るのに ZWSP 文字も使うかもしれません。 (アラビア語の単語は英語的視点ではよく複数の語を符号化しているように見えます。例えば kitAbuhurn = kitAbu‐hum = book them = their book。) そして漢字を使う言語では典型的にはこのような区切りも写植的空白もこの方法では符号化しません。

(XHTML 1.0 SE にのみ存在:)

XML処理系は異なりシステムの行末符号を1つの LINE FEED 文字に正規化し、これが応用に渡されます。

利用者エージェントは空白文字の処理についての CSS 2 の定義を使わなければなりません (must)。 なお、 CSS 2 勧告は非ラテン文字集合における空白の取り扱いについての問題に陽に触れていないのに注意して下さい。 これは将来の版の CSS では触れられることでしょう。 そのときにはこの参照も更新されることでしょう。

(中略)

(m12n にのみ存在:)

注意 (参考): LINE FEED 文字をどう変換するかの決定に於いて、利用者エージェントは次の場合を考慮するべきです (should)。 ここで LINE FEED の両側の文字の用字系が置換の選択を決定します。 (句読点など) 共通用字系は、反対側の用字系と同じものとして扱います。

  • LINE FEED の前後の文字が SPACE を語分離子に使っている用字系に属する場合は、 LINE FEED 文字は1つの SPACE 文字に変換するべきです (should)。 このような用字形の例: ラテン文字, ギリシャ文字, キリル文字
  • LINE FEED 文字の前後の文字が表意文字系用字系あるいは表記系で語分離子がないものに属しているなら、 LINE FEED は文字なしに変換するべきです (should)。 このような用字系や表記系の例: 中文, 日本語
  • LINE FEED 文字の前後の文字が非表意文字系用字系で語分離子が無いものに属しているなら、 LINE FEEDZERO WIDTH SPACE 文字 (​ に変換するか、 又は文字なしに変換するべきです (should)。 このような用字系の例: タイ文字, クメール文字
  • 以上の条件がいずれも真でない場合は、 LINE FEED 文字は1つの SPACE 文字に変換するべきです (should)。

[12] >>9 XHTML 1.0 3rd edition とか出るんですかね? そうでなくても errata に記載くらいされるのかな?

適合 RDFa 利用者エージェント、適合 XHTML+RDFa 利用者エージェント

[27] RDFa処理器の項を参照。