WebLogic XML プログラマーズ ガイド

     前  次    新しいウィンドウで目次を開く     
ここから内容の開始

高度な XML API の使い方

以下の節では、高度な XML API の使い方に関する情報を提供します。

 


Java API for XML Registries (JAXR) 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 の使い方

WebLogic XPath API には、DOMXMLInputStream、または XMLOutputStream として表現されるドキュメントに対して XPath のマッチングを実行するために必要となる、すべてのクラスが入っています。この API は、指定したパターンに適合する XML ドキュメント内の XML 要素のサブセットを識別する場合に使用します。

WebLogic XPath API の API リファレンス情報については、weblogic.xml.xpath の Javadoc を参照してください。

DOMXPath クラスの使い方

この節では、DOM として表現される XML ドキュメントに対して XPath のマッチングを実行するために、WebLogic XPath API の DOMXPath クラスを使用する方法について説明します。最初に例を示し、次にその例で使われている主な手順について説明します。

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); // この例ではあまり関係がない
    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 クラスを使用する場合の主な手順

次の手順では、DOMXPath クラスを使用して、DOM で表現される XML ドキュメントに対して XPath のマッチングを実行するための主な手順について説明します。

  1. 次のサンプル コードように、XML ドキュメントから org.w3c.dom.Document オブジェクトを作成します。
  2. String file = "purchaseorder.xml";
    DocumentBuilderFactory factory =
    DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    Document doc = builder.parse(file);
  3. DOM に対して評価する XPath 式を表す DOMXPath オブジェクトを作成します。
  4. 次の例では、発注書内の項目数をカウントする XPath 式を示します。

     DOMXPath totalItems = 
    new DOMXPath("count(purchaseorder/item)");

    次の例では、数量が 10 以上の項目を持つタイトルを返す XPath 式を示します。

     DOMXPath atLeast10 = 
    new DOMXPath("purchaseorder/item[quantity >= 10]/title");
  5. DOMXPath.evaluateAsXXX() メソッドの 1 つを使用して、XPath 式を評価します。XXX は、BooleanNodesetNumberString といった戻り値のデータ型を表します。
  6. 次の例では、evaluateAsNumber() メソッドを使用して totalItems XPath 式を評価する方法を示します。

     double count = totalItems.evaluateAsNumber(doc);
    System.out.println(file+" contains "+count+" total items.");

    次の例では、evaluateAsNodeset() メソッドを使用して、標準的な方法で反復処理できる org.w3c.dom.NodesSet を返す方法を示します。

     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 を参照してください。

StreamXPath クラスの使い方

次の例では、WebLogic XPath API の StreamXPath クラスを使用して、XMLInputStream に対して XPath マッチングを実行する方法を示します。最初に例を示し、次にその例で使われている主な手順について説明します。例では XMLInputStream に対してマッチングを実行する方法のみを示しますが、同様のコードを使用すれば XMLOutputStream に対してマッチングを実行できます。

StreamXPath クラスの使用例

この節の最後に示すサンプル 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>

サンプルの 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 クラスを使用する場合の主な手順

次の手順では、StreamXPath クラスを使用して、XMLInputStream として表現される XML ドキュメントに対して XPath のマッチングを実行するための主な手順を説明します。

  1. XMLInputStream に対して評価する XPath 式を表す StreamXPath オブジェクトを作成します。
  2. 次の例では、XML ドキュメントで株価を検索する XPath 式を示します。

    StreamXPath symbols =
    new StreamXPath("stock_quotes/stock_quote");

    次の例では、開始値を使用して株価を検索する XPath 式を示します。

    StreamXPath openingPrices = new   StreamXPath("stock_quotes/stock_quote/price[@type='open']");
  3. XPathStreamFactory を作成します。このファクトリ クラスを使用して、XMLInputStream に対して評価する StreamXPath オブジェクトのセットを指定し、XPath に一致するものが見つかった場合にコールバックを登録するためのオブザーバ (XPathStreamObserver インタフェースを使用する) を作成します。次の例では、XPathStreamFactory の作成方法を示します。
  4. XPathStreamFactory factory = new XPathStreamFactory();
  5. XPathStreamFactory.install() メソッドを使用し、1 番目の StreamXPath パラメータで XPath 式を、2 番目の XPathStreamObserver パラメータでオブザーバを指定して、オブザーバを作成およびインストールします。次の例は、無名クラスを使用して XPathStreamObserver インタフェースを実装する方法を示します。observe() メソッドの実装は、コールバックを受け取ったときにメッセージの出力だけを行います。例では、observeAttribute() メソッドと observeNamespace() メソッドは何もしません。
  6. 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) {}
    }
    );
  7. XML ドキュメントから XMLInputStream を作成します。
  8. String file = "stocks.xml";
    XMLInputStream sourceStream =
    XMLInputStreamFactory.newInstance().newInputStream(new File(file));
  9. XPathStreamFactorycreateStream() メソッドを使用して、元の XMLInputStream に対して XPath のマッチングを実行する新しい XMLInputStream を作成します。
  10.  XMLInputStream matchingStream =
    factory.createStream(sourceStream);
  11. 新しい XMLInputStream を反復処理します。反復処理中に XPath に一致するものが見つかった場合、登録済みのオブザーバに通知されます。
  12. while(matchingStream.hasNext()) {
    XMLEvent event = matchingStream.next();
    }

WebLogic XPath API の API リファレンス情報については、weblogic.xml.xpath の Javadoc を参照してください。


ページの先頭       前  次