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]

Reply via email to