XSLT - Saxon malformed URL unknown protocol: xmldb

583 Views Asked by At

In eXist 4.4/XQuery 3.1 I perform an XSL 2.0 transformation using transform:transform(). In the transformation I pass a parameter into the XSL transformation for Saxon to use to access information in the database.

<param name="paramSaxondatapath" value="xmldb:exist:///db/apps/deheresi/data/"/>

Everything works great: Saxon retrieves the nodes needed from documents in eXist-DB and the XSL transformation is successful.

Now, I am trying to do execute the same but from outside the eXist-DB environment (local drive, using Oxygen). Thus, in the XSLT document I have hardcoded the parameter:

<xsl:param name="paramSaxondatapath">xmldb:exist:///db/apps/deheresi/data/</xsl:param>

Yet when I fire this XSLT file off locally (in Oxygen, local XSLT file, Saxon-HE 9.6.0.7), Saxon throws me an exception unknown protocol: xmldb

FODC0002: Exception thrown by URIResolver: 
Malformed URL 
xmldb:exist:///db/apps/deheresi/data/bibliography.xml
(base file:/Users/foo/Desktop/De_Heresi/deheresi_TEI/fo_dep_single.xsl): 
unknown protocol: xmldb

Considering that this is passed to Saxon in identical manner (ie wrapped in doc(concat(paramSaxondatapath,'somefile.xml')), I'm surprised this isn't reacting the same way both times.

Is there a different URI I should be using?

Many thanks.

EDIT: Curiously, if I use command line for the transformation (ie not triggered by Oxygen), Saxon accepts it and performs the transformation. It appears to have something to do with Oxygen...

1

There are 1 best solutions below

0
On

My guess is that when eXist invokes Saxon, it sets a URIResolver that recognizes URIs with the "xmldb:exist:" prefix and handles them itself. Outside the eXist environment, you would need to supply your own URIResolver that does something similar - connects to the database and retrieves the required document.