You are viewing a plain text version of this content. The canonical link for it is here.
Posted to c-users@xerces.apache.org by Michael Weitzel <mi...@uni-siegen.de> on 2007/05/31 13:33:49 UTC
Overriding a DTD specification / DOMBuilder::loadGrammar
Hi,
The DOCTYPEs of my XML documents usually specify the name of the DTD
without a path name, e.g. <!DOCTYPE measurement SYSTEM "mm.dtd">.
As long as the DTD file is found in the current directory validation
takes place and the DOM tree is free of additional white space. In case
the DTD file is not found, additional white space is added to the DOM
tree and my application fails (I'm using DOMText::isIgnorableWhiteSpace()).
I have two questions:
1. is there a way to make the absence of the DTD file a hard error?
Xerces should throw an exception of the DTD file is not found.
2. since the binaries of my programs are installed in a system path
(e.g. /usr/local/bin) and application data resides in
/usr/local/share/... it is annoying to be forced to keep the DTD
file in the directory where the parser application is run. It would
be nice to override the document's DTD spec/system Id with a hard
coded one (e.g. /usr/local/share/.../mm.dtd).
I made several unsuccessful attempts with DOMReader::loadGrammar() and
XMLUni::fgXercesUseCachedGrammarInParse := true.
Since my documents are fairly complicated I will probably switch to XML
Schema in the near future (in case there is no solution for DTD
validation). Please help :-)
regards,
Michael
--
Re: Overriding a DTD specification / DOMBuilder::loadGrammar
Posted by Michael Weitzel <mi...@uni-siegen.de>.
Hi Alberto,
This works. I didn't realize that this also works for DOM (with the
corresponding DOMEntityResolver). IMHO the FAQ ist definitely too short...
Many thanks! :)
Michael
Alberto Massari wrote:
> Hi Michael,
> if you use an entity resolver (see the Redirect sample) you can load
> your DTD from any folder you prefer; but Xerces should already try to
> locate mm.dtd from the same folder where the XML is located (unless you
> are using a MemBufInputSource, without setting an appropriate system id
> for it).
>
> Alberto
>
> At 13.33 31/05/2007 +0200, Michael Weitzel wrote:
>> Hi,
>>
>> The DOCTYPEs of my XML documents usually specify the name of the DTD
>> without a path name, e.g. <!DOCTYPE measurement SYSTEM "mm.dtd">.
>>
>> As long as the DTD file is found in the current directory validation
>> takes place and the DOM tree is free of additional white space. In case
>> the DTD file is not found, additional white space is added to the DOM
>> tree and my application fails (I'm using
>> DOMText::isIgnorableWhiteSpace()).
>>
>> I have two questions:
>>
>> 1. is there a way to make the absence of the DTD file a hard error?
>> Xerces should throw an exception of the DTD file is not found.
>>
>> 2. since the binaries of my programs are installed in a system path
>> (e.g. /usr/local/bin) and application data resides in
>> /usr/local/share/... it is annoying to be forced to keep the DTD
>> file in the directory where the parser application is run. It would
>> be nice to override the document's DTD spec/system Id with a hard
>> coded one (e.g. /usr/local/share/.../mm.dtd).
>>
>> I made several unsuccessful attempts with DOMReader::loadGrammar() and
>> XMLUni::fgXercesUseCachedGrammarInParse := true.
>>
>> Since my documents are fairly complicated I will probably switch to XML
>> Schema in the near future (in case there is no solution for DTD
>> validation). Please help :-)
--
Re: Overriding a DTD specification / DOMBuilder::loadGrammar
Posted by Alberto Massari <am...@datadirect.com>.
Hi Michael,
if you use an entity resolver (see the Redirect sample) you can load
your DTD from any folder you prefer; but Xerces should already try to
locate mm.dtd from the same folder where the XML is located (unless
you are using a MemBufInputSource, without setting an appropriate
system id for it).
Alberto
At 13.33 31/05/2007 +0200, Michael Weitzel wrote:
>Hi,
>
>The DOCTYPEs of my XML documents usually specify the name of the DTD
>without a path name, e.g. <!DOCTYPE measurement SYSTEM "mm.dtd">.
>
>As long as the DTD file is found in the current directory validation
>takes place and the DOM tree is free of additional white space. In case
>the DTD file is not found, additional white space is added to the DOM
>tree and my application fails (I'm using DOMText::isIgnorableWhiteSpace()).
>
>I have two questions:
>
> 1. is there a way to make the absence of the DTD file a hard error?
> Xerces should throw an exception of the DTD file is not found.
>
> 2. since the binaries of my programs are installed in a system path
> (e.g. /usr/local/bin) and application data resides in
> /usr/local/share/... it is annoying to be forced to keep the DTD
> file in the directory where the parser application is run. It would
> be nice to override the document's DTD spec/system Id with a hard
> coded one (e.g. /usr/local/share/.../mm.dtd).
>
>I made several unsuccessful attempts with DOMReader::loadGrammar() and
>XMLUni::fgXercesUseCachedGrammarInParse := true.
>
>Since my documents are fairly complicated I will probably switch to XML
>Schema in the near future (in case there is no solution for DTD
>validation). Please help :-)
>
>regards,
>
>Michael
>--