HDMLプログラムは難しい。
KDDIのEZwebで使われているマークアップ言語…まぁ、HTMLの亜流みたいなものだが、高機能な分だけわかりにくくなっているのも事実。
画面を「カード」という単位で考える。
通常のHTMLだと、URL1つ(ファイル1つではない…)が1つのカードだ。
これを、複数カードまとめて1つの URLにすることが出来る。
携帯電話のアクセスは遅いので、出来るだけ一気に送ってしまおうという腹だな。
「HTMLでも一気に大きいのを送ることはできる」という意見もあるだろうが、もちろんHDMLがわざわざ複雑な手法をとっているのにはそれなりの意味があって、HTMLででかいページを送るのとは意味が違う。
この、カードをまとめた「デッキ」内は、アクセス無しにページ切り替えが出来る。
しかも、ページ内の表示に変数を使ったりも出来る。
card1 と card2 と card3 からなるデッキがあったとして、card1 で入力したデータとcard2 で入力したデータを card3 で示し、「これでよろしいですか?」なんて聞くところまでは、サーバーへのアクセス無しで出来るわけだ。
これは、HTMLのでかいページ送りでは出来ない芸当。
さらに、デッキ内で使う画像などがある場合には、それもいっしょに送ることが出来る。
こちらは、「ダイジェスト」と呼ばれる。
カード≦デッキ≦ダイジェスト なわけだ。
さらに、よく使う画面の流れなどを「サブルーチン化」して、いろんなところから呼び出せる。
普通、HTMLでこれをやろうとすると、CGIで戻り先を覚えてやらないと出来ない。
しかし、HDMLはそもそも「戻り先を知った上で」呼び出すので、簡単に戻れる。
これはアクティビティと呼ばれる。
HTMLでも、ブラウザ側で「履歴」を残すことは出来るが、履歴を1次元配列とすれば、アクティビティは履歴のスタック構造となる。
(見た目は2次元? 1次元配列の配列と言うほうが正確だが)
アクティビティとデッキは別の概念なので、デッキの内部で複数アクティビティがあることもあれば、複数デッキで1つのアクティビティのこともある。
HDMLでは、キャッシュも非常に有用に使われる。
ダイジェストなどは、見た目は「画像をいっしょに送る」のだが、ブラウザ側では送られた画像をすぐさまキャッシュに入れるだけである。
すると、表示しようとしたときに必ずキャッシュにヒットする。
アクティビティもまた、呼び出し元に戻るというのは「キャッシュ内のデータを再び表示する」ことに他ならない。
もちろん、キャッシュが溢れたら再ロードが必要だが、それはまた別の問題。
で、それだけキャッシュが重要になると、必要に応じてキャッシュを消すことも重要になる。
CGIなどで画面をどんどん変更するときにはキャッシュが邪魔だからだ。
これは、ダイジェストの内部で「キャッシュクリア命令」を送ることで行われる。
ダイジェストで送られるのはデッキや画像だけではないのだ。
さて、ひととおりHDMLの基礎概念(これでも基礎の簡単なところだけ)を説明した上で問題です。
これを使って、プログラムをしてみましょう。
HDML自体が独特な言語構造みたいなものです。
変数も持っていますし、キャッシュメモリも持ちます。
ユーザーから選択されることで、条件分岐もあります。
CGIを使うとして、CGIプログラム言語の動作は大抵 HTML 用に設計されているので、HDMLとの整合性がまず問題になる。
僕の場合 PHP を使用しているが、PHPはダイジェストを送る方法を標準ではサポートしていない。もちろんキャッシュ制御も出来ない。
多くのコンテンツ提供会社が、HDMLの機能的メリットを生かさずに、i-mode向けコンテンツをベタ移植する。
その場合、HDMLはHTMLとの思想背景が違うので、「使いにくいHTML」にしかならない。
KDDIはそろそろ次のマークアップ言語を導入する。
今度は HTML がベースになるらしい。HDMLの機能的メリットがなくなってしまうのかどうかは不明。
出来ればなくならないでほしい。使いこなしは難しいけど、非常に便利ではあるから。
なにを書いてるんだかわからなくなってきたのでそろそろ終わり。
ただ、HDMLプログラムで複雑になりすぎて混乱しているだけである (^^;;
同じテーマの日記(最近の一覧)
関連ページ
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |