コレクション・リゾルバーの登録

XCollectionResolver インターフェースの実装を XDynamicContext に登録できます。

手順

コレクション・リゾルバーを動的コンテキストに登録します。

XDynamicContext に登録された XCollectionResolver 実装は、fn:collection メソッドへの 呼び出し時に提供される URI に関連付けられたノードのコレクションを取得するために、 実行時に使用されます。 コレクション・リゾルバーを XDynamicContext に登録しない場合、fn:collection への 呼び出し結果はリカバリー可能エラーとなり、空のシーケンスがコレクションに使用されます。

コレクション・リゾルバー と fn:collection 関数は、文書 URI を解決するものではないことに注意してください。 この場合は、ソース・リゾルバーと fn:doc 関数を使用する必要があります。

以下に、コレクション・リゾルバーを使用する基本的な例を示します。
XFactory factory = XFactory.newInstance();

// Prepare the XPath expression
XPathExecutable executable = factory.prepareXPath("count(collection('typeA-typeB'))"
           
// Register the collection resolver with the dynamic context
XCollectionResolver collectionResolver = new ACollectionResolver(factory);
XDynamicContext dynamicContext = factory.newDynamicContext();
dynamicContext.setCollectionResolver(collectionResolver);

// Execute the XPath expression
XSequenceCursor cursor = executable.execute(dynamicContext);
以下は、XCollectionResolver 実装の基本的な例です。
public class ACollectionResolver implements XCollectionResolver {
  
    private XFactory m_factory;
   
    public ACollectionResolver(XFactory factory) {
        m_factory = factory;
    }
   
    public XSequenceCursor getCollection(String uri, String base) {
       
        // Get the default collection
        if (uri.equals("")) {
            return getCollection("default", base);
        }
       
        // Get the requested collection
        ArrayList<XItemView> list = new ArrayList<XItemView>();
        StringTokenizer tokenizer = new StringTokenizer(uri, "-");
          XSequenceCursor cursor = null;
          while (tokenizer.hasMoreTokens()) {
              String token = tokenizer.nextToken();
              XSequenceCursor temp = getNodes(new StreamSource("collections.xml"), "/doc/" + token);
              if (cursor == null) {
                  cursor = temp;
              } else {
                  cursor = cursor.append(temp);
              }
          }
        return cursor;
    }
   
     private XSequenceCursor getNodes(Source source, String expression) {
         XPathExecutable executable = m_factory.prepareXPath(expression);
         XSequenceCursor cursor = executable.execute(source);
         return cursor;
     }
   
}

トピックのタイプを示すアイコン タスク・トピック



タイム・スタンプ・アイコン 最終更新: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=txml_resolvers_collection
ファイル名:txml_resolvers_collection.html