I've applied the other two patches and committed them.

I'm going to reject this one.  It doesn't conform to any Schema
Working Drafts. I'm semi open to being convinced to the contrary,
but I'll need a really good justification.

Also, I couldn't get the cygwin patch to correctly apply your
patches.  Could you try context diffs next time?  Maybe Cygwin
would like those better.

Ted
----- Original Message -----
From: "George T. Joseph" <[EMAIL PROTECTED]>
To: "xerces-dev" <[EMAIL PROTECTED]>
Sent: Friday, January 07, 2000 12:00 AM
Subject: One more...Changes for XMLParser.java


> This one is definitely in the "use at your own risk" category.  I needed
the capability for an XML document to be validated from a
> Schema AND include short fragments.  Currently you can have a DOCTYPE with
an internal DTD and ENTITY definitions OR you can
> validate from a Schema, but not both.  I got fed up with trying to sort
through XLink, XPointer, XFragment, XPath, the XSchema 12/17
> draft, and the rest of the XYouGottaBeKiddings so I took the brute force
approach and patched XMLParser.java to get external
> entities from an internal DTD subset but still validate the rest of the
document (and the included entities) against a Schema.
>
> <!DOCTYPE document
> [
> <!ENTITY abc SYSTEM "abc.xml">
> ]>
>
> <document xmlns="doc.xsd">
> ...
> &abc;
> ...
> </document>
>
> The patch to XMLParser.java works for me and is certainly not long-term
but I would have otherwise had to scrap Schemas in my
> project and write a ton of custom validation code to supplement the DTD.
I've been looking at XMLParser for only a few hours (and
> it's now 3AM) so if anyone sees problems in the appended diff or can point
out alternatives I might have missed, I'd be glad to hear
> about them.
>
> George
> ***************************************
>
>
> *** XMLParserOrig.java Wed Jan 05 15:12:16 2000
> --- XMLParser.java Fri Jan 07 01:04:08 2000
> ***************
> *** 2005,2011 ****
>       /** Scan doctype decl. */
>       public void scanDoctypeDecl(boolean standalone) throws Exception {
>           fScanningDTD = true;
> !         fCheckedForSchema = true;
>           fStandaloneDocument = standalone;
>           fValidator = fDTDValidator;
>           fDTDValidator.scanDoctypeDecl(standalone);
> --- 2005,2011 ----
>       /** Scan doctype decl. */
>       public void scanDoctypeDecl(boolean standalone) throws Exception {
>           fScanningDTD = true;
> ! //        fCheckedForSchema = true;
>           fStandaloneDocument = standalone;
>           fValidator = fDTDValidator;
>           fDTDValidator.scanDoctypeDecl(standalone);
> ***************
> *** 2413,2419 ****
>       public boolean startReadingFromEntity(int entityName, int
readerDepth, int context) throws Exception {
>           if (context > XMLEntityHandler.CONTEXT_IN_CONTENT)
>               return startReadingFromParameterEntity(entityName,
readerDepth, context);
> !         int entityHandle = fValidator.lookupEntity(entityName);
>           if (entityHandle < 0) {
>               int minorCode = XMLMessages.VC_ENTITY_DECLARED;
>               int errorType =
XMLErrorReporter.ERRORTYPE_RECOVERABLE_ERROR;
> --- 2413,2419 ----
>       public boolean startReadingFromEntity(int entityName, int
readerDepth, int context) throws Exception {
>           if (context > XMLEntityHandler.CONTEXT_IN_CONTENT)
>               return startReadingFromParameterEntity(entityName,
readerDepth, context);
> !         int entityHandle = fDTDValidator.lookupEntity(entityName);
>           if (entityHandle < 0) {
>               int minorCode = XMLMessages.VC_ENTITY_DECLARED;
>               int errorType =
XMLErrorReporter.ERRORTYPE_RECOVERABLE_ERROR;
> ***************
> *** 2432,2438 ****
>               return false;
>           }
>           if (context == CONTEXT_IN_CONTENT) {
> !             if (fValidator.isUnparsedEntity(entityHandle)) {
>                   Object[] args = { fStringPool.toString(entityName) };
>                   fErrorReporter.reportError(fErrorReporter.getLocator(),
>                                              XMLMessages.XML_DOMAIN,
> --- 2432,2438 ----
>               return false;
>           }
>           if (context == CONTEXT_IN_CONTENT) {
> !             if (fDTDValidator.isUnparsedEntity(entityHandle)) {
>                   Object[] args = { fStringPool.toString(entityName) };
>                   fErrorReporter.reportError(fErrorReporter.getLocator(),
>                                              XMLMessages.XML_DOMAIN,
> ***************
> *** 2443,2449 ****
>                   return false;
>               }
>           } else {
> !             if (fValidator.isExternalEntity(entityHandle)) {
>                   Object[] args = { fStringPool.toString(entityName) };
>                   fErrorReporter.reportError(fErrorReporter.getLocator(),
>                                              XMLMessages.XML_DOMAIN,
> --- 2443,2449 ----
>                   return false;
>               }
>           } else {
> !             if (fDTDValidator.isExternalEntity(entityHandle)) {
>                   Object[] args = { fStringPool.toString(entityName) };
>                   fErrorReporter.reportError(fErrorReporter.getLocator(),
>                                              XMLMessages.XML_DOMAIN,
> ***************
> *** 2470,2490 ****
>           fEntityContext = context;
>           fReaderDepth = readerDepth;
>           fReaderId = fNextReaderId++;
> !         if (context != CONTEXT_IN_CONTENT ||
!fValidator.externalReferenceInContent(entityHandle)) {
>               fEntityType = ENTITYTYPE_INTERNAL;
>               fPublicId = null/*"Internal Entity: " +
fStringPool.toString(entityName)*/;
>               fSystemId = fSystemId; // keep expandSystemId happy
>               int value = -1;
>               if (context == CONTEXT_IN_CONTENT || context ==
CONTEXT_IN_DEFAULTATTVALUE)
> !                 value = fValidator.getEntityValue(entityHandle);
>               else
> !                 value =
fValidator.valueOfReferenceInAttValue(entityHandle);
>               startReadingFromInternalEntity(value, false);
>               return false;
>           }
>           fEntityType = ENTITYTYPE_EXTERNAL;
> !         fPublicId = fValidator.getPublicIdOfEntity(entityHandle);
> !         fSystemId = fValidator.getSystemIdOfEntity(entityHandle);
>           return startReadingFromExternalEntity(true);
>       }
>       private boolean startReadingFromParameterEntity(int peName, int
readerDepth, int context) throws Exception {
> --- 2470,2490 ----
>           fEntityContext = context;
>           fReaderDepth = readerDepth;
>           fReaderId = fNextReaderId++;
> !         if (context != CONTEXT_IN_CONTENT ||
!fDTDValidator.externalReferenceInContent(entityHandle)) {
>               fEntityType = ENTITYTYPE_INTERNAL;
>               fPublicId = null/*"Internal Entity: " +
fStringPool.toString(entityName)*/;
>               fSystemId = fSystemId; // keep expandSystemId happy
>               int value = -1;
>               if (context == CONTEXT_IN_CONTENT || context ==
CONTEXT_IN_DEFAULTATTVALUE)
> !                 value = fDTDValidator.getEntityValue(entityHandle);
>               else
> !                 value =
fDTDValidator.valueOfReferenceInAttValue(entityHandle);
>               startReadingFromInternalEntity(value, false);
>               return false;
>           }
>           fEntityType = ENTITYTYPE_EXTERNAL;
> !         fPublicId = fDTDValidator.getPublicIdOfEntity(entityHandle);
> !         fSystemId = fDTDValidator.getSystemIdOfEntity(entityHandle);
>           return startReadingFromExternalEntity(true);
>       }
>       private boolean startReadingFromParameterEntity(int peName, int
readerDepth, int context) throws Exception {
>
>

Reply via email to