一応Cocoon-1.8.2のセットアップはできた。だがそれで何をしようというのか。どうもあのXMLとか言うヤツを使うとデータベースアプリとかができるという。雑誌や本を調べながら、XMLって何がどうよくて、Cocoonを使えば何ができるのか、探求していくことにするが・・・話題は増えるんだろうか。と思ったらCocoon2で再び戻ってきたゾ。とにかく新しい記事ほど上にします。
/esql再び/xspを動かす/久しぶりだなココちゃん!/XMLともJavaとも関係ない話/Cloudscapeを手なづける/ぴったしトラシュー/Cloudscape?J2EE?!/暗夜行路/なんだかすごいもののようだ/Relaxerに取り組む/Tidy on Peggy/データベースへの接続というものをやってみた/素晴らしきInternet Explorer/Cocoonの意義とは?/まずXMLって何。/
さてCocoon1.8でもやってみたデータベース接続だが、Cocoon2だと少し設定の仕方などが違っているようだ。さらに以前はPostgreSQLを使ったが今度はMySQLである。
まずJDBCとデータソースを設定する。
ここでJDBCドライバの設定をする。だいたい105行目くらいのところにこんな記述があるので、ドライバ名com.mysql.jdbc.Driverを一行書き足すだけである。org.hsqldb.jdbcDriverはもとからついてるhsqldbのものだ。
<!--
This parameter is used to list classes that should be loaded
at initialization time of the servlet.
Usually this classes are JDBC Drivers used
-->
<init-param>
<param-name>load-class</param-name>
<param-value>
<!-- For IBM WebSphere:
com.ibm.servlet.classloader.Handler -->
<!-- For Database Driver: -->
org.hsqldb.jdbcDriver
com.mysql.jdbc.Driver
<!-- For parent ComponentManager sample:
org.apache.cocoon.samples.parentcm.Configurator
-->
</param-value>
</init-param>
WebSphereの場合はコメントアウトせよ、みたく親切に書いてある。是非コメントアウトしてつかってみたいののだー。それはいい。
以前は$COCOON_HOME直下にあったこの設定ファイルはセキュリティの関係からWEB-INF内にお隠れあそばしたらしい。ここではデータベースurlの設定を行う。
439行目くらいに、こんな記述がある。
<!-- Datasources: -->
<datasources>
<jdbc logger="core.datasources.personnel" name="personnel">
<!--
If you have an Oracle database, and are using the the
pool-controller below, you should add the attribute
"oradb" and set it to true.
<pool-controller min="5" max="10" oradb="true"/>
That way the test to see if the server has disconnected
the JdbcConnection will function properly.
-->
<pool-controller max="10" min="5"/>
<!--
If you need to ensure an autocommit is set to true or
false, then create the "auto-commit" element below.
<auto-commit>false</auto-commit>
The default is true.
-->
<dburl>jdbc:hsqldb:hsql://localhost:9002</dburl>
<user>sa</user>
<password/>
</jdbc>
....
また、オラクルの場合はこうしろ、みたくうらやましいことが書いてある。この部分は</datasources>で閉じられているので、その間に
<jdbc logger="core.datasources.mysql" name="mysql">
<pool-controller max="10" min="5"/>
<dburl>jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=EUC_JP</dburl>
<user>noniko</user>
<password/>
</jdbc>
と書き加える。xml形式中では、MySQLのデータベースurl中に現れる&の記述は太字のように表すことに注意したい。
ここで一番最初の
name="mysql"
と指定したこの名前を使って、xmlファイル中でデータソースを指定するのだ。今回はtestデータベースにアクセスすることにした。
<?xml version="1.0" encoding="EUC-JP"?>
<xsp:page language="java"
xmlns:xsp="http://apache.org/xsp"
xmlns:esql="http://apache.org/cocoon/SQL/v2">
<xsp:structure>
</xsp:structure>
<page>
<title> MySQLにアクセス!</title>
<headline>MySQLもアクセスもイルカ野郎が目印サ</headline>
<esql:connection>
<esql:pool>mysql</esql:pool>
<esql:execute-query>
<esql:query>select * from listtest</esql:query>
<esql:results>
<table>
<esql:row-results>
<menus>
<menu><esql:get-string column="menu"/></menu>
<material><esql:get-string column="material"/></material>
</menus>
</esql:row-results>
</table>
</esql:results>
</esql:execute-query>
</esql:connection>
</page>
</xsp:page>
ここではjava.sqlなどをインポートする必要はないようだ。
さて、ここに出てきた<page><title><headline>などは、あくまでxslに引き渡す俺タグである。<table>なんて一見そのままhtml文みたいだけど名前が同じというだけで単独では機能しないようだ。
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!--pageタグが見つかったら以下のhtml文を実行しなさい-->
<xsl:template match="page">
<html>
<head>
<title>
<xsl:value-of select="title"/>
</title>
</head>
<body>
<h2><xsl:value-of select="headline"/></h2>
<!--さらにtableタグが出てきた場合に限って、
以下のxsl:template match="table"タグに囲まれたものを実行しなさい-->
<xsl:apply-templates select="table"/>
</body>
</html>
</xsl:template>
<xsl:template match="table">
<table border='1'>
<tr><th>Menu</th><th>Material</th></tr>
<!--matchしたタグによって適当なテンプレートを実行しなさい-->
<xsl:apply-templates/>
</table>
</xsl:template>
<xsl:template match="menus">
<tr><td><xsl:value-of select="menu"/></td>
<td><xsl:value-of select="material"/></td></tr>
</xsl:template>
</xsl:stylesheet>
さて、sitemap.xmapだ。 *.xspをxmlとして呼び込め、というのはすでに以前指定してあるので、
<map:match pattern="nonisample/nonidbj.html">
<map:generate src="nonisample/nonidbj.xsp" type="serverpages"/>
<map:transform src="nonisample/nonidbj.xsl" type="xslt"
/>
<map:serialize type="html"/>
</map:match>
これで
http://blade:8080/cocoon/nonisample/nonidbj.html
にアクセスすると

