In XSLT 2.0 one can use the standard XPath 2.0 function resolve-uri().
Do note, that the relative URIs of the included/imported stylesheet modules are relative to the base URI of the including/importing stylesheet module -- not from the "working directory"!
Here is part of the description of this function from the W3 F&O specification:
8.1 fn:resolve-uri
fn:resolve-uri($relative as
xs:string?) as xs:anyURI?
fn:resolve-uri($relative as
xs:string?, $base as xs:string) as
xs:anyURI?
Summary: The purpose of this function
is to enable a relative URI to be
resolved against an absolute URI.
The first form of this function
resolves $relative against the value
of the base-uri property from the
static context. If the base-uri
property is not initialized in the
static context an error is raised
[err:FONS0005].
Here is a very simple example:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:sequence select=
"resolve-uri('resolve-uri-example2.xsl')"/>
</xsl:template>
</xsl:stylesheet>
when this transformation is applied against any xml document (not used), the result is:
file:///c:/tests/resolve-uri-example2.xsl
This is the correct result, because our main stylesheet module is saved as:
c:/tests/resolve-uri-example2.xsl