ヘッダーをスキップ
Oracle® Fusion Middleware Oracle WebLogic Server XML プログラマーズ ガイド
11g リリース 1 (10.3.1)
B55533-01
 

目次
目次

戻る
戻る
 
次へ
次へ
 

5 高度な XML API の使い方

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

Java API for XML Registries (JAXR) API の使い方

(http://java.sun.com/xml/jaxr/index.jsp) の 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 (http://java.sun.com/xml/jaxr/index.jsp) Web サイトを参照してください。

WebLogic XPath API の使い方

WebLogic XPath API には、DOMXMLInputStream、または 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 を参照してください。

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); // 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 クラスを使用する場合の主な手順

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

  1. 次のサンプル コードように、XML ドキュメントから org.w3c.dom.Document オブジェクトを作成します。

    String file = "purchaseorder.xml";
    DocumentBuilderFactory factory =
       DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    Document doc = builder.parse(file);
    
  2. DOM に対して評価する XPath 式を表す DOMXPath オブジェクトを作成します。

    次の例では、発注書内の項目数をカウントする XPath 式を示します。

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

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

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

    次の例では、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 リファレンス情報については、『Oracle Fusion Middleware Oracle WebLogic Server API リファレンス』の「weblogic.xml.xpath」 を参照してください。

StreamXPath クラスの使い方

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

StreamXPath クラスの使用例

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

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

  1. XMLInputStream に対して評価する XPath 式を表す StreamXPath オブジェクトを作成します。

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

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

    StreamXPath openingPrices = new   StreamXPath("stock_quotes/stock_quote/price[@type='open']");
    
  2. XPathStreamFactory を作成します。このファクトリ クラスを使用して、XMLInputStream に対して評価する StreamXPath オブジェクトのセットを指定し、XPath に一致するものが見つかった場合にコールバックを登録するためのオブザーバ (XPathStreamObserver インタフェースを使用する) を作成します。次の例では、XPathStreamFactory の作成方法を示します。

    XPathStreamFactory factory = new XPathStreamFactory();
    
  3. 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) {} 
     }
    );
    
  4. XML ドキュメントから XMLInputStream を作成します。

    String file = "stocks.xml";
    
    XMLInputStream sourceStream =
        XMLInputStreamFactory.newInstance().newInputStream(new File(file));
    
  5. XPathStreamFactorycreateStream() メソッドを使用して、元の XMLInputStream に対して XPath のマッチングを実行する新しい XMLInputStream を作成します。

     XMLInputStream matchingStream =
        factory.createStream(sourceStream);
    
  6. 新しい XMLInputStream を反復処理します。反復処理中に XPath に一致するものが見つかった場合、登録済みのオブザーバに通知されます。

    while(matchingStream.hasNext()) {
      XMLEvent event = matchingStream.next();
    }
    

WebLogic XPath API の API リファレンス情報については、『Oracle Fusion Middleware Oracle WebLogic Server API リファレンス』の 「weblogic.xml.xpath」 を参照してください。