| 2.5.2 Oracle XSQL Pagesの概要 |
|
Oracle XSQL Pagesは、SQLを熟知しているユーザーが次のことを宣言的に実行できるテンプレートです。
- パラメータ付きSQL問い合わせに基づいて、動的なXMLデータ・ページを組み立てる。
- 関連XSLT変換を使用して、任意のXML、HTMLまたはテキスト・ベースのフォーマットで最終結果を生成するデータ・ページを変換する。
このXMLベース・データグラムは通常は他のサーバー・プログラムによって要求/処理されますが、Microsoft
Internet Explorer 5.0などのブラウザを使用している場合はXML結果を直接表示できます。
正統な<ROWSET>と<ROW>のXML出力が予測されたXMLフォーマットではない場合は、XSLTスタイルシートを使用してXML文書を特定のフォーマットに準拠したXML文書に変換します。通常、フォーマットはDTD(文書型定義)によって通信されます。DTDは、実質的にはこのタイプの文書のXMLコンテンツを正式に定義するスキーマ定義です。
XSLTスタイルシートをXSQL pagesに関連付けると、問い合わせ結果のデフォルトの<ROWSET>と<ROW>のフォーマットを業界標準のDTDフォーマットに変換することができます。
スタイルシートとは文書変換のためのルールを規定した要素を含むテンプレートで、次の操作を可能にする特別なXSLTアクション要素が散在します。
- <xsl:for-each>を使用した、ソース文書内の一致する要素のループ
- <xsl:value-of>を使用した、必要に応じたソース文書要素値のプラグイン
- <属性値>を使用した、ソース文書要素値の属性値へのプラグイン
スタイルシートの最上位要素に追加された、次の2つの構成要素に注意してください。
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xslという名前のXMLネームスペース(xmlns)を定義し、XSLT仕様を一意に識別するURL文字列を識別します。通常のURLアドレスのように見えますが、文字列http://www.w3.org/1999/XSL/TransformをXSLT1.0仕様に定義された要素セットのグローバル主キーとして利用しているだけです。ネームスペースが定義されると、スタイルシートで<xsl:XXX>アクション要素を使用して、ループと、必要な場所への値のプラグインが可能です。
- xsl:version="1.0"
この属性は、文書をXSLT 1.0スタイルシートとして識別します。versionは、XSLTスタイルシートが有効でXSLTプロセッサで認識されるためにすべてのXSLTスタイルシートで必要となります。
ページのトップに<?xml-stylesheet?>処理命令を追加して、XSQL Pagesにスタイルシートを関連付けます。これにより、要求元のプログラムまたはWebブラウザでXMLを業界標準のフォーマットで表示できるようになります。
XML情報をHTMLで返すには、「HTML変換ルールを規定した」XSLTスタイルシートを使用します。そのままのXML情報を返す代わりに、XSQL
Pagesはサーバー側XSLT変換を活用して情報をHTMLにフォーマットし、Webブラウザに提供します。
サンプルとして使用するcatalog.xslスタイルシートやcatalog-display.xslスタイルシートは<xsl:for-each>、<xsl:value-of>、{DUE}などの属性値を持つテンプレートHTMLページなどのようになり、基礎となる<ROWSET>と<ROW>構造のXML問い合わせ結果から動的な値をプラグインします。
注意:
スタイルシートはHTMLとまったく同じように表示されますが、整形式のHTMLであるという点が異なります。つまり、各開始タグが適切に閉じられており(<td>...</td>など)、空白のタグは<br>だけではなくXMLの空要素構文<br/>を使用します。
次の機能のパワーを組み合わせることで、非常に興味深く役に立つ結果を迅速に実現することができます。
- Oracleデータベースから必要な情報を選択するパラメータ付きSQL文
- ポータブルな中間データ交換フォーマットとしての業界標準XML
- XMLベースのデータ・ページを必要なXMLまたはHTMLベースのフォーマットに変換するXSLT

