近況報告たまに18歳未満の人や心臓の弱い人にはお勧めできない情報が含まれることもあるかもしれない、甘くなくて酸っぱくてしょっぱいチラシの裏。RSSによる簡単な更新情報を利用したりすると、ハッピーになるかも知れませんしそうでないかも知れません。動向はもえじら組ブログで。日経LinuxにてLinuxの基礎?を紹介する漫画「シス管系女子」を連載させていただいています。1.1を選択してるんですが、過去にXHTML2で検討されてたl要素(パラグラフより細かい単位の「行」を示すための物)やiframeやなんかをどうしても埋め込みたくなって、しかしそのせいでバリデータでエラーが出てしまうのも嫌だったので、見よう見まねで頑張って独自の文書型宣言を書いてみたんですよ。いつやったのか忘れたけど、結構前に。>]>CGIを使ってIEにはこの文書型宣言を出さないようにしてますが、FirefoxとかChromeとかでトップページあたりを開いてソースを見れば、こういうのが頭にくっついてるのが分かると思います。バリデータ的にはこれでvalidになったのでめでたしめでたしだったんですが、GeckoのDTDパーサ部分にバグがあるらしくて、この文書型宣言を正しく解釈してくれないんですよね。最後の]>ではなくその前の>の部分で文書型宣言が終わったものと見なされてしまうせいで、Firefoxでこのサイトのページを開くと、ページの頭に謎の]>という文字列がくっついてしまう状態になってたのです。表示が崩れるのが嫌だったので、この]>がテキストノードとしてページの頭に存在してる時は動的に削除するようなJavaScriptを書いて、長らくごまかしてました。Silliさん)がメールを下さいまして、以下のようなハックを使えばページの頭に謎の]>が出てくる事を防げるよ、と教えてくれたんです。?>]><!--><?!-->強調箇所がそのハック。処理命令(PHPのコード片を埋め込んだりするのに使うのと同じ奴)の記法でコメントとして解釈できる文字列を埋め込んで、問題の部分を無視させるという物のようです。バリデータに通しても、これでもvalidです。同じような事をやってる酔狂な人がもしいたら役立てて欲しいと思ったので、氏に許可を得てエントリにさせて頂きました。これがvalidなのかも考えてみよう。?>この行は、これ自体で1つの処理命令となる。いう内容」を含んだ処理命令として解釈される。文書型宣言の定義では、[から]までの間に登場しうる内容として処理命令も含まれている。上記の箇所は一つの完結した処理命令である。よって、文書型宣言中に登場しても何ら問題ない。いう内容」を含んだコメントと解釈される。いう具合で文法的には何も問題ないので、W3Cのバリデータはこれをvalidと判断する。XMLパーサを実装しているブラウザ上でも同様です。Geckoの解釈はどうか。これは「ソースを表示」での色分けを見るとよく分かる。[Geckoはまず、この部分だけで完結した文書型宣言と認識する。来た時点で「あ、もう文書型宣言は終わってたのね」と見なしてるようだ。~>この辺はすべて、それぞれ別々の宣言として解釈されている。いう事で、]>何もハックをしない場合はこの部分だけが取り残されてしまって、Gecko的にはこれが「XML的には不正だけどSGML的にはアリ」なテキストノードとして扱われて、ゴミとして表示されてしまうわけだ。ハック有りの場合はどうなるか。?>]><!--><?!-->Geckoはこれを3つのノードとして解釈している。>まずGeckoは、これを1つの処理命令と判断する。処理命令が終わったものと見なしてしまう。?>]><!-->これは当然1つのコメントになる。1つの処理命令と見なされる。いう事で、ハック有りの時はどの文字もテキストノードとして取り残されずに済むので、画面上は何もゴミが表示されずに済む。こんなのよく考えるなー、と、読み解いてみて改めて感心しました。