You are viewing a plain text version of this content. The canonical link for it is here.
Posted to j-users@xerces.apache.org by Er...@inventivedesigners.com on 2003/02/19 16:18:55 UTC

Relative URI resolving - no protocol error (very confusing)

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: Erik_Vanherck@inventivedesigners.com

"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: xerces-j-user-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-j-user-help@xml.apache.org