Re: library package – load stylesheet s into XQuery?
Joe Wicentowski <[email protected]> Mon, 24 Jun 2024 09:19:47 -0400
| Newsgroups | gmane.text.xml.exist |
|---|---|
| Message-ID | <CAHwerk34JwFOtpW8+uzmr2ke5ZC3te_VCGSL7Hd6XREVqdDstQ@mail.gmail.com> |
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 [email protected]://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