cts:uri-match选择特定格式

时间:2018-09-19 12:07:35

标签: marklogic marklogic-9

在我的MarkLogic数据库中,我们有符合以下格式的URI格式的文档:

/documents/12345.xml
/documents/12-abc.xml
/documents/abc-123-def.xml
/12345.xml

我想在cts:uri-match中运行一个正则表达式,以仅选择那些符合格式的uri

> /documents/{integer-values}.xml

请提出如何进行这项工作的建议。数据库中有数百万个文档,我只想选择符合上述格式的uri,将对这些文档运行CORB流程以进行转换。我不想获取所有URI,然后运行fn:matches查询以使其正常工作。

1 个答案:

答案 0 :(得分:4)

不幸的是,cts:uri-match采用通配符模式,而不是正则表达式。您可以获得的最接近的是像"/documents/*.xml"这样的模式。但是,这可能已经大大减少了结果的数量,具体取决于您的数据集。然后,您可以使用fn:matches的附加谓词过滤掉误报。像这样:

cts:uri-match('/documents/*.xml')[fn:matches(., '^/documents/\d+\.xml$')]

因此,与直接传递正则表达式相比,最优程度可能略差一些,但在所有情况下都比进行正则表达式更好。数百万欧元,它应该可以正常工作。

HTH!