1

Xdbc データベース接続を作成し、サンプル プログラムを実行しましたが、成功しました。クラスを作成markLogics.javaし、jar ファイルをインポートしましたmarklogic-xcc-4.0.1.jar

コードのスナップショット:

package com.marklogic;
import java.net.URI;
import java.net.URISyntaxException;
import com.marklogic.xcc.ContentSource;
import com.marklogic.xcc.ContentSourceFactory;
import com.marklogic.xcc.Session;
import com.marklogic.xcc.Request;
import com.marklogic.xcc.ResultSequence;
import com.marklogic.xcc.exceptions.RequestException;
import com.marklogic.xcc.exceptions.XccConfigException;**

class markLogics {
public static void main(String args[]) throws XccConfigException,
        RequestException {
    URI uri = null;
    try {
        uri = new URI("xcc://user:pwd@localhost:8008/Marklogics");
        // uri=new URI("");
    } catch (URISyntaxException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    String queryResult = "";
    ContentSource contentSource = ContentSourceFactory
            .newContentSource(uri);
    Session session = contentSource.newSession();
    String queryStr = "let $uri := xdmp:get-request-field(\"uri\")"
            + "return"
            + "if (empty($uri) or $uri eq\"\") then"
            + "("
            + " xdmp:set-response-content-type(\"\text/html\"),"
            + "<ul>"
            + "{for $i in collection()"
            + "let $doc := document-uri($i)    return"
            + "<li>"
            + "<a href="
            + "\"view.xqy?uri={xdmp:url-encode($doc)}\""
            + " >{$doc}</a></li>"
            + "}</ul>)"
            + "else (   xdmp:set-response-content-type(\"text/xml\"),   if (empty(doc($uri)))"
            + "then <error>No content" + "</error>    else doc($uri)  )";
    // String
    // queryStr="let $uri := xdmp:get-request-field(\"uri\")for $v in $doc//uri    $a in $doc//play";
    Request request = session.newAdhocQuery(queryStr);
    try {
        ResultSequence rs = session.submitRequest(request);
        System.out.println(rs.asString());
    } catch (Exception e) {
        e.printStackTrace();
    }
    session.close();
}

}

コードの実行中に、その例外が発生します:

com.marklogic.xcc.exceptions.XQueryException: XDMP-UNEXPECTED: (err:XPST0003) Unexpected token syntax error, unexpected QName_on line 1
expr:
    at com.marklogic.xcc.impl.handlers.ServerExceptionHandler.handleResponse(ServerExceptionHandler.java:31)
    at com.marklogic.xcc.impl.handlers.EvalRequestController.serverDialog(EvalRequestController.java:68)
    at com.marklogic.xcc.impl.handlers.AbstractRequestController.runRequest(AbstractRequestController.java:72)
    at com.marklogic.xcc.impl.SessionImpl.submitRequest(SessionImpl.java:280)
    at com.marklogic.markLogics.main(test.java:34)

理解:

クエリでの私の理解によるとview.xqy、例外をスローしているファイルを使用しています。

アプローチは次のとおりです:プロジェクトのビルドパスに追加してアーカイブすることでこれを克服するために、次のアプローチを試みましたが、view.xqy役に立ちません。

しゃっくりを克服するためのガイダンスを教えていただけますか?

4

2 に答える 2

1

現時点では、あなたの問題はJava文字列の連結に関係していると思われます.たとえば、queryStr. の各コンポーネントは、queryStrおそらく空白で開始または終了する必要があります。

ただし、一歩下がって、Java の代わりにネイティブ HTTP を使用する、より単純なアプローチを試す方がよい場合があります。リンクのリストをレンダリングするインデックス ページを使用して、Web アプリケーションを構築しようとしているように見えます。おそらく、純粋な HTTP で行う方が簡単であることがわかるでしょう。

したがって、queryStrXQuery をindex.xqyファイルに移動し、そのファイルmodules rootHTTPServer. view.xqy同じ場所に置きます。通常の Web ブラウザを使用して に接続しhttp://HOSTNAME:PORT/、正しいHOSTNAMEと を入力しますPORT

後で Java を統合する必要があるかもしれませんが、単純な HTTP アプリケーションが最初に動作するようになると、自信が持てるようになると思います。

もっと読む:

于 2012-01-30T15:10:39.687 に答える
0

HTTPXQuery をサーバーに保存し、またはを介し​​て呼び出す方がはるかに優れているという上記の考えに同意しますXCC

一般的な方法XQuery、特に MarkLogic の一般的な方法は、アプリケーション サーバーが指す「ルート」領域にコードを格納し、XQuery. アドホックxquery を文字列として連結すると、いくつかの問題があります。

入力するのが難しい - 構文の強調表示やその他のツールがない

XQuery効率的な形式でキャッシュするのではなく、毎回再解析する必要があります

XQueryそのように考え抜かれたアプリケーションを構築することはできません。コード編成用のモジュールがあり、特定の要素と属性XQueryについて XQuery を個別に検索できます。また、コードを分離してサーバー上に保持する場合は、呼び出された関数も検索できます。XMLXQuery

XQueryこれは、MarkLogic にパッケージされているcq や queryConsoleなどのインタラクティブなクエリ バッファを使用すると、はるかに簡単になります。

于 2012-01-31T01:18:02.037 に答える