| 2.5.3 Oracle XSQL Pagesの使用 |
|
一連のXSQL Pagesを作成すると、次の操作によってページを使用できます。
- Oracle XSQL Servletを設定した後で、お好みのWebブラウザからページを要求する
- バッチ・プログラムでOracle XSQLCommandLineユーティリティをコールする
- 任意のJavaプログラムからXSQLRequest.process()メソッドをコールする
- JavaServer Pages(JSP)で<jsp:include page="foo.xsql">または<jsp:forward
page="bar.xsql">を使用する
XSQL ServletはコアXSQL Page Processor Engineに対する3つのクライアントの1つです。XSQL
Page ProcessorはXSQL Pagesコンテンツの解釈、キャッシュ、処理の作業などを行います。名前が示すとおり、XSQLServletはHTTPを介してWebサーバーからXSQL
Pagesへのアクセスを可能にするJava Servletです。他の2つのクライアントは、コマンド・ラインからXSQL
Pagesを処理するXSQLCommandLineユーティリティと、シンプルなAPIによってカスタムJavaプログラム内でXSQL
Pagesをプログラム処理するXSQLRequestクラスです。

XMLファイルを実行する環境を設定するには、次のことを行う必要があります。
CLASSPATHの設定
XSQLServlet、XSQLRequest、XSQLCommandLineは、コアのXSQLPageProcessorに加えてすべてのJavaプログラムであり、移植性も非常に高く設定も簡単です。唯一の設定要件は、XSQL
Pagesを実行/処理するJavaVMのCLASSPATHにJARファイルが存在することを確認することです。JARファイルには、次のものがあります。
- Oracle JDBC Driver用のclasses12.zip
- Oracle XML Parser for Java V2用のxmlparserv2.jar
- Oracle XML SQL Utility for Java用のoraclexmlsql.jar
- Oracle XSQL Servlet and Page Processor用のoraclexsql.jar
さらに、XSQL Page Processor構成ファイル(XSQLConfig.xml)の常駐ディレクトリもCLASSPATHのディレクトリとして列記する必要があります。通常は./xsql/libディレクトリに常駐しています。
接続定義の設定
この節では、データベースに付属のHTTP Webサーバーを使用します。このサーバーは小規模で使いやすく、Java
Servletをサポートします。次の手順を実行してください。
1. |
メモ帳などのテキスト・エディタで、c:\oracle\ora90\xdk\admin\XSQLConfig.xmlファイルを開いて以下のエントリを追加します(図2.5.1を参照)。接続名はOEで、ユーザー名とパスワードもoeです。
<connection name="OE">
<username>oe</username>
<password>oe</password>
<dburl>jdbc:oracle:thin:@localhost:1521:ORCL</dburl>
<driver>oracle.jdbc.driver.OracleDriver</driver>
</connection> |

図2.5.1
画像をクリックすると拡大図をご覧いただけます
|
2. |
ファイルを保存してテキスト・エディタを終了します。
|

初めに、この節の演習で使用するサンプル・スクリプトの圧縮ファイル xmlfiles.zipをc:\sctwディレクトリに抽出します。ファイルのディレクトリ構造を必ずZIPアーカイブの内容のとおりに展開してください。これにより、この節に必要なすべてのファイルが作成されます。

1. |
メモ帳などのテキスト・エディタで、C:\oracle\ora90\Apache\Apache\conf\httpd.confファイルを開きます。
|
|
2.
|
次の行をAlias(別名)セクションに追加します(図2.5.2を参照)。
Alias /xmlcatalog/ "c:\sctw/"
|

図2.5.2
画像をクリックすると拡大図をご覧いただけます
|
|
3.
|
ファイルを保存して閉じます。
|
|
4.
|
ここでHTTP Webサーバーを起動します。Windowsのスタートボタンをクリックして、[コントロール・パネル]→[管理ツール]の[サービス]アイコンをクリックします。
|
5. |
[OracleOraHome90HTTPServer]サービスを選択して、ツールバーの[開始]ボタンをクリックします(図2.5.3を参照)。すでに開始されていた場合は、いったん[停止]ボタンをクリックし、再度開始ボタンをクリックします。
|

図2.5.3
画像をクリックすると拡大図をご覧いただけます
|

