Spryの拡張属性と妥当性検証

先日行われたWeb標準の日の講演で、 林岳里さんによるSpry framework for Ajaxの紹介があったのですが、そのSpryを使った時のXHTMLの書き方で気になったところがありました。

例えばSpryのサイトにあるGalleryのデモソースを見ると分かりますが、Spryを使う際にはXHTML文書の中で spry:region のようなspry:接頭辞のついた属性を用いています。林さんは紹介の中で「『これって標準から外れちゃって他のブラウザやエディタで見れないのかな』、という心配はありません」というような説明をされていたのですが、ブラウザの動作はさておくとしても、(ソースで宣言されているところの)XHTML 1.0 Transitional文書としての妥当性には反することになってしまいます。

妥当性検証は文書の品質を保つ上でも重要であり、敢えて妥当でないXML文書としてしまうのではなく、できれば適切な文書型を宣言した上で検証可能な状態にしておく方が望ましいと思います。(!DOCTYPEを書いておけばCSSの解釈が標準準拠になるので取り敢えず書いてあればいいや、という考え方もあるかもしれませんが、できることなら「CSSの解釈のために文書型宣言を使う」という考え方はしてほしくないなあと思います。いつの日か全てのブラウザがどんな文書に対しても標準に準拠したCSSの解釈をすることを望みます)

解決法として考えられるのは以下の2通りになるでしょう。

XHTML文書から文書型宣言を外す

妥当性を考えなくとも整形式であれば取り敢えず利用できる、というのもXML文書の利点の一つではあるので、取り敢えず特定の文書型は宣言せずに自由に拡張された属性を書く、というのも一つの手段ではあるかと思います。ただし(当然ながら)文書の妥当性検証はできません。また、XHTML 1.0で定義された実体参照も使えないことになります(代わりに数値文字参照を使う必要があるでしょう)。

一応CSSの解釈についても言及すると、文書型宣言がない場合、IE6では後方互換のCSS解釈モードとなってしまう(XML宣言があってもなくても)ので、CSSを書く人からすると避けたいと思われるかもしれません。

spry:* 属性を定義した、新たなXHTML DTDを作成する

やはり望ましいのはこちらになるでしょう。きちんとしたDTDさえあれば、W3CのValidation Serviceで検証することもできるし、xmllint(libxml2)のようなツールで多くの文書を一気に検証することもできます。

ちなみにIE6のDOCTYPEスイッチは、独自に作成したDTDを指定した文書型宣言であっても標準準拠モードを有効とするので、CSSを書く人にとっても望ましいと言えるかもしれません。

その他の問題

GalleryのデモのソースをW3CのValidation Serviceで検証してみると、spry:の名前空間宣言・属性の他にも、<img id="tn{ds_RowID}" という部分でエラーとなっています(id属性には "{", "}" を書けないため)。Spryがこのようなマークアップを許す方針なのであれば、spry:* 属性をサポートしたDTDではid属性の型についても検討する必要があると思います。

(書きかけ)