在 XQuery 中,您不仅可以导入核心光学库
import module namespace op="http://marklogic.com/optic"
at "/MarkLogic/optic.xqy";
还有提供查询所需的任何表达式函数的库。使用以下库的任意组合:
import module namespace octs="http://marklogic.com/optic/expression/cts"
at "/MarkLogic/optic/optic-cts.xqy";
import module namespace ofn="http://marklogic.com/optic/expression/fn"
at "/MarkLogic/optic/optic-fn.xqy";
import module namespace ogeo="http://marklogic.com/optic/expression/geo"
at "/MarkLogic/optic/optic-geo.xqy";
import module namespace ojson="http://marklogic.com/optic/expression/json"
at "/MarkLogic/optic/optic-json.xqy";
import module namespace omap="http://marklogic.com/optic/expression/map"
at "/MarkLogic/optic/optic-map.xqy";
import module namespace omath="http://marklogic.com/optic/expression/math"
at "/MarkLogic/optic/optic-math.xqy";
import module namespace ordf="http://marklogic.com/optic/expression/rdf"
at "/MarkLogic/optic/optic-rdf.xqy";
import module namespace osem="http://marklogic.com/optic/expression/sem"
at "/MarkLogic/optic/optic-sem.xqy";
import module namespace ospell="http://marklogic.com/optic/expression/spell"
at "/MarkLogic/optic/optic-spell.xqy";
import module namespace osql="http://marklogic.com/optic/expression/sql"
at "/MarkLogic/optic/optic-sql.xqy";
import module namespace oxdmp="http://marklogic.com/optic/expression/xdmp"
at "/MarkLogic/optic/optic-xdmp.xqy";
import module namespace oxs="http://marklogic.com/optic/expression/xs"
at "/MarkLogic/optic/optic-xs.xqy";
此后,您以相同的方式调用函数,其重要区别在于参数不仅可以包含文字,还op:col("NAME")
可以指定列值或其他嵌套表达式函数的返回值,如下所示:
=> op:where(
ofn:starts-with(
op:col("col1"),
ofn:substring-before(op:col("col2"), "prefix")
)
)
请注意,在执行查询期间对值进行操作时,您只能使用光学表达式库中的函数。要在构建计划时对作为参数传递的文字值进行操作,请使用普通函数。
特别是,cts:query() 参数总是在命名空间中构造,cts
而不是在octs
命名空间中。
有关哪些函数作为表达式函数公开以及如何在 SJS 中公开表达式函数的详细信息,另请参阅: https ://stackoverflow.com/a/65924267/1091497
希望有帮助,