Re: library package – load stylesheet s into XQuery?

Julian Jarosch <[email protected]> Tue, 25 Jun 2024 10:24:45 +0200
Newsgroups gmane.text.xml.exist
Message-ID <[email protected]>
Hi Joe,

Thanks for the tip! Looks good for deployed packages. In my case, it 
doesn’t take /db/system/repo – aka library packages – into account. 
repo:get-root() only returns /db/apps in the databse I’m testing. I 
haven’t checked if that’s a configuration of our dockerisation of eXist, 
though.

Best,
Julian

Am 24.06.24 um 15:19 schrieb Joe Wicentowski:
> Hi Julian,
>
> That's a good approach. For some convenience functions, see the 
> apputils library module in the shared-resources library package. For 
> example:
>
> https://github.com/eXist-db/shared-resources/blob/master/content/apputil.xql#L45
>
> Joe
>
> Sent from my iPhone
>
>
> On Mon, Jun 24, 2024 at 7:48 AM Julian Jarosch 
> <[email protected]> wrote:
>
>     Dear Jean-Paul,
>
>     Good idea! But that function evaluates to the collection of the
>     XQuery which imports the library module. E.g. I’m testing from a
>     script in /db/xquery which imports my library. I’ve inserted
>     system:get-module-load-path() into the library but still get
>     /db/xquery from the testing script.
>
>     Nevertheless, rubber ducking this with you got me thinking about
>     this section of the documentation
>
>     https://exist-db.org/exist/apps/doc/repo#considerations
>
>     I adapted the documented code snippet into
>
>     util:collection-name(collection('/db/system/repo')//expath:package[@name ="http://www.digitale-akademie.de/cmiferator"  <http://www.digitale-akademie.de/cmiferator>])
>
>     which works for me! It’s a bit inelegant to hard-code
>     /db/system/repo, but repo:get-root() gives me /db/apps. Perhaps
>     I’ll get around to optimizing that. For now, I think I’ll test
>     what I’ve already got.
>
>     Thanks again!
>
>     Best,
>     Julian
>
>
>     Am 24.06.24 um 13:12 schrieb Jean-Paul Rehr:
>>     Dear Julian, understood.
>>
>>     >Perhaps there is a programmatic way to obtain the current
>>     package base path (/db/system/repo/cmiferator-0.0.3) and use that
>>     for loading
>>     the stylesheet.
>>
>>     You can dynamically get the path of the module from
>>     system:get-module-load-path() and parse the path into the string
>>     needed to build your resource path for the XLST file.
>>
>>     Best,
>>     JPR
>>
>>
>>
>>     On Mon, Jun 24, 2024 at 12:01 PM Julian Jarosch
>>     <[email protected]> wrote:
>>
>>         Dear Jean-Paul,
>>
>>         Thanks! Yes and no – yes, a library module, but within a
>>         package that is exclusively declared as a library. See the
>>         table with types of packages in this section:
>>         https://exist-db.org/exist/apps/doc/repo#sect-repoxml
>>
>>         “Library package” with type = library and /no target
>>         specified/ was what I was going for, so far.
>>
>>         This means that the package is not deployed into the /db/apps
>>         collection. Instead it lives in /db/system/repo. Its
>>         collection name includes the version number. Currently the
>>         full path would be
>>         /db/system/repo/cmiferator-0.0.3/content/CMIF-base.xsl, but
>>         this will obviously change with the version number.
>>
>>         Perhaps there is a programmatic way to obtain the current
>>         package base path (/db/system/repo/cmiferator-0.0.3) and use
>>         that for loading the stylesheet.
>>
>>         Otherwise, I take your point and will consider setting a
>>         target where to deploy the package within the database
>>         (/db/apps/cmiferator) and use a fixed, complete resource path
>>         for loading the stylesheets. (It’s just that initially the
>>         library package concept seemed a good fit for what I try to
>>         achieve – make a few XQuery functions available database-wide.)
>>
>>         Best,
>>         Julian
>>
>>         Am 24.06.24 um 11:43 schrieb Jean-Paul Rehr:
>>>         Dear Julian,
>>>
>>>         >Is it even possible to include XSLTs in a library package
>>>         in a manner that they can be loaded into XQuery?
>>>
>>>         I assume by "library package" you mean library module? I do
>>>         this all the time without an issue. It's just another XML
>>>         document.
>>>
>>>         However I have a doubt about this path:
>>>
>>>         >doc('./CMIF-base.xsl')
>>>
>>>         Have you tested this with the full explicit path to the
>>>         document? e.g. "/db/apps/myapp/CMIF-base.xsl"
>>>
>>>         Cheers,
>>>         JPR
>>>
>>>
>>>         On Mon, Jun 24, 2024 at 11:35 AM Julian Jarosch
>>>         <[email protected]> wrote:
>>>
>>>             Hello everyone,
>>>
>>>             I’m trying to use XSLT stylesheets in an XQuery module
>>>             in a library package, along the lines of (simplified
>>>             example):
>>>
>>>             declare variable $template := doc('./CMIF-base.xsl');
>>>
>>>             The current actual code is here:
>>>
>>>             https://github.com/digicademy/cmiferator/blob/78b2725bf9fcc163fc48df0a96c436fadeefcef6/library-package/content/cmiferator.xqm#L25
>>>
>>>             I had successfully tested this as an XQuery module
>>>             written directly in eXist/eXide. It stopped working when
>>>             I installed it as a library package, as far as I can tell.
>>>
>>>             By “stopped working” I mean that the variable which is
>>>             supposed to contain the stylesheet document ($template
>>>             in the example) remains empty and the
>>>             transform:transform() function fails because of a
>>>             missing stylesheet argument.
>>>
>>>             Currently, it seems to me that the cause is with the
>>>             library package? Is it even possible to include XSLTs in
>>>             a library package in a manner that they can be loaded
>>>             into XQuery?
>>>
>>>             Thanks for any guidance – presumably for pointing out an
>>>             egregious oversight on my end :-)
>>>
>>>             Kind regards,
>>>             Julian
>>>
>>>             _______________________________________________
>>>             Exist-open mailing list
>>>             [email protected]
>>>             https://lists.sourceforge.net/lists/listinfo/exist-open
>>>
>>         _______________________________________________
>>         Exist-open mailing list
>>         [email protected]
>>         https://lists.sourceforge.net/lists/listinfo/exist-open
>>
>>
>>
>>     _______________________________________________
>>     Exist-open mailing list
>>     [email protected]
>>     https://lists.sourceforge.net/lists/listinfo/exist-open
>     _______________________________________________
>     Exist-open mailing list
>     [email protected]
>     https://lists.sourceforge.net/lists/listinfo/exist-open
>

_______________________________________________
Exist-open mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/exist-open