Hi Christian,

Thanks for your answer and for taking our feature request into
consideration.

You propose to use xquery:eval, as long as we don't perform any updates
(which is the case). But the documentation of this function mentions that
two errors can be raised : in case of updates and when the evaluated
expression yields function items. How should we understand this second
limitation? Because modules precisely define functions...

Best,

Jean-Philippe


On Mon, Feb 24, 2014 at 10:59 AM, Christian Grün
<[email protected]>wrote:

> Hi Jean-Philippe,
>
> thanks for your describing your use case. I've recently thought about
> such an import-module function. It's not completely trivial, because a
> dynamic import function may result in the import of other modules,
> some of which may already have been statically imported, and so on.
> But I have added an issue to remember your feature request...
>
>   https://github.com/BaseXdb/basex/issues/869
>
> ...and I'll give you notice as soon as we have time to tackle this one.
>
> In the meanwhile, the use of xquery:eval may be one way out, as long
> as you don't have to perform any updates.
>
> Feel free to ask for more,
> Christian
>
>
> On Mon, Feb 24, 2014 at 10:40 AM, Jean-philippe Magué
> <[email protected]> wrote:
> > Hi Christian,
> >
> > I repoen this discussion about dynamic module loading. This issue is
> getting
> > more and more blocking for us. Let me try to re-expain our needs.
> > We've written a restXQ based webapp extendable with a plugin based
> > mechanism, where plugins modules provide functions to be called from a
> main
> > module. But to be able to call a plugin function from the main module,
> the
> > plugin module has to be imported by the main module. As far as we know,
> this
> > can only be done with a import module staetment.  Thus, users who have
> > installed our webapp and who want to install plugins have to dig into the
> > xquery code to add these import statements. Even with a good
> documentation,
> > for non technical users, this is to much to ask. If we could dynamically
> > import modules with a function similar to exist's util:import-module, the
> > plugin installation process would be dramatically simplified.
> > Do you have any plan to implement such a function ? Or is there any
> > workaround we could use ?
> >
> > Best,
> >
> > Jean-Philippe
> >
> >
> > On Fri, Jun 21, 2013 at 4:43 PM, Christian Grün <
> [email protected]>
> > wrote:
> >>
> >> Hi Jean-Philippe,
> >>
> >> thanks for providing us with the (concise) details.
> >>
> >> In our existing RESTXQ projects, we directly decorate all executable
> >> functions with specific %rest:path annotations; this way, there is no
> >> need for an additional "dispatcher" function that delegates a call to
> >> a specific module or function. You can dynamically add and remove
> >> modules to your web application, as all .xqm files will automatically
> >> be parsed for restxq annotations before each query execution. Next,
> >> the implementation is smart enough to only parse code that has ben
> >> changed, so you shouldn't encounter any bottlenecks even when working
> >> with hundreds of restxq modules. But I'm not sure if adding modules
> >> with restxq entry points is a reasonable alternative for your
> >> approach?
> >>
> >> Your feedback is welcome; feel free to ask for more details,
> >> Christian
> >> ___________________________
> >>
> >> 2013/6/21 Jean-philippe Magué <[email protected]>:
> >> > Dear Christian,
> >> >
> >> > Thanks for your response. I'm going to try be more specific, but to
> >> > remain
> >> > concise.
> >> >
> >> > In our restxq application, we have one "main" module and several
> >> > "dependent"
> >> > modules. The main module receives the http requests (well, it declare
> >> > functions annotated with a path, say ourApp/{$param}), and calls
> >> > functions
> >> > in one of the dependent module. This dependent module is determined by
> >> > the
> >> > path : a request to ourApp/moduleA will cause the main module to use
> >> > functions in the moduleA dependent module, while a request to
> >> > ourApp/moduleB
> >> > will cause it to call functions in the moduleB dependent module.
> >> >
> >> > It works just well if we import all the dependent modules in the main
> >> > module
> >> > using the regular way, with import module statements. Yet, we want to
> go
> >> > one
> >> > step forward and import the dependent modules only when/if needed.
> More
> >> > precisely, we'd like to be able to add new dependent modules in the
> >> > restxq
> >> > directory without having to modify the main module by adding new
> import
> >> > module statements.
> >> >
> >> > But it's probably some kind of inappropriate perfectionism that isn't
> >> > worth
> >> > spending much time !
> >> >
> >> > Best,
> >> >
> >> > Jean-Philippe
> >> >
> >> > PS: Thanks for looking at the circular import issue. Having our
> >> > dependent
> >> > modules importing back the main module would be very helpful!
> >> >
> >> >
> >> > On Thu, Jun 20, 2013 at 10:44 PM, Christian Grün
> >> > <[email protected]>
> >> > wrote:
> >> >>
> >> >> Dear Jean-Philippe,
> >> >>
> >> >> as you correctly guessed, there is no function in BaseX for
> >> >> dynamically importing XQuery modules. The function xquery:invoke [1]
> >> >> may serve a similar purpose. I'm not sure how the invocation of Java
> >> >> code could help here, so could you give us some more information on
> >> >> what you plan to do, and what needs to be done at runtime in your
> >> >> scenario?
> >> >>
> >> >> Thanks,
> >> >> Christian
> >> >>
> >> >> PS: our team member Leo is currently having a look at the circular
> >> >> module import issue.
> >> >>
> >> >> [1] http://docs.basex.org/wiki/XQuery_Module#xquery:invoke
> >> >> ___________________________
> >> >>
> >> >> > Exist-db has an util:import-module function that allows to
> >> >> > dynamically
> >> >> > import an XQuery module at run time. I haven't found anything
> >> >> > equivalent
> >> >> > in
> >> >> > BaseX. Is that right ?
> >> >> >
> >> >> > I have also tried to see how to implement such a function directly
> in
> >> >> > Java,
> >> >> > but as far as I understand the module parsing process, functions
> >> >> > prefix
> >> >> > are
> >> >> > checked at compile time. That would compromise any attempt to write
> >> >> > such
> >> >> > a
> >> >> > function. Am I right ?
> >> >> >
> >> >> > Best,
> >> >> >
> >> >> > Jean-Philippe
> >> >> >
> >> >> >
> >> >> > --
> >> >> > Jean-Philippe Magué
> >> >> > Maître de Conférences en Humanités Numériques
> >> >> > Responsable de l'Atelier des Humanités Numériques :
> ahn.ens-lyon.fr
> >> >> > Ecole Normale Supérieure de Lyon
> >> >> > +33 (0)4 26 23 38 08
> >> >> >
> >> >> > --
> >> >> >
> >> >> > "Using computers will therefore lead us to a more profound and
> >> >> > systematic
> >> >> > knowledge of human expression; in principle, it can help us to be
> >> >> > more
> >> >> > humanistic than before."
> >> >> > Busa, 1980.
> >> >> >
> >> >> > _______________________________________________
> >> >> > BaseX-Talk mailing list
> >> >> > [email protected]
> >> >> > https://mailman.uni-konstanz.de/mailman/listinfo/basex-talk
> >> >> >
> >> >
> >> >
> >> >
> >> >
> >> > --
> >> > Jean-Philippe Magué
> >> > Maître de Conférences en Humanités Numériques
> >> > Responsable de l'Atelier des Humanités Numériques : ahn.ens-lyon.fr
> >> > Ecole Normale Supérieure de Lyon
> >> > +33 (0)4 26 23 38 08
> >> >
> >> > --
> >> >
> >> > "Using computers will therefore lead us to a more profound and
> >> > systematic
> >> > knowledge of human expression; in principle, it can help us to be more
> >> > humanistic than before."
> >> > Busa, 1980.
> >
> >
> >
> >
> > --
> > Jean-Philippe Magué
> > Maître de Conférences à l'Ecole Normale Supérieure de Lyon
> > +33 (0)4 37 37 63 13
>



-- 
Jean-Philippe Magué
Maître de Conférences à l'Ecole Normale Supérieure de Lyon
+33 (0)4 37 37 63 13
_______________________________________________
BaseX-Talk mailing list
[email protected]
https://mailman.uni-konstanz.de/mailman/listinfo/basex-talk

Reply via email to