Wow.  Troublesome relatives!  I don't have any experience in this area,
so this may be a bone-headed idea, but can you extract the document's
directory and set the current working directory to that before parsing?
I haven't analyzed the code exhaustively, but in a quick search, it
looks like Xerces never sets the current directory.  That would explain
why relative paths are relative to the executable directory - that's
typically the initial working directory. 

> -----Original Message-----
> From: Elisha Berns [mailto:[EMAIL PROTECTED] 
> Sent: Monday, May 23, 2005 10:31 AM
> To: Jesse Pelton; [email protected]
> Subject: RE: Handling of schemaLocation attribute
> 
> Thanks for the really clear answers.
> 
> By the way, the issue of invalid URIs came up because the documents I
> need to parse have schemaLocation attributes with filenames that start
> with './' such as './Test.xsd'.  So the URI was formally correct, but
> because the file (xml and xsd) does not reside in the current working
> directory where the program is running I have to expand the 
> URI just to
> get the valid path to it.  
> 
> A simple expansion using Xerces XMLPlatformUtils::getFullPath(
> relative_path_to_xsd_file ) will create an invalid path due 
> to the file
> not residing in the current working directory, rather in a directory
> relative to the location of the host xml file.  And 
> consequently the xml
> file cannot be validated because the contents of schemaLocation cannot
> be processed correctly.
> 
> So to make this work I make a call to:
> 
> XMLCh const* szXsdFile =
> XMLPlatformUtils::weavePaths(base_path_of_xml_file,
> relative_path_of_xsd_file);
> 
> to get the full path to the xsd file.  Then I recreate the
> schemaLocation string with the 'massaged' path and call:
> 
> reader.setProperty(XMLUni::fgXercesSchemaExternalSchemaLocation,
> szLocation);
> 
> So really it's here that any whitespace in the path statements need to
> be encoded, not the initial URI.  So is there a simple library call,
> somewhere, in some library, that will fix up the whitespace 
> in filenames
> as required?
> 
> But this is so round-about, what's the alternative to fixing each
> relative path to a fully qualified path just so Xerces can 
> actually find
> the xsd file(s)?
> 
> This simple assumption used (in Xerces) that ./ is relative to the
> current working directory, and not the directory of the xml 
> file itself,
> begs the question if this works as intended, or is it a bug?
> 
> Thanks,
> 
> Elisha Berns
> 
> > -----Original Message-----
> > From: Jesse Pelton [mailto:[EMAIL PROTECTED]
> > Sent: Monday, May 23, 2005 5:22 AM
> > To: [email protected]; [EMAIL PROTECTED]
> > Subject: RE: Handling of schemaLocation attribute
> > 
> > Whitespace is illegal in URIs; it needs to be percent-encoded if
> > present.  See http://www.faqs.org/rfcs/rfc3986.html.  Odds are good
> that
> > you'll need additional massaging to transform a file path to a URI,
> such
> > as prepending file:/// and converting backslashes to 
> forward slashes.
> > RFC 3986 is the authority, though it is regrettably vague on
> filesystem
> > URIs.
> > 
> > Xerces may allow you to get away with strings that are 
> technically not
> > URIs.  If so, it's up to you to decide whether interoperability with
> > other Oses and/or parsers is important.  If it is, make your URIs
> valid.
> > 
> > > -----Original Message-----
> > > From: Elisha Berns [mailto:[EMAIL PROTECTED]
> > > Sent: Sunday, May 22, 2005 9:41 PM
> > > To: Xerces C++ Development
> > > Subject: Handling of schemaLocation attribute
> > >
> > > Does the handling of schemaLocation have a bug or a feature in
> Xerces
> > > 2.6?
> > >
> > > The schemaLocation attribute whose value syntax is pairs of
> namespace
> > > names/xsd file locations only works correctly when there are no
> space
> > > characters in the xsd file location.  Is this a bug or a feature?
> > >
> > > Under Win32 I can't predict or count on when the full path to the
> xsd
> > > filename will have space characters so something seems 
> broken here.
> > >
> > > I experimented with adding either single or double quotes 
> around the
> > > full path to the xsd file, but that doesn't work either.
> > >
> > > What am I missing about how to use schemaLocation and also:
> > >
> > > reader.setProperty(XMLUni::fgXercesSchemaExternalSchemaLocation, (
> > > void*)strLocation.c_str());
> > >
> > > works the same way.
> > >
> > > Thanks,
> > >
> > > Elisha Berns
> > > [EMAIL PROTECTED]
> > > tel. (310) 556 - 8332
> > > fax (310) 556 - 2839
> > >
> > >
> > >
> > >
> > >
> ---------------------------------------------------------------------
> > > 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