Validated parsing: when grammar is found, the entity resolver is not cal 2003-02-19 - By Carla Spruit
Hi Sandy, Thank you for the immediate response! I am not sure if I my question was completely clear. Maybe I can explain my problem best with the following scenario: First parse the well known 'personal-schema.xml' with attribute xsi:noNamespaceSchemaLocation='personal.xsd' with validation. Then parse another valid document with schema, say, 'test.xml' with attribute xsi:noNamespaceSchemaLocation='test.xsd' with validation. If no grammarpool is used, everything goes fine. If a grammarpool is used, during parsing of the second document, an exception is thrown saying that the element declaration of the root element of 'test.xml' is not found. This error occurs because both documents have schema with targetnamespace = null but schema 'test.xml' is not equal to 'personal.xsd'. The second document is validated with the grammar of the first document. To my opinion, this scenario not so very unlikely to happen. At least in our application this can be a problem as it requires the use of a grammarpool and the documents to be parsed are not known in advance. Worst of all is the confusing errormessage. As I have my own Grammarpool implementation, I already tried to implement getGrammar. There are three things that have to be handled to make this work : 1) Grammarpool function retrieveInitialGrammarSet must always return null, otherwise getGrammar may never be called. 2) To use an entity resolver from within the getGrammar function, a system id is required. Unfortunately, the systemId of the XSDDescription parameter of getGrammar is not yet set. Instead, parameterHints can be used. Do I try each hint one by one? 3) How do I get access to the entityresolver used by the validator from within the grammarpool? Using getGrammar to handle the case may be possible, but I personally would prefer the entity resolver to be called by the validator. I really hope that there are (or will be) easier ways to handle the case. Thanks in advance, Carla Spruit ----- Oorspronkelijk bericht ----- Van: <sandygao@(protected)> Aan: <xerces-j-user@(protected)> Verzonden: vrijdag 14 februari 2003 19:16 Onderwerp: Re: Validated parsing: when grammar is found, the entity resolver is not called It's not likely that we'll change the behavior, but what you want can be achieved without such change. When the grammar is found in the grammar bucket, we have to use it, because that's loaded when the current instance document is parsed, and (by your definition) belongs to that instance. For the case where the grammar is found in the grammar pool, you can implement your own grammar pool, and return the proper grammar when getGrammar is called. (You can even call your entity resolver from within the grammar pool, if you want to.) Cheers, Sandy Gao Software Developer, IBM Canada (1-905) 413-3255 sandygao@(protected) "Carla Spruit" <carla@(protected) To: <xerces-j-user@(protected)> > cc: Subject: Validated parsing: when grammar is found, the entity resolver is not 02/14/2003 11:58 called AM Please respond to xerces-j-user Hi, My question concerns validated parsing with an entity resolver and a grammar pool. The schema validator identifies a schema grammar by its target namespace. When the validator finds a grammar with this target namespace in the grammar bucket or in the grammar pool, the entity resolver is no longer called. I know this is not a bug and I can understand that the validator skips the entity resolver to enhance performance, however I would prefer the entity resolver to be called as it would give me more control during validated parsing. One of the reasons I would like more control is that I want to prevent the validator to use a grammar that does not belong to the document being validated, even though it has the same target namespace. Especially in cases where the target namespace is null, this is likely to happen. Is there any chance that you change this behaviour in the future? Thanks in advance! Carla Spruit
X-Hive Corporation (www.x-hive.com) email: carla@(protected) phone: +31 010 2818080 --------------------------------------------------------------------- To unsubscribe, e-mail: xerces-j-user-unsubscribe@(protected) For additional commands, e-mail: xerces-j-user-help@(protected) --------------------------------------------------------------------- To unsubscribe, e-mail: xerces-j-user-unsubscribe@(protected) For additional commands, e-mail: xerces-j-user-help@(protected)
|
|