|
以下の節では、高度な XML API の使い方に関する情報を提供します。
『Java API for XML Registries (JAXR) API』では、さまざまなレジストリ、特に Web サービス アプリケーションで使用される XML レジストリにアクセスするための共通の標準 Java API が提供されています。
抽象レベルでは、レジストリは、パートナーシップを組んでいる二者の共同作業を助けるニュートラルな第三者です。レジストリは、通常は Web ベースのリソースの形式で、共有リソースとして二者が利用できるものです。これにより両者が Web サービスをパブリッシュ、検索、および使用できるようになるので、レジストリは、どの Web サービス アーキテクチャでも中核となる要素です。
WebLogic Server では、JAXR 仕様が完全に実装されています。JAXR API を使用すると、レジストリにアクセスする JAXR クライアントを作成したり、自分でレジストリを作成したりできます。
JAXR API の使用の詳細については、Java Web Services Web サイトを参照してください。
WebLogic XPath API には、DOM
、XMLInputStream
、または XMLOutputStream
として表現されるドキュメントに対して XPath のマッチングを実行するために必要となる、すべてのクラスが入っています。この API は、指定したパターンに適合する XML ドキュメント内の XML 要素のサブセットを識別する場合に使用します。
WebLogic XPath API の API リファレンス情報については、weblogic.xml.xpath の 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>
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); // この例ではあまり関係がない
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(file);
// ドキュメントに対して評価するための DOMXPath の
// インスタンスを作成する
DOMXPath totalItems = // 項目数のカウント
new DOMXPath("count(purchaseorder/item)");
DOMXPath atLeast10 = // titles of items with quantity >= 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 のマッチングを実行するための主な手順について説明します。
org.w3c.dom.Document
オブジェクトを作成します。String file = "purchaseorder.xml";
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(file);
DOMXPath
オブジェクトを作成します。
次の例では、発注書内の項目数をカウントする XPath 式を示します。
DOMXPath totalItems =
new DOMXPath("count(purchaseorder/item)");
次の例では、数量が 10 以上の項目を持つタイトルを返す XPath 式を示します。
DOMXPath atLeast10 =
new DOMXPath("purchaseorder/item[quantity >= 10]/title");
DOMXPath.evaluateAs
XXX
()
メソッドの 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 リファレンス情報については、weblogic.xml.xpath の Javadoc を参照してください。
次の例では、WebLogic XPath API の StreamXPath
クラスを使用して、XMLInputStream
に対して XPath マッチングを実行する方法を示します。最初に例を示し、次にその例で使われている主な手順について説明します。例では XMLInputStream
に対してマッチングを実行する方法のみを示しますが、同様のコードを使用すれば XMLOutputStream
に対してマッチングを実行できます。
この節の最後に示すサンプル Java プログラムでは、次の XML ドキュメントをマッチングに使用しています。
<?xml version='1.0' encoding='us-ascii'?>
<!-- 「株価」-->
<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>
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
オブジェクトを作成します。
次の例では、XML ドキュメントで株価を検索する XPath 式を示します。
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) {}
}
);
XMLInputStream
を作成します。String file = "stocks.xml";
XMLInputStream sourceStream =
XMLInputStreamFactory.newInstance().newInputStream(new File(file));
XPathStreamFactory
の createStream()
メソッドを使用して、元の XMLInputStream
に対して XPath のマッチングを実行する新しい XMLInputStream
を作成します。XMLInputStream matchingStream =
factory.createStream(sourceStream);
while(matchingStream.hasNext()) {
XMLEvent event = matchingStream.next();
}
WebLogic XPath API の API リファレンス情報については、weblogic.xml.xpath の Javadoc を参照してください。