ヘッダーをスキップ

Oracle Containers for J2EE JSPタグ・ライブラリおよびユーティリティ・リファレンス
10g(10.1.3.1.0)

B31854-01
目次
目次
索引
索引

戻る 次へ

5 XMLとXSLに関するタグのサポート

この章では、OC4Jが提供する、XMLデータおよびXSL変換に使用できるタグについて説明します。また、他のOC4JタグでのXMLの追加機能のサマリーを示します。これらのタグは、JSP仕様に従って実装されます。

この章には、次の項目が含まれます。

XMLをサポートするOracleタグの概要

次の各項では、OC4Jが提供するXML機能を備えたタグの概要を説明します。これらのタグは、XML DOMオブジェクトを入力として取得できるタグ、XML DOMオブジェクトを出力として生成できるタグ、指定したスタイルシートに基づいてXML文書を変換するタグ、およびデータを入力ストリームからXML DOMオブジェクトに解析するタグです。

XMLプロデューサとXMLコンシューマ

XML関連操作は、次のいずれか(または両方)に分類できます。

同様に、XML関連タグも、XMLプロデューサまたはXMLコンシューマ(あるいはその両方)に分類できます。XMLプロデューサは、XMLオブジェクトをXMLコンシューマに明示的にまたは暗黙的に渡すことができます。暗黙的に渡すことを「匿名の受渡し」と呼びます。

XML関連タグ間での明示的な受渡しの場合、プロデューサ・タグではtoXMLObjName属性が、コンシューマ・タグではfromXMLObjName属性が使用されます。この受渡し処理は、バックグラウンドで、JSPの標準pageContextオブジェクトのgetAttribute()メソッドとsetAttribute()メソッドを使用して実行されます。次は、明示的な受渡しの使用例です。

<sql:dbQuery output="XML" toXMLObjName="foo" ... >
   ...SQL query...
</sql:dbQuery>
...
<ojsp:cacheXMLObj fromXMLObjName="foo" ... />

XML関連タグ間での暗黙的な受渡しの場合、toXMLObjName属性とfromXMLObjName属性は使用しないでください。この受渡し処理は、タグ・ハンドラ間での直接的な相互作用によって実行されます。この場合、通常タグはネストされています。次は、暗黙的な受渡しの使用例です。

<ojsp:cacheXMLObj ... >
   <sql:dbQuery output="XML" >
      ...SQL query...
   </sql:dbQuery>
</ojsp:cacheXMLObj>

この例では、dbQueryタグで作成されたXMLは、pageContextオブジェクトに格納されず、cacheXMLObjタグに直接渡されます。

暗黙的な受渡しでは、タグがコンシューマとして機能できるように、タグ・ハンドラは、OC4J ImplicitXMLObjConsumerインタフェースを次のように実装します。

interface ImplicitXMLObjConsumer
{
   void setImplicitFromXMLObj();
}

XML機能を持つOC4Jタグのサマリー

OC4Jが提供するタグ・ライブラリに関して、表5-1に、XMLプロデューサまたはコンシューマとして機能できるタグのサマリーを示します。

表5-1    XML機能を持つOC4Jタグ 
タグ  ライブラリ  プロデューサ/コンシューマ  関連属性  タグ情報 

transform / styleSheet 

XML 

両方 

fromXMLObjName
toXMLObjName 

「XML/XSLデータ変換用のXML transformタグとstyleSheetタグ」 

parsexml 

XML 

プロデューサ 

toXMLObjName 

「入力ストリームからの変換を行うXML parsexmlタグ」 

cacheXMLObj 

Web Object Cache 

両方 

fromXMLObjName
toXMLObjName 

「Web Object CacheのcacheXMLObjタグ」 

dbQuery 

SQL 

プロデューサ 

toXMLObjName 

「SQL dbQueryタグ」 

invoke 

Webサービス 

プロデューサ 

toXMLObjName 

「Webサービスのinvokeタグ」 


