Oracle Containers for J2EE JSPタグ・ライブラリおよびユーティリティ・リファレンス 10g(10.1.3.1.0) B31854-01 |
|
この章では、OC4Jが提供する、XMLデータおよびXSL変換に使用できるタグについて説明します。また、他のOC4JタグでのXMLの追加機能のサマリーを示します。これらのタグは、JSP仕様に従って実装されます。
この章には、次の項目が含まれます。
次の各項では、OC4Jが提供するXML機能を備えたタグの概要を説明します。これらのタグは、XML DOMオブジェクトを入力として取得できるタグ、XML DOMオブジェクトを出力として生成できるタグ、指定したスタイルシートに基づいてXML文書を変換するタグ、およびデータを入力ストリームからXML DOMオブジェクトに解析するタグです。
OC4Jが提供するXMLカスタム・タグ・ライブラリは、JavaServer Pages標準タグ・ライブラリ(JSTL)より前に開発され、JSTLと重複する機能が含まれています。標準に準拠するために、原則として、JSTLの使用をお薦めします。第2章「JavaServer Pages標準タグ・ライブラリのサポート」を参照してください。
JSTLで使用できないカスタム・ライブラリの機能のうち、有効と判断される機能は、必要に応じて、JSTL標準に採用される予定です。
注意
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(); }
OC4Jが提供するタグ・ライブラリに関して、表5-1に、XMLプロデューサまたはコンシューマとして機能できるタグのサマリーを示します。
次の各項では、OC4Jが提供するXMLユーティリティ・タグについて説明します。
XMLユーティリティ・タグ・ライブラリを使用する場合は、次の要件に注意してください。
ojsputil.jar
、ファイルxmlparserv2.jar
ファイルおよびxsu12.jar
ファイルがインストール済で、クラスパスに存在している必要があります。これらのファイルは、OC4Jに含まれています。ojsputil.jar
ファイルは、予約済のタグ・ライブラリ・ディレクトリにあります。
xml.tld
が、アプリケーションで使用可能である必要があります。また、ライブラリを使用するJSPページには、適切なtaglib
ディレクティブが存在する必要があります。Oracle Application Serverのインストール時、TLDはojsputil.jar
に配置されます。xml.tld
のuri
値は次のとおりです。
http://xmlns.oracle.com/j2ee/jsp/tld/ojsp/xml.tld
taglib
ディレクティブ、予約済のタグ・ライブラリ・ディレクトリ、TLDファイルおよびuri
値の内容の詳細は、『Oracle Containers for J2EE JavaServer Pages開発者ガイド』を参照してください。
注意
|
次の各項ではXMLユーティリティ・タグについて説明します。
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 >
href
(必須): XMLデータ変換に使用するXSLスタイルシートを指定します。この属性は、XMLオブジェクト(書式設定なしで変換できる)への出力またはブラウザへの出力に関係なく、必須です。 href
属性については、次の点に注意してください。
http://
host
:
port
/
path
)、アプリケーション相対URLのJSP参照(「/
」で開始する)、およびページ相対URLのJSP参照(「/
」で開始しない)の場合があります。アプリケーション相対URLパスとページ相対URLパスの詳細は、『Oracle Containers for J2EE JavaServer Pages開発者ガイド』を参照してください。
fromXMLObjName
: タグ・ボディからではなく、DOMオブジェクトから入力する場合に、入力XML DOMオブジェクトを指定します。タグ・ボディとfromXMLObjName
指定の両方がある場合は、fromXMLObjName
が優先されます。
toXMLObjName
: HTTPクライアントへの出力用のJSP Writerオブジェクトのかわりに(またはこのオブジェクトに加えて)、DOMオブジェクトを出力先とする場合に、出力XML DOMオブジェクトの名前を指定します。この属性は、暗黙的XMLコンシューマが存在する場合は不要です。たとえば、タグ内にtransform
タグまたはstyleSheet
タグがネストされている場合です。
toWriter
: この属性は「true
」または「false
」のいずれかで、出力先が、HTTPクライアントへの出力用のJSP Writerオブジェクトであるかどうかを示します。これは、DOMオブジェクトへの出力のかわりに(または追加して)指定できます。デフォルトでは、下位互換性を維持するため、「true
」に設定されます。(Oracle9iASリリース2より前のリリースでは、この属性が唯一の出力の選択肢で、toXMLObjName
属性はありませんでした。)
XMLタグ・ライブラリには、XMLプロデューサ・ユーティリティ・タグparsexml
が含まれています。このタグは、入力ストリームからXML DOMオブジェクトに変換します。このタグによって、指定したリソースまたはタグ・ボディから入力を取得できます。
<xml:parsexml [ resource = "xmlresource" ] [ toXMLObjName = "objectname" ] [ validateResource = "dtd_path" ] [ root = "dtd_root_element" ] > [...body...] </xml:parsexml >
resource
: タグ・ボディからではなくXMLリソースから入力する場合に、XMLリソースを指定します。たとえば、次のように指定します。
resource="/dir1/hello.xml"
タグ・ボディと指定したリソースの両方がある場合は、リソースが優先されます。
toXMLObjName
: 出力先のXML DOMオブジェクトの名前を指定します。この属性は、暗黙的XMLコンシューマが存在する場合は不要です。たとえば、タグ内にparsexml
タグがネストされている場合です。
validateResource
: XML妥当性チェックに対して、適切なDTDへのパスを指定できます。あるいは、DTDをXMLリソースに埋め込むことができます。この属性は、リクエスト時属性ではありません。
root
: DTDのルート要素を指定して妥当性チェックを行います。この属性は、リクエスト時属性ではありません。root
要素を指定せずにvalidateResource
を指定した場合、デフォルトのルートは、DTDのトップレベルになります。
次の各項ではXMLユーティリティ・タグの使用例を紹介します。
この項では、XSLスタイルシートのサンプルと、そのスタイルシートでtransform
タグを使用して出力をフィルタ処理するJSPページのサンプルを示します。これは非常に単純化した例です。ページ内のXMLは静的なものです。より現実的な例では、JSPページを使用して、変換の実行前にXMLのすべてまたは一部を動的に生成します。
<?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>
<%@ 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>
この例では、dbQuery
タグから結果セットを戻し、transform
タグを使用して、XSLスタイルシートrowset.xsl
で問合せ結果をフィルタ処理します(コードを次に示します)。また、dbOpen
タグを使用して接続をオープンします。接続文字列は、request
オブジェクトまたはuseDataSource.jsp
ページのいずれかから取得されます(コードを次に示します)。dbOpen
タグからtransform
タグへのデータの受渡しは暗黙的に実行されます。関連情報は、「SQL dbQueryタグ」および「SQL dbOpenタグ」を参照してください。
<%@ 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>
<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>
<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>
この項では、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.xml
、email.dtd
、emailWithDtd.xml
およびemail.xsl
の各ファイルも次に示します。
<%@ 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>
<%@ 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> <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>
<!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)>
<!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>
<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>
|
Copyright © 2002, 2006 Oracle Corporation. All Rights Reserved. |
|