| Oracle® Fusion Middleware Oracle WebLogic Server XML プログラマーズ ガイド 11g リリース 1 (10.3.1) B55533-01 |
|
![]() 戻る |
![]() 次へ |
以下の節では、高度な XML API の使い方に関する情報を提供します。
(http://java.sun.com/xml/jaxr/index.jsp) の Java API for XML Registries (JAXR) API は、さまざまなレジストリ、特に Web サービス アプリケーションで使用される XML レジストリにアクセスするための共通の標準 Java API を提供しています。
抽象レベルでは、レジストリは、パートナーシップを組んでいる二者の共同作業を助けるニュートラルな第三者です。レジストリは、通常は Web ベースのリソースの形式で、共有リソースとして二者が利用できるものです。これにより両者が Web サービスをパブリッシュ、検索、および使用できるようになるので、レジストリは、どの Web サービス アーキテクチャでも中核となる要素です。
レジストリには、以下の機能があります。
電子的なイエロー ページ
レジストリは、Web サービス プロバイダが自社の製品を宣伝し、Web サービス コンシューマがその製品を検索できる独立したオンライン情報交換サービスを提供します。
レジストリは、業界、地域、販売している製品など、任意かつ柔軟な方法でこれらの Web サービスを分類できます。
比較的静的なデータのデータベース
レジストリは、データベースと同様にデータとメタデータを格納します。格納するデータの種類には、次のものがあります。
特定のビジネス プロトコルを XML フォーマットで記述した協調的ビジネス プロセスの説明。
協調的ビジネス プロセスに参加している二者。
協調的ビジネス プロセスの間に交換される XML ドキュメントを記述する XML スキーマ。
実質的な側面を言えば、レジストリを使用すると、アプリケーションは、比較的静的なデータを信頼性の高い方法で格納し、そのデータを他のアプリケーションと簡単に共有できます。
また、価格変更や、値引き、販促などの動的なコンテンツを二者間でやり取りする際にレジストリを利用することも可能。
WebLogic Server では、JAXR 仕様が完全に実装されています。JAXR API を使用すると、レジストリにアクセスする JAXR クライアントを作成したり、自分でレジストリを作成したりできます。
JAXR API の使用の詳細については、Java Web Services (http://java.sun.com/xml/jaxr/index.jsp) Web サイトを参照してください。
WebLogic XPath API には、DOM、XMLInputStream、または XMLOutputStream として表現されるドキュメントに対して XPath のマッチングを実行するために必要となる、すべてのクラスが入っています。この API は、指定したパターンに適合する XML ドキュメント内の XML 要素のサブセットを識別する場合に使用します。
WebLogic XPath API の API リファレンス情報については、『Oracle Fusion Middleware Oracle WebLogic Server API リファレンス』の (weblogic.xml.xpath) および (http://java.sun.com/xml/jaxr/index.jsp) Javadoc を参照してください。
この節では、DOM として表現される XML ドキュメントに対して XPath のマッチングを実行するために、WebLogic XPath API の DOMXPath クラスを使用する方法について説明します。最初に例を示し、次にその例で使われている主な手順について説明します。
この節の最後に示すサンプル Java プログラムでは、次の XML ドキュメントをマッチングに使用しています。
<?xml version='1.0' encoding='us-ascii'?> <!-- "Purchaseorder". --> <purchaseorder department="Sales" date="01-11-2001" raisedby="Pikachu" > <item ID="101"> <title>Laptop</title> <quantity>5</quantity> <make>Dell</make> </item> <item ID="102"> <title>Desktop</title> <quantity>15</quantity> <make>Dell</make> </item> <item ID="103"> <title>Office Software</title> <quantity>10</quantity> <make>Microsoft</make> </item> </purchaseorder>
Java コード例は次のとおりです。
package examples.xml.xpath;
import java.io.IOException;
import java.util.Iterator;
import java.util.Set;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.xml.sax.SAXException;
import weblogic.xml.xpath.DOMXPath;
import weblogic.xml.xpath.XPathException;
/**
* このクラスは、DOMXPath API の使い方を示す
* 簡単な例。
*
* @author Copyright (c) 2002 by BEA Systems, Inc. All Rights Reserved.
*/
public abstract class DOMXPathExample {
public static void main(String[] ignored)
throws XPathException, ParserConfigurationException,
SAXException, IOException
{
// ドキュメントの DOM 表現の作成
String file = "purchaseorder.xml";
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true); // doesn't matter for this example
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(file);
// create some instances of DOMXPath to evaluate against the
// document.
DOMXPath totalItems = // 項目数のカウント
new DOMXPath("count(purchaseorder/item)");
DOMXPath atLeast10 = // 数量 >= 10 の項目のタイトル
new DOMXPath("purchaseorder/item[quantity >= 10]/title");
// ドキュメントに対して項目を評価する
double count = totalItems.evaluateAsNumber(doc);
Set nodeset = atLeast10.evaluateAsNodeset(doc);
// 結果を出力
System.out.println(file+" contains "+count+" total items.");
System.out.println("The following items have quantity >= 10:");
if (nodeset != null) {
Iterator i = nodeset.iterator();
while(i.hasNext()) {
Node node = (Node)i.next();
System.out.println(" "+node.getNodeName()+
": "+node.getFirstChild().getNodeValue());
}
}
// この時点で、他のドキュメントに対する
// atLeast10 および totalItems の評価を引き続き使用できる
}
}
次の手順では、DOMXPath クラスを使用して、DOM で表現される XML ドキュメントに対して XPath のマッチングを実行するための主な手順について説明します。
次のサンプル コードように、XML ドキュメントから org.w3c.dom.Document オブジェクトを作成します。
String file = "purchaseorder.xml"; DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(file);
DOM に対して評価する XPath 式を表す DOMXPath オブジェクトを作成します。
次の例では、発注書内の項目数をカウントする XPath 式を示します。
DOMXPath totalItems =
new DOMXPath("count(purchaseorder/item)");
次の例では、数量が 10 以上の項目を持つタイトルを返す XPath 式を示します。
DOMXPath atLeast10 =
new DOMXPath("purchaseorder/item[quantity >= 10]/title");
DOMXPath.evaluateAsXXX() メソッドの 1 つを使用して、XPath 式を評価します。XXX は、Boolean、Nodeset、Number、String といった戻り値のデータ型を表します。
次の例では、evaluateAsNumber() メソッドを使用して totalItems XPath 式を評価する方法を示します。
double count = totalItems.evaluateAsNumber(doc); System.out.println(file+" contains "+count+" total items.");
次の例では、evaluateAsNodeset() メソッドを使用して、標準的な方法で反復処理できる org.w3c.dom.Nodes の Set を返す方法を示します。
Set nodeset = atLeast10.evaluateAsNodeset(doc);
System.out.println("The following items have quantity >= 10:");
if (nodeset != null) {
Iterator i = nodeset.iterator();
while(i.hasNext()) {
Node node = (Node)i.next();
System.out.println(" "+node.getNodeName()+
": "+node.getFirstChild().getNodeValue());
}
}
WebLogic XPath API の API リファレンス情報については、『Oracle Fusion Middleware Oracle WebLogic Server API リファレンス』の「weblogic.xml.xpath」 を参照してください。
次の例では、WebLogic XPath API の StreamXPath クラスを使用して、XMLInputStream に対して XPath マッチングを実行する方法を示します。最初に例を示し、次にその例で使われている主な手順について説明します。例では XMLInputStream に対してマッチングを実行する方法のみを示しますが、同様のコードを使用すれば XMLOutputStream に対してマッチングを実行できます。
この節の最後に示すサンプル Java プログラムでは、次の XML ドキュメントをマッチングに使用しています。
<?xml version='1.0' encoding='us-ascii'?> <!-- "Stock Quotes". --> <stock_quotes> <stock_quote symbol='BEAS'> <when> <date>01/27/2001</date> <time>3:40PM</time> </when> <price type="ask" value="65.1875"/> <price type="open" value="64.00"/> <price type="dayhigh" value="66.6875"/> <price type="daylow" value="64.75"/> <change>+2.1875</change> <volume>7050200</volume> </stock_quote> <stock_quote symbol='MSFT'> <when> <date>01/27/2001</date> <time>3:40PM</time> </when> <price type="ask" value="55.6875"/> <price type="open" value="50.25"/> <price type="dayhigh" value="56"/> <price type="daylow" value="52.9375"/> <change>+5.25</change> <volume>64282200</volume> </stock_quote> </stock_quotes>
サンプルの Java コードは次のとおりです。
package examples.xml.xpath;
import java.io.File;
import weblogic.xml.stream.Attribute;
import weblogic.xml.stream.StartElement;
import weblogic.xml.stream.XMLEvent;
import weblogic.xml.stream.XMLInputStream;
import weblogic.xml.stream.XMLInputStreamFactory;
import weblogic.xml.stream.XMLStreamException;
import weblogic.xml.xpath.StreamXPath;
import weblogic.xml.xpath.XPathException;
import weblogic.xml.xpath.XPathStreamFactory;
import weblogic.xml.xpath.XPathStreamObserver;
/**
* このクラスは、StreamXPath API の使い方を示す
* 簡単な例。
*
* @author Copyright (c) 2002 by BEA Systems, Inc. All Rights Reserved.
*/
public abstract class StreamXPathExample {
public static void main(String[] ignored)
throws XPathException, XMLStreamException
{
// このストリームに対して照合する 2 つの XPath 用に StreamXPath の
// インスタンスを作成する。
StreamXPath symbols =
new StreamXPath("stock_quotes/stock_quote");
StreamXPath openingPrices =
new StreamXPath("stock_quotes/stock_quote/price[@type='open']");
// XPathStreamFactory を作成する。
XPathStreamFactory factory = new XPathStreamFactory();
// 2 つの XPathStreamObserver を作成およびインストールする。ここでは、
// 無名クラスを使用して、
// コールバックを受け取ったときにメッセージを出力する。指定したオブザーバは複数の XPath を監視でき、
// 指定した XPath は複数のオブザーバで
// 監視できる。
factory.install(symbols, new XPathStreamObserver () {
public void observe(XMLEvent event) {
System.out.println("Matched a quote: "+event);
}
public void observeAttribute(StartElement e, Attribute a) {} //無視する
public void observeNamespace(StartElement e, Attribute a) {} //無視する
});
// 開始要素と終了要素の両方に一致するものを見つける。
// これは空要素の <price/> の場合であっても同様。
// これは基底のストリーミング パーサの動作。
factory.install(openingPrices, new XPathStreamObserver () {
public void observe(XMLEvent event) {
System.out.println("Matched an opening price: "+event);
}
public void observeAttribute(StartElement e, Attribute a) {} //無視する
public void observeNamespace(StartElement e, Attribute a) {} //無視する
});
// ドキュメントの XMLInputStream を取得する
String file = "stocks.xml";
XMLInputStream sourceStream = XMLInputStreamFactory.newInstance().
newInputStream(new File(file));
// ファクトリを使用して、ソース ストリームに対して XPath のマッチングを実行する
// XMLInputStream を作成する
XMLInputStream matchingStream = factory.createStream(sourceStream);
// ストリームを反復処理する
System.out.println("Matching against xml stream from "+file);
while(matchingStream.hasNext()) {
// この例ではイベントに関して何もしない
// ファクトリにインストールした XPathStreamObserver インスタンスが
// 該当するイベントのコールバックを受け取る
XMLEvent event = matchingStream.next();
}
}
}
次の手順では、StreamXPath クラスを使用して、XMLInputStream として表現される XML ドキュメントに対して XPath のマッチングを実行するための主な手順を説明します。
XMLInputStream に対して評価する XPath 式を表す StreamXPath オブジェクトを作成します。
StreamXPath symbols =
new StreamXPath("stock_quotes/stock_quote");
次の例では、開始値を使用して株価を検索する XPath 式を示します。
StreamXPath openingPrices = new StreamXPath("stock_quotes/stock_quote/price[@type='open']");
XPathStreamFactory を作成します。このファクトリ クラスを使用して、XMLInputStream に対して評価する StreamXPath オブジェクトのセットを指定し、XPath に一致するものが見つかった場合にコールバックを登録するためのオブザーバ (XPathStreamObserver インタフェースを使用する) を作成します。次の例では、XPathStreamFactory の作成方法を示します。
XPathStreamFactory factory = new XPathStreamFactory();
XPathStreamFactory.install() メソッドを使用し、1 番目の StreamXPath パラメータで XPath 式を、2 番目の XPathStreamObserver パラメータでオブザーバを指定して、オブザーバを作成およびインストールします。次の例は、無名クラスを使用して XPathStreamObserver インタフェースを実装する方法を示します。observe() メソッドの実装は、コールバックを受け取ったときにメッセージの出力だけを行います。例では、observeAttribute() メソッドと observeNamespace() メソッドは何もしません。
factory.install(symbols, new XPathStreamObserver () {
public void observe(XMLEvent event) {
System.out.println("Matched a quote: "+event);
}
public void observeAttribute(StartElement e, Attribute a) {}
public void observeNamespace(StartElement e, Attribute a) {}
}
);
XML ドキュメントから XMLInputStream を作成します。
String file = "stocks.xml"; XMLInputStream sourceStream = XMLInputStreamFactory.newInstance().newInputStream(new File(file));
XPathStreamFactory の createStream() メソッドを使用して、元の XMLInputStream に対して XPath のマッチングを実行する新しい XMLInputStream を作成します。
XMLInputStream matchingStream = factory.createStream(sourceStream);
新しい XMLInputStream を反復処理します。反復処理中に XPath に一致するものが見つかった場合、登録済みのオブザーバに通知されます。
while(matchingStream.hasNext()) {
XMLEvent event = matchingStream.next();
}
WebLogic XPath API の API リファレンス情報については、『Oracle Fusion Middleware Oracle WebLogic Server API リファレンス』の 「weblogic.xml.xpath」 を参照してください。