Marklogic cts:uri匹配以选择特定格式

Marklogic cts:uri匹配以选择特定格式,marklogic,marklogic-9,Marklogic,Marklogic 9,在我的MarkLogic数据库中,我们有以下符合URI格式的文档: /documents/12345.xml /documents/12-abc.xml /documents/abc-123-def.xml /12345.xml 我想在cts:uri匹配中运行一个正则表达式,只选择那些符合格式的uri > /documents/{integer-values}.xml 请建议如何使这项工作。数据库中有数以百万计的文档,我只想选择符合上述格式的URI,将在这些文档上运行CORB过程以进行

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

/documents/12345.xml
/documents/12-abc.xml
/documents/abc-123-def.xml
/12345.xml
我想在cts:uri匹配中运行一个正则表达式,只选择那些符合格式的uri

> /documents/{integer-values}.xml

请建议如何使这项工作。数据库中有数以百万计的文档,我只想选择符合上述格式的URI,将在这些文档上运行CORB过程以进行转换。我不想获取所有URI,然后运行fn:matches查询来完成这项工作。

不幸的是,
cts:URI-match
采用通配符模式,而不是正则表达式。您可以获得的最接近的模式是类似于
“/documents/*.xml”
。不过,根据您的数据集,它可能已经大大减少了结果的数量。然后,您可以使用
fn:matches
的附加谓词过滤掉误报。比如:

cts:uri-match('/documents/*.xml')[fn:matches(., '^/documents/\d+\.xml$')]
因此,可能比直接传递正则表达式要差一点,但比在所有URI上执行正则表达式要好。它应该可以很好地处理数百万个URI


不幸的是,
cts:urimatch
采用通配符模式,而不是正则表达式。您可以获得的最接近的模式是类似于
“/documents/*.xml”
。不过,根据您的数据集,它可能已经大大减少了结果的数量。然后,您可以使用
fn:matches
的附加谓词过滤掉误报。比如:

cts:uri-match('/documents/*.xml')[fn:matches(., '^/documents/\d+\.xml$')]
因此,可能比直接传递正则表达式要差一点,但比在所有URI上执行正则表达式要好。它应该可以很好地处理数百万个URI


如果在谓词中应用筛选器时遇到问题,也可以在CORB作业的流程模块中过滤URI,让流程模块跳过处理与正则表达式模式不匹配的URI。如果在谓词中应用筛选器时遇到问题,您还可以在CORB作业的流程模块中过滤URI,让流程模块跳过处理与正则表达式模式不匹配的URI。