- PR -

XSL/XSLT処理結果の複数フレームへの表示方法

1
投稿者投稿内容
Shinji
会議室デビュー日: 2002/07/05
投稿数: 2
投稿日時: 2002-07-05 08:49
 みなさま、はじめまして。
 私は、初めて投稿するXMLの初心者です。以下の質問内容に
不適切な用語の使い方や意味不明な記述がありましたならば
お許しをお願いいたいます。
 では質問をさせていただきます。
 XSL/XSLTの処理結果を複数のページフレームに各々に表示させるための
XSL/XSLTの記述はどのようにすればよいのでしょうか。
 表示形態は次のような内容です。

 1)ページの縦方向に、三つのページフレームfrmTop、frmDBInfo、frmListが
  設定されます。
 2)フレームfrmTopの入力フォームのデータに基づきデータベースからの抽出データを
  XSL/XSLTで所定のHTMLデータDBInfoとDBListに変換させます。
 3)HTMLデータDBInfoとDBListをページフレームfrmDBInfo、frmListに
  各々に表示させたい。
 4)さらには、ページフレームfrmListのテキストリンクのクリックで新しいページが開いて
  そのリンク先の詳細情報を表示さたい。

 上記3)と4)を実現するためのXSL/XSLTの記述方法のご教示をお願いいたします。
参考図書、URLでも結構です。
 みなさまからのご教示に感謝いたします。

_________________
miki
大ベテラン
会議室デビュー日: 2001/09/21
投稿数: 174
お住まい・勤務地: 東京都八王子市
投稿日時: 2002-07-05 13:56
XSLTの変換結果として複数の出力先を指定するには<xsl:document href="ファイル名"/>を使います。
たとえば、DocBookフォーマットの文章は、スタイルの指定によって変換結果を章ごとに別々のファイルに分割して出力させることができます。xsl:documentは、このようなバッチ処理的な使い方に向いていますね。

質問のようなケースでは、CGIやservlet等を使ってそれぞれのフレームを動的に生成するのが一般的な方法ではないでしょうか。なぜなら、静的なページを表示させるのでは、動的なページ生成のメリットである、アクセス時のセキュリティのチェックやログの記録等がまったくできないからです。この場合、むしろDBのデータのキャッシュなどを考えた方がよいと思います。

質問がよくわからなかったので的をはずしていたらごめんなさい。
Shinji
会議室デビュー日: 2002/07/05
投稿数: 2
投稿日時: 2002-07-05 18:36
 miki様、ご教示ありがとうございます。
 早速ですが、以下の内容で質問をさせていただきます。

1)<xsl:document>は、手元の本(初歩的なものですが)にもマイクロソフト社ウエバ・サイトの
 MSDNでも調べることが出来ませんでした。
 MSDNにはdocument functionの説明はありましたがこれでしょうか。
2)<xsl:document>/"document function(?)"によると、xml形式のデータ・ファイルそのものが
 生成されるように理解されるのですが、私の理解不足でしょうか。
3)上記のようなことを実現する常套手段がCGIやServlet、あるいはデータのキャシュなどを
 使うのであれば、そのよい参考図書やURLをご教示してください。
