[xsd-users] External entity declaration in instance documents

Florian Paul Schmidt fschmidt at techfak.uni-bielefeld.de
Thu Aug 26 18:29:19 EDT 2010


Boris Kolpackov wrote:
> Hi Florian,
>
> Florian Schmidt <fschmidt at techfak.uni-bielefeld.de> writes:
>
>   
>> since xerces-c 2 does not support XInclude (or at least so i have read
>> in the mailing list archives) i'm trying to use external entity
>> declarations to assemble instance documents..
>>     
>
> Xerces-C++ 3-series has basic XInclude support thought it doesn't play
> very nicely with XML Schema validation (your can find out more on this
> by searching the xsd-users mailing list archive).
>
>   

Yeah, i read about that. Sadly i cannot really install Xerces-C++ 3.x 
here at my university..
> The nice thing about external entities is that they are expanded before
> validation so XML Schema validation will work well with this method.
>   

Great, so it would be great if i got this to work..
>> I have included below a typical instance document. I have disabled
>> validation using the dont_validate flag. Sadly the parser throws an
>> exception:
>>
>> [ParsingErrorHandler]: "An exception occurred! Type:RuntimeException,
>> Message:When reusing the Grammar, no internal subset is allowed" in
>> line: 3, column: 23
>>     
>
> This Xerces-C++ error occurs only in very specific situations: 
>
> 1. When you try to cache a grammar from parse and the XML document
>    contains internal DTD subset (like the one in your sample document).
>
> 2. When you use a cached grammar in parse and this grammar is DTD
>    and the XML document contains internal DTD subset.
>
> The parsing functions generated by XSD do not perform any grammar 
> caching. In fact, I tried an XML document which uses an external
> entity for fragment inclusion with the 'library' example (both 
> validation enabled and disabled) as well as the 'caching' example
> and everything works without any errors with Xerces-C++ 2.8.0 and
> 3.1.1. So it seems there is something special you do for parsing.
> Perhaps you are setting up your own parser?
No, i'm really just using the generated parsing functions directly. The 
only thing i do is to specify the dont_validate flag.. I am pretty sure 
this worked with XSD 3.2 and stopped working with XSD 3.3. I will test 
again tomorrow..

Regards,
Flo



More information about the xsd-users mailing list