Hi Henry,
Yes this should work but no it doesn't. Although this does come up
periodically, so far no one has been sufficiently motivated to fix this
particular limitation. I don't think it would be hard to fix; it'd just be
a matter of being careful enough not to break anything/hurt performance.
So all that's really needed is for someone to step up to the plate and
create a patch...
Cheers,
Neil
Neil Graham
XML Parser Development
IBM Toronto Lab
Phone: 905-413-3519, T/L 969-3519
E-mail: [EMAIL PROTECTED]
Henry Miller
<[EMAIL PROTECTED]> To: [EMAIL PROTECTED]
cc:
09/11/2003 05:40 Subject: Re:
XMLGrammarPreparser question
PM
Please respond to
xerces-j-user
So sorry about that. I was so wrapped up in getting the other bits of
data I forgot the most important piece -- the data!
The code I'm using borrowed heavily from XMLGrammarBuilder. When you
don't know what you're doing, "steal" from the best, I suppose. :-)
The input file is this:
<?xml version='1.0' encoding='UTF-8' ?>
<!ENTITY % entDec SYSTEM "EntityDecl.dtd" >
%entDec;
<!ELEMENT nameList (name, alias?)+>
<!ELEMENT name (%flName;) >
<!ELEMENT alias (%flName;) >
Note: this a simpler version of the input file I used to first
report, so the failure is actually on 'flName' instead of 'CONTACT'.
However in either file, the failure is exactly the same.
The external data file (EntityDecl.dtd) contains:
<?xml version='1.0' encoding='UTF-8' ?>
<!ENTITY % flName " firstName, lastName " >
<!ELEMENT firstName (#PCDATA) >
<!ELEMENT lastName (#PCDATA) >
There's nothing else in this file. Both files sit next to each other
in the same directory.
I'm using Xerces-J 2.5.0 on Linux, but the same problem is manifested
under Xerces-J 2.4.0, running on Linux (SuSE 8.2) and Solaris (SunOS
5.7).
Interestingly enough, when I combined the two into a "master" file,
the entities are resolved just fine (This DTD works):
<?xml version='1.0' encoding='UTF-8' ?>
<!ENTITY % flName " firstName, lastName " >
<!ELEMENT firstName (#PCDATA) >
<!ELEMENT lastName (#PCDATA) >
<!ELEMENT nameList (name, alias?)+ >
<!ELEMENT name (%flName;) >
<!ELEMENT alias (%flName;) >
Oh, please tell me it's something I haven't tried yet! This is
stopping me (and my users) cold in their tracks!
--Henry
At 8:27 PM +0000 9/11/03, Jeffrey Rodriguez wrote:
>Hi Henry,
>So a couple of questions.
>
>1) What is inputFile in your code
>
>>>if (isDTD) { // Process DTD input file g =
>>>preparser.preparseGrammar(XMLGrammarDescription.XML_DTD,
> >> stringToXIS(inputFile) );
>>> } else {
>
>2) What does the DTD you are preparsing looks like?
>
>
>.... I don't know if you already look at the XMLGrammarBuilder sample.
>
>
>That sample only sets the following features:
>
>
> preparser.setProperty(GRAMMAR_POOL, grammarPool);
> preparser.setFeature(NAMESPACES_FEATURE_ID, true);
> preparser.setFeature(VALIDATION_FEATURE_ID, true);
> // note we can set schema features just in case...
> preparser.setFeature(SCHEMA_VALIDATION_FEATURE_ID, true);
> preparser.setFeature(SCHEMA_FULL_CHECKING_FEATURE_ID,
>schemaFullChecking);
> // parse the grammar...
>
>>
>>Without setting anything special in the XMLGrammarPreparser,
>>shouldn't the Xerces parse process automatically resolve external
>>entities
>>
>
>About your question..... yes it should. So if your DTD is fine, how
>are you declaring external
>entities in your DTD?
>
>I am a little confuse about your statement but I have not seen your DTD.
>
>
>Regards,
>
> Jefrey Rodriguez
> Silicon Valley
>
>
>
>
>
>
>
>
>>From: Henry Miller <[EMAIL PROTECTED]>
>>Reply-To: [EMAIL PROTECTED]
>>To: [EMAIL PROTECTED]
>>Subject: XMLGrammarPreparser question
>>Date: Thu, 11 Sep 2003 10:57:16 -0500
>>
>>I posted this question to xerces-j-dev, but got no response so I'll
>>try here. Sorry if you've seen it before...
>>
>>Please. I need an answer from somemone who knows better than I, here
goes:
>>
>>
>>Without setting anything special in the XMLGrammarPreparser,
>>shouldn't the Xerces parse process automatically resolve external
>>entities?
>>
>>I mean, if I were validating an XML instance document using a DTD
>>that contains externally defined parameter entities, doesn't the
>>parser automatically resolve the external entities there in order
>>to validate the document?
>>
>>So why can't I get the preparser to resolve the same entities, if I
>>just want to cache the grammar from the same DTD in the example
>>above? The (pre)parser itself keeps giving me an error of
>>"EntityNotDeclared" for the only external entity defined in my test.
>>
>>Has anyone run into this situation?
>>
>>What am I not telling the XMLGrammarPreparser? I am not setting any
>>features or properties (actually I tried setting relevant features,
>>but they seem to be ignored by the parser).
>>
>>Can someone help me? Any pointers?? I'm running with Xerces-J 2.5.0.
>>
>>
>>As a footnote to the original question I've posted, here's some
>>additional info to my problem:
>>
>>I'm setting features within my preparser object, but they are
>>definitely being ignored when it runs -- I've even misspelled them
>>purposely just to see if the code would complain. Same errors as
>>before resulted, so essentially *nothing* happened. Should I report
>>a bug in the preparser?
>>
>>My test code is as follows (much of it borrowed from the
>>XMLGrammarBuilder.java sample program) :
>>
>> SymbolTable sym = new SymbolTable(BIG_PRIME);
>> XMLGrammarPreparser preparser = new XMLGrammarPreparser(sym);
>> XMLGrammarPoolImpl grammarPool = new XMLGrammarPoolImpl();
>>
>> if(isDTD) {
>>
>> XMLDTDLoader grammarLoader = new XMLDTDLoader(sym, grammarPool);
>> preparser.registerPreparser(XMLGrammarDescription.XML_DTD,
>>grammarLoader);
>>
>> } else {
>>
>> preparser.registerPreparser(XMLGrammarDescription.XML_SCHEMA,
null);
>>
>> }
>>
>> preparser.setGrammarPool(grammarPool);
>> preparser.setProperty(GRAMMAR_POOL, grammarPool);
>> preparser.setProperty(SYMBOL_TABLE, sym);
>>
>> preparser.setFeature(NAMESPACES_FEATURE_ID, true);
>> preparser.setFeature(VALIDATION_FEATURE_ID, false);
>> preparser.setFeature(SCHEMA_VALIDATION_FEATURE_ID, false);
>>
>> // Set these to see if preparser will listen to them:
>>
>>preparser.setFeature("
http://xml.org/sax/features/external-parameter-entities",
>>true);
>>
>>preparser.setFeature("
http://apache.org/xml/features/continue-after-fatal-error",
>>true);
>>
>>preparser.setFeature("
http://apache.org/xml/nonvalidating/load-dtd-grammar",
>>true);
>>
>>preparser.setFeature("
http://apache.org/xml/nonvalidating/load-external-dtd",
>>true);
>>
>> // parse the grammar...
>> Grammar g = null;
>> try {
>> if (isDTD) {
>> // Process DTD input file
>> g = preparser.preparseGrammar(XMLGrammarDescription.XML_DTD,
>> stringToXIS(inputFile) );
>> } else {
>> // Process schema input file
>> g = preparser.preparseGrammar(XMLGrammarDescription.XML_SCHEMA,
>> stringToXIS(inputFile) );
>> }
>>
>>
>>The problem is with DTDs being read. I get in return the message:
>>
>>[Error] :-1:-1:
>>http://www.w3.org/TR/1998/REC-xml-19980210#EntityNotDeclared?CONTACT
>>[Fatal Error] :-1:-1:
>>http://www.w3.org/TR/1998/REC-xml-19980210#MSG_OPEN_PAREN_OR_ELEMENT_TYPE_REQUIRED_IN_CHILDREN?Address
>>
>>Error found during parsing:
>>http://www.w3.org/TR/1998/REC-xml-19980210#MSG_OPEN_PAREN_OR_ELEMENT_TYPE_REQUIRED_IN_CHILDREN?Address
>>
>>Stack Trace:
>>:::::-1:-1:
http://www.w3.org/TR/1998/REC-xml-19980210#MSG_OPEN_PAREN_OR_ELEMENT_TYPE_REQUIRED_IN_CHILDREN?Address
>> at
>>org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
>> at
>>org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
>> at org.apache.xerces.impl.XMLScanner.reportFatalError(Unknown
Source)
>> at
>>org.apache.xerces.impl.XMLDTDScannerImpl.scanChildren(Unknown
>>Source)
>> at
>>org.apache.xerces.impl.XMLDTDScannerImpl.scanElementDecl(Unknown
>>Source)
>> at org.apache.xerces.impl.XMLDTDScannerImpl.scanDecls(Unknown
Source)
>> at
>>org.apache.xerces.impl.XMLDTDScannerImpl.scanDTDExternalSubset(Unknown
>>Source)
>> at
>>org.apache.xerces.impl.dtd.XMLDTDLoader.loadGrammar(Unknown Source)
>> at
>>org.apache.xerces.parsers.XMLGrammarPreparser.preparseGrammar(Unknown
>>Source)
>> at com.eti.rs.xml.XMLParser.main(Unknown Source)
>>
>>Clearly the preparser stopped before any of my code starts. So what
>>did I forget to tell the preparser? Or is this really a bug?
>>
>>Any reply is more than I had before. Thanks for reading this far!
>>--
>>
>>
>>--Henry Miller
>>
>>[EMAIL PROTECTED]
>>Evolutionary Technologies International, Inc.
>>
>>---------------------------------------------------------------------
>>To unsubscribe, e-mail: [EMAIL PROTECTED]
>>For additional commands, e-mail: [EMAIL PROTECTED]
>>
>
>_________________________________________________________________
>Express yourself with MSN Messenger 6.0 -- download now!
>http://www.msnmessenger-download.com/tracking/reach_general
>
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: [EMAIL PROTECTED]
>For additional commands, e-mail: [EMAIL PROTECTED]
--
--Henry Miller
[EMAIL PROTECTED]
Evolutionary Technologies International, Inc.
---------------------------------------------------------------------
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]