My 2 cents (perhaps there is a more elegant solution, but consider the following nonetheless):
If the schema location is well-defined and referenceable as a URL, you may use the external-schema-location property of Xerces. This implies that you trust your local schemas more than the ones that may be referenced in incoming requests (if you're validating incoming requests). If you decide to do this, you should also define an EntityResolver that ignores schema locations in incoming requests. An equivalent solution would be to define an EntityResolver that does the schema lookup by itself. Your schema, on the other hand, is located under a webapp directory, and it is not clear (to me) if one can determine the absolute path for it. However, you don't have to do it. You can put it under WEB-INF/classes, or one of the subdirectories, and therefore make it loadable as a Java resource. Then you can define your own EntityResolver that will retrieve the schema from there whenever required. I also suggest that you use Xerces' grammar caching capabilities, because you probably don't want the schema to be reparsed for each request being validated. Cheers, Alex > -----Original Message----- > From: Siarhei Biarozkin [mailto:[EMAIL PROTECTED] > Sent: Wednesday, September 18, 2002 9:32 AM > To: [EMAIL PROTECTED] > Subject: Re: Validating schema file with target namespace? > > > Hi Sandy > most probably my problem is to do with the way I set the parser, anyway, > please have a look at my original message ( I updated the schemaLocation > there), > Am I wrong in assuming that setting systemId on an InputSource is an > alternative to using an EntityResolver for normalizing any relative URIs ? > Thanks > Sergey Beryozkin > > <! -- original message --> > > Hello, > My question is probably a basic one, but I can't browse the archives as > they're currently unavailable. > I'm using Xerces 2.1.0 from Tomcat 4.1.10 on Windows XP, I've > put the jars > in %CATALINA_HOME%common/endorced. > I'd like to validate the following instance: > <!-- /WEB-INF/devices/fusion/config/devices.xml --> > <dev:Devices xmlns:dev="http://zandar.com/devices" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > xsi:schemaLocation="http://www.zandar.com/devices devices.xsd"> > <!-- content is not shown --> > </dev:Devices> > > The schema, /WEB-INF/devices/fusion/config/devices.xsd : > <xs:schema targetNamespace="http://www.zandar.com/devices" > xmlns:xs="http://www.w3.org/2001/XMLSchema" > xmlns:tns="http://www.zandar.com/devices"> > <xs:element name="Devices"> > <!-- content is not shown --> > </xs:element> > </xs:schema> > > Here's the code : > > String configPath = "/WEB-INF/devices/fusion/config/devices.xml"; > InputSource configStream = new InputSource(new BufferedInputStream( > > getServletContext(). > > getResourceAsStream(configPath))); > > configStream.setSystemId("file://D:/Tech/Java/J2EE/tomcat4.1.10/we > bapps/zand > ar/WEB-INF/devices/fusion/config/devices.xml"); > > // I've also tried setting systemId with file:/// (the same as above), > getResource (configPath).toString() > > SAXParserFactory factory = SAXParserFactory.newInstance(); > SAXParser parser = factory.newSAXParser(); > XMLReader reader = parser.getXMLReader(); > try { > reader.setFeature("http://xml.org/sax/features/validation", > true); > > reader.setFeature("http://apache.org/xml/features/validation/schem > a", true); > } catch (Exception e) { > System.err.println("Cannot activate validation." + > e.getMessage()); > } > > ConfigContentHandler handler = new ConfigContentHandler(); > reader.setContentHandler(handler); > reader.setErrorHandler(handler); > reader.parse(configStream); > > I get an exception from Xerces that it's unable to locate a dev:Devices > element declaration; > I think my problem with systemId, as I've validated the above > instance with > XSV. > > ----- Original Message ----- > From: <[EMAIL PROTECTED]> > To: <[EMAIL PROTECTED]> > Sent: Wednesday, September 18, 2002 5:04 PM > Subject: Re: Validating schema file with target namespace? > > > > That's strange. > > > > The xerces distribution comes with some sample code and sample > data. Could > > you try validating the personal-schema.xml using one of the > samples (say, > > sax.Counter)? After setting the classpath, and switching to the "data" > > directory, > > > > java sax.Counter -v -s personal-schema.xml > > > > If this works, then it should be problem in how you are using > the parser. > > > > I don't have your original message. I supposed you've set all the > necessary > > features. (validation and validation/schema.) Did you register an > > EntityResolver? How did you invoke the parser? From the command > line? From > > which directory? Is the system property "user.dir" set? > > > > Thanks, > > Sandy Gao > > Software Developer, IBM Canada > > (1-905) 413-3255 > > [EMAIL PROTECTED] > > > > > > > > > > "Siarhei > > Biarozkin" To: > <[EMAIL PROTECTED]> > > <[EMAIL PROTECTED] cc: > > r.com> Subject: Re: Validating > schema file with target namespace? > > > > 09/18/2002 11:48 > > AM > > Please respond to > > xerces-j-user > > > > > > > > > > > > Hello, > > Thanks for your help ! > > I mistyped the schemaLocation in the email, > > validation still doesn't work with the following fragment : > > > > <dev:Devices xmlns:dev="http://zandar.com/devices" > > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > > xsi:schemaLocation="http://zandar.com/devices devices.xsd"> > > > > > > Cheers > > Sergey Beryozkin > > > > ----- Original Message ----- > > From: <[EMAIL PROTECTED]> > > To: <[EMAIL PROTECTED]> > > Sent: Wednesday, September 18, 2002 4:32 PM > > Subject: Re: Validating schema file with target namespace? > > > > > > > > <dev:Devices xmlns:dev="http://zandar.com/devices" > > > > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > > > > xsi:schemaLocation="http://www.zandar.com/devices devices.xsd"> > > > > > > Should be > > > > > > <dev:Devices xmlns:dev="http://zandar.com/devices" > > > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > > > xsi:schemaLocation="http://zandar.com/devices devices.xsd"> > > > > > > Sandy Gao > > > Software Developer, IBM Canada > > > (1-905) 413-3255 > > > [EMAIL PROTECTED] > > > > > > > > > > > > > > > "Siarhei > > > Biarozkin" To: > > <[EMAIL PROTECTED]> > > > <[EMAIL PROTECTED] cc: > > > r.com> Subject: Re: > Validating > > schema file with target namespace? > > > > > > 09/18/2002 04:40 > > > AM > > > Please respond to > > > xerces-j-user > > > > > > > > > > > > > > > > > > I have the same problem, where an instance and a schema are located in > > the > > > same directory : > > > <!-- instance doc, should be validated against devices.xsd --> > > > <dev:Devices xmlns:dev="http://zandar.com/devices" > > > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > > > xsi:schemaLocation="http://www.zandar.com/devices devices.xsd"> > > > > > > I'd assume though that the problem is with systemId; when I > submitted my > > > question few days ago I thought I'd get a quick reply... > > > I guess the only option is to get the source and try to find what's > > really > > > happening > > > Cheers > > > Sergey Beryozkin > > > ----- Original Message ----- > > > From: "Aleksandar Milanovic" <[EMAIL PROTECTED]> > > > To: <[EMAIL PROTECTED]> > > > Sent: Wednesday, September 18, 2002 1:05 AM > > > Subject: RE: Validating schema file with target namespace? > > > > > > > > > > I think your schema location should be: > > > > > > > > xsi:schemaLocation="http://mysite.com/Personal/ personal.xsd" > > > > > > > > Alex > > > > > > > > > -----Original Message----- > > > > > From: Gergely Gati > [mailto:[EMAIL PROTECTED] > > > > > Sent: Tuesday, September 17, 2002 4:25 PM > > > > > To: '[EMAIL PROTECTED]' > > > > > Subject: Validating schema file with target namespace? > > > > > > > > > > > > > > > Hi, > > > > > > > > > > I would like to use Xerces for batch XML validation but I stumbled > > into > > > a > > > > > following problem. > > > > > Xerces does not seem to load the schema file from the > same directory > > if > > > I > > > > > use the > > > > > targetNamespace stuff in the .xsd file. > > > > > > > > > > With xsi:noNamespaceSchemaLocation in the XML file and no > > > > > targetNamespace in > > > > > the XSD > > > > > file it works fine. > > > > > > > > > > Could anyone tell me what am I doing wrong? > > > > > > > > > > Is there a good example somewhere using Xerces with > targetNamespace > > in > > > the > > > > > XSD files? > > > > > > > > > > Thanks in advance, > > > > > Gergely > > > > > > > > > > > > > > > The root element in the XML file starts like this: > > > > > > > > > > <personnel > > > > > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > > > > > xmlns="http://mysite.com/Personal/" > > > > > xsi:schemaLocation=". personal.xsd"> > > > > > > > > > > The top lines of the .xsd files are: > > > > > > > > > > <?xml version="1.0" encoding="UTF-8"?> > > > > > <xsd:schema > > > > > targetNamespace="http://mysite.com/Personal/" > > > > > xmlns:xsd="http://www.w3.org/2001/XMLSchema" > > > > > xmlns="http://mysite.com/Personal/" > > > > > elementFormDefault="qualified" > > > > > attributeFormDefault="unqualified"> > > > > > > > > > > > > > > > Xerces version 2.1.0 > > > > > > > > > > > --------------------------------------------------------------------- > > > > > 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] > > > > > > > > > > > > > > > > > > > > > --------------------------------------------------------------------- > > > 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] > > > > > > > > > > > > > > > --------------------------------------------------------------------- > > 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] > > > > > > > > > --------------------------------------------------------------------- > 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]