注意

  • XML transformタグとstyleSheetタグは同じ機能を持ち、同一の結果を生成します。

  • cacheXMLObjタグをXMLタグ・ライブラリ・ディスクリプタ・ファイル(xml.tld)とWeb Object Cacheタグ・ライブラリ・ディスクリプタ・ファイル(jwcache.tld)の両方に定義すると便利です。

 

XMLユーティリティ・タグ

次の各項では、OC4Jが提供するXMLユーティリティ・タグについて説明します。

XMLユーティリティ・タグ・ライブラリを使用する場合は、次の要件に注意してください。

taglibディレクティブ、予約済のタグ・ライブラリ・ディレクトリ、TLDファイルおよびuri値の内容の詳細は、『Oracle Containers for J2EE JavaServer Pages開発者ガイド』を参照してください。


注意

  • このタグ構文では、接頭辞「xml:」が使用されます。慣例的にこのように表記しますが、必須ではありません。任意の接頭辞をtaglibディレクティブに指定できます。

  • このマニュアルのタグ構文規則の詳細は、「タグ構文の表記と意味」を参照してください。

 

XMLユーティリティ・タグの説明

次の各項ではXMLユーティリティ・タグについて説明します。

XML/XSLデータ変換用のXML transformタグとstyleSheetタグ

XMLとXSLを動的JSPページに頻繁に使用する場合は、結果をクライアントに戻す前に、サーバーでXSL変換を行う必要があります。この処理を簡素化するために、Oracleでは、XMLライブラリに2つの同義のタグを用意しています。結果をHTTPクライアントに直接出力することも、指定したXML DOMオブジェクトに出力することもできます。この項の説明と例のように、transformタグまたはstyleSheetタグのいずれかを使用します。この2つのタグによって得られる効果は同じです。

それぞれのタグは、XMLプロデューサとXMLコンシューマの両方の役割を果します。次のいずれかを入力として取得できます。

これらのタグは、次のいずれか、または両方に出力できます。ただし、いずれの場合も適用するスタイルシートを指定する必要があります。

入力にタグ・ボディを使用すると、タグは開始タグから終了タグまでにあるすべてのものに適用されます。1つのページ内に複数のXSL変換ブロックを設定できます。この場合、各ブロックはそのブロック自体のtransformタグまたはstyleSheetタグでバインドされ、適切なスタイルシートへの独自のhrefポインタを指定します。

構文

<xml:transform href="xslRef" 
             [ fromXMLObjName = "objectname" ]
             [ toXMLObjName = "objectname" ]
             [ toWriter = "true" | "false" ] >

   [...body...]

</xml:transform >

または

<xml:styleSheet href="xslRef" 
             [ fromXMLObjName = "objectname" ]
             [ toXMLObjName = "objectname" ]
             [ toWriter = "true" | "false" ] >

   [...body...]

</xml:styleSheet >
属性

入力ストリームからの変換を行うXML parsexmlタグ

XMLタグ・ライブラリには、XMLプロデューサ・ユーティリティ・タグparsexmlが含まれています。このタグは、入力ストリームからXML DOMオブジェクトに変換します。このタグによって、指定したリソースまたはタグ・ボディから入力を取得できます。

構文

<xml:parsexml 
             [ resource = "xmlresource" ]
             [ toXMLObjName = "objectname" ]
             [ validateResource = "dtd_path" ] 
             [ root = "dtd_root_element" ] >

   [...body...]

</xml:parsexml >
属性

XMLユーティリティ・タグの例

次の各項ではXMLユーティリティ・タグの使用例を紹介します。

transformタグの使用例

この項では、XSLスタイルシートのサンプルと、そのスタイルシートでtransformタグを使用して出力をフィルタ処理するJSPページのサンプルを示します。これは非常に単純化した例です。ページ内のXMLは静的なものです。より現実的な例では、JSPページを使用して、変換の実行前にXMLのすべてまたは一部を動的に生成します。

サンプル・スタイルシート: hello.xsl

<?xml version="1.0"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 
  <xsl:template match="page">
   <html>
    <head>
     <title>
      <xsl:value-of select="title"/>
     </title>
    </head>
    <body bgcolor="#ffffff">
     <xsl:apply-templates/>
    </body>
   </html>
  </xsl:template>

  <xsl:template match="title">
   <h1 align="center">
    <xsl:apply-templates/>
   </h1>
  </xsl:template>

  <xsl:template match="paragraph">
   <p align="center">
    <i>
     <xsl:apply-templates/>
    </i>
   </p>
  </xsl:template>

</xsl:stylesheet>
サンプルJSPページ: hello.jsp

<%@ page session = "false" %>
<%@ taglib uri="http://xmlns.oracle.com/j2ee/jsp/tld/ojsp/xml.tld" 
           prefix="xml" %> 

<xml:transform href="style/hello.xsl" >

<page>
 <title>Hello</title>
 <content>
  <paragraph>This is my first XML/XSL file!</paragraph>
 </content>
</page>

</xml:transform>

transformタグとdbQueryタグの使用例

この例では、dbQueryタグから結果セットを戻し、transformタグを使用して、XSLスタイルシートrowset.xslで問合せ結果をフィルタ処理します(コードを次に示します)。また、dbOpenタグを使用して接続をオープンします。接続文字列は、requestオブジェクトまたはuseDataSource.jspページのいずれかから取得されます(コードを次に示します)。dbOpenタグからtransformタグへのデータの受渡しは暗黙的に実行されます。関連情報は、「SQL dbQueryタグ」および「SQL dbOpenタグ」を参照してください。

JSPページ

<%@ page import="oracle.sql.*, oracle.jdbc.driver.*, oracle.jdbc.*, java.sql.*" %>
<%@ taglib uri="http://xmlns.oracle.com/j2ee/jsp/tld/ojsp/xml.tld" 
           prefix="xml" %>
<%@ taglib uri="http://xmlns.oracle.com/j2ee/jsp/tld/ojsp/sqltaglib.tld"
           prefix="sql" %>

<%
   String dataSrcStr=request.getParameter("dataSrcStr");
   if (dataSrcStr==null) {
     dataSrcStr=(String)session.getValue("dataSrcStr");
   } else {
     session.putValue("dataSrcStr",dataSrcStr);
   }
   if (dataSrcStr==null) { %>
<jsp:forward page="../../sql/useDataSource.jsp" />
<%
   }

%>
<h3>Transform DBQuery Tag Example</h3>
<xml:transform href="style/rowset.xsl" >
    <sql:dbOpen connId="conn1" dataSource="<%= dataSrcStr %>" />
    <sql:dbQuery connId="conn1" output="xml" queryId="myquery" >
       select ENAME, EMPNO from EMP order by ename
    </sql:dbQuery>
    <sql:dbCloseQuery queryId="myquery" />
    <sql:dbClose connId="conn1" />
</xml:transform>


注意

この例のdbOpenタグの場合は、データ・ソースでURL、ユーザー名およびパスワードが指定されているものとします。 


rowset.xsl

<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:template match="ROWSET">
 <html><body>
 <h1>A Simple XML/XSL Transformation</h1>
 <table border="2">
<xsl:for-each select="ROW">
  <tr>
    <td><xsl:value-of select="@num"/></td>  
    <td><xsl:value-of select="ENAME"/></td>
    <td><xsl:value-of select="EMPNO"/></td>
  </tr>
</xsl:for-each>
</table>
</body></html>
</xsl:template>
</xsl:stylesheet>
useDataSource.jsp

<body bgcolor="#FFFFFF">
<font size=+0>
<B>Please enter a suitable JDBC connection string, before you try the above demo</B>
<pre>
     To use a data source that you have set up in data-sources.xml, enter the
     data source string below. Once you have set the data source string it 
     will remain in effect until the session times out.
</pre>
<% 
   String dataSrcStr;
   dataSrcStr=request.getParameter("dataSrcStr");
   if (dataSrcStr==null) {
     dataSrcStr=(String)session.getValue("dataSrcStr");
   }
   if (dataSrcStr==null) {
     dataSrcStr="jdbc/OracleCoreDS";  // default data source string
   }

   session.putValue("dataSrcStr",dataSrcStr);
%>
<FORM METHOD=get ACTION="<%= request.getParameter("nextaction") %>" >
<INPUT TYPE="text" NAME="dataSrcStr" SIZE=40 value="<%=dataSrcStr%>" >
<INPUT TYPE="submit" VALUE="Change Data Source String" >
</FORM>
</font>

transformタグとparsexmlタグの使用例

この項では、XSLスタイルシートのemail.xslを使用して、parsexmlタグから出力を取得し、その出力をtransformタグによってフィルタ処理する例を2つ示します。いずれの場合も、データは、指定したリソースのXMLファイルからparsexmlタグ・ハンドラによって収集された後、toxml1 XMLオブジェクトを介してparsexmlタグからtransformタグに明示的に渡されます。

最初の例では、XMLリソースのemail.xmlとDTDのemail.dtdを使用します。root属性は指定されていません。したがって、妥当性チェックは、トップレベル要素の<email>から行われます。

第2の例では、XMLリソースemailWithDtd.xmlを使用します。このファイルには、DTDが埋め込まれています。root属性によって、妥当性チェックが要素<email>から行われることが明示的に指定されています。

email.xmlemail.dtdemailWithDtd.xmlおよびemail.xslの各ファイルも次に示します。

transformとparsexmlの使用例1

<%@ taglib uri="http://xmlns.oracle.com/j2ee/jsp/tld/ojsp/xml.tld" 
           prefix="xml" %>
<h3>XML Parsing Tag Email Example</h3>
<xml:transform fromXMLObjName="toxml1" href="style/email.xsl">
   <xml:parsexml resource="style/email.xml" validateResource="style/email.dtd" 
                 toXMLObjName="toxml1">
   </xml:parsexml>
</xml:transform>
transformとparsexmlの使用例2

<%@ taglib uri="http://xmlns.oracle.com/j2ee/jsp/tld/ojsp/xml.tld" 
           prefix="xml" %>
<h3>XML Parsing Tag Email Example</h3>
<xml:transform fromXMLObjName="toxml1" href="style/email.xsl">
   <xml:parsexml resource="style/emailWithDtd.xml" root="email" 
                 toXMLObjName="toxml1">
   </xml:parsexml>
</xml:transform>
email.xml

<email>
<recipient>Manager</recipient>
<copyto>jsp_dev</copyto>
<subject>XML Bug fixed</subject>
<bugno>BUG 1109876!</bugno>
<body>for reuse tag and checked in the latest version!</body>
<sender>Developer</sender>
</email> 
email.dtd

<!ELEMENT email (recipient,copyto,subject,bugno,body,sender)>
<!ELEMENT recipient (#PCDATA)>
<!ELEMENT copyto (#PCDATA)>
<!ELEMENT subject (#PCDATA)>
<!ELEMENT bugno (#PCDATA)>
<!ELEMENT body (#PCDATA)>
<!ELEMENT sender (#PCDATA)>
emailWithDtd.xml

<!DOCTYPE email [
<!ELEMENT email (recipient,copyto,subject,bugno,body,sender)>
<!ELEMENT recipient (#PCDATA)>
<!ELEMENT copyto (#PCDATA)>
<!ELEMENT subject (#PCDATA)>
<!ELEMENT bugno (#PCDATA)>
<!ELEMENT body (#PCDATA)>
<!ELEMENT sender (#PCDATA)>]>
<email>
<recipient>Manager</recipient>
<copyto>jsp_dev</copyto>
<subject>XML Bug fixed</subject>
<bugno>BUG 1109876!</bugno>
<body>for reuse tag and checked in the latest version!</body>
<sender>Developer</sender>
</email> 
email.xsl

<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:template match="email">
 <html><body>
  To: <xsl:value-of select="recipient"/> 
  CC: <xsl:value-of select="copyto"/>
  Subject:   <xsl:value-of select="subject"/> ...   
  <xsl:value-of select="body"/> !!  
  Thanks  <xsl:value-of select="sender"/>
</body></html>
</xsl:template>
</xsl:stylesheet>

戻る 次へ
Oracle
Copyright © 2002, 2006 Oracle Corporation.

All Rights Reserved.
目次
目次
索引
索引