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 <christian.gruen@gmail.com> 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é
<jean-philippe.mague@ens-lyon.fr> 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 <christian.gruen@gmail.com>
> 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é <jean-philippe.mague@ens-lyon.fr>:
>> > 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
>> > <christian.gruen@gmail.com>
>> > 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
>> >> > BaseX-Talk@mailman.uni-konstanz.de
>> >> > 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