パスワードを忘れた? アカウント作成
450089 journal

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 で作成したよりも数倍早くできたりして。動作軽いし、かなりわかりやすいインターフェイスだったし。 でもこれはごっつ高いねんなぁ。個人レベルじゃ所有でけへんて。
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

アレゲはアレゲを呼ぶ -- ある傍観者

読み込み中...