ORACLE JAPAN Server Release 6.1

 

  |  

  WebLogic Server ホーム   |      XML プログラミング ガイド   |   前へ   |   次へ   |   目次   |   索引   |   PDF 版

WebLogic Server による XML アプリケーションの開発

 

以降の節では、Java プログラミング言語と WebLogic Server を使用して XML アプリケーションを開発する方法について説明します。ここでは、Java サーブレットと JavaServer Pages(JSP)を使用して Java アプリケーションを記述する方法について理解していることを前提にしています。サーブレットと JSP アプリケーションの記述方法については、『WebLogic HTTP サーブレット プログラマーズ ガイド』と『WebLogic JSP プログラマーズ ガイド』を参照してください。

 


XML アプリケーションの開発 : 主な手順

WebLogic Server XML サブシステムを使用して XML アプリケーションを開発する場合、通常は以下のプログラミング タスクの一部または全部を実行します。

  1. XML ドキュメントを解析します。

    XML ドキュメントは、いくつかのソースから構成されています。たとえば、クライアントから XML ドキュメントを受信するサーブレットを開発し、サーブレットまたはその他の EJB などから XML ドキュメントを受信する EJB を記述できます。各インスタンスで、データを操作できるように XML ドキュメントを解析しておくこともできます。

    このタスクの詳細については、 XML ドキュメントの解析を参照してください。

  2. 新しい XML ドキュメントを生成します。

    サーブレットまたは EJB が XML ドキュメントを受信および解析し、何らかの形でデータを操作したら、サーブレットまたは EJB は、新しい XML ドキュメントを生成してクライアントに返すか、他の EJB に渡さなければならないことがあります。

    このタスクの詳細については、 XML ドキュメントの生成を参照してください。

  3. XML データを他の形式に変換します。

    XML ドキュメントを解析するか、新しい XML ドキュメントを生成したら、サーブレットまたは EJB は、その XML を HTML、WML、またはプレーン テキストなどの形式に変換しなければならないことがあります。

    このタスクの詳細については、 JAXP による XML データの変換を参照してください。

 


XML ドキュメントの解析

この節では、XML ドキュメントの解析方法について説明します。

前述のように、Administration Console の XML レジストリを使用して以下の項目をコンフィグレーションします。

Administration Console でこれらのタスクを実行する方法については、 WebLogic Server XML の管理を参照してください。

SAX モードによる XML ドキュメント解析の完全なサンプルについては、BEA_HOME\samples\examples\xml\sax ディレクトリを参照してください。BEA_HOME は、WebLogic Server のメイン インストール ディレクトリです。

SAX モードで JAXP を使用した XML ドキュメントの解析

次のコード例は、SAX パーサ ファクトリをコンフィグレーションして検証パーサを作成する方法を示したものです。また、MyHandler クラスをパーサに登録する方法も示しています。MyHandler クラスは、SAX 解析イベントまたはエラーのカスタム動作を提供するために DefaultHandler クラスの任意のメソッドをオーバーライドできます。

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

...
MyHandler handler = new MyHandler();
// MyHandler は org.xml.sax.helpers.DefaultHandler を拡張

//SAXParserFactory のインスタンスを取得
SAXParserFactory spf = SAXParserFactory.newInstance();
//検証パーサを指定
spf.setValidating(true); // DTD をロードする必要がある
//ファクトリから SAX パーサのインスタンスを取得
SAXParser sp = spf.newSAXParser();
//ドキュメントを解析
sp.parse("http://server/file.xml", handler);
...

注意: 組み込みパーサ以外のパーサを使用する場合は、WebLogic Server Administration Console を使用して XML レジストリでパーサを指定します。指定しなかった場合、SaxParserFactory.newInstance メソッドは組み込みパーサを返します。組み込みパーサ以外のパーサを使用する WebLogic Server のコンフィグレーション手順については、 組み込み以外のパーサまたはトランスフォーマのコンフィグレーションを参照してください。

SAX モードによる XML ドキュメント解析の完全なサンプルについては、BEA_HOME\samples\examples\xml\sax ディレクトリを参照してください。BEA_HOME は、WebLogic Server のメイン インストール ディレクトリです。

DOM モードで JAXP を使用した XML ドキュメントの解析