4)私の質問内容に不明なところがあり申し訳ございません。
  データベース抽出データ(DBInfoとDBList)をXSL/XSLTでHTMLデータに変換した結果の表示は、
 例えばサーチエンジンGoogleのサーチ結果のように新しいページにヒットしたサイトのタイトルやその概要が
 表示されますが、私の場合はページを三分割した二つのページフレームfrmDB(データベース情報
 DBInfo)とfrmList(リンク・概要情報DBList)に各々に表示したいというのもです。
  以下の概略リストは、私がウエブ・サイトや本屋での立ち読などで得た知識で構築した
 データベース検索システムのものです。入力フォームの出力先を三つ目のページフレームfrmListに
 指定することで(*(A)*)、DB.xslのHTMLデータ(*(B)*)がこのフレームに表示されます。
 しかし、このページ内のテキストリンクをクリックすると、リンク先の情報は新しいページが開かず
 このページフレームfrmList中に表示されます。また、これではも一つの情報表示のフレームページ
 frmDBInfoへの表示はできません。一方、先ほどの<form>のtarget属性を指定しなければ
 新しいページにDB.xslのHTMLデータ(*(B*)の表示はできますが、
 私の意図するものではありません。
  今、この状態で行き詰まって、今回の投稿にいたっております。
  できれば、今の構成で最小限の機能追加で実現できないものかと思っているのですが。
 やはり、miki様のご教示のような考え方を持ち込まないとだめなのでしょうか
(今のところセキュリティ・チェックやログ情報の取得は考えておりません)。

**** index.html ***
<html>
<frameset row="30%,20%,*">
<frame src="frmTop.html" name="frmTop">
<frame src="frmInfo_init.html" name="frmInfo">
<frame src="frmList_init.html" name="frmList">
</frameset>


*** frmTop.html ***
<html>


*(A)*-----<form name="DBForm" method="post" action="DBSearch.asp" target="frmList">
<input type="submit" ・・・
   ・
   ・
*** DBForm.asp ***
<%@ language=VBScript codepage="932" lcid="1041" %>
<% Option Explicit


paramForm= Request.Form(・・・)
     ・
     ・
xmlDoc.load.server.mathPath("DB.xml")
xslDoc.load.server.mathPath("DB.xsl")
set template=server.CreateObject("MSXML2.XSLTTemplate.4.0")
set template.stylesheet=xslDoc
set proc=template.createProcessor
proc.input=xmlDoc

 データベース(DB.xml)から検索条件に合致するデータ抽出(matchedNodes)

proc.addParameter "Nodes", matchedNodes
proc.Transform
Response.Write proc.output


%>
*** DB.xsl ***
<?xml version="1.0" encoding="Shift_JIS" ?>
<xsl:stylesheet version="1.0" xmlns:"http://www.w3.org/1999/XSL/Transform">


<html>
<head>・・・</head>
<body>
  ・
<xsl:for-each select=・・・>
*(B)*-----抽出データmatchedNodesに基づき所定のHTMLデータ(DBList)に整形
</xsl:for-each>
</body>
</html>
</xsl:stylesheet>


_________________
井上孝司
ぬし
会議室デビュー日: 2001/09/08
投稿数: 668
お住まい・勤務地: 東京都
投稿日時: 2002-07-05 21:13
井上です。横から失礼します。
マイクロソフトの XSLT 処理系では、<xsl:document> タグはサポートされていないみたいですね。MSXML4 付属のリファレンスにも載っていません。(あう。ということは、私が出した XSLT の解説書にも載ってないよ…)

ちなみに、document() 関数は、引数に指定した XML 文書のルートノードを返す関数ですから、機能がまったく違います。
_________________
www.kojii.net
miki
大ベテラン
会議室デビュー日: 2001/09/21
投稿数: 174
お住まい・勤務地: 東京都八王子市
投稿日時: 2002-07-06 07:59
1),2)については井上さんが回答されているので割愛します。
まず、自分でよく調べてみましょうよ。

>3)上記のようなことを実現する常套手段がCGIやServlet、あるいはデータのキャシュなどを
> 使うのであれば、そのよい参考図書やURLをご教示してください。
まず環境を示すべきでは?
Microsoftのことは知りません(ココってMSの会議室?)。
参考図書やURLについては@ITのバックナッバーを探してみてください。
よい出発点になると思います。

>4) データベース抽出データ(DBInfoとDBList)をXSL/XSLTでHTMLデータに変換した結果...
>...今回の投稿にいたっております。
f1,f2,f3と3つのフレームあったとき、f1の検索結果としてf2とf3を同時に更新したいということですね。f2とf3の親フレームを設けてそれを一度に出力すればできるかもしれませんね。
もはやXMLとは無関係の話題なのでこれにて失礼します。


[ メッセージ編集済み 編集者: miki 編集日時 2002-07-06 08:00 ]
1

スキルアップ/キャリアアップ(JOB@IT)