Hi Adam,

Try using the SchemaFactory.newSchema() method. The one which takes no
arguments. It caches based on schema location. That's the one I meant.

Thanks.

Michael Glavassevich
XML Parser Development
IBM Toronto Lab
E-mail: [EMAIL PROTECTED]
E-mail: [EMAIL PROTECTED]

"Adam Retter" <[EMAIL PROTECTED]> wrote on 11/11/2008 06:56:06
AM:

> Michael again thanks for the prompt reply ☺
>
> I have attempted to use SAXParserFactory, set up the Schemas and
> then use the XMLReader, unfortunately I get exactly the same
> problems as with the XMLGrammarPool approach. I guess internally
> both of these approaches are looking for a documents Schema based on
> its namespace. Because we have duplicate namespaces the second
> document/schema that uses the same namespace as the first
> document/schema fails.
>
> SchemaFactory schemaFactory = SchemaFactory.
> newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
>
> Source schemas[] = new Source[] {
>    new StreamSource(new File("c:\\1.xsd")),
>    new StreamSource(new File("c:\\2.xsd"))
> };
>
> Schema schema = schemaFactory.newSchema(schemas);
> SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
> saxParserFactory.setNamespaceAware(true);
> saxParserFactory.setValidating(true);
> saxParserFactory.setSchema(schema);
> XMLReader reader = saxParserFactory.newSAXParser().getXMLReader();
>
>
> If I then go on to use XMLReader to validate document a -
>
> <a xsi:noNamespaceSchemaLocation="c:\\1.xsd"></a>
>
> Then validation is fine.
>
>
> However if I try and validate document b -
>
> <b xsi:noNamespaceSchemaLocation="c:\\2.xsd"></b>
>
> Then validation fails with the message - SXXP0003: Error reported by
> XML parser: cvc-elt.1: Cannot find the declaration of element
>   'b'.
>
>
> If however I change the order of the loading of Schemas so that 2.
> xsd is loaded before 1.xsd then document b validates fine and
> document a fails validation (Cannot find declaration of element).
>
> This implies to me that the Validator identifies the relationship
> between documents and their grammar by namespace, because the
> namespace is the same in this case (and probably many other cases),
> validating document b fails because the validator attempts to use
> the schema 1.xsd.
>
> I may have missed something? Or there may be another approach that I
> have not seen?
>
> Otherwise, I would be happy to work with the Xerces team to fix this
> problem; I am sure there must be many different documents and
> grammars out there that whilst different use the same namespace and
> because of this collide - I know I am not the only person who has
> experiences issue.
>
> I would propose that the Schemas location should be used for
> comparison, falling back to the namespace if no location exists.
Thoughts?
>
> How can we move this forward please?
>
>
> Thanks Adam.
> ________________________________________
> From: Michael Glavassevich [mailto:[EMAIL PROTECTED]
> Sent: 10 November 2008 16:56
> To: j-users@xerces.apache.org
> Subject: RE: Problem validating using XMLGrammarPool with different
> Grammars with no namespace
>
> Hi Adam,
>
> "Adam Retter" <[EMAIL PROTECTED]> wrote on 11/10/2008
> 11:00:53 AM:
>
> > Thanks for the reply Michael,
> >
> > Regarding the JAXP Validation API - I don't really understand how I
> > can use that with XMLReader for document parsing and validation
> > using SAX. Any ideas?
>
> Start with a SAXParserFactory [1], set the Schema object on it and
> namespace awareness to true. Getting the XMLReader [2] should be
> straightforward from there.
>
> > Regards Xerces, I naively assumed that the Sun JDK fork of Xerces
> > would have very minor changes.
>
> A lot of people assume that but they actually are quite different
> and seem to keep moving on divergent paths.
>
> > Subsequently I have downloaded Xerces 2.9.1 and tried this in place
> > of Sun's Xerces fork, unfortunately I am still getting the same
> > problem and have doubly checked that I am now using org.apache.
> > xerces.* classes and not the Sun ones.
> >
> > Again, looking through the (real) Xerces source I see the same
> > comment in Xerces XMLSchemaValidator albeit now on line 1452.
> >
> > // store the external schema locations. they are set when reset is
called,
> > // so any other schemaLocation declaration for the same namespace will
be
> > // effectively ignored. becuase we choose to take first location hint
> > // available for a particular namespace.
>
> Unless you're setting the external schema location properties on the
> parser the comment you found is probably a red herring.
>
> > Thanks
>
> Thanks.
>
> [1] http://xerces.apache.org/xerces2-
> j/javadocs/api/javax/xml/parsers/SAXParserFactory.html
> [2] http://xerces.apache.org/xerces2-
> j/javadocs/api/javax/xml/parsers/SAXParser.html#getXMLReader()
>
> Michael Glavassevich
> XML Parser Development
> IBM Toronto Lab
> E-mail: [EMAIL PROTECTED]
> E-mail: [EMAIL PROTECTED]
>
> Registered Office: 7 Abbey Court, Eagle Way, Sowton, Exeter, Devon, EX2
7HY
> Registered Number 2892803 Registered in England and Wales
>
> This email has been scanned by the MessageLabs Email Security System.
> For more information please visit http://www.messagelabs.com/email
>
> The information contained in this e-mail is confidential and may be
> subject to
> legal privilege. If you are not the intended recipient, you must not
> use, copy,
> distribute or disclose the e-mail or any part of its contents or take any

> action in reliance on it. If you have received this e-mail in error,
please
> e-mail the sender by replying to this message. All reasonable
> precautions have
> been taken to ensure no viruses are present in this e-mail. Landmark
> Information
> Group Limited cannot accept responsibility for loss or damage
> arising from the
> use of this e-mail or attachments and recommend that you subject these to

> your virus checking procedures prior to use.

Reply via email to