Hatena::Groupweb

vantguarde

 | 

12.11

State of the Browsable Web 2009: CSS3 Namespaces

| 01:13

今回はXHTML以外のXMLや複合文書にCSSを書かない限りはお世話にならなそうなCSS3 Namespaceです。なのでBrowsable Webに入るかというとそうでもないような気がしますが、ちょっと面白い話題があったのでこだわらず行きましょう。

仕様の現時点でのステータスはCRですが、長年実装もあるモジュールです。2月にはImplementation Reportが作成され、PRへの準備が始まりました。

「各機能に対して2つ以上の実装」という要件を満たさないと基本的には勧告できない*1わけなんですが、ひとつだけそれを満たせないテストがありました。syntax-013.xmlです。そして、このテストについてDavid Hyattが質問を投げたんですね。

該当箇所は次の通り。style要素に、閉じられていない@namespace x "textなる宣言もどきがあります。

<style>
 t, t2, t3, t4, t5 { background:red }
</style>

<style id="a">@namespace x "test</style>
<script>
 document.getElementById("a").sheet.insertRule("x|t2 {background:lime }", 1)
</script>

<p><t2 xmlns="test">This sentence should have a green background.</t2></p>

A syntactically invalid @namespace rule (whether malformed or misplaced) must be ignored.* と仕様にあるので、これは無視されnamespaceの宣言が無効になるのではないかと。すなわちテストが誤りではないかとの指摘です。

ところが、これ仕様通りなんですね。

Unless the stylesheet processor is required to magically fix up the missing closing quote.

It is. See http://www.w3.org/TR/CSS21/syndata.html#parsing-errors the "Unexpected end of style sheet" bullet.

Re: Agenda+ CSS Namespaces implementation report

はい。見てみましょうか。

User agents must close all open constructs (for example: blocks, parentheses, brackets, rules, strings, and comments) at the end of the style sheet. For example:

  @media screen {
    p:before { content: 'Hello

would be treated the same as:

  @media screen {
    p:before { content: 'Hello'; }
  }

in a conformant UA.

Rules for handling parsing errors ― Unexpected end of style sheet (CSS 2.1)

なあんと。スタイルシートの終わりに達してもまだ何かが開いた状態の場合は、それを閉じるエラー処理が定義されてるんですねー。そういえばそんなのありましたねー

というわけで、指摘されていたstyle要素は@namespace x "textのみで終了してるので、そこでエラー処理が働いて@namespaceが解釈されるようになります。こういう話だったんですね。

という感じで、そういうことになるようです。むつかしいですねー

で、いろいろ手の早いWebKitは早速修正しましたとさ。

ちゃんちゃん。CSS 2.1の話になってしまった感がありますが、まあ。

*1:実はSHOULDだったりする

 | 
Contact: @vant / lepetitcroissant@gmail.com.