次のコード例では、XML ドキュメントを解析し、DocumentBuilder オブジェクトから org.w3c.dom.Document ツリーを作成する方法を示します。

import javax.xml.parsers.DocumentBuidler;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;

...
//DocumentBuilderFactory のインスタンスを取得
DocumentBuilderFactory dbf =
DocumentBuilderFactory.newInstance();
//検証パーサを指定
dbf.setValidating(true); // DTD をロードする必要がある
//ファクトリから DocumentBuilder のインスタンスを取得
DocumentBuilder db = dbf.newDocumentBuilder();
//ドキュメントを解析
Document doc = db.parse(inputFile);
...

注意: 組み込みパーサ以外のパーサを使用する場合は、WebLogic Server Administration Console でパーサを指定します。指定しなかった場合、DocumentBuilderFactory.newInstance メソッドは組み込みパーサを返します。組み込みパーサ以外のパーサを使用する WebLogic Server のコンフィグレーション手順については、 組み込み以外のパーサまたはトランスフォーマのコンフィグレーションを参照してください。

DOM モードによる XML ドキュメント解析の完全なサンプルについては、BEA_HOME\samples\examples\xml\dom ディレクトリを参照してください。BEA_HOME は、WebLogic Server のメイン インストール ディレクトリです。

サーブレットでの XML ドキュメントの解析

Java サーブレット仕様バージョン 2.2 で、setAttribute メソッドと getAttribute メソッドに対するサポートが追加されました。属性は、リクエストに関連付けられたオブジェクトです。リクエスト オブジェクトは、クライアント リクエストからの全情報をカプセル化します。HTTP プロトコルでは、この情報は、リクエストの HTTP ヘッダとメッセージ本文を基にクライアントからサーバに転送されます。

WebLogic Server では、以下のメソッドを使用して XML ドキュメントを解析できます。setAttribute メソッドは、SAX モードの解析に使用し、getAttribute メソッドは DOM モードの解析に使用します。

サーブレットでの XML ドキュメント解析の完全なサンプルについては、BEA_HOME\samples\examples\xml\attributes ディレクトリを参照してください。BEA_HOME は、WebLogic Server のメイン インストール ディレクトリです。

org.xml.sax.DefaultHandler 属性を使用したドキュメントの解析

次のサンプル コードでは、setAttribute メソッドの使い方を示します。

import weblogic.servlet.XMLProcessingException;
import org.xml.sax.helpers.DefaultHandler;
...
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
try {
request.setAttribute("org.xml.sax.helpers.DefaultHandler",
new DefaultHandler());
} catch(XMLProcessingException xpe) {
System.out.println("Error in processing XML");
xpe.printStackTrace();
return;
}
...

また、現在は非推奨となっているものの、org.xml.sax.HandlerBase 属性を使用して XML ドキュメントを解析することもできます。

request.setAttribute("org.xml.sax.HandlerBase",
new HandlerBase());

注意: このサンプル コードは、SAX と setAttribute メソッドでドキュメントを解析する単純な方法を示したものです。ドキュメントを解析するこのメソッドは、他のサーブレット ベンダではサポートされていない WebLogic Server の便利な機能です。したがって、アプリケーションを他のサーブレット プラットフォームで実行する場合は、この機能を使用しないでください。

org.w3c.dom.Document 属性を使用したドキュメントの解析

次のサンプル コードでは、getAttribute メソッドの使い方を示します。

import org.w3c.dom.Document;
import weblogic.servlet.XMLProcessingException;

...