| 2.5.7 Oracle9i JDeveloperのoeWorkspace.jwsへのプロジェクトの追加 |
|
次に、Oracle9i JDeveloperのxmlファイルを検査します。
| 1.
|
Oracle9i JDeveloperを起動します。
|
| 2.
|
以前に作成した[oeWorkspace.jws]ファイルを開きます。
|
|
3.
|
[システム・ナビゲータ]のツリー・リストで[oeWorkspace.jws]を右クリックし、[新規の空のプロジェクト]メニューを選択します。
|
|
4.
|
[新規プロジェクト]ウィンドウが表示されるので、ファイル名にxmlCatalog.jprと入力して[OK]ボタンをクリックします。
|
|
5.
|
Oracle9i JDeveloperのメイン画面に戻るので、[システム・ナビゲータ]ウィンドウの左端にある[xmlCatalog.jprに追加]ボタンをクリックします(図2.5.4を参照)。
|

図2.5.4
画像をクリックすると拡大図をご覧いただけます
|
|
6.
|
[xmlCatalog.jprにファイルまたはディレクトリを追加]ウィンドウが表示されます(図2.5.5を参照)。[場所]ボックスを操作して、c:\sctw\catalog.xsqlファイルを選択して[開く]ボタンをクリックします。これでcatalog.xsqlファイルがプロジェクトに追加されます。
|

図2.5.5
画像をクリックすると拡大図をご覧いただけます
|
|
7.
|
再びOracle9i JDeveloperのメイン画面に戻ります(図2.5.6を参照)。これでXSQL Pagesを確認/変更して製品カタログを作成する準備が整いました。
|

図2.5.6
画像をクリックすると拡大図をご覧いただけます
|

| 2.5.8 XSQL PagesによるXMLベースの製品カタログの作成 |
|
製品カタログの冒頭の問い合わせ動作
最初にスケルトンXSQL Pagesを設定して、問い合わせを開発します。
|
1.
|
システム・ナビゲータ]のツリー・リストで[catalog.xsql]を選択して、<xsql:query>タグのconnection属性の値をOEに変更します(図2.5.7を参照)。
このSQL問い合わせが、製品カタログから取り出す必要のある情報を選択していることに注意してください。
|

図2.5.7
画像をクリックすると拡大図をご覧いただけます
|
|
2.
|
この問い合わせにはWHERE句が含まれていないので、このままこのページを実行するとすべての項目がProduct表に返され、必要以上の情報になってしまいます。したがって、<xsql:query>要素の属性としてmax-rows="3"を含めるように変更して、問い合わせが最初の3行だけを返すように結果を制限します(図2.5.8を参照)。
|

図2.5.8
画像をクリックすると拡大図をご覧いただけます
|
|
3.
|
[ファイル]→[すべて保存]メニューを選択して、ファイルを保存します。
|
|
4.
|
Webブラウザで次のURLを入力して、ページをテストします(<hostname>はこの演習の例ではtestoraとしています)。
http://<hostname>:80/xmlcatalog/catalog.xsql
最初の3つの製品がタイトル順にROWSETフォーマット、ROWフォーマットを含んだXML文書で返されます(図2.5.9を参照)。
|

図2.5.9
画像をクリックすると拡大図をご覧いただけます
|

| 2.5.9 XSQL Pages問い合わせのパラメータ化 |
|
New Media Technologies社は、検索基準の提供とXMLベースの製品カタログ検索の取出しを希望しています。シンプルな構成にするため、PRODUCT_NAMEとPRODUCT_DESCRIPTIONのテキストと、最大LIST_PRICEの検索で十分であるという前提から始めます。他の検索基準をサポートする作業例は、後で追加することができます。
<xsql:query>などのXSQL Pagesアクション要素内部では、構文{@paramname}を使用してパラメータを参照できます。これらはテキスト代入パラメータなので、問い合わせ文の任意部分を代入できます。最大LIST_PRICEで検索するには、次のステップを行います。
|
1.
|
次のパラメータ化WHERE句をcatalog.xsqlファイルに追加します(図2.5.10を参照)。
WHERE list_price < {@under}
|

図2.5.10
画像をクリックすると拡大図をご覧いただけます
|
|
2.
|
[catalog.xsql-構造]ウィンドウにエラーが発生します。これは小なり記号(<)がXMLファイルの予約語であり(XML要素名の先頭を示す)、WHERE句でこの記号を使用したためです。
これには2つの解決手段があります。
小なり記号(<)1つの代わりに、「<」の4文字を使用する解決方法。
CDATAセクションで問い合わせ全体をラップする解決方法。これはファイルのセクション全体を「引用する」ためのXMLメカニズムです。CDATAセクションを使用した解決方法は他のXML開発プロジェクトでも有用な場合があるため、この方法を採用することをお薦めします。
|
|
3.
|
この演習では「<」の4文字を使用してエラーを解決します。catalog.xsqlファイルを変更してください。図2.5.11のようになります。
|

