2017-06-09 49 views
1

我想知道是否有方法来反省XQuery模块和动态访问函数。这将帮助我实现GOF策略模式,因为XQuery不支持同一接口的多个实现。在XQuery中实现策略模式,一般的反射功能

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

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

非常感谢, K.

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

+1

许多常见的设计模式都假设了一个主要面向对象的世界观。 XQuery确实是功能性的。如果你更具体地描述你想要完成的是什么,有人可能能够引导你到适当的功能模式。 –

回答

1

XQuery 3.0+和MarkLogic 9支持一流的功能。在很多情况下,您可以使用一流的函数和依赖注入将常见的OO设计模式修改为函数式编程等价物。

此外,您可以通过xdmp:functions()访问范围内的功能。

有一种方法可以在ML中获得像反射一样的功能,但它有点像黑客。看看这个库,它抛出一个异常,捕获它,并使用该异常有效载荷检查堆栈:

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

更多的XQuery的编程模式和技术,你可能要检讨程序各种面向XML的会议,如Balisage,XML PragueXML London。此外,在XQuery项目和阅读代码中搜索GitHub仓库可能会有所帮助。

+1

XQuery 3.1还提供load-xquery-module()函数,它将库模块作为输入并返回对模块中定义的函数的引用。 –

+0

感谢您的回答。我想我需要等待ML来实现动态模块加载,直到那时我会坚持使用标识符来传递策略并将这些标识符存储在地图中。 –