Web Artisan Blog - ウェブ アルチザン ブログ

XML、XSLTに一喜一憂

Diary (179 items)

2004年10月26日

Research Artisan Pro ←リサーチアルチザンがパワーアップして復活しました!!
現在、地道に自作アクセス解析ツールを作成中です。
作成着手後、約2ヶ月を経て、ようやく基本機能を使えるまでになりました。
しかし課題は山積みであり、これから更に色々詰めていきたいと考えています。

このツールを作成するにあたり、まず考えたのが、
”今までの企業システム開発では経験しなかったが、今後注目したい技術で作成する”
という事でした。

そこで出てきたのが、”PHP”と”XML”。
このツールをPHPベースで作成し、データをXMLに持とうと考え、作成に入りました。
PHPについては、PHPベースである”Nucleus”や”XOOPS”等を使用してみても、
非常に動作も早く、安定しているので、今後もっと普及するであろう言語と考えています。
XMLについては、現在、特に注目されている”RSS”を見てもわかるように、
ようやく日の目を見るようになったかと感じています。
XML自体というか、XML技術を利用した”RSS”のように他の名前で呼ばれる技術が、
今後出てくるのではないでしょうか?
それも踏まえてXMLを知る事は、今後かなりの力になるのではと考えています。

PHPでXMLを操作する際には、”DOM XML関数”を使用しました。
XMLデータを操作するには、”DOM”と”SAX”というものがありますが、
どちらも、まだ仕様的に発展段階の為、データをメモリに持つDOMを選択しました。
DOMは、結構メモリを消費するようですが、それも逆に実験です。
(ちなみに、当サイトのアクセス数であれば、現状問題ないですね。)


更に、XMLデータの加工には”XSLT”が付き物です。
どうせ、XMLデータからHTMLを出力するのだから、これを使わない手はありません。
HTMLにCSSがあるのなら、XMLにはXSLTがある訳で(少し意味合いは違いますが)、
これを利用すれば、かなりPHPのロジック量が減るのではと考えました。


この流れで、下記の大まかな仕様を元にツール作成を開始しました。
・アクセスデータはXMLに登録、更新(DOM XML関数使用)
・画面出力には、XMLデータを加工するXSLTを定義(その適用処理にだけDOM XML関数使用)

つまり、XMLデータを更新するにはPHPでロジックを組みますが、
画面出力の際は、XSLTで加工する事で、
PHPロジックをほとんど使用しない形になります。
これはいけるぞ、と意気込みました。。

・・しかし、XSLTにはやられました。。
勉強不足なのが一番でしたが、
とにかく、XSLTでは今までのいろんな言語で行ってきたロジックが組めません。
if文等も用意されているのも誤解要因の一つでしたが、
結局、XSLTではほとんどプログラミングできない、というかするようなものではないのです。
というか、XSLTの仕様を理解して、ロジックを組むべきなのです。当たり前の事ですが。

例えばXSLTには変数はあってないようなものです。一度設定した値は変えられません。
これはかなりの悩みの種になります。
こうなってくると、”ループ処理の中で前の値と比較して違えば、この値をセット”
といった定番ロジックなんかも組めなくなってきます。
XSLTで、何がどこまでできるんだろ・・?

・・しかし、違うんです。
XSLTは、その中でいろいろロジックを組むのではなく、
それを適用するXMLデータをうまく加工してやればよいのです。
そうすると、XSLTは素晴らしく機能してくれて、かなり楽に画面出力する事ができます。

こうなってくると、どのようにXMLデータを持つのかが重要になってきます。
もはや、これは設計力に関わってきます。。


ってな感じで、作成してます。
「DBにデータ持てばいいやん」といった単純な結論もありますが、それはタブーです。
今、この形で作成する事で、かなりXMLの理解ができました。
そして、もっとXMLを極めていけば、かなりの事ができると確信してます。

今のところ、XSLTを使う事で、「”すげーっ!と感動”:”使えねぇなあ。。”」比率は、
「4:6」くらいで、まだまだXSLTを極めきれていませんが、
今後更に勉強し、これはと思う事は、Tips Of XMLにも投稿していきます。

前の記事 次の記事

Comments

コメントは、まだ書かれていません

Add Comments

Trackback

トラックバックはありません

Trackback URL

http://www.res-system.com/weblog/action.php?action=plugin&name=TrackBack&tb_id=324