と日本語もあざやかに表示されるのだ〜。
2003年05月15日
次に、XML中にJavaのコマンドを組み込むxspファイルを作ってみた。JSPでよくやる、今日の日付を表示させるというヤツ。
<?xml version="1.0" encoding="EUC-JP"?>
<xsp:page language="java" xmlns:xsp="http://apache.org/xsp">
<!--importするところ-->
<xsp:structure>
<xsp:include>java.util.*</xsp:include>
</xsp:structure>
<!--Javaコマンドを書くところ-->
<xsp:logic>
Calendar today=Calendar.getInstance();
String year=Integer.toString(today.get(Calendar.YEAR));
String month=Integer.toString(today.get(Calendar.MONTH)+1);
String day=Integer.toString(today.get(Calendar.DATE));
</xsp:logic>
<!--スタイルシートに喰わせてやるデータの部分-->
<html>
<body>
今日は<xsp:expr>year</xsp:expr>
年<xsp:expr>month</xsp:expr>
月<xsp:expr>day</xsp:expr>
日デス
</body>
</html>
</xsp:page>
そして、sitemap.xmap中にはこんな風に書いておく。
<map:match pattern="nonisample/*.xsp">
<map:generate src="nonisample/{1}.xsp" type="serverpages"/>
<map:serialize type="xml"/>
</map:match>
これは、nonisample/*.xspという形で呼び出せば、該当のxspファイルがxml形式で呼び出される、という意味だ。
さて
http://blade:8080/cocoon/nonisample/nonisample1.xsp
でアクセスしてみると結果は

Mozillaで見た結果だが、まあxml形式でモロ出ししたからこうなっている。これをさらにスタイルシートで整形しなければならないのだろう。でもJavaコマンドが正常に実行されたことはわかった。
2003年05月15日
2002年ワールドカップの頃以来ご無沙汰していたCocoonに再び巡り会ったのは、翌2003年本屋で「Java World(IDGジャパン発行)」の4月号の表紙にCocoon2という文字を見つけたときであった。うちでは本だけは「いつか使うものは絶対使う」のポリシーで原則的に即買することにしている。で、買った当時はなかなかできなかったが、最近一念発起して取り組むことにした。もちろんそれは最近の豪華な読者プレゼントキャンペーンの効果ですのヨIDGさ〜ん。
以前かなり頑張ったのはCocoon1.8。だが「スケバン刑事」のようにバージョンアップでほとんどベツモンになってしまったCocoon2、アトピーになりそうなタグだらけの設定ファイルで威嚇するアレに今度こそ取り組まなければ!・・・というわけでもっと前にも買って置いたCocoonやXML関係の雑誌も引っ張り出し、勉強を再開することにした。
参考文献
「Java World(月刊ジャバワールド)」、IDGジャパン発行、2003年4月号
「XML Press」、技術評論社発行、Vol.5
「保存版XML World第2弾」IDGムックシリーズ
さて、以前あれほどすったもんだしたインストールだが、実に簡単になっていた。バイナリをゲットして解凍してできたcocoon.warをtomcatのwebappsフォルダにコピーして、tomcatを(再)起動すればいいだけである。
ただし、Cocoon-2.0.3ではesql タグを使ったデータベースへのアクセスの際にエラーが生じた。これは他にも報告がでていることのようで、J2SE1.4との相性らしい。バージョンを現在で最新のCocoon-latest-vm14系を使うことであっさり解決した。
もっとも、XServerへrootでアクセスできない問題については検討していない。というのも最近はtomcatからして自分のヒラユーザホームディレクトリにインストールして起動するようになってしまっているからだ。この場合も作業はすべからくヒラユーザでホームディレクトリ内で行っている・・・
さて、まずは再会のご挨拶だ。以前Cocoon2で玉砕したときも、まあ唯一、チュートリアルサイトにおすがりしてやっとこさ、できていたことではあるが、もう一回今度はもすこし自主性を持ってだな・・・
短いコードなので、ここに書いてしまいましょう。
まず、$COCOON_HOME=$CATALINA_HOME/webapps/cocoonとする。
$COCOON_HOME/nonisampleというフォルダを作った。
以下、文中のパスは$COCOON_HOMEからの相対パスである。
<?xml version="1.0" encoding="EUC-JP"?>
<person>
<titlename>Noniko</titlename>
<name>のに子</name>
<body>ずん胴</body>
</person>
<?xml version="1.0" encoding="EUC-JP"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xlink="http://www.w3.org/1999/xlink">
<xsl:template match="/">
<html>
<head>
<title>Person <xsl:value-of select="person/titlename"/></title>
</head>
<body>
<li>名前: <xsl:value-of select="person/name" /> </li>
<br></br>
<li>ボデー: <xsl:value-of select="person/body" /></li>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
さて、これらのファイルの関係を、sitemap.xmap中に書き込むのだ。それには<pipeline></pipeline>タグで囲まれたえっれえクソなげえ部分のどこか適当なところに
<!--===Nonisamples===-->
と見出しを張って、そこに書きためることにした。
<map:match pattern="nonisample/nonisample.html">
<map:generate src="nonisample/noniko.xml"/>
<map:transform src="nonisample/noniko.xsl" type="xslt"/>
<map:serialize type="html"/>
</map:match>
これは、http://blade:8080/cocoon/nonisample/nonisample.htmlというアドレスを呼び出すと、noniko.xmlのデータがnoniko.xslのスタイルシートに従った形で表示されるという意味だ。
sitemap.xmapの変更は、うれしいことにtomcatを再起動させなくとも反映される。だがこいつを変更すると、urlで呼び出しをかけるたびにこのクソなげえファイルの最初っから読み直しされるみたいで、Blade100のUltraSparcIIe500MHzメモリ768MBでそーとー時間を食う・・・結果は

いやー、最近データ量増えちゃってサイトの容量ピンチになってきたからなー。でもなんか日本語でもイケるしいい感じです。
2003年05月15日
Relaxerの勉強のために、また「ココ本」を使い始めた。よいことである。この前使ったときはなにせ全然初めてだったので、意味もわからずにサンプルコードをマネしていただけだった。今ようやく「これはどういう意味なのか」などと少しは考えるようになってきた。
Relaxerの最新バージョンは現在0.16でこれをダウンロードはしたが、「ココ本」ではバージョン0.14を使っていた。
アプリケーションのバージョンが変わると細かな設定なども変わるため、旧バージョンと同じやりかたでは目的が達成されない、というのはよくあることだ。だがある日「ココ本」に戻って考え直そうと考えたとき、前のバージョンは0.16に上書きアップグレードしてしまっていた。
やはりもう一度0.14もセットアップしようと考えた。それには今の最新版を
/usr/local/lib/relaxerフォルダを/usr/local/lib/relaxer16
/usr/local/bin/relaxerファイルを/usr/local/bin/relaxer16
と名前を変えてから、0.14をセットアップしてやればよい。やっぱり0.16にしたり、また0.14にしたりして結果を比べたいとき(が実際結構あった)のために両方とっておけるはずだ。
ところが!この前簡単にセットアップできたはずのRelaxer(version 0.14)のセットアップでなぜか失敗する。
java -jar setup.zip
とやって、インストールディレクトリを指定っていうかデフォルトにさせる。すると、
Relaxer.jar:ファイルもディレクトリもありません。
たりめーやねーか!これからインストールするんだぞボケ!・・・と叫びかけて、ぬ?と思った。これはそうじゃなくて、
セットアップのためにはまず指定ディレクトリにRelaxer.jarを書き込み、次にそれを参照して作業を進める、それができてないということなんじゃないか。
つまり、Relax.jarの書き込みができてない。つまり・・・
アクセス権!
su(詳しくはsu -)に上がってjava -jar setup.zipをやり直した。ホレ!今度はちゃんとインストールされたぞ!だが・・・
relaxer コマンドをかますと「実行権がありません」
え〜〜〜〜
もー。つまりsuでやったからね。relaxerフォルダ及び実行ファイルの所有権を平ユーザに移す。
「実行権がありません」
なんでよー!!!
理由は、所有者ではなくモードの問題だった。テキストファイルのように読み書きはできても実行モードになってなかったのだ!
これを777(ほんとは664かなんかでいいんだよ)にしてようやく、relaxerバージョン0.14を再び使うことができた。
これはXMLともJavaともハッキリ言って関係ない、OSの使い方の問題だ。OSをきちんと理解して使えなければ最新のアプリもソリューションもまず使うことすらできないのだということと、エラーメッセージは額面通り受け取っては意味が全然わからない、少し考えてどのプロセスがそのメッセージを出しているのかを見極めなければならないということを痛感したので自重の意味で書いた。
2002年07月04日
だがとりあえずわたしが今必要なのはCloudscapeだ。基本的な使い方はかのJ2EEマニュアルの最後のほう、「J2EESDKの使い方」という部分に書いてあった。cloudscape -startとすればデータベースサーバは起動する。
それで、Relaxerの本に戻ることにする。コードを書いてJDBCドライバの指定をするのだが、これがめんどくさい。
Relaxerの本ではちゃんと書き方を指定してくれているからとても助かるのだが、問題は
$JDBCURL=jdbc:cloudscape:rmi:CloudscapeDB;create=ture
あー。太字にしても見えねー。でもセミコロンが一個あるのだ。この特殊文字を含んだままソースコードに書き込もうとしたりコマンドラインから直接打ち込もうとしたりすると、たとえ特殊文字にはエスケープ記号ということを知っているつもりでもうまくいかなかったりする。
また、 クラスパスの指定も長いので、めんどくさいからといつもの通り/j2se/jre/lib/extにコピーしてみた。そしたらcloudscapeそのものが動かなくなってしまった。よけいなコピーを削除して復帰。
一番いいのは、javaコマンドを全部、jdbcクラスパスからドライバ名から、特殊文字にはエスケープ記号つきでスクリプトファイルに書いてしまって、そのスクリプトを実行することだった。できてしまえば全然たいしたことないんだけど。
さらに。SQL文の詳細は、SQLによって微妙に違うとわかった・・・Cloudscapeの場合、テーブルの作成には
create table "table1"( "ID" int....)
と全部、テーブル名やフィールド名に全部くをーてーしょんまーくが入るのだ!
RelaxerでSQLコマンドを作成してそれをデータベースに送るためのプログラムのソースは、nantokaTable.javaというもののようだ。それを読んでみると、なんとなく理解できるような気がする・・・
ちょこっとだけそのプログラムを書き換えれば、各データベースの種類に合ったSQLコマンドを書くように調節することができる。
それでわかったのダヨ。-jdbcオプションつきでrelaxerをかますと、nantoka.ddlというファイルができる。これは参考出力、と本には説明してあるが、開いてみるとcreate
tableのSQL文である。なんでそんなものが?と思ったが、
要するにクヲーテーションマークをつけるかとかいう細かい書式はユーザーが自分の使っているデータベースに合うように、この参考出力を見ながらnantokaTable.javaを適宜カスタマイズしろってことなのネ。なーるほど。
Cloudscapeについては,J2EEのページでより詳しく勉強しました。
2002年07月04日
pdfマニュアルでは、GUIの「deploytool」というものについて説明してある。
まずそれを立ち上げる。立ち上がった。
次にサンプルディレクトリからサンプルファイルをひとつ読み込む。
読み込めない。
sealing violation という例外エラーのようだ。わたしはviolationという言葉からアクセス権の問題かと思い、ファイルのアクセス権などをいろいろいじってみたがダメだった。・・・最初からいつものアレをやればよかった。すなわち出てきたエラーメッセージをそのまま(長さにもよるが)検索キーワードにしてgooなりなんなりで検索することである。するとある掲示板の質問にこんな内容のものが。
「sealing violationエラーはj2ee.jarとJAXP1.1関係のjar(crimson, jaxp, xercer)が干渉して起こることはよく知られていますが、他のこうした干渉を予測したり発見するにはどうしたらいいでしょうか・・・」
よく知られていること、だったのネ・・・
JAXP1.1三悪人(さんざ世話になったくせに・・・)。そいつらはjre/lib/extに鎮座ましましていた。しょーこりもなくよく入れるんだヨ。一部の本にはそうしなさいとも書いてあるしネ・・・確かに危険を承知していれば便利な措置ではあるのだ。承知はしているがたまにすっかり忘れてる、というのが問題なのだが・・・
はずす。j2ee.jarをクラスパスに入れる。するとDeployツールはちゃんとサンプルファイルを読み込んでくれて、あとはマニュアルに従ってできた。
できたと言っても、「次へ、を押します。次のウィンドウでナントカの部分にナントカと入力します。次へ、を押します・・・」
というのをそのままやっただけなんで、配置って何がどう配置されてるのか全然わからない〜〜〜。おまけにその間に日本はトルコに惜敗してしまっていた。けど後日決勝トーナメントまじめに見たらトルコってむちゃくちゃ強かったじゃん。ショガナイネ。
2002年07月04日
Relaxerでデータベースと連携するプログラムを生成するというのは「ココ本」でやったことだ。だからわからないでもない・・・と思っていたが、なんとこっちRelaxer本では、使っているDBはPostgreSQLでもMySQLでもない。
J2EE 1,3 RI を使っています
と書いてある。
「なにそれ・・・」
ネットで調べる。するとSunのサイトからそのSDKが無償でダウンロードできるとわかった(そーゆー理解の仕方でいいのかッ)。その中に用意されているCloudscapeというデータベースがそれらしい・・・
へー。エンタープライズエディションなんて・・・あんなツールやあんなツールでは、フリーなパーソナルエディションとかと一緒に用意されてるブッ高えバージョンにエンタープライズエディションとか名前ついてるけど、これは全然違うものなのね?
余談だが、しかしそのブッ高えエディションを用意してるメーカー自身が「しかしソースをチョクで書くぶんにはフリーエディションもブッ高えエディションも機能は変わりません」とか明言してるから良心的だよなッ!
ちかごろ饒舌だな。自重自重。
とにかくそのJ2EESDKというものをSunのサイトからダウンロードしてくる。あとpdf形式のマニュアル(日本語版)とサンプルプログラムを。ダウンロードすべきものやそのインストール法はSunのサイトで詳しく説明してくれているのでわたしにもできる。
ではそのマニュアルに従ってJ2EEというものを動かすところから始めるか・・・またなんかすっごいやってることが逸れて来てるが・・・書いていてあの顔文字で泣いてるヤツとかを挿入したくなるくらいの状況だ。
2002年07月04日
Relaxerの本を買ってとにかくかかれてある通りにやってみる。だがしょーじき言ってワニ本をひととおりコード打ちだけみたくしかやってないわたしには内容はまだほとんど理解できない。だいたいXMLについても体系的にかかれた初級本ひとつ終わらしてないのだ(雑誌の記事をあれこれ拾い打ちしただけ・・・)
サンプルコード、実行方法、実行結果が全部示されている部分についてはそっくりマネしてやって期待通りの結果を得て喜ぶ、というだけ。トラブると、自分のミスや、本ではどうやら省略してあるらしい初歩的なことを洞察してみたりして、いくつかは解決したしいくつかは今の自分にはとても無理とあきらめたりして、とうとう「JDBCを使ったデータベースとの連携」というところまで来た・・・
2002年07月04日
そのRelaxerなのだが、「ココ本」にならって最初に使ってみたときから、なにかすごいものだなという思いを抱いた。
本には「hello.rxm」というxml文書の書き方が示されているのでそれをマネして作ってみる。
すると「relaxer -jdbc hello.rxm」とやってJDBCのJavaプログラムを生成させなさい、とある。
生成させろったって、あんた・・・
その生成法はどこに書いてあるのさ?!と思ったのである。つまり、上のコマンドそのものが生成法であるということに気づかなかったのだ。でもわからないものはしょーがないからとにかく本の通りにやってみよう。
上のコマンドを一行打った。すると・・・返答に少し時間がかかる間CPUやHDDのロードメータが忙しく動き、そして
ぼぼん
と、CDEのファイルマネージャ、hello.rxmのあるフォルダのウィンドウ中に、一斉にたくさんのプログラムが。おおみんなコーヒー付きだ!
そうか、そういうことだったのか。ていうか「ココ本」の著者さんやRelaxerの作者浅海さんに言わせれば「だからプログラムジェネレータって言ってるだろ!」ということになるんだろうが、この主婦は世の中がそこまで進んでいるとは知らなかったのヨ〜。
だが、これみんなソースコードじゃん。コンパイルしなきゃだめだよね。どれからコンパイルするの?
本を見る。書いてない。そのかわり、HelloCreateTable.javaのような、データベース処理のための4つのソースコードが示されている。これらについては詳しい説明があり、それではと4つ、そのままただマネして打つ。すると4つのそれをコンパイルしてみましょうとある。
「ちょっと待ってよ」と、なまじ猿知恵のついた主婦は考える。これらのソースをコンパイルするのにさっき自動生成したプログラムを使うってことなんじゃないの。でもこれ全部ソースのままじゃん。先にこっちをコンパイルしとかないと・・・だからどれからコンパイルするのよこんなにたくさんあるのにー!
と怒りかけてさっきの驚きを思い出す。そう。著者の先生がヤレと言ってるんだから、やってみればいい。クラスが足りなかったらどれが足りないとエラーメッセージが出るだろうからそれから先にコンパイルするという考え方もあるわ。
javac HelloInsert.java
と4つのソースの中からひとつ選んでやってみた。すると・・・
そこにあった手つかずのはずのソースまで全部(かどうか。必要なもの優先かもネ)、ぼぼ〜んと一斉に、クラスファイルのアイコンが出現。
すごい。自動でソースを生成したあと、自動でコンパイルもしてくれるなんて・・・参りました。しくみは全然わかんないけどなんかすごー!
のんのんが帰ってくる。「あのねー、今日Relaxerってのやってみたけどすごいんだヨ」
「へー、そういうツールがあるんだ。なにがすごいの?」
「あのねrxmってのを書いてrelaxer,ってやるとデータベースとか作るのに必要なソースが自動で全部できちゃってね、それまたちょっと自分でソース書いてコンパイルすると他のものまで全部一緒にコンパイルされちゃうんだヨ自動で」
「・・・・・・」
わかるわけがない。本人が具体的にわかってないアウアウ状態なのだ。でもその週の休みに本屋さんでかのRelaxerの本を見つけて買ってくれたのはのんのんだった。
2002年07月04日
ところで、わたしがCocoonについて知りたくて買った本
「完全オープンソースで構築するXML/Java Webサーバシステム〜Apache XML Project & PostgreSQL」
(藤田 泰徳 著、セレンディップ発行、小学館発売)
(勝手な)略称「ココ本」には、Relaxerというものが出てきた。
Cocoonとそうガッチリ関わっているわけでもないのだが、Webアプリケーションを作成するために用いられている。
確か、わたしはそもそもJavaとPostgreSQLでWebアプリケーションを作ろうと思い立ったはずだ。それが、JServ,Tomcat,まではまだ直接結びつくとして、
Cocoon,Relaxer・・・とどんどん、未知のものにハマりこんでいる。それはそれでいいんだけど、肝心の「サーバサイドJavaによるWebアプリ」は自力では簡単なものさえ書けやしない。これでいーのかッ?
ところで、日頃、献立などを検討して思うんだけど。
「ナントカの炒め物ナントカソース和え」「ナントカ風ナントカ焼きナントカ添え」・・・
まんまや。
それにくらべるとコンピュータの世界は凝った名前が多いな。よく言えば楽しいし悪く言うとなんのことかわからねえ。
まあそれはいいのだ。とにかくそのRelaxerも、本が出ていたので買ってしまった。
「Relaxer Java/XMLによるWeb開発」浅海智晴 著、ピアソン・エデュケーション発行 である。
この本と上の「ココ本」を首っ引きでRelaxerというものについても勉強しようと考えたのだが、どこに載せるか。新しくシリーズを作るか?だがちょっとやってとーてーダメ〜とあきらめちょっとしか記事にならなかったらどーする?・・・ということで、同じそのなんつーかXMLなどを使ってJavaベースでWebアプリを作成するということで、このページに持ってきたのであります。
2002年07月04日
XML関連のある記事で、HTMLTidyというツールが紹介されていた。テキトーに書いたhtmlタグなどを賢く解析して間違いや冗長な表記などを指摘し、なおかつオプションによりhtmlファイルをxhtml形式に自動修正までしてくれるらしい。xhtml形式というのはhtmlをXML形式に則って再定義した形式を言うらしい。
ただし日本語のサポートはUTF-8とISO-2022-JPだけなので、nkfのような文字コード変換ツールを使って、SJISのファイルを一度それらのコードに変換してからTidyをかましさらに生成したXHTMLファイルをSJISに再変換する必要がある、とのこと。
「アハ〜ン」
と、掛布さんのように、わたしは思った。
現在、とにかく手当たり次第に集めたXML関係の本や雑誌記事から、習ってできそうなことを手当たり次第にやっている。それでこのXHTML文書でHTML Tidyを使う、といいう記事に従ってやってみたわけだが、わたしがここで書きたいのは、Windowsでコード変換、コマンドラインによる処理などをしたい場合はもう
Peggyにおまかせヨ
ということなのだ。tidy.exeはラジェットさんという方がお作りになったツールで、
http://www.w3.org/People/Raggett/tidy
で配布なさっておられるもので、そして詳しい使い方は検索エンジンでTidy XHTMLなどとキーワード検索をかませば、こんなヘボサイトで舌足らずの説明を差し上げなくともいろいろなサイトでチュートリアルが提供されている。
ここでは、Peggyを使うとこんなに簡単にできるのヨというところだけ御紹介しよう。ちなみにPeggyというのは本サイトでもよく紹介しているとてもマイティーなシェアウェアのテキストエディタのことである。バッチファイルとか書くの苦手〜という人もこれならむつかしいコマンドラインをグイグイ処理できるのだ。(なんか肉桂クリックの記事みたくなってきたな)
で、結局XHTML変換してどうしたか。それはよくわかりまセ〜ン(それでいいのか?!)
2002年06月17日
XMLはデータベースへの接続などもできるという。具体的にどういうことなのか、諸記事にはMS-Excel, MS-Access、そしてOracleとの連携方法について書いてあった。だがMS製品はXML対応はXP以上のようで、うちはOfficeは2000で打ち止めてある。Oracleなんて高くて買えない〜。というわけでPostgreSQLに接続するというのをやってみた。
それにはCocoonのサンプルプログラム、/cocoon/samples/sql/esql.xmlおよび同ディレクトリのesql.xslを、俺流に書き換えればいいことがわかった。同ディレクトリにはesql.xsdというものもあり、これがこんな処理をするにはこんな俺タグを書けという設定をすべて仕切っているようだ。だからこれには手をつけない。あとファイル名そのものにも大事をとって手をつけない。
参考にしたのはhttp://www.ne.jp/asahi/tadao/kanemasu/dbxml/dbxmlframeset.html
という人のページなのだが、どういう人なのかまったくわからない。リンクのご挨拶連絡先もない。プロファイルでもあるかと思っても少し上のディレクトリに上ってみると、3秒後に元のページに戻されてしまう。
そんなわけでお断りなくリンクしますがすみません。
このチュートリアルページでは、上述のサンプルファイルに適合するようにSQLのサンプルテーブルを作り、jdbcドライバやデータベース名、ユーザ名などをカスタマイズして、接続してこのサンプルを実行するとどんなふうになるか、示してくれていた。そこで、これをもとに、わたしなりに作ったデータベースをわたしなりに書き換えたesqlファイル群で、もっと単純なサンプルとして実行できるかどうかやってみた。
なるほど。cocoonを擁したtomcatを立ち上げ、
http://localhost:8080/cocoon/samples/sql/esql.xml
とアクセスすると、データベースの処理結果が表示された。
けどJSPで同じことするのとどーちがうんだろう。と思った。まだまだCocoonの真の理解にはほど遠いのかのに子。
2002年06月17日
XML入門記事のほとんどは、Windows上でInternet ExplorerをXMLエンジンにすることを想定している。無理な意地は張らずにこれに従ってみることにした。
だがわたしのDynaboookでは標準のブラウザはNetscape6にしている。ゆえに.xmlの拡張子がついたファイルはみんなN6のアイコンを呈し、これを開けばNetscapeが立ち上がるのは当然のことだ。そしてXMLの書き方にもよるが、cssなどを使う文はIEじゃないとダメでN6では実行されないというものもある。
そこで、まずIE5.0を立ち上げておいて、プルダウンメニューから「ファイルを開く」を実行した。おお、ちゃんとxmlファイルもフィルタに上がっている。さすがIE。そこであるxmlファイルを選んで「開く」ボタンを押してみた。
いきなりNetscape6が立ち上がってそのxmlファイルが表示された。
ぶはははは。なんでや。夫に言わせると「うん、何も不思議なことはないんだネ。Windowsで指定した標準のブラウザなんだからどんなときでも標準的に立ち上がるのは当然のことなんだネ、うん」と言われた。結局該当ファイルのアイコンを選択して「アプリケーションから開く」でIEを選べばよいということがわかった。
ちなみに、後日これを(夫には「それは暴挙だネ、うん」と言われた)IE6.0にアップグレードしてみた。すると初めてこれを実行しようとすると絶対に「インターネット接続ウィザード」が立ち上がってくる。適当に設定すると「さあこれでインターネットに接続できます」とメッセージが。接続ウィザードの完了ウィンドウに示された「今すぐに接続する」ボタンを押してみた。
いきなりNetscape6が立ち上がって、msnのサイトにアクセスした。
むろんIE6.0のインストール後すぐにN6を標準のブラウザに指定しなおしたからであるが、「MicrosoftはユーザにIEの使用を強要する、けしからん」という批判は事実と違うのではないかとさえ思った。むしろどうしても自分以外を使わせたがる謙虚なブラウザではないのか・・・・
2002年06月17日
世の中にXMLの書き方使い方という本は多い。雑誌記事にも「まずは書いてみよう」系のものがある。そのいくつかに習って書いてみた。そして実行して見れという。
なんと、かなりの処理・・・たとえば帳票データを表にして出して合計とか消費税とかも算出する・・・なんてことは、Cocoonを使わずとも、Internet
Explorerの新しいバージョンや、SolarisでもNetscape6ならそのまま「ファイルを開く」でXMLファイルを開けばそこで実行されることがわかった。これじゃCocoonの出番はない。だがNetscape4.7はXMLに対応してないので、Cocoonを使えばそんな4.7でもXMLファイルが見れますヨという恩恵はあった。あと「より複雑な構造のXML文」であればIEでもNetscapeでも十分対応できず、Cocoonサーバ上でしか意図した結果が現れないというのもあった。
CocoonというのはむつかしいXMLを動作させるのに使えるということだな
というのがこの時点でのに子が出したまたもやボーギャクな解釈である。
2002年06月17日
調べてみるとCocoonにはXMLがつきもののようだ。そのXMLとは何か。
それはどこにでも書いてある。そしてのに子的には要するにこう解釈された。
あくまでのに子的解釈で、かなり乱暴である。
2002年06月17日