MarkLogic 8中的三重索引

时间:2015-03-02 09:17:19

标签: marklogic

我正在为ML8 Java API编写一些POC。 我在ML8中为我的数据库启用了三重索引,但我无法在Java API文档中找到任何文档。 因此,不确定如何从Java API使用这个三重索引,或者它是一个纯数据库设置的东西。 如果有人有,请分享一些信息..

3 个答案:

答案 0 :(得分:3)

MarkLogic REST API附带两个端点/v1/graphs/v1/graphs/sparql,它们实现了SPARQL协议。

将后者用于针对REST服务器的SPARQL和SPARQL更新查询。我在Jena和Sesame时成功编写了Java应用程序,并且他们使用这些端点开箱即用。

这些例子基本上都来自Jena和Sesame文件。这两个项目都有优秀的文档。

对于Sesame,请使用SPARQLRepository。

Repository rep = new SPARQLRepository(ENDPOINT);
rep.initialize();

RepositoryConnection conn = rep.getConnection();
String queryString = "SELECT ?x ?y WHERE { ?x ?p ?y } ";
TupleQuery tupleQuery = conn.prepareTupleQuery(
        QueryLanguage.SPARQL, queryString);

TupleQueryResult result = tupleQuery.evaluate();
try {
    while (result.hasNext()) { // iterate over the result
        BindingSet bindingSet = result.next();
        Value valueOfX = bindingSet.getValue("x");
        Value valueOfY = bindingSet.getValue("y");
        System.out.println(valueOfX);
        System.out.println(valueOfY);
    }
} finally {
    result.close();
}

在耶拿,使用以下内容:

String ENDPOINT = "http://localhost:8007/v1/graphs";
HttpAuthenticator authenticator = new SimpleAuthenticator("admin",
            "admin".toCharArray());

// make a model by parsing a file
Model model = ModelFactory.createDefaultModel();
String turtle = "src/main/resources/data/one.ttl";
model.read(turtle, null);

// configure access to graph protocol
DatasetGraphAccessor markLogicClient = new DatasetGraphAccessorHTTP(
    ENDPOINT, authenticator);
DatasetAdapter datasetAdapter = new DatasetAdapter(markLogicClient);
// add a graph to MarkLogic
datasetAdapter.add(model);


String query = "select ?s ?p ?o where { ?s ?p ?o } limit 1";
QueryExecution queryExec = QueryExecutionFactory
                        .sparqlService(URI, query, authenticator);
ResultSet results = queryExec.execSelect();
logger.debug("Success.  Result: " + results.toString());
for (; results.hasNext();) {
    QuerySolution soln = results.nextSolution();
    Iterator<String> i = soln.varNames();
    for (; i.hasNext();) {
        String n = i.next();
        logger.debug("Name: " + n + " Val: "
            + soln.get(n).toString());
    }

答案 1 :(得分:0)

据我所知,Java API并没有为XQuery提供太多支持:&#39; sem:&#39;在功能组中,您必须使用/编写扩展(如果有的话)来添加所需的功能。我在一年前提出过关于加载RDF数据的类似问题,我认为这与你的问题有点相关:

MarkLogic sem: function group in MarkLogic Java API

有许多变通办法&#39;您可以在上面的链接中看到,例如REST API调用和mlcp用于加载。

答案 2 :(得分:0)

使用Java调用XQuery or JavaScript program which calls the sem: API。您可以通过extending the high-level Java API使用模块调用或use XCC module invocation directly执行此操作。如果扩展Java API,您可以考虑将您的工作开源以供其他人使用。