> 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]

Reply via email to