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

cts:uri-match to pick a particular format

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

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

我想 运行 cts:uri 中的正则表达式 - 匹配只选择那些符合格式

的 uri
> /documents/{integer-values}.xml

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

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

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

因此,与直接传递正则表达式相比,可能不太理想,但比对所有 uris 执行正则表达式要好。它应该适用于数百万个 uris。

HTH!