我试图用marklogic-的Java API与下列限制搜索我的数据库中的XML的搜索记录中的所有目录,除了一个:如何Marklogic
1)一个特殊的XML标签必须包含前我给定值: tradeId必须等于什么,我通过
2)结果必须由我提供的藏品躺在
3)结果可在marklogic数据库的任何地方在于,除了在一个特定的目录
我没有解决方案到第3点。符合我的前两条标准的记录很少有以/ TRADES/*开头的URI,所以我想在除“目录”/“TRADES”目录之外的任何地方进行搜索。
这是我的代码的外观:
public static List<DocumentPage> getResults() throws KeyManagementException, NoSuchAlgorithmException,
KeyStoreException, CertificateException, IOException {
String tradeId = "XYZ";
DatabaseClient client = getDBClient();
QueryManager queryMgr = client.newQueryManager();
XMLDocumentManager xmlMngr = client.newXMLDocumentManager();
StringHandle rawHandle = new StringHandle();
rawHandle.withFormat(Format.XML).set(getQueryToFetchMessagesByTradeId(tradeId));
RawQueryByExampleDefinition querydef = queryMgr.newRawQueryByExampleDefinition(rawHandle);
querydef.setCollections("/messages/processed", /messages/toBeProcessed");
querydef.setDirectory("/");
return getDocumentPageList(querydef, client);
}
private static String getQueryToFetchMessagesByTradeId(String tradeId) {
String query = "<q:qbe xmlns:q=\"http://marklogic.com/appservices/querybyexample\">\n" + "<q:query>\n<q:word>"
+ "<tradeId tradeIdScheme=" + "\"http://www.abcd.com/internalid/trade-id\"" + ">" + tradeId
+ "</tradeId></q:word>\n" + "</q:query>\n" + "</q:qbe>";
return query;
}
任何帮助,高度赞赏。
不知道关于Java的实现,但是'CTS:不查询(CTS:目录查询( “贸易”, “1”))'将是XQuery的等价物。 –