Project

Profile

Help

Bug #3745

Updated by Michael Kay about 5 years ago

http://www.saxonica.com/documentation/index.html#!functions/expath-file/path-to-uri 

 

 > Transforms a file system path into a URI with the file:// scheme. If the path is relative, it is first resolved against the current working directory. 


 


 So, on Windows, put this file as `C:\test dir\path-to-uri.xsl`  


  


 ~~~ 
 
 <?xml version="1.0" encoding="UTF-8"?> 
 
 <xsl:stylesheet exclude-result-prefixes="#all" version="2.0" xmlns:file="http://expath.org/ns/file" 
	 
	 xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
	 
	 <xsl:param as="xs:string" name="path" /> 
	 
	 <xsl:template name="main"> 
		 
		 <xsl:message select="'path=', $path" /> 
		 
		 <xsl:variable as="xs:anyURI" name="uri" select="file:path-to-uri($path)" /> 
		 
		 <xsl:message select="'uri=', $uri" /> 
		 
		 <xsl:sequence select="doc($uri)" /> 
	 
	 </xsl:template> 
 
 </xsl:stylesheet> 
 
 ~~~ 

 

 and verify that it works with a very simple relative path: 


 


 ~~~ 
 
 C:\test dir>dir /b path-to-uri.xsl 
 
 path-to-uri.xsl 

 

 C:\test dir>java -cp saxon9ee.jar net.sf.saxon.Transform -it:main -t -xsl:path-to-uri.xsl path="path-to-uri.xsl" 
 
 Saxon-EE 9.8.0.11J from Saxonica 
 
 Java version 1.8.0_161 
 
 ... 
 
 Building tree for file:/C:/test%20dir/path-to-uri.xsl using class net.sf.saxon.tree.tiny.TinyBuilder 
 
 ... 
 
 ~~~ 

 

 Looks good. 

 

 But `file:path-to-uri()` fails or returns unusable URI in the following cases: 


 


 ### Drive relative path 

 

 ~~~ 
 
 C:\test dir>dir /b c:path-to-uri.xsl 
 
 path-to-uri.xsl 

 

 C:\test dir>java -cp saxon9ee.jar net.sf.saxon.Transform -it:main -t -xsl:path-to-uri.xsl path="c:path-to-uri.xsl" 
 
 ... 
 
 path= c:path-to-uri.xsl 
 
 java.io.IOException: The filename, directory name, or volume label syntax is incorrect 
         
         at java.io.WinNTFileSystem.canonicalize0(Native Method) 
         
         at java.io.WinNTFileSystem.canonicalize(Unknown Source) 
         
         at java.io.File.getCanonicalPath(Unknown Source) 
         
         at java.io.File.getCanonicalFile(Unknown Source) 
         
         at com.saxonica.functions.extfn.EXPathFile.toFile(EXPathFile.java:1169) 
         
         at com.saxonica.functions.extfn.EXPathFile.pathToUri(EXPathFile.java:1080) 
         
         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
         
         at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
         
         at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
         
         at java.lang.reflect.Method.invoke(Unknown Source) 
         
         at com.saxonica.expr.JavaExtensionFunctionCall.invokeMethod(JavaExtensionFunctionCall.java:828) 
         
         at com.saxonica.expr.JavaExtensionFunctionCall.call(JavaExtensionFunctionCall.java:561) 
         
         at com.saxonica.expr.JavaExtensionFunctionCall.iterate(JavaExtensionFunctionCall.java:438) 
         
         at net.sf.saxon.expr.CardinalityChecker.evaluateItem(CardinalityChecker.java:280) 
         
         at net.sf.saxon.expr.parser.ExpressionTool.evaluate(ExpressionTool.java:329) 
         
         at net.sf.saxon.expr.LetExpression.eval(LetExpression.java:511) 
         
         at net.sf.saxon.expr.LetExpression.processLeavingTail(LetExpression.java:692) 
         
         at net.sf.saxon.expr.instruct.Block.processLeavingTail(Block.java:687) 
         
         at net.sf.saxon.expr.instruct.Instruction.process(Instruction.java:151) 
         
         at com.saxonica.ee.bytecode.ByteCodeCandidate.process(ByteCodeCandidate.java:141) 
         
         at net.sf.saxon.expr.instruct.NamedTemplate.expand(NamedTemplate.java:265) 
         
         at net.sf.saxon.Controller.callTemplate(Controller.java:2538) 
         
         at net.sf.saxon.s9api.Xslt30Transformer.callTemplate(Xslt30Transformer.java:750) 
         
         at net.sf.saxon.Transform.processFile(Transform.java:1252) 
         
         at net.sf.saxon.Transform.doTransform(Transform.java:782) 
         
         at net.sf.saxon.Transform.main(Transform.java:81) 
 
 Error at char 17 in xsl:variable/@select on line 7 column 78 of path-to-uri.xsl: 
   
   IO error in file path:c:path-to-uri.xsl 
 
 IO error in file path:c:path-to-uri.xsl 
 
 ~~~ 

 

 ### Rooted relative path 

 

 ~~~ 
 
 C:\test dir>dir /b "\test dir\path-to-uri.xsl" 
 
 path-to-uri.xsl 

 

 C:\test dir>java -cp saxon9ee.jar net.sf.saxon.Transform -it:main -t -xsl:path-to-uri.xsl path="\test dir\path-to-uri.xsl" 
 
 ... 
 
 path= \test dir\path-to-uri.xsl 
 
 uri= file:/C:/test%20dir/test%20dir/path-to-uri.xsl 
 
 URIResolver.resolve href="file:/C:/test%20dir/test%20dir/path-to-uri.xsl" base="file:/C:/test%20dir/path-to-uri.xsl" 
 
 Using parser com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser 
 
 Error at char 4 in xsl:sequence/@select on line 9 column 38 of path-to-uri.xsl: 
   
   FODC0002: I/O error reported by XML parser processing 
   
   file:/C:/test%20dir/test%20dir/path-to-uri.xsl: C:\test dir\test dir\path-to-uri.xsl (The 
   
   system cannot find the path specified) 
 
 I/O error reported by XML parser processing file:/C:/test%20dir/test%20dir/path-to-uri.xsl: C:\test dir\test dir\path-to-uri.xsl (The system cannot find the path specified) 
 
 ~~~ 

 

 ### UNC path 

 

 ~~~ 
 
 C:\test dir>dir /b "\\localhost\c$\test dir\path-to-uri.xsl" 
 
 path-to-uri.xsl 

 

 C:\test dir>java -cp saxon9ee.jar net.sf.saxon.Transform -it:main -t -xsl:path-to-uri.xsl path="\\localhost\c$\test dir\path-to-uri.xsl" 
 
 ... 
 
 path= \\localhost\c$\test dir\path-to-uri.xsl 
 
 uri= file:/localhost/c$/test%20dir/path-to-uri.xsl 
 
 URIResolver.resolve href="file:/localhost/c$/test%20dir/path-to-uri.xsl" base="file:/C:/test%20dir/path-to-uri.xsl" 
 
 Using parser com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser 
 
 Error at char 4 in xsl:sequence/@select on line 9 column 38 of path-to-uri.xsl: 
   
   FODC0002: I/O error reported by XML parser processing 
   
   file:/localhost/c$/test%20dir/path-to-uri.xsl: \localhost\c$\test dir\path-to-uri.xsl (The 
   
   system cannot find the path specified) 
 
 I/O error reported by XML parser processing file:/localhost/c$/test%20dir/path-to-uri.xsl: \localhost\c$\test dir\path-to-uri.xsl (The system cannot find the path specified) 
 
 ~~~ 
 

Back