8

次のようなかなり単純な XQuery と Groovy コードがあります。Xquery コード:

declare variable $criteria as element(criteria) external ;

<scopedInterventions>{
$criteria/equals/field
}</scopedInterventions>

それを呼び出そうとしているテストコードは次のとおりです

def uri = new URI("xcc://admin:admin@localhost:8001")

def contentSource = ContentSourceFactory.newContentSource(uri)

def request = session.newModuleInvoke("ourQuery.xqy")
def criteria =
"""<criteria>
<equals>
<field>status</field>
<value>draft</value>
</equals>
</criteria>
"""

request.setNewVariable("criteria",ValueType.ELEMENT, criteria);

session.submitRequest(request).asString()
}

実行時に次のエラーが発生します。

原因: com.marklogic.xcc.exceptions.XQueryException: XDMP-LEXVAL: xs:QName("element()") -- 無効な字句値 "element()" [セッション: user=admin, cb={default} [ ContentSource: user=admin, cb={none} [provider: address=localhost/127.0.0.1:9001, pool=1/64]]] [Client: XCC/5.0-3, Server: XDBC/5.0-3] expr : com.marklogic.xcc.impl.handlers.ServerExceptionHandler.handleResponse(ServerExceptionHandler.java:34) の xs:QName("element()") com.marklogic.xcc.impl.handlers.EvalRequestController.serverDialog(EvalRequestController.java) の:83) com.marklogic.xcc.impl.handlers.AbstractRequestController.runRequest(AbstractRequestController.java:84) で com.marklogic.xcc.impl.SessionImpl.submitRequestInternal(SessionImpl.java:373) で com.marklogic.xcc. impl.SessionImpl.submitRequest(SessionImpl.java:356) com.zynx.galen.dataaccess.MarkLogicUtilities.executeQueryWithMultipleXMLParameters(MarkLogicUtilities.groovy:52) で com.zynx.galen.repositories.ScopedInterventionService.getScopedInterventionsByCriteria(ScopedInterventionService.groovy:20) ... 1 以上

どんな助けでも大歓迎です。

4

1 に答える 1

7

http://docs.marklogic.com/javadoc/xcc/overview-summary.htmlに答えがあると思います:

クエリで変数を渡す

変数は Request オブジェクトにバインドできます。Session.submitRequest(Request) を使用して実行要求がサーバーに発行されると、現在 Request オブジェクトにバインドされているすべての変数が送信され、サーバーの実行コンテキストで外部変数として定義されます。

XCC を使用すると、XdmNodes と XdmSequences、および XdmAtomic 値を作成できます。ただし、初期の XCC リリースでは、このタイプの値は、MarkLogic サーバーがまだ受け入れられないため、外部変数としてバインドされない場合があります。この機能は、将来のリリースで予定されています。

はサポートされていないためXdmNode、そのサブクラス XdmElement もサポートされていないと思います。したがって、これらのクラスは、リクエストではなくレスポンスにのみ役立ちます。エラーメッセージは改善される可能性があります。

を使用して XML 文字列を渡し、XQuery モジュールsetNewStringVariableを呼び出すことができます。は document-node を返すため、XPath ステップはそのルート要素を生成することにxdmp:unquote注意してください。xdmp:unquote/*

declare variable $xml-string as xs:string external ;
declare variable $criteria as element(criteria) := xdmp:unquote($xml-string)/* ;
....
于 2012-11-16T21:30:26.160 に答える