2017-06-09 101 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來實現動態模塊加載,直到那時我會堅持使用標識符來傳遞策略並將這些標識符存儲在地圖中。 –