図2.5.11
画像をクリックすると拡大図をご覧いただけます
|
|
4.
|
Webブラウザで以下のURLを入力し、問い合わせをテストします(図2.5.12を参照)。これは$100以下の製品だけを表示します。
http://<hostname>:80/xmlcatalog/ catalog.xsql?under=100
注意:
図2.5.12と同じものが表示されない場合は、他のWebページを表示させてからこのページに戻ってください。
|

図2.5.12
画像をクリックすると拡大図をご覧いただけます
|
|
5.
|
underパラメータの値を指定しない場合もあります。<xsql:query>要素に、以下の属性とパラメータのデフォルト値を追加してください(図2.5.13を参照)。
under="99999"
|

図2.5.13
画像をクリックすると拡大図をご覧いただけます
|
|
6.
|
[ファイル]→[すべて保存]メニューを選択して、ファイルを保存します。
|
|
7.
|
Webブラウザに切り替えて、次のURLを入力してページをテストします。
http://<hostname>:80/xmlcatalog/catalog.xsql
異なる結果が出るはずです。値段に関係なく製品が表示されています(図2.5.14を参照)。
|

図2.5.14
画像をクリックすると拡大図をご覧いただけます
|

| 2.5.10 業界標準XMLフォーマットでの製品カタログの提供 |
|
基本のXML製品カタログを所定の場所に配置したので、次に業界標準の製品カタログ文書タイプで情報を提供するXSLTスタイルシートを作成します。
世界中のPC部品のベンダーが国際会議で会合を行い、以降はすべての製品情報をカタログDTDフォーマットで交換することに合意したと仮定します。会議ではcatalog.dtdファイル(xmlcatalog.zipより解凍したc:\sctw\catalog.dtdを参照)が提供されました。
|
1.
|
適切な構造を持つXML文書例を表示するには、Webブラウザで次のURLを入力します。
http://<hostname>:80/xmlcatalog/catalog.xml
図2.5.15は、XML認証局で生成されたcatalog.xmlのサンプルXML文書です。
|

図2.5.15
画像をクリックすると拡大図をご覧いただけます
|
|
次に、このサンプルXML文書をXSLTスタイルシートに変換して、業界標準フォーマットから<ROWSET>フォーマットと<ROW>フォーマットの製品カタログを提供します。
|
|
2.
|
[システム・ナビゲータ]ウィンドウの左端にある[xmlCatalog.jprに追加]ボタンをクリックして、[catalog.xml]と[catalog.dtd]のファイルをそれぞれ[xmlCatalog.jpr]プロジェクトに追加します(図2.5.16を参照)。
|

図2.5.16
画像をクリックすると拡大図をご覧いただけます
|
|
3.
|
システム・ナビゲータ]のツリー・リストで[catalog.xml]ファイルを開きます。
|
|
4.
|
2つ目の<product>要素とこれにネストされた要素すべてを削除します。これは、XSLTスタイルシート・テンプレートに繰り返しコンテンツを作成するのに、1つの<product>要素の例しか必要としないためです。
|
|
5.
|
「<!--」と「-->」で囲まれたコメントの部分も削除して、編集されたファイルをc:\sctw\catalog.xslとして保存します(図2.5.17を参照)。
|

