neilg       2002/12/11 07:11:41

  Modified:    java/src/org/apache/xerces/impl XMLVersionDetector.java
                        XMLNamespaceBinder.java
  Added:       java/src/org/apache/xerces/impl XML11NamespaceBinder.java
  Log:
  add support for namespace 1.1 when XML 1.1 documents are being parsed.
  
  Revision  Changes    Path
  1.2       +33 -8     
xml-xerces/java/src/org/apache/xerces/impl/XMLVersionDetector.java
  
  Index: XMLVersionDetector.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xerces/java/src/org/apache/xerces/impl/XMLVersionDetector.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- XMLVersionDetector.java   7 Dec 2002 00:15:58 -0000       1.1
  +++ XMLVersionDetector.java   11 Dec 2002 15:11:40 -0000      1.2
  @@ -143,20 +143,21 @@
       protected static final String DTD_PROCESSOR_PROPERTY = 
           Constants.XERCES_PROPERTY_PREFIX + Constants.DTD_PROCESSOR_PROPERTY;
   
  +    /** Property identifier: namespace binder. */ 
  +    protected static final String NAMESPACE_BINDER_PROPERTY = 
  +        Constants.XERCES_PROPERTY_PREFIX + Constants.NAMESPACE_BINDER_PROPERTY;
  +
       // recognized properties
       private static final String[] RECOGNIZED_PROPERTIES = {
           SYMBOL_TABLE, 
           ERROR_REPORTER, 
           ENTITY_MANAGER,
  -        DTD_SCANNER_PROPERTY, DTD_VALIDATOR_PROPERTY, 
  +        DTD_SCANNER_PROPERTY, 
  +        DTD_VALIDATOR_PROPERTY, 
           DTD_PROCESSOR_PROPERTY,
  +        NAMESPACE_BINDER_PROPERTY,
       };
  -    private static final String[] PROPERTY_DEFAULTS = {null, null, null, null, 
null, null};
  -
  -    // debugging
  -
  -    /** Debug attribute normalization. */
  -    protected static final boolean DEBUG_ATTR_NORMALIZATION = false;
  +    private static final String[] PROPERTY_DEFAULTS = {null, null, null, null, 
null, null, null};
   
       //
       // Data
  @@ -215,6 +216,9 @@
       // the XML 1.1 DTD processor
       protected XML11DTDProcessor fXML11DTDProcessor = null;
       
  +    // the XML 1.1 namespace binder
  +    protected XML11NamespaceBinder fXML11NamespaceBinder = null;
  +    
       // symbols
   
       /** Symbol: "version". */
  @@ -560,6 +564,27 @@
                   if(val.getDocumentHandler() != null) {
                       val.getDocumentHandler().setDocumentSource(fXML11DTDValidator);
                       fXML11DTDValidator.setDocumentHandler(val.getDocumentHandler());
  +                }
  +            }
  +            // is there a namespace binder in the pipeline?
  +            // if so, it'll be XML 1.0; need to replace
  +            // it... (REVISIT:  does it make more sense here just to
  +            // have a feature???)
  +            XMLDocumentFilter nsb = null;
  +            if((nsb = (XMLDocumentFilter 
)fComponentManager.getProperty(NAMESPACE_BINDER_PROPERTY)) != null) {
  +                // do we need to new up a replacement? 
  +                if(fXML11NamespaceBinder == null) {
  +                    fXML11NamespaceBinder = new XML11NamespaceBinder();
  +                }
  +                fXML11NamespaceBinder.reset(fComponentManager);
  +                // now take nsb out of the picture...
  +                if(nsb.getDocumentSource() != null) {
  +                    
nsb.getDocumentSource().setDocumentHandler(fXML11NamespaceBinder);
  +                    
fXML11NamespaceBinder.setDocumentSource(nsb.getDocumentSource());
  +                }
  +                if(nsb.getDocumentHandler() != null) {
  +                    
nsb.getDocumentHandler().setDocumentSource(fXML11NamespaceBinder);
  +                    
fXML11NamespaceBinder.setDocumentHandler(nsb.getDocumentHandler());
                   }
               }
               // now do the same to the DTD pipeline.
  
  
  
  1.26      +12 -2     
