2016-01-12 20 views

答えて

6

あなたはおそらくオプションの引数を受け入れる、xdmp:evalを使用する必要がありますし、そこにデータベースを指定することができます。

xdmp:eval("cts:search(...)", (), 
    <options xmlns="xdmp:eval"> 
    <database>{xdmp:database("otherdb")}</database> 
    </options>) 
+1

これは良い答えはありませんが、それはおそらく唯一の正しいものです。私が知っている、照会するDBを指定する唯一のオプションは 'xdmp:eval'ファミリー、' xdmp:invoke'ファミリー、 'xdmp:spawn'ファミリーです。 – CtheGood

2

が最低レベルで、xdmp:evalは、何が起こるか本当に最もおそらくインラインで書くのが最も簡単なクリーンなオプションはxdmp:invoke-functionであり、その中で無名関数を使うこともできます。この組み合わせにより、既存の変数を自然に使用することができます。さらに進めたい場合は、xdmp:apply(柔軟性を高めるため)を参照してください。

また、MarkLogic 8には、という新しいトランザクションタイプがあります。結果を待つ間(スポーンなし)に関数をインラインで呼び出すようにクリーンアップし、それ自身のトランザクションに持ちます。正しく使用されると、更新/挿入の結果は呼び出しコードでも使用できます。

のサンプルコードは、以下のCTSを適用します。他のデータベースに対する検索と は当然メインコード内の変数を使用しています:

xquery version "1.0-ml"; 
declare namespace html = "http://www.w3.org/1999/xhtml"; 

let $query := cts:word-query("foo") 
let $start := 1 
let $end := 3 
let $database-name := "your-other-database-name-here" 

return 
    xdmp:invoke-function(
     function() { 
      cts:search(doc(), $query)[$start to $end]   
     }, 
     <options xmlns="xdmp:eval"> 
     <database>{xdmp:database($database-name)}</database> 
     </options>) 
関連する問題