2017-06-09 5 views
1

Je me demande s'il existe un moyen d'introspecter les modules XQuery et d'accéder dynamiquement aux fonctions. Cela m'aiderait à implémenter le modèle de stratégie GOF car XQuery ne prend pas en charge plusieurs implémentations pour la même interface. Le problème, bien sûr, est qu'il ne semble pas y avoir de support pour l'introspection dans XQuery, sauf pour vérifier les types de variables.Implémentation d'un modèle de stratégie dans XQuery, fonctions de réflexion en général

Des idées sur la façon dont ce modèle peut être implémenté dans XQuery? (J'utilise MarkLogic 9)

merci beaucoup, K.

PS. Malheureusement, la plupart des ressources XQuery que je pourrais trouver se concentrent sur de petits détails de telle ou telle fonctionnalité mais je ne pouvais pas trouver une telle ressource qui prend XQuery comme un langage de programmation sérieux et corrige ces problèmes de conception logicielle

+1

De nombreux modèles de conception courants supposent une vision du monde essentiellement orientée objet. XQuery est décidément fonctionnel. Si vous décrivez plus concrètement ce que vous essayez d'accomplir, quelqu'un peut vous orienter vers un modèle fonctionnel approprié. –

Répondre

1

XQuery 3.0+ et MarkLogic 9 supportent des fonctions de première classe. Dans de nombreux cas, vous pouvez retravailler les modèles de conception OO courants en équivalents de programmation fonctionnels en utilisant des fonctions de première classe et l'injection de dépendances.

De plus, vous pouvez accéder aux fonctions dans le champ d'application via xdmp:functions().

Il existe un moyen d'obtenir une fonctionnalité de type réflexion dans ML, mais c'est un peu un hack. Jetez un oeil à cette bibliothèque, qui jette une exception, les captures, et utilise la charge utile d'exception pour inspecter la pile:

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

Pour plus de modèles de programmation XQuery et techniques, vous voudrez peut-être examiner la procédure de diverses conférences orientées XML telles que Balisage, XML Prague et XML London. En outre, la recherche de repos GitHub pour les projets XQuery et la lecture du code peut être utile.

+1

XQuery 3.1 propose également la fonction load-xquery-module() qui prend en entrée un module de bibliothèque et renvoie des références aux fonctions définies dans le module. –

+0

merci pour la réponse. Je suppose que j'aurais besoin d'attendre que ML mette en place un chargement de module dynamique, jusqu'à ce que je m'en tiens aux identifiants de passage pour les stratégies et les fonctions de stockage dans une carte avec ces identifiants. –