xml-xerces/java/src/org/apache/xerces/impl/XMLNamespaceBinder.java
  
  Index: XMLNamespaceBinder.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xerces/java/src/org/apache/xerces/impl/XMLNamespaceBinder.java,v
  retrieving revision 1.25
  retrieving revision 1.26
  diff -u -r1.25 -r1.26
  --- XMLNamespaceBinder.java   24 Sep 2002 23:16:03 -0000      1.25
  +++ XMLNamespaceBinder.java   11 Dec 2002 15:11:40 -0000      1.26
  @@ -854,7 +854,11 @@
                   // http://www.w3.org/TR/1999/REC-xml-names-19990114/#dt-prefix
                   // We should only report an error if there is a prefix,
                   // that is, the local part is not "xmlns". -SG
  -                if (uri == XMLSymbols.EMPTY_STRING && localpart != 
XMLSymbols.PREFIX_XMLNS) {
  +                // Since this is an error condition in XML 1.0,
  +                // and should be relatively uncommon in XML 1.1,
  +                // making this test into a method call to reuse code
  +                // should be acceptable.  - NG
  +                if(prefixBoundToNullURI(uri, localpart)) {
                       fErrorReporter.reportError(XMLMessageFormatter.XMLNS_DOMAIN,
                                                  "EmptyPrefixedAttName",
                                                  new Object[]{attributes.getQName(i)},
  @@ -970,5 +974,11 @@
           fNamespaceSupport.popContext();
   
       } // handleEndElement(QName,boolean)
  +
  +    // returns true iff the given prefix is bound to "" *and*
  +    // this is disallowed by the version of XML namespaces in use.
  +    protected boolean prefixBoundToNullURI(String uri, String localpart) {
  +        return (uri == XMLSymbols.EMPTY_STRING && localpart != 
XMLSymbols.PREFIX_XMLNS); 
  +    } // prefixBoundToNullURI(String, String):  boolean
   
   } // class XMLNamespaceBinder
  
  
  
  1.1                  
xml-xerces/java/src/org/apache/xerces/impl/XML11NamespaceBinder.java
  
  Index: XML11NamespaceBinder.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2000-2002 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) 1999, 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.impl;
  
  import java.util.Enumeration;
  
  import org.apache.xerces.impl.XMLErrorReporter;
  import org.apache.xerces.impl.msg.XMLMessageFormatter;
  
  import org.apache.xerces.util.NamespaceSupport;
  import org.apache.xerces.util.SymbolTable;
  import org.apache.xerces.util.XMLSymbols;
  
  import org.apache.xerces.xni.Augmentations;
  import org.apache.xerces.xni.NamespaceContext;
  import org.apache.xerces.xni.QName;
  import org.apache.xerces.xni.XMLAttributes;
  import org.apache.xerces.xni.XMLDocumentHandler;
  import org.apache.xerces.xni.XMLLocator;
  import org.apache.xerces.xni.XMLResourceIdentifier;
  import org.apache.xerces.xni.XMLString;
  import org.apache.xerces.xni.XNIException;
  import org.apache.xerces.xni.parser.XMLComponent;
  import org.apache.xerces.xni.parser.XMLComponentManager;
  import org.apache.xerces.xni.parser.XMLConfigurationException;
  import org.apache.xerces.xni.parser.XMLDocumentSource;
  import org.apache.xerces.xni.parser.XMLDocumentFilter;
  
  /**
   * This class performs namespace binding on the startElement and endElement
   * method calls in accordance with Namespaces in XML 1.1.  It extends the standard,
   * Namespace-1.0-compliant binder in order to do this.
   *
   * @author Neil Graham, IBM
   *
   * @version $Id: XML11NamespaceBinder.java,v 1.1 2002/12/11 15:11:40 neilg Exp $
   */
  public class XML11NamespaceBinder extends XMLNamespaceBinder {
  
      //
      // Constants
      //
  
      //
      // Data
      //
  
      //
      // Constructors
      //
  
      /** Default constructor. */
      public XML11NamespaceBinder() {
          this(null);
      } // <init>()
  
      /**
       * Constructs a namespace binder that shares the specified namespace
       * context during each parse.
       *
       * @param namespaceContext The shared context.
       */
      public XML11NamespaceBinder(NamespaceContext namespaceContext) {
          super(namespaceContext);
      } // <init>(NamespaceContext)
  
  
      //
      // Public methods
      //
  
      //
      // Protected methods
      //
  
      // returns true iff the given prefix is bound to "" *and*
      // this is disallowed by the version of XML namespaces in use.
      protected boolean prefixBoundToNullURI(String uri, String localpart) {
          return false;
      } // prefixBoundToNullURI(String, String):  boolean
  
  } // class XML11NamespaceBinder
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to