elena 2003/06/24 14:56:59 Modified: java/src/org/apache/xerces/impl Constants.java XMLDocumentScannerImpl.java java/src/org/apache/xerces/util NamespaceSupport.java Added: java/src/org/apache/xerces/impl/msg XIncludeMessages.properties java/src/org/apache/xerces/parsers XIncludeParserConfiguration.java Log: The preliminary implementation of XInclude submitted by Peter McCracken. It supports most normal functions: regular includes, text includes, fallbacks, namespace fix-up, etc, and it should be okay for regular use. The main functionality that is currently missing: - XPointer support. - Fix-up of unparsed entities and notations. - Encoding of included documents when parse="text". Revision Changes Path 1.30 +7 -1 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.29 retrieving revision 1.30 diff -u -r1.29 -r1.30 --- Constants.java 10 Jun 2003 17:42:58 -0000 1.29 +++ Constants.java 24 Jun 2003 21:56:58 -0000 1.30 @@ -289,6 +289,9 @@ /** Error handler property ("internal/error-handler"). */ public static final String ERROR_HANDLER_PROPERTY = "internal/error-handler"; + /** XInclude handler property ("internal/xinclude-handler"). */ + public static final String XINCLUDE_HANDLER_PROPERTY = "internal/xinclude-handler"; + /** Entity manager property ("internal/entity-manager"). */ public static final String ENTITY_MANAGER_PROPERTY = "internal/entity-manager"; @@ -333,6 +336,9 @@ /** Namespace binder property ("internal/namespace-binder"). */ public static final String NAMESPACE_BINDER_PROPERTY = "internal/namespace-binder"; + + /** Namespace context property ("internal/namespace-context"). */ + public static final String NAMESPACE_CONTEXT_PROPERTY = "internal/namespace-context"; /** Validation manager property ("internal/validation-manager"). */ public static final String VALIDATION_MANAGER_PROPERTY = "internal/validation-manager"; 1.33 +25 -5 xml-xerces/java/src/org/apache/xerces/impl/XMLDocumentScannerImpl.java Index: XMLDocumentScannerImpl.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/XMLDocumentScannerImpl.java,v retrieving revision 1.32 retrieving revision 1.33 diff -u -r1.32 -r1.33 --- XMLDocumentScannerImpl.java 16 Dec 2002 01:26:19 -0000 1.32 +++ XMLDocumentScannerImpl.java 24 Jun 2003 21:56:58 -0000 1.33 @@ -143,10 +143,14 @@ protected static final String DTD_SCANNER = Constants.XERCES_PROPERTY_PREFIX + Constants.DTD_SCANNER_PROPERTY; - // property identifier: ValidationManager + /** property identifier: ValidationManager */ protected static final String VALIDATION_MANAGER = Constants.XERCES_PROPERTY_PREFIX + Constants.VALIDATION_MANAGER_PROPERTY; + /** property identifier: NamespaceContext */ + protected static final String NAMESPACE_CONTEXT = + Constants.XERCES_PROPERTY_PREFIX + Constants.NAMESPACE_CONTEXT_PROPERTY; + // recognized features and properties /** Recognized features. */ @@ -164,13 +168,15 @@ /** Recognized properties. */ private static final String[] RECOGNIZED_PROPERTIES = { DTD_SCANNER, - VALIDATION_MANAGER + VALIDATION_MANAGER, + NAMESPACE_CONTEXT, }; /** Property defaults. */ private static final Object[] PROPERTY_DEFAULTS = { null, - null + null, + null, }; // @@ -293,7 +299,6 @@ fDoctypePublicId = null; fDoctypeSystemId = null; fSeenDoctypeDecl = false; - fNamespaceContext.reset(); // xerces features try { @@ -318,6 +323,15 @@ fValidationManager = null; } + try { + fNamespaceContext = (NamespaceContext)componentManager.getProperty(NAMESPACE_CONTEXT); + } + catch (XMLConfigurationException e) { } + if (fNamespaceContext == null) { + fNamespaceContext = new NamespaceSupport(); + } + fNamespaceContext.reset(); + // initialize vars fScanningDTD = false; @@ -420,6 +434,12 @@ if (property.equals(Constants.DTD_SCANNER_PROPERTY)) { fDTDScanner = (XMLDTDScanner)value; } + if (property.equals(Constants.NAMESPACE_CONTEXT_PROPERTY)) { + if (value != null) { + fNamespaceContext = (NamespaceContext)value; + } + } + return; } 1.1 xml-xerces/java/src/org/apache/xerces/impl/msg/XIncludeMessages.properties Index: XIncludeMessages.properties =================================================================== # Messages for message reporting BadMessageKey = The error message corresponding to the message key can not be found. FormatFailed = An internal error occurred while formatting the following message:\n # Messages for erroneous input NoFallback = An 'include' failed, and no 'fallback' element was found. MultipleFallbacks = The [children] of an 'include' element cannot contain more than one 'fallback' element. FallbackParent = An 'include' element is not parent of 'fallback' element. IncludeParent = The parent of an 'include' element cannot be another 'include' element. HrefMissing = The 'href' attribute of an 'include' element is missing. RecursiveInclude = Recursive include detected. InvalidParseValue = Invalid value for ''parse'' attribute on ''include'' element: ''{0}''. XMLParseError = Error parsing invalid XML file. XMLResourceError = Resource error reading XML file. Reason: {0} TextResourceError = Resource error reading text file. Reason: {0} # Messages from erroneous set-up IncompatibleNamespaceContext = The type of the NamespaceContext is incompatible with using XInclude; it must be an instance of XIncludeNamespaceSupport ExpandedSystemId = Could not expand system id of included resource 1.1 xml-xerces/java/src/org/apache/xerces/parsers/XIncludeParserConfiguration.java Index: XIncludeParserConfiguration.java =================================================================== /* * The Apache Software License, Version 1.1 * * * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Xerces" and "Apache Software Foundation" must * not be used to endorse or promote products derived from this * software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache", * nor may "Apache" appear in their name, without prior written * permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation and was * originally based on software copyright (c) 2003, International * Business Machines, Inc., http://www.apache.org. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. */ package org.apache.xerces.parsers; import org.apache.xerces.impl.Constants; import org.apache.xerces.util.SymbolTable; import org.apache.xerces.xinclude.XIncludeHandler; import org.apache.xerces.xinclude.XIncludeNamespaceSupport; import org.apache.xerces.xni.XMLDocumentHandler; import org.apache.xerces.xni.grammars.XMLGrammarPool; import org.apache.xerces.xni.parser.XMLComponentManager; import org.apache.xerces.xni.parser.XMLDocumentSource; /** * @author Peter McCracken, IBM */ public class XIncludeParserConfiguration extends XML11Configuration { private XIncludeHandler fXIncludeComponent; /** Property identifier: error reporter. */ protected static final String XINCLUDE_HANDLER = Constants.XERCES_PROPERTY_PREFIX + Constants.XINCLUDE_HANDLER_PROPERTY; /** Property identifier: error reporter. */ protected static final String NAMESPACE_CONTEXT = Constants.XERCES_PROPERTY_PREFIX + Constants.NAMESPACE_CONTEXT_PROPERTY; /** Default constructor. */ public XIncludeParserConfiguration() { this(null, null, null); //this(null, new XMLGrammarPoolImpl(), null); } // <init>() /** * Constructs a parser configuration using the specified symbol table. * * @param symbolTable The symbol table to use. */ public XIncludeParserConfiguration(SymbolTable symbolTable) { this(symbolTable, null, null); //this(symbolTable, new XMLGrammarPoolImpl(), null); } // <init>(SymbolTable) /** * Constructs a parser configuration using the specified symbol table and * grammar pool. * <p> * <strong>REVISIT:</strong> * Grammar pool will be updated when the new validation engine is * implemented. * * @param symbolTable The symbol table to use. * @param grammarPool The grammar pool to use. */ public XIncludeParserConfiguration( SymbolTable symbolTable, XMLGrammarPool grammarPool) { this(symbolTable, grammarPool, null); } // <init>(SymbolTable,XMLGrammarPool) /** * Constructs a parser configuration using the specified symbol table, * grammar pool, and parent settings. * <p> * <strong>REVISIT:</strong> * Grammar pool will be updated when the new validation engine is * implemented. * * @param symbolTable The symbol table to use. * @param grammarPool The grammar pool to use. * @param parentSettings The parent settings. */ public XIncludeParserConfiguration( SymbolTable symbolTable, XMLGrammarPool grammarPool, XMLComponentManager parentSettings) { super(symbolTable, grammarPool, parentSettings); final String[] recognizedFeatures = { // XINCLUDE_PROCESSING TODO: should this be a feature? }; addRecognizedFeatures(recognizedFeatures); // add default recognized properties final String[] recognizedProperties = { XINCLUDE_HANDLER, NAMESPACE_CONTEXT }; addRecognizedProperties(recognizedProperties); setProperty(NAMESPACE_CONTEXT, new XIncludeNamespaceSupport()); fXIncludeComponent = new XIncludeHandler(); setProperty(XINCLUDE_HANDLER, fXIncludeComponent); addComponent(fXIncludeComponent); } // <init>(SymbolTable,XMLGrammarPool)} /** Configures the pipeline. */ protected void configurePipeline() { super.configurePipeline(); // setup document pipeline // TODO: actually use XINCLUDE_PROCESSING feature, if we decide to implement it if (true /*fFeatures.get(XINCLUDE_PROCESSING) == Boolean.TRUE*/ ) { if (fXIncludeComponent == null) { fXIncludeComponent = new XIncludeHandler(); addComponent(fXIncludeComponent); } // insert before fSchemaValidator, if one exists. XMLDocumentSource prev = null; if (fFeatures.get(XMLSCHEMA_VALIDATION) == Boolean.TRUE) { // we don't have to worry about fSchemaValidator being null, since // super.configurePipeline() instantiated it if the feature was set prev = fSchemaValidator.getDocumentSource(); } // Otherwise, insert after the last component in the pipeline else { prev = fLastComponent; } if (prev != null) { XMLDocumentHandler next = prev.getDocumentHandler(); if (next != null) { fXIncludeComponent.setDocumentHandler(next); next.setDocumentSource(fXIncludeComponent); } prev.setDocumentHandler(fXIncludeComponent); fXIncludeComponent.setDocumentSource(prev); } else { setDocumentHandler(fXIncludeComponent); } } } // configurePipeline() } 1.16 +2 -2 xml-xerces/java/src/org/apache/xerces/util/NamespaceSupport.java Index: NamespaceSupport.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/util/NamespaceSupport.java,v retrieving revision 1.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- NamespaceSupport.java 17 Feb 2003 18:06:27 -0000 1.15 +++ NamespaceSupport.java 24 Jun 2003 21:56:59 -0000 1.16 @@ -301,7 +301,7 @@ return new Prefixes(fPrefixes, count); } - final class Prefixes implements Enumeration { + protected final class Prefixes implements Enumeration { private String[] prefixes; private int counter = 0; private int size = 0;
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]