図2.5.17
画像をクリックすると拡大図をご覧いただけます
|
|
6.
|
エディタを開いたままにして、さらにいくつかの追加変更をcatalog.xslファイルに行います。生成される結果にはDOCTYPEを含める必要があるので、特別なxslアクション要素を使用する必要があります。
<!DOCTYPE catalog SYSTEM "catalog.dtd">
上記の行を以下のように変更します。
<xsl:output doctype-system="catalog.dtd"/>
これは正しいDTDに変換された出力文書に関連付けを行います。
|
7. |
前の2つのXSLTスタイルシートと同じように、<xsl:output>などの一部のXSLT拡張機能を使用する必要があります。
次の太字で示した行を所定の位置に追加してください。
<?xml version ="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output doctype-system="catalog.dtd"/>
<xsl:template match="/">
<catalog>
<product id = "1755">
<name>32M Cache /NM</name>
<price>121</price>
<detail>32MB Non-Mirrored cache memory</detail>
</product>
</catalog>
</xsl:template>
</xsl:stylesheet>
この変更では、以下のことを行っています。
|
8. |
動的コンテンツをテンプレートに導入して、オリジナルのXML製品カタログの<ROW>要素をループします。元の文書で各<ROW>に対して繰り返す<item>の周りに<xsl:for-each>アクション要素を使用します。select="ROWSET/ROW"属性は、表示されるすべてのROW要素をROWSET要素の直接の子としてループさせることを示しています。
次の太字で示した行を所定の位置に追加してください
<?xml version ="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output doctype-system="catalog.dtd"/>
<xsl:template match="/">
<catalog>
<xsl:for-each select="ROWSET/ROW">
<product id = "1755">
<name>32M Cache /NM</name>
<price>121</price>
<detail>32MB Non-Mirrored cache memory</detail>
</product>
<xsl:/for-each>
</catalog>
</xsl:template>
</xsl:stylesheet>
|
|
9.
|
<xsl:for-each>内部では、要素名を使用して(問い合わせの列値を含む)要素を参照できるので、<xsl:value-of>
と属性値テンプレートを使用して適切な値をスタイルシートにプラグできます。
以下の太字で示した行のとおりに変更してください(図2.5.18を参照)。
|

図2.5.18
画像をクリックすると拡大図をご覧いただけます |
|
<?xml version ="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output doctype-system="catalog.dtd"/>
<xsl:template match="/">
<catalog>
<xsl:for-each select="ROWSET/ROW">
<product id = "{ID}">
<name><xsl:value-of select="NAME"/></name>
<price><xsl:value-of select="PRICE"/></price>
<detail><xsl:value-of select="DESCRIPTION"/></detail>
</product>
<xsl:/for-each>
</catalog>
</xsl:template>
</xsl:stylesheet>
|
10. |
これでスタイルシートの編集は完了です。ファイルを保存してください。
|
11. |
次に、ファイルをcatalog.xsqlページに関連付けます。[システム・ナビゲータ]のツリー・リストから[catalog.xsql]ファイルを開きます。
以下の行を、2行目に追加します(図2.5.19を参照)。
<?xml-stylesheet type="text/xsl" href=catalog-display.xsl"?>
|

図2.5.19
画像をクリックすると拡大図をご覧いただけます
|
12. |
ファイルを保存して終了します。
|
| 13. |
再び次のURLをWebブラウザに入力して、結果を表示します(図2.5.20を参照)。
http://<hostname>:80/xmlcatalog/
catalog.xsql?under=100
|

図2.5.20
画像をクリックすると拡大図をご覧いただけます
|
| スタイルシートに定義した<DESCRIPTION>フィールド・ラベルがあることに注意してください。 |

| 2.5.11 HTMLフォーマットでの製品カタログの提供 |
|
次に、出力をHTMLとして提供します。
|
1.
|
メモ帳などのテキスト・エディタでc:\sctw\catalog-display.xslファイルを開きます(図2.5.21を参照)。これが、catalog-view.xsqlの実行時にHTMLに変換されるスタイルシートです。
|

図2.5.21
画像をクリックすると拡大図をご覧いただけます
|
|
2.
|
同様に任意のテキスト・エディタでc:\sctw\catalog-view.xsqlファイルを開きます(図2.5.22を参照)。このファイルは、前の項で説明したカタログ表示スタイルシートを使用しています。
|

図2.5.22
画像をクリックすると拡大図をご覧いただけます
|
|
3.
|
Webブラウザに切り替えて、次のURLを入力します(図2.5.23を参照)。
http://<hostname>:80/xmlcatalog/
catalog-view.xsql?under=100
|

図2.5.23
画像をクリックすると拡大図をご覧いただけます
|
| XMLを使用して、データベースからコンテンツを公開しました。 |

この節では、次の方法を説明しました。
- XML用語の理解
- XSQLConfig.xmlにおけるデータベース接続の設定
- HTTP Webサーバーの設定
- XSQL PagesによるXMLベース製品カタログの作成
- XSQL Pages問い合わせのパラメータ化
- 製品カタログXMLスタイルシートの作成
- HTMLフォーマットでの製品カタログの提供

|