meraの日記: XMLコンテンツのサンプルを作ってみる 1
日記 by
mera
とりあえず fslasht 氏へ
いかにお金をかけずにサンプルデータを作って即座にサンプルテンプレートにはめ込んで「さぶろとん」出力出来るか実験。
○ 材料
・Forte for Java CE3
・PHP with Sablotron
○ とりあえずデータ作成
特に何も考えて無いのでオーソドックスなテーブル表示に挑戦。ここは普通にBBS一覧、属性にはID、名前、タイプ、現在のステータスを格納。という線でForteでXMLを生成してDTDを生成してみる事にしてみました。
・新規作成でXMLドキュメントを選択。名前はbbslist
・XMLのテンプレートが生成されるのでこのXMLを拡張して目的のXMLファイルに改造する
・エクスプローラの「bbslist」のXMLファイルを展開表示し、「bbslist」タグノード(というのか?)を表示
・「bbslist」の上で右クリックして名前の変更を選択。「bbslist」→「bbslists」に変更
・bbslistsの上で右クリックし、新規(N)→要素を選択。「bbslist」を追加
・「bbslists」を展開表示すると下に「bbslist」が出来てるので今度は先ほどと同じ容量で「bbslist」の下に「bbsid」「bbsname」「bbstype」「bbsstat」を追加する
・次に「bbsid」「bbsname」「bbstype」「bbsstat」にデータを入れる。各タグ上で右クリックし、新規(N)→テキストを選択。「bbsid」=1、「bbsname」=掲示板その1、「bbstype」=tree、「bbsstat」=activeとでもしておく
・データを追加登録してみる。「bbslist」タグの上で右クリックし、「コピー」を選択し、「bbslists」タグの上で(さっきコピーしたタグのもういっこ上のタグにカーソルを合わせるのという事に注意)右クリックし、「ペースト」する。すると「bbslist」をまるごとコピーできる。好きなだけコピーして各タグのテキストデータを書き換えてみたりする
・DTDを生成する。「bbslists」タグで右クリックし、DTDを生成するを選択する
・ファイル名をきいてくるので「bbslist」とでもしておく。生成されたDTDを外部ドキュメントの型にするか聞いてくるのでとりあえず「はい」にしておく
・んでもって最後にXSLファイルを生成すべく拡張可能スタイルシートを新規作成する
・後はこのXSLファイルを編集してテンプレートを作成するだけですがここからは流石に「Dreamweaver」等を使って作成したHTMLテンプレートを元にXSLファイルを作成した方がはるかに効率が良いと断定。やっぱ全部Forteでやるには無理がありました。とりあえずテンプレートを生成してもらった後はひたすら手書き修整でXSLファイルを作成(爆)
後はphpでxslt表示するプログラムを書き、全部同一ディレクトリに放り込んでブラウザで動作確認するだけ。
○ XMLファイル
<?xml version="1.0" encoding="EUC-JP"?>
<!DOCTYPE bbslists SYSTEM "bbslist.dtd">
<bbslists>
<bbslist>
<bbsid>1</bbsid>
<bbsname>掲示板その1</bbsname>
<bbstype>tree</bbstype>
<bbsstat>active</bbsstat>
</bbslist>
<bbslist>
<bbsid>2</bbsid>
<bbsname>掲示板その2</bbsname>
<bbstype>thread</bbstype>
<bbsstat>active</bbsstat>
</bbslist>
</bbslists>
○ XSLファイル
<?xml version="1.0" encoding="EUC-JP"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:output method="html" version="4.01" encoding="EUC-JP" />
<xsl:template match="/">
<html lang="ja">
<head>
<title>BBS LIST</title>
</head>
<body>
<div><xsl:apply-templates select="bbslists" /></div>
</body>
</html>
</xsl:template>
<xsl:template match="bbslists">
<table>
<tr>
<td><b>ID</b></td>
<td><b>NAME</b></td>
<td><b>TYPE</b></td>
<td><b>STATUS</b></td>
</tr>
<xsl:for-each select="bbslist">
<tr>
<td><xsl:value-of select="bbsid" /></td>
<td><xsl:value-of select="bbsname" /></td>
<td><xsl:value-of select="bbstype" /></td>
<td><xsl:value-of select="bbsstat" /></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
○ test.php
<?php
$xslt = xslt_create() ;
xslt_run( $xslt, 'bbslist_xsl.xml', 'bbslist.xml' ) ;
echo xslt_fetch_result( $xslt ) ;
?>
※ 実は上のソースを書く為にphp.netのマニュアルを参照してみたら4.1.0から急に仕様がめちゃ変わったみたいで4.0.5に組み込んだsablotronモジュール用のコードを書くのに難儀しました。 はぁ、これからは4.0.5使うなって事か。移行するにあたって色々書き換えせなあかんとこ出てきたなぁ、難儀や(^^; やっぱ早めに乗り換えやっとくか。
○ 結論
・XSLファイルの作成はもっとGUI環境である程度自動化できた方が楽だったかな。やはり有料ソフトで Dreamweaver + Xweaver の組み合わせが妥当かも
・いきなりPHPのSablotronマニュアルが大幅変更されてたのは予想外だったかも。それでもテンプレート出力が結構楽かも
・DTD結局使ってねーYO
・ノウハウまだそんなに無いので時間かかりすぎかも
ちなみに XML SPY を利用して同じXMLを作成した場合、はじめて使用したにも関わらず Forte で作成したよりも数倍早くできたりして。動作軽いし、かなりわかりやすいインターフェイスだったし。 でもこれはごっつ高いねんなぁ。個人レベルじゃ所有でけへんて。
いかにお金をかけずにサンプルデータを作って即座にサンプルテンプレートにはめ込んで「さぶろとん」出力出来るか実験。
○ 材料
・Forte for Java CE3
・PHP with Sablotron
○ とりあえずデータ作成
特に何も考えて無いのでオーソドックスなテーブル表示に挑戦。ここは普通にBBS一覧、属性にはID、名前、タイプ、現在のステータスを格納。という線でForteでXMLを生成してDTDを生成してみる事にしてみました。
・新規作成でXMLドキュメントを選択。名前はbbslist
・XMLのテンプレートが生成されるのでこのXMLを拡張して目的のXMLファイルに改造する
・エクスプローラの「bbslist」のXMLファイルを展開表示し、「bbslist」タグノード(というのか?)を表示
・「bbslist」の上で右クリックして名前の変更を選択。「bbslist」→「bbslists」に変更
・bbslistsの上で右クリックし、新規(N)→要素を選択。「bbslist」を追加
・「bbslists」を展開表示すると下に「bbslist」が出来てるので今度は先ほどと同じ容量で「bbslist」の下に「bbsid」「bbsname」「bbstype」「bbsstat」を追加する
・次に「bbsid」「bbsname」「bbstype」「bbsstat」にデータを入れる。各タグ上で右クリックし、新規(N)→テキストを選択。「bbsid」=1、「bbsname」=掲示板その1、「bbstype」=tree、「bbsstat」=activeとでもしておく
・データを追加登録してみる。「bbslist」タグの上で右クリックし、「コピー」を選択し、「bbslists」タグの上で(さっきコピーしたタグのもういっこ上のタグにカーソルを合わせるのという事に注意)右クリックし、「ペースト」する。すると「bbslist」をまるごとコピーできる。好きなだけコピーして各タグのテキストデータを書き換えてみたりする
・DTDを生成する。「bbslists」タグで右クリックし、DTDを生成するを選択する
・ファイル名をきいてくるので「bbslist」とでもしておく。生成されたDTDを外部ドキュメントの型にするか聞いてくるのでとりあえず「はい」にしておく
・んでもって最後にXSLファイルを生成すべく拡張可能スタイルシートを新規作成する
・後はこのXSLファイルを編集してテンプレートを作成するだけですがここからは流石に「Dreamweaver」等を使って作成したHTMLテンプレートを元にXSLファイルを作成した方がはるかに効率が良いと断定。やっぱ全部Forteでやるには無理がありました。とりあえずテンプレートを生成してもらった後はひたすら手書き修整でXSLファイルを作成(爆)
後はphpでxslt表示するプログラムを書き、全部同一ディレクトリに放り込んでブラウザで動作確認するだけ。
○ XMLファイル
<?xml version="1.0" encoding="EUC-JP"?>
<!DOCTYPE bbslists SYSTEM "bbslist.dtd">
<bbslists>
<bbslist>
<bbsid>1</bbsid>
<bbsname>掲示板その1</bbsname>
<bbstype>tree</bbstype>
<bbsstat>active</bbsstat>
</bbslist>
<bbslist>
<bbsid>2</bbsid>
<bbsname>掲示板その2</bbsname>
<bbstype>thread</bbstype>
<bbsstat>active</bbsstat>
</bbslist>
</bbslists>
○ XSLファイル
<?xml version="1.0" encoding="EUC-JP"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:output method="html" version="4.01" encoding="EUC-JP" />
<xsl:template match="/">
<html lang="ja">
<head>
<title>BBS LIST</title>
</head>
<body>
<div><xsl:apply-templates select="bbslists" /></div>
</body>
</html>
</xsl:template>
<xsl:template match="bbslists">
<table>
<tr>
<td><b>ID</b></td>
<td><b>NAME</b></td>
<td><b>TYPE</b></td>
<td><b>STATUS</b></td>
</tr>
<xsl:for-each select="bbslist">
<tr>
<td><xsl:value-of select="bbsid" /></td>
<td><xsl:value-of select="bbsname" /></td>
<td><xsl:value-of select="bbstype" /></td>
<td><xsl:value-of select="bbsstat" /></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
○ test.php
<?php
$xslt = xslt_create() ;
xslt_run( $xslt, 'bbslist_xsl.xml', 'bbslist.xml' ) ;
echo xslt_fetch_result( $xslt ) ;
?>
※ 実は上のソースを書く為にphp.netのマニュアルを参照してみたら4.1.0から急に仕様がめちゃ変わったみたいで4.0.5に組み込んだsablotronモジュール用のコードを書くのに難儀しました。 はぁ、これからは4.0.5使うなって事か。移行するにあたって色々書き換えせなあかんとこ出てきたなぁ、難儀や(^^; やっぱ早めに乗り換えやっとくか。
○ 結論
・XSLファイルの作成はもっとGUI環境である程度自動化できた方が楽だったかな。やはり有料ソフトで Dreamweaver + Xweaver の組み合わせが妥当かも
・いきなりPHPのSablotronマニュアルが大幅変更されてたのは予想外だったかも。それでもテンプレート出力が結構楽かも
・DTD結局使ってねーYO
・ノウハウまだそんなに無いので時間かかりすぎかも
ちなみに XML SPY を利用して同じXMLを作成した場合、はじめて使用したにも関わらず Forte で作成したよりも数倍早くできたりして。動作軽いし、かなりわかりやすいインターフェイスだったし。 でもこれはごっつ高いねんなぁ。個人レベルじゃ所有でけへんて。
ありがとう (スコア:1)
参考にさせてもらいます。まずはこのとおりやってみるかな