Xquery 导入 cts(无法使用其功能)

Xquery importing the cts ( couldn't use its functions)

我想使用 XQuery 从文本中查找不同的术语。这是我的代码:

declare namespace rec="http://xxx.xxx/xxx";
declare namespace cts="http://marklogic.com/cts";

for $r in /rec:Record 
return
distinctive-terms( $r/rec:text,<options xmlns="cts:distinctive-terms">  <max-terms>3</max-terms></options>)

我收到以下错误

1.0-ml] XDMP-UNDFUN: (err:XPST0017) Undefined function distinctive-terms()

我已将 declare namespace cts=" http://marklogic.com/cts 更改为 import module cts="http://marklogic.com/cts,但我需要一个位置才能从 "... " 导入它 我找不到 cts 的位置 有人知道我该怎么做吗??

cts:distinctive-terms是内置函数,不需要引入模块。 cts 命名空间也是内置的,您不需要声明它。但是,您仍然需要使用函数前缀。只是宣布它并没有改变这一点。

所以:cts:distinctive-terms($r/rec:text,...)

根据 Mary 所说的,这里有一些有趣的信息:

一切都在 xQuery 的命名空间中,XML 在 MarkLogic 中。这没有什么神奇的,然而,有些东西只是默认的 - 这可能看起来像魔法..(MarkLogic - "rlko" 确实等于 "Magic",但这只是巧合:)

就像 XML 具有默认名称空间一样,xQuery 也是如此。在 marklogic 中,这是映射到所有 xPath 好东西的 fn 命名空间。

在引擎盖下,它与在您的模块上定义相同:

declare default function namespace "http://www.w3.org/2005/xpath-functions";

但同时,它也声明了命名空间:

declare namespace fn = "http://www.w3.org/2005/xpath-functions";

https://docs.marklogic.com/guide/xquery/namespaces#id_21104

因此,在 MarkLogic 的 xQuery 处理器中,您可以 运行 没有命名空间声明的唯一函数是来自 http://www.w3.org/2005/xpath-functions 命名空间的函数。即使这样,也是由于默认配置。就个人而言,我对一切都使用命名空间——包括 fn。

对于所有其他命名空间,您必须使用它们。但是,有超过 20 个是预定义的,您甚至不需要导入名称空间,因为它们已集成到 MarkLogic 中。可以在这里找到:https://docs.marklogic.com/guide/xquery/namespaces#id_21104

当使用额外的便利和功能库(甚至是您自己的或第 3 方)时,您需要导入它们并引用它们的位置(例如搜索库的情况)。

我要添加到已经提供的优秀答案中的另一点信息:

如果您不确定某个函数是否是内置函数,请查看文档中函数参考页底部的示例。这些示例显示了正确的用法。

如果您在示例中没有看到函数的名称空间声明,则它是一个内置函数,您也不需要在代码中声明名称空间或导入模块。当然,您仍然需要在函数调用中使用前缀,正如 David Ennis 提到的那样。