you shouldn't use schema caching if you have different schemas sharing the same namespace (being this the empty one or not). A namespace URI is a "domain", is like saying "when I am talking about music a record is something that has songs in it; when talking about sports a record is the best performance". You are using two schemas, sharing the same "domain" label: nothing wrong with that, provided that you don't mix them.
So, either:
a) turn off schema caching,
b) use different DOMBuilder/DOMParser to parse XML documents using different schemas
c) use a targetNamespace in your schemas
Alberto
At 14.42 05/02/2004 +0100, Erik Rydgren wrote:
We have just moved from validation through DTD�s to validation through schemas. But after that I had much trouble parsing documents. The first documents parsed went just fine and everything was peachy. Then I came to a point where a document based on a different schema should be parsed. And the system goes haywire and clamed that the root element wasn�t declared. I thought WTF and started debugging. I quickly asserted that the document and schema is valid (thank god for XMLSPY). So the problem was indeed Xerces. A couple of aggravating debugging hours later I have pinpointed the problem.
There is IMHO a serious bug in GrammarResolver. Parsed schemas is cached on target namespace. Because we don�t put our schemas inside namespaces and use noNamespaceSchemaLocation, all our parsed schemas are hashed on an empty URI.
Now you're thinking: So what is the problem?
Well the problem is this. First we parse a document based on schema A with root element A_root. The schema is cached on ��. Everything is fine. Then we parse another document based on schema A. The cache finds the schema for �� and validates. Everything is fine. THEN we parse a document based on schema B with root element B_root. The parser looks in the cache, finds the schema for �� (type A) and validates. This of course results in a shitload of errors and a failed parse. Of course, if I turn of the caching of schemas then the problem doesn�t occur.
To hash on target namespace in the cache seems like a good idea when using namespaces but it doesn�t work for the default namespace. I probably don't see the whole picture here, but why hash on the target namespace and not the systemid of the loaded schema document?
Erik Rydgren Software engineer
Aptic AB K�satorpsv�gen 5 SE 541 34 SK�VDE Sweden
tfn: +46(0)500-416506 fax: +46(0)500-413215 mail: [EMAIL PROTECTED] site: www.aptic.se
--------------------------------------------------------------------- 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]
