mrglavas 2004/03/28 19:53:27 Modified: java/src/org/apache/xerces/impl/dtd XMLDTDValidator.java java/src/org/apache/xerces/impl Constants.java XMLDocumentFragmentScannerImpl.java Log: Performance: Reducing object creation.
To support E15.2 from the XML 1.0 second edition errata we added an augmentation to communicate to the validator whether a character was included using a character reference. This is pretty expensive since a new instance of AugmentationsImpl was created for each character reference. Now only report this augmentation if the document is being validated and only if the character reference is of a probable white space character (ch <= 0x20). When parsing a document from disk containing over 1200 char refs with SAX (no validation) I saw a 20% improvement. Revision Changes Path 1.58 +2 -2 xml-xerces/java/src/org/apache/xerces/impl/dtd/XMLDTDValidator.java Index: XMLDTDValidator.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/dtd/XMLDTDValidator.java,v retrieving revision 1.57 retrieving revision 1.58 diff -u -r1.57 -r1.58 --- XMLDTDValidator.java 24 Feb 2004 22:48:17 -0000 1.57 +++ XMLDTDValidator.java 29 Mar 2004 03:53:26 -0000 1.58 @@ -833,7 +833,7 @@ } // For E15.2 - if (augs != null && augs.getItem(XMLDocumentFragmentScannerImpl.CHAR_REF) == Boolean.TRUE) { + if (augs != null && augs.getItem(Constants.CHAR_REF_PROBABLE_WS) == Boolean.TRUE) { fErrorReporter.reportError(XMLMessageFormatter.XML_DOMAIN, "MSG_CONTENT_INVALID_SPECIFIED", new Object[]{ fCurrentElement.rawname, 1.41 +12 -3 xml-xerces/java/src/org/apache/xerces/impl/Constants.java Index: Constants.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/Constants.java,v retrieving revision 1.40 retrieving revision 1.41 diff -u -r1.40 -r1.41 --- Constants.java 19 Mar 2004 23:18:33 -0000 1.40 +++ Constants.java 29 Mar 2004 03:53:27 -0000 1.41 @@ -327,18 +327,27 @@ /** * Boolean indicating whether an attribute is declared in the DTD is stored - * in augmentations using string "ATTRIBUTE_DECLARED". The absence of this + * in augmentations using the string "ATTRIBUTE_DECLARED". The absence of this * augmentation indicates that the attribute was not declared in the DTD. */ public final static String ATTRIBUTE_DECLARED = "ATTRIBUTE_DECLARED"; /** * Boolean indicating whether an entity referenced in the document has - * not been read is stored in augmentations using string "ENTITY_SKIPPED". + * not been read is stored in augmentations using the string "ENTITY_SKIPPED". * The absence of this augmentation indicates that the entity had a * declaration and was expanded. */ public final static String ENTITY_SKIPPED = "ENTITY_SKIPPED"; + + /** + * Boolean indicating whether a character is a probable white space + * character (ch <= 0x20) that was the replacement text of a character + * reference is stored in augmentations using the string "CHAR_REF_PROBABLE_WS". + * The absence of this augmentation indicates that the character is not + * probable white space and/or was not included from a character reference. + */ + public final static String CHAR_REF_PROBABLE_WS = "CHAR_REF_PROBABLE_WS"; // XML version constants public final static short XML_VERSION_1_0 = 1; 1.51 +6 -3 xml-xerces/java/src/org/apache/xerces/impl/XMLDocumentFragmentScannerImpl.java Index: XMLDocumentFragmentScannerImpl.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/XMLDocumentFragmentScannerImpl.java,v retrieving revision 1.50 retrieving revision 1.51 diff -u -r1.50 -r1.51 --- XMLDocumentFragmentScannerImpl.java 11 Mar 2004 18:15:17 -0000 1.50 +++ XMLDocumentFragmentScannerImpl.java 29 Mar 2004 03:53:27 -0000 1.51 @@ -1072,8 +1072,11 @@ if (fNotifyCharRefs) { fDocumentHandler.startGeneralEntity(fCharRefLiteral, null, null, null); } - Augmentations augs = new AugmentationsImpl(); - augs.putItem(CHAR_REF, Boolean.TRUE); + Augmentations augs = null; + if (fValidation && ch <= 0x20) { + augs = new AugmentationsImpl(); + augs.putItem(Constants.CHAR_REF_PROBABLE_WS, Boolean.TRUE); + } fDocumentHandler.characters(fStringBuffer2, augs); if (fNotifyCharRefs) { fDocumentHandler.endGeneralEntity(fCharRefLiteral, null); --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]