> 2) file: "file:fonts/config.xml" is NOT a relative URI, so it won't be resolved properly.
> 3) fonts/config.xml This should work, because it's a valid relative URI. > it refuses to do so when that base URI includes spaces > (think about a filename on windows). URI's are not file names. You need to convert file names to URI's before passing them to the parser. (By replacing spaces with %20, for example.) The above is what you should do. Another thing you can do is to upgrade to Xerces 2.3.0, which (re)allowed spaces in URI's. Another thing introduced in 2.3.0 was a feature "standard-uri-conformant" [1], which, when turned on, enforces URI rules. For example, when this feature is on, things like "c:\\abc\def", "\\host\dir\file" and "a b\c d" will be rejected, because they are not valid URI's. So, if for historical reasons, you have to use non-URI filenames, then use 2.3.0 with the feature off; if you want your program/xml to be portable, turn the feature on, and only use valid URI's. [1] http://xml.apache.org/xerces2-j/features.html#standard-uri-conformant Cheers, Sandy Gao Software Developer, IBM Canada (1-905) 413-3255 [EMAIL PROTECTED] [EMAIL PROTECTED] signers.com To: [EMAIL PROTECTED] cc: 02/19/2003 10:18 AM Subject: Relative URI resolving - no protocol error (very confusing) Please respond to xerces-j-user Hi, since the xerces mailing list archives appear to be down, I'm submitting my question here. Forgive me if it has been asked a thousand times before ;-) I'm very confused as to how relative URI's are treated by Xerces. Currently I'm using xerces 2.2.1. I have an xml file containing a relative entity reference <!DOCTYPE fopconfig [ <!ENTITY fontsconfig SYSTEM "fonts/config.xml"> ]> I tried the following variations but it goes wrong no matter what. 1) file:/// There used to be file:///fonts/config.xml for xerces 1.4 I admit it's plain wrong if you read the URI specifications but it worked and so when switching to xerces 2.x I had no problem writing file:fonts/config.xml since the previous one would indicate the root of the filesystem of the current host. 2) file: It works but unfortunately, there is a catch. Xerces does not resolve this to the location of the xml file containing the entity but against the "current directory" of the JVM. It appears the file: URI scheme has no provisions for relative URI's. This would explain the behavior since normally a relative URI needs to be resolved against the base URI of the document that contains the entity declaration. So there are good reasons why the two previous approaches shouldn't work. But I can't find a good reason why the third doesn't 3) the relative URI as seen above. Xerces does resolve the relative URI in function of the base URI of the document which is exactly what I need and solves all my other issues but for some reason it refuses to do so when that base URI includes spaces (think about a filename on windows). It gives an error on the relative URI of the entity reference saying "no protocol" which I assume has something todo with using java.net.URL inside Xerces. I'm using Xerces as a SAX parser using the org.xml.sax.InputSource class with a system identifier. What does that identifier need to look like to make this work ? file:/path ? path ? path in urlencoded form (%20 and such) ? ... For once I just want to know what I need to use in BOTH the entity reference AND for the inputsource system ID (which I assume gets used as base URI) to make it standard compliant and correctly read by xerces ? Thanks for any input anyone has ;-) --------- Erik Vanherck - System Programmer & Designer Inventive Designers Visit http://www.inventivedesigners.com Visist http://www.inventivedesigners.com/scriptura for Scriptura information ! Phone: +32 - 3 - 8210170 Fax: +32 - 3 - 8210171 Email: [EMAIL PROTECTED] "Computers in the future may weigh no more than 1.5 tons." - Popular Mechanics, forecasting the relentless march of science, 1949 --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