public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {

try {
Document doc = request.getAttribute("org.w3c.dom.Document");
} catch(XMLProcessingException xpe) {
System.out.println("Error in processing XML");
xpe.printStackTrace();
return;
}
...

注意: このサンプル コードは、DOM と getAttribute メソッドでドキュメントを解析する単純な方法を示したものです。ドキュメントを解析するこのメソッドは、他のサーブレット ベンダではサポートされていない WebLogic Server の便利な機能です。したがって、アプリケーションを他のサーブレット プラットフォームで実行する場合は、この機能を使用しないでください。

非検証パーサの検証

前述のとおり、整形式ドキュメントは、W3C の XML 1.0 勧告のルールに従っている、構文的に正しいドキュメントのことです。有効なドキュメントは、DTD またはスキーマで指定した制約に従っているドキュメントです。

非検証パーサは、ドキュメントが整形式かどうかを検証しますが、有効かどうかは検証しません。 WebLogic FastParser の使用 で説明している WebLogic FastParser は、デフォルトでは非検証パーサです。

(検証パーサの使用を前提に)ドキュメント解析時の検証を有効にするには、以下を実行する必要があります。

XML ドキュメント解析時のエンティティ解決の処理

この節では、XML パーサによる外部エンティティの識別および解決方法、および XML アプリケーションによる外部エンティティ解決のパフォーマンスを向上させる WebLogic Server の機能など、外部エンティティに関する一般的な情報について説明します。

XML ドキュメント解析時の外部エンティティ解決の完全なサンプルについては、BEA_HOME\samples\examples\xml\entityresolution ディレクトリを参照してください。BEA_HOME は、WebLogic Server のメイン インストール ディレクトリです。

外部エンティティに関する一般的な情報

外部エンティティは、XML ドキュメント内に記述されていないものの、XML ドキュメント内で参照されるさまざまなテキストです。実際のテキストは、同じコンピュータの他のファイル、Web 上など、どこにあってもかまいません。パーサは、ドキュメントの解析時に外部エンティティ参照に出会うと、参照されたテキストをフェッチし、テキストを XML ドキュメント内に配置してから、解析を続行します。外部エンティティの例が DTD です。XML ドキュメント内に DTD のテキストがすべて記述されているのではなく、別のファイルに格納されている DTD への参照が XML ドキュメント内にあります。

外部エンティティの識別方法には、システム ID とパブリック ID の 2 つがあります。システム ID は、URI で指定された位置を基に外部エンティティを参照します。パブリック ID は、外部で宣言されている名前を使用して情報を参照します。

次の例では、パブリック ID を使用して、J2EE アプリケーション アーカイブ(*.ear)を示す application.xml ファイルの DTD を参照する方法を示します。

<!DOCTYPE application PUBLIC "-//Sun Microsystems,
Inc.//DTD J2EE Application 1.2//EN">

次の例は、システム ID のみによる外部 DTD の参照を示します。

<!DOCTYPE application SYSTEM "http://java.sun.com/j2ee/dtds/application_1_2.dtd">

次の例は、パブリック ID およびシステム ID の両方を使用する参照です。SYSTEM キーワードが省略されています。

<!DOCTYPE application
PUBLIC "-//Sun Microsystems, Inc.//DTD J2EE Application 1.2//EN"
"http://java.sun.com/j2ee/dtds/application_1_2.dtd">

WebLogic Server のエンティティ解決機能の使用

以下の WebLogic Server 機能を使用すると、XML アプリケーションの外部エンティティ解決のパフォーマンスを向上させることができます。

XML レジストリで、外部エンティティの場所(ローカルまたは URL)、およびどのキャッシュ オプションが Web 上のエンティティ用かを識別するエンティティ解決エントリを作成します。システム ID またはパブリック ID を使用して外部エンティティ エントリを識別します。次に、XML ドキュメントで、この外部エンティティを参照すると、WebLogic Server は、ドキュメントの解析時にローカル コピーまたはキャッシュされたコピー(コンフィグレーションによる)を取り出します。

XML レジストリでの外部エンティティ レジストリ作成の詳細については、 外部エンティティのコンフィグレーション タスクを参照してください。

組み込みパーサ以外のパーサの使用

JAXP で XML ドキュメントを解析する場合、WebLogic Server XML レジストリ(Administration Console でコンフィグレーション)には以下の選択肢があります。

XML レジストリで解析オプションをコンフィグレーションする手順については、 XML パーサおよびトランスフォーマのコンフィグレーション タスクを参照してください。

WebLogic FastParser の使用

WebLogic Server には、中小規模の XML ドキュメント(最大 10,000 個の要素)の検証用に特別に設計された高性能の非検証 XML パーサ(WebLogic FastParser)があります。大きなドキュメントになると、このパーサのパフォーマンスは、Apache Xerces などの標準パーサと変わらなくなります。

注意: WebLogic FastParser は、SAX スタイルの解析のみをサポートしています。

WebLogic FastParser を WebLogic Server 全体のパーサとして使用するように指定することもできます。または、 XML パーサおよびトランスフォーマのコンフィグレーション タスクで説明されているように、XML レジストリを使用することで特定の DOCTYPE で使用するように指定することもできます。[SAX パーサ ファクトリ] フィールドを weblogic.xml.babel.jaxp.SAXParserFactoryImpl に設定します。

注意: WebLogic Server の旧バージョンには、カスタム パーサの作成機能がありました。カスタマイズされたパーサの対象となる XML ドキュメントのタイプに応じた WebLogic FastParser を使用できるので、FastParser は、効果的にカスタマイズされたパーサ機能を置き換えます。カスタマイズされたパーサの生成機能はなくなっています。

 


XML ドキュメントの生成

この節では、DOM ドキュメント ツリーから JSP を使用して XML ドキュメントを生成する方法について説明します。

DOM ドキュメント ツリーからの XML の生成

この節では、DOM ドキュメント ツリーから XML ドキュメントを作成する以下の 2 つの方法について説明します。

Apache serialize クラスを使用する場合

DOM ドキュメント ツリーから XML ドキュメントを生成するには、weblogic.apache.xml.serialize クラスを使用すると、DOM ドキュメント ツリーを XML テキストに変換できます。このクラスの詳細については、weblogic.apache.xml.serialize の Javadoc を参照してください。

次のコード例では、このクラスの使い方を示します。

注意: 次の例では、JAXP を使用しない代わりに、Apache 固有の API を直接使用します。

package test;

import java.io.OutputStreamWriter;
import java.util.Date;
import java.text.DateFormat;

import org.w3c.dom.Document;
import org.w3c.dom.Element;

import weblogic.apache.xerces.dom.DocumentImpl;
import weblogic.apache.xml.serialize.DOMSerializer;
import weblogic.apache.xml.serialize.XMLSerializer;

public class WriteXML {

public static void main(String[] args) throws Exception {

// DOM ツリーを作成
Document doc= new DocumentImpl();
Element message = doc.createElement("message");
doc.appendChild(message);
Element text = doc.createElement("text");
text.appendChild(doc.createTextNode("Hello world."));
message.appendChild(text);
Element timestamp = doc.createElement("timestamp");
timestamp.appendChild(
doc.createTextNode(
DateFormat.getDateInstance().format(new Date()))
);
message.appendChild(timestamp);

// DOM を XML テキストにシリアライズして stdout に出力
DOMSerializer xmlSer =
new XMLSerializer(new OutputStreamWriter(System.out),null);
xmlSer.serialize(doc);
}
}

JAXP トランスフォーマ クラスを使用する場合

コード例の次のセグメントで示すように、javax.xml.transform.Transformer クラスを使用して、DOM オブジェクトを XML ストリームにシリアライズできます。

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;

import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import java.io.*;

...

TransformerFactory trans_factory = TransformerFactory.newInstance();
Transformer xml_out = trans_factory.newTransformer();
Properties props = new Properties();
props.put("method", "xml");
xml_out.setOutputProperties(props);
xml_out.transform(new DOMSource(doc), new StreamResult(System.out));

例では、Transformer.transform() は、DOM オブジェクトを XML ストリームに変換します。transform() メソッドは、doc 変数に格納されている DOM ツリーから作成された javax.xml.transform.dom.DOMSource オブジェクトを入力としてとり、それを javax.xml.transform.stream.StreamResult オブジェクトに変換して、結果の XML ドキュメントを標準出力に書き出します。

JSP での XML ドキュメントの生成

通常、JSP は HTML の生成に使用しますが、JSP を使用して XML ドキュメントを生成することもできます。

JSP による XML の生成には、以下のように JSP ページのコンテンツ タイプを設定する必要があります。

<%@ page contentType="text/xml"%>
... XML document

次のコードでは、JSP による XML ドキュメントの生成例を示します。

<?xml version="1.0">

<%@ page contentType="text/xml" import="java.text.DateFormat,java.util.Date" %>

<message>
<text>
Hello World.
</text>
<timestamp>
<%
out.print(DateFormat.getDateInstance().format(new Date()));
%>
</timestamp>
</message>

JSP による XML の生成の詳細については、http://java.sun.com/products/jsp/html/JSPXML.html を参照してください。

 


JAXP による XML データの変換

変換は、XML ドキュメント(変換元)を他の形式(変換結果)に変換することです。通常は、別の XML ドキュメント、HTML、無線用マーク付け言語(Wireless Markup Language : WML)に変換されます。バージョン 1.1 の JAXP では、プラグイン可能の変換が提供されています。つまり、JAXP 準拠の任意のトランスフォーマ エンジンを使用できます。

JAXP は、XML データをさまざまな形式に変換するために以下のインタフェースを提供します。

変換には、入力と出力の多くの組み合わせがあります。

XML ドキュメント変換の完全なサンプルについては、BEA_HOME\samples\examples\xml\xslt ディレクトリを参照してください。BEA_HOME は、WebLogic Server のメイン インストール ディレクトリです。

JAXP による XML ドキュメント変換の例

抜粋した次のコード例では、JAXP を使用して myXMLdoc.xmlmystylesheet.xsl スタイルシートを使用する別の XML ドキュメント変換する方法を示します。

import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamSource;
import javax.xml.transform.stream.StreamResult;

Transformer trans;
TransformerFactory factory = TransformerFactory.newInstance();
String stylesheet = "file://stylesheets/mystylesheet.xsl";
String xml_doc = "file://xml_docs/myXMLdoc.xml";

trans = factory.newTransformer(new StreamSource(stylesheet));
trans.transform(new StreamSource(xml_doc),
new StreamResult(System.out));

DOM ドキュメントを XML ストリームに変換する方法の例については、 JAXP トランスフォーマ クラスを使用する場合を参照してください。

Xalan API から JAXP 1.1 API への変換

アプリケーションに Xalan 固有のコードが含まれている場合、それを JAXP を使用するように変更することをお勧めします。

この節では、Xalan API から JAXP に変換するために XML アプリケーションで必要な変更を簡単に説明します。この節では、よく似た変換タスクを実行する 2 つのコード セグメントを比較します。一方のコード セグメントでは Xalan API を直接使用し、もう一方では JAXP を使用します。

次の Java コード セグメントでは JAXP を使用しています。

import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamSource;
import javax.xml.transform.stream.StreamResult;

...

Transformer trans;
TransformerFactory factory = TransformerFactory.newInstance();
String stylesheet = "file://stylesheets/mystylesheet.xsl";
String xml_doc = "file://xml_docs/myXMLdoc.xml";

trans = factory.newTransformer(new StreamSource(stylesheet));
trans.transform(new StreamSource(xml_doc),
new StreamResult(System.out));

次の Java コード セグメントでは Xalan API を直接使用しています。

/*
* このサンプル コードは、Apache Software Foundation で提供され
* ているコードからの引用。Apache SoftWare Foundation のために多
* くの個人から有志の協力を得て完成した。元のソフトウェア著作権は以下の
* とおり
* copyright (c) 1999, Lotus Development Corporation.,
* http://www.lotus.com。Apache Software Foundation に関する
* 情報については <http://www.apache.org/> を参照
*/

import org.apache.xalan.xslt.XSLTProcessorFactory;
import org.apache.xalan.xslt.XSLTInputSource;
import org.apache.xalan.xslt.XSLTResultTarget;
import org.apache.xalan.xslt.XSLTProcessor;

...

XSLTProcessor processor = XSLTProcessorFactory.getProcessor();

String stylesheet = "file://stylesheets/mystylesheet.xsl";
String xml_doc = "file://xml_docs/myXMLdoc.xml";

processor.process(new XSLTInputSource(xml_doc),
new XSLTInputSource(stylesheet),
new XSLTResultTarget(System.out));

次の表では、前の例で XML ドキュメントの変換に使用した Xalan と JAXPI インタフェースおよびメソッドの名前を示します。この表を基に、既存の Xalan アプリケーションを完全な JAXP アプリケーションに変換してください。

注意: この表は、Xalan と JAXP の間のマッピング全体ではなく、前の例で使用したメイン クラスおよびメソッドのみを示します。各 API の詳細については、Apache および Sun の Web サイト(http://www.apache.org および http://java.sun.com/xml/index.html)を参照してください。

クラスまたはインタフェースの説明

Xalan 1.X

JAXP 1.1

XML ドキュメントの変換に使用するメイン クラス

XSLTProcessor

Transformer

トランスフォーマ オブジェクトの作成に使用するファクトリ クラス

XSLTProcessorFactory

TransformerFactory

ファクトリの新しいインスタンスの作成に使用するメソッド

なし

TransformerFactory.newInstance()

新しいトランスフォーマ オブジェクトの作成に使用するメソッド

XSLTProcessorFactory.getProcessor()

TransformerFactory.newTransformer()

XML ドキュメントまたは XSL スタイルシートなどの変換元を保持するクラス

XSLTInputSource

StreamSource

変換結果を保持するクラス

XSLTResultTarget

StreamResult

変換を実行するメソッド

XSLTProcessor.process()

Transformer.transform()

 


JSP タグによる XML ドキュメントの変換

WebLogic Server では、JSP 内から XSLT トランスフォーマに簡単にアクセスするための小規模な JSP タグ ライブラリが提供されます。このタグを使用すると XML ドキュメントを HTML、WMLなどに変換できますが、必須ではありません。

JSP タグ ライブラリは、メイン タグの x:xsltx:xslt タグの内部で使用できる 2 つのサブタグ(x:stylesheet および x:xml)で構成されます。

XSLT JSP タグ構文

XSLT JSP タグ構文は XML を基にしています。JSP タグは、開始タグ、本文(省略可能)、対応する終了タグで構成されます。開始タグには要素名と属性(省略可能)が含まれます。

次の構文では、WebLogic Server で提供される 3 つの XSLT JSP タグを JSP で使用する方法について示します。属性は省略可能です。また、x:stylesheet および x:xml タグも省略可能です。構文に続く表では、x:xslt および x:stylesheet タグの属性について示します。x:xml タグには属性はありません。

<x:xslt [xml="uri of XML file"]
[media="media type to determine stylesheet"]
[stylesheet="uri of stylesheet"]
<x:xml>In-line XML goes here
</x:xml>
<x:stylesheet [media="media type to determine stylesheet"]
[uri="uri of stylesheet"]
</x:stylesheet>
</x:xslt>

次の表に、x:xslt タグの属性を示します。

x:xslt タグの属性

必須

データ型

説明

xml

いいえ

String

変換する XML ファイルの場所を指定する。場所は、タグが使用される Web アプリケーションのドキュメント ルートへの相対パス。

media

いいえ

String

HTML または WML など、ドキュメントの出力タイプを定義する。このタイプによって、XML ドキュメントの変換時に使用するスタイルシートが決定される。

この属性は、x:xslt タグの本文の内部で x:stylesheet タグで囲まれた media 属性と組み合わせて使用できる。x:xslt タグの media 属性の値は x:stylesheet タグに囲まれた media 属性の値と比較される。値が等しい場合、x:stylesheet タグの uri 属性で指定されたスタイルシートが XML ドキュメントに適用される。

注意 : 同じ x:xslt タグ内で media 属性と stylesheet 属性の両方を設定するとエラーが発生する。

stylesheet

いいえ

String

XML ドキュメントの変換に使用するスタイルシートの場所を指定する。場所は、タグが使用される Web アプリケーションのドキュメント ルートへの相対パス。

注意 : 同じ x:xslt タグ内で media 属性と stylesheet 属性の両方を設定するとエラーが発生する。

次の表に、x:stylesheet タグの属性を示します。

x:stylesheet タグの属性

必須

データ型

説明

media

いいえ

String

HTML または WML など、ドキュメントの出力タイプを定義する。このタイプによって、XML ドキュメントの変換時に使用するスタイルシートが決定される。

この属性は x:xslt タグに囲まれた media 属性と組み合わせて使用する。x:xslt タグの media 属性の値は x:stylesheet タグに囲まれた media 属性の値と比較される。値が等しい場合、x:stylesheet タグの uri 属性で指定されたスタイルシートが XML ドキュメントに適用される。

uri

いいえ

String

media 属性の値が、x:xslt タグに囲まれた media 属性の値と一致する場合に使用するスタイルシートの場所を指定する。場所は、タグが使用される Web アプリケーションのドキュメント ルートへの相対パス。

XSLT JSP タグの使い方

x:xslt タグは本文の有無に関係なく使用でき、属性は省略可能です。この節では、本文や 1 つまたは複数の属性を指定したかどうかによってタグの動作を決定するルールについて説明します。

x:xslt タグが空タグ(本文なし)の場合、以下の説明が適用されます。

警告: 同じ x:xslt タグ内で media 属性と stylesheet 属性の両方を設定するとエラーが発生します。

本文がある XSLT JSP タグは、<x:xml> タグまたは <x:stylesheet> タグを含んでいる場合があります。以下の説明が適用されます。

XSLT JSP タグによる XML ドキュメントの変換

XSLT JSP タグで XML ドキュメントを変換するには、以下の手順を実行します。

  1. BEA Home\wlserver6.0\ext ディレクトリの xmlx.zip ファイルを開いて、xmlx-tags.jar ファイルを Web アプリケーションの \lib ディレクトリに移動します。BEA Home は、WebLogic Server 配布キットをインストールした最上位ディレクトリです。

  2. <taglib> エントリを web.xml ファイルに追加します。次に例を示します。

    <taglib>
    <taglib-uri>xmlx.tld</taglib-uri>
    <taglib-location>/WEB-INF/lib/xmlx-tags.jar</taglib-location>
    </taglib>

  3. タグを使用するには、次の行を JSP ページに追加します。

    <%@ taglib uri="xmlx.tld" prefix="x"%>

  4. トランスフォーマをコンフィグレーションします。以下の手順では、トランスフォーマのコンフィグレーションの一般的な方法を示します。

    1. 次のコード行を入力して xslt.jsp ファイルを作成します。

      <%@ taglib uri="xmlx.tld" prefix="x"%><x:xslt/>

    2. 次のように、xslt.jsp ファイルを web.xml ファイルに登録します。

      <servlet>
      <servlet-name>myxsltinterceptor</servlet-name>
      <jsp-file>xslt.jsp</jsp-file>
      </servlet>
      <servlet-mapping>
      <servlet-name>myxsltinterceptor</servlet-name>
      <url-pattern>/xslt/*</url-pattern>
      </servlet-mapping>

    3. XML、DTD、XSL ドキュメントまたはサーブレットを Web アプリケーションに配置します。

    4. xslt プレフィックスを XML ドキュメントのパス名に追加(たとえば、docs/fred.xmlxslt/docs/fred.xml に変更)し、ドキュメントにアクセスします。web.xml ファイルの <url-pattern> エントリによって、WebLogic Server は、XML ドキュメントで自動的に XSLT トランスフォーマを実行し、ドキュメントにデフォルトのスタイルシートを設定します。

    5. メディア タイプを定義するには、XML ドキュメントのメディア タイプと出力のコンテンツ タイプを指定するコードを JSP に追加します。

    6. メディア タイプを xslt タグに渡して、応答オブジェクトのコンテンツ タイプを設定します。

注意: 他の形の XSLT JSP タグは、スタイルシートが XML ドキュメントで指定されていない場合または XML スタイルシートがインラインで生成される場合に使用されます。

JSP での XSLT JSP タグの使用例

JSP から抜粋した次のコードは、XSLT JSP タグを使用し、JSP を要求するクライアントのタイプにしたがって、XML を HTML または WML に変換する方法を示します。JSP は、クライアントがブラウザの場合は HTML を返し、無線デバイスの場合は WML を返します。

最初に、JSP は HttpServletRequest オブジェクトの getHeader() メソッドを使用して、JSP を要求するクライアントのタイプを識別します。次に、 myMedia変数を wml または html に適切に設定します。JSP で myMedia 変数を html に設定した場合は、content 変数に含まれる XML ドキュメントに html.xsl スタイルシートが適用されます。同様に、JSP で myMedia 変数を wml に設定した場合は、wml.xsl スタイルシートが適用されます。

<%
String clientType = request.getHeader("User-Agent");
// デフォルトは WML クライアント
String myMedia = "wml";

// クライアントが HTML ブラウザの場合

if (clientType.indexOf("Mozilla") != -1) {
myMedia = "http"
}
%>

<x:xslt media="<%=myMedia%>">
<x:xml><%=content%></x:xml>
<x:stylesheet media="html" uri="html.xsl"/>
<x:stylesheet media="wml" uri="wml.xsl"/>
</x:xslt>

 


組み込みトランスフォーマ以外のトランスフォーマの使用

WebLogic Server の XML レジストリ(Administration Console でコンフィグレーション)では、以下の項目をコンフィグレーションします。

XML レジストリで変換オプションをコンフィグレーションする手順については、 XML パーサおよびトランスフォーマのコンフィグレーション タスクを参照してください。

 

back to top previous page next page