在 XQuery 中实现策略模式,一般的反射函数

Implementing strategy pattern in XQuery, reflection functions in general

我想知道是否有一种方法可以内省 XQuery 模块并动态访问函数。这将帮助我实现 GOF 策略模式,因为 XQuery 不支持同一接口的多个实现。

当然,问题是除了检查变量类型外,似乎不支持 XQuery 中的内省。

关于如何在 XQuery 中实现此模式的任何想法? (我用的是MarkLogic 9)

非常感谢, K.

PS。不幸的是,我能找到的大多数 XQuery 资源都集中在这个或那个功能的小细节上,但我找不到这样的资源将 XQuery 本身作为一种严肃的编程语言并解决此类软件设计问题

XQuery 3.0+ 和 MarkLogic 9 支持 first-class 函数。在许多情况下,您可以使用 first-class 函数和依赖注入将常见的 OO 设计模式重新设计为等效的函数式编程。

此外,您可以通过 xdmp:functions() 访问 in-scope 功能。

有一种方法可以在 ML 中获得 reflection-like 功能,但这有点像 hack。看看这个库,它抛出一个异常,捕获它,并使用异常负载检查堆栈:

https://github.com/marklogic/cq/blob/master/lib-debug.xqy

要了解更多 XQuery 编程模式和技术,您可能需要查看各种 XML-oriented 会议(如 Balisage, XML Prague, and XML London)的会议记录。此外,在 GitHub 存储库中搜索 XQuery 项目和阅读代码也会有所帮助。