Webページを記述するためによく使われるHTMLを、XMLに適合するよう定義し直したマークアップ言語。W3Cが仕様策定。
HTMLはXMLとは一部整合性を欠く言語仕様となっているが、両者の違いはある程度吸収できる範囲のものであるため、従来のwwwブラウザでも問題なく見られ、かつXMLに準拠した文書を作成する言語仕様としてXHTMLが作成された。
最初のW3C勧告となったXHTML 1.0はHTML 4.01が元。HTML 4.01に対応したWebブラウザでほぼ完全な形でページを見られる。
現在の最新版はXHTML 1.1で、文書見栄えを指定するタグが廃止(見栄えの記述は全てCSSで行なう)など、文書構造の記述に特化した言語へと変化しつつある状況。
XHTMLの各バージョンに共通したHTMLとの違い:
タグ名がすべて小文字に統一。
XMLベースの他の言語(MathMLやSVGなどが想定されている)による記述を埋め込むことができる。
終了タグをもたず単独で使用される
などのタグを
ないし
と書く。
e-wordsのXHTMLの項から抜粋。
The Web Standards Project の記事 MSIE7 Will Not Support application/xml+xhtml MIME Type によると:
IE7 の開発チームは、IE7 では xhtml への対応は実装しないということらしい。
来るべき未来の IE7 でも xhtml 形式での表示にきちんと対応できないとなると、投稿クライアントとしてもきちんと対応することはできない。(なにしろ、最終的にそれを表示するブラウザが対応していないんだからね。)
現状でできることといえばエディタに IE の WebBrowser コンポーネントを使用してやって、表示の「出来具合」を合わせて「IE自身の仕様です」とする。これぐらいか。
あるいは、Firefox あたりが編集モードももったブラウザコントロールを配布してくれればありがたいんだが、ないんだろうか。htmlメールも作れるメールクライアントへの組み込みなど需要は高いと思うんだが、知っている限りは、スタンドアローンな WYSIWYG 編集アプリケーションとして Nvu があるぐらいか。
というかよく知らないんだが、Firefox や Mozilla は xhtml のどのバージョンにどの程度対応済みなんだろう?
Firefox というより Mozilla のブラウザコントロールがあるようだ。
それのActive-X ラッパーがあるそうなので Mozilla ActiveX Project からMozillaControlの1.7.7 というものを手に入れてインストールしてみたが、開発環境にコンポーネントとして認識されなかった。あらまぁ。
しばらく静かといいつつナニなんだが、一件やっておかないといけなかった修正をした。
metaWeblog.newPost, editPost で mt_convert_breaks が 1/convert_breaks だった場合に、改行コードを p タグの組み合わせに変換するようにした。
それで気づいたが BlogWrite で本文を入力し自動改行にチェックを入れてみたところ色々と不思議な動作をする。
- 本文を手入力して、新規投稿のときチェックを入れて送信→「投稿&公開」ボタンを押した瞬間にチェックが自動で外れ、 mt_convert_breaks == '0' で送られる。
- 本文をテキストエディタからペーストして新規投稿として送信→ mt_convert_breaks == '1' で送られるが、 <br /> が付加された本文のままで送信するので、結果的に br タグの上に更に p タグが付いてしまう。
- 編集して再投稿するときチェックを入れて送信→ mt_convert_breaks == '1' で送られるが、 <p></p> が付加された本文のままで送信するので、結果的に p タグが重ねがけされてしまう。
1.に関しては、かならず自動改行OFFでしか送られないようにブロックしているようだ。本文入力中に既に p タグが入力されているから自動改行する必要なしとの判断をしているのだと思う。
2.に関しては、テキストエディタから本文に貼り付けたとき、連続して何か書かれている行末には <br /> が自動挿入され、段落間は p タグが自動挿入される(賢い!)のだが、その状態で自動改行オンにして新規投稿すると、こちらはなぜか強制OFFしないでそのまま送ってしまうので、結果的に改行が二重に効いてしまい間延びした文書になってしまう。既に改行のための処理をしてあるのだから、1.と仕様を合わせて自動改行をOFFにすべきではないか?
3.に関しては、既に投稿済みの文書なので、改行の処理は済んでいると思われるのに、自動改行ONのままで送信するので確実に二重に改行処理がほどこされてしまう。
検証して思ったが BlogWrite のように WYSIWYG 処理の都合上、編集画面上改行されているところは改行用のタグが挿入されているツールの場合、1.から3.いずれの場合も、自動改行は強制的にOFFのはずだ。「自動改行=改行コードを改行に相当するタグに置き換える」処理の意味が成立しないからだ。
もし自動改行ONのモードをもたせるとしたら、手入力で改行した位置と、エディタなどから貼り付けたテキストの改行の位置を内部で保持しておき、送信時にそれらを改行コードとして送信する必要がある。ただそれだと、 html とかを貼り付けられた場合には、タグを解析してどこが改行や段落なのかを把握する必要が生じる。解析して改行を管理するか、常に自動改行OFFか、どちらかに統一が必要な気がする。
キーワード: BlogWrite mt_convert_breaks
文字列を1文字ずつみて ACSIIコードを16進表示するスクリプトを PHP で書いた。
side bar に「WEPキー作成補助」として追加した。
単純なものだが WEP キーを無線ルータに設定するとき重宝しそうだ。客先で時間がおしてくると、文字列→16進を紙で照合するのも大変だし間違いが生じそうだからだ。
核の部分はこれだけ。
for ($i = 0; $i < strlen($str); $i++) {
print strtolower(bin2hex($str[$i]));//または strtoupper(...)。
}
それにしても、製作の過程で検算のために ASCII コード表など拝見したが、なつかしい。自分がマイコンに触れた頃は、グラフィック画面などなく、文字コードといえばコレのJIS拡張版(半角カナ等付き)もう少し正確にいうとメーカー独自のセミグラフィックコード(≒絵文字)の入ったコード表が唯一全てだった。今はややこしい…。
以前、既存のカテゴリー分けに左右されず、「重要な記事の一覧」のようなカテゴリーが実現できないか考えたことがあった。
あのときは rNote の投稿記事ファイルの取り扱いに、シンボリックリンクのような機構を追加することで、新規に追加した「重要な記事の一覧」カテゴリーから既存カテゴリーの記事を参照するような構造で実現しようと考えた。
その後考え方がより一般化されて、記事本体に、その記事の属性を表す文字列の集合を保持するタグを追加しておき、その属性とカテゴリーの対応表を作ってやり、本体はその対応に応じてカテゴリーごとの記事への閲覧機能を提供するようにすればよいのではないかと考えた。
例えば:
・ある投稿記事の属性キータグの内容:漫画,美少女,パンヤ,ゲーム
・blogのもつカテゴリー:漫画、ゲーム、健康、アウトドア
・カテゴリーごとの、閲覧対象となる属性:漫画=漫画、ゲーム=ゲーム,パンヤ、健康=健康,健康法,体操,薬、アウトドア=アウトドア
だった場合は、その blog の漫画カテゴリーおよびゲームカテゴリにて、その記事が閲覧可能となる…という寸法だ。
そこまで考えて、そこで放置した。というのも、それはまさに DB の導入がうってつけの事例だと気づいたからだ。記事ごとの属性文字列を DB で管理し SQL で検索する形になろう。rNote は DB を使っていないので、これの実現は保留した。(しかし最近、 DB 無しでも静的にキャッシュ生成するときに同等の処理をしてやれば実現できるんだろうなと思いつつ…。実現するといいなぁ。)
前置きが長くなったが今回は、 blog 自体の記事属性ごとのカテゴライズの話ではなく、外部に記事の情報を伝えるためのカテゴライズに、同じ考えが応用できると気づいたという話だ。
ちょうどタイミングよく、亜細亜ノ蛾さんの「ブログの記事にタグを付ける利点と方法」を発見した。どうやら、同じようなことはみな考えるらしい。
同記事を参考に、Technorati の Technorati: Tags に対応するように実装内容を考えてみた。
・記事にタグ <Keys></Keys> を追加する。
・同タグの内容は、タグの埋め込まれた記事のもつ属性を表す文字列の集合とする。区切り文字は半角のカンマ ( ',' ) とする。
・rNote 本体は、投稿記事の表示にあたって、同タグに列挙された属性の数だけ、 Technorati: Tags 形式のタグに順番に置き換える。
本体に手を入れないようにスキンでとりあえず実装したみた。(抜粋)
<div class="text">
<%=$Text%>
</div>
<%=$WriteBack%>
<if def_tag="Keys">
<div class="keys">
この記事の属性キー
<?php
$string = '<%=$Keys%>';
$tkn = strtok($string,",");
while($tkn) {
print "[ <a href=\"http://technorati.com/tags/".$tkn."\" rel=\"tag\">".$tkn."</a> ]";
$tkn = strtok(",");
}
?>
</div>
</if>
</div>
しかしこのままでは、属性が複数の場合に対応できない。スキンの中に php を書いて実現できそうだが方法がまだわからないのでいったん保留。やり方は他にもあるかも知れない。rinn@rNote 掲示板で php 内の変数に記事のタグの値を受け渡すやり方を教えていただけたので、上のスキンの記述を修正してあります。これで複数キー列挙に対応できました。(感謝~)
自分がどのようなカテゴリーの情報を発信しているかを相手に適切に伝えるというのは確かに有効な手段だと思う。ただ、その仕組みは標準化されていないようだから Technorati の実装だけでなく色々出てくるものに対応できるように…と考えると、やはり上で考えたように「属性キー」という上位のレベルで情報を保持しておき、下位の個々の実装に対する仕組みは適宜追加・置換して組み込んでやれる体勢にしておくのが良さげな気がした。
- 1: sabakan (06/25 22:32)
- どうも、はじめまして。
鯖Memoの運営をしているsabakanです。
コメント有難う御座いました。
御言葉に甘えて冬星さんのアイディアを流用させて戴きました :-) - 2: 冬星 (06/27 05:30)
- こちらこそありがたく。逆に参考にさせて頂く事も。
1エントリーが複数属性を主張するのは私的には大いに有りだと思いますが、Technoratiで1エントリーが複数のタグをもつことを考慮しているかイマイチわからずです。複数タグを埋めた記事の更新ping打ったら1個目のタグだけエントリーされるのかも知れませんが…。





