You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by sa...@apache.org on 2001/09/24 17:24:55 UTC

cvs commit: xml-xerces/java/src/org/apache/xerces/impl/v2 SchemaSymbols.java SchemaValidator.java XSAttributeChecker.java XSDAbstractIDConstraintTraverser.java XSDAbstractParticleTraverser.java XSDAbstractTraverser.java XSDAttributeGroupTraverser.java XSDAttributeTraverser.java XSDComplexTypeTraverser.java XSDElementTraverser.java XSDGroupTraverser.java XSDHandler.java XSDKeyrefTraverser.java XSDNotationTraverser.java XSDSimpleTypeTraverser.java XSDUniqueOrKeyTraverser.java XSDWildcardTraverser.java XSDocumentInfo.java XSWildcardDecl.java

sandygao    01/09/24 08:24:55

  Modified:    java/src/org/apache/xerces/impl/v2 SchemaSymbols.java
                        SchemaValidator.java XSAttributeChecker.java
                        XSDAbstractIDConstraintTraverser.java
                        XSDAbstractParticleTraverser.java
                        XSDAbstractTraverser.java
                        XSDAttributeGroupTraverser.java
                        XSDAttributeTraverser.java
                        XSDComplexTypeTraverser.java
                        XSDElementTraverser.java XSDGroupTraverser.java
                        XSDHandler.java XSDKeyrefTraverser.java
                        XSDNotationTraverser.java
                        XSDSimpleTypeTraverser.java
                        XSDUniqueOrKeyTraverser.java
                        XSDWildcardTraverser.java XSDocumentInfo.java
                        XSWildcardDecl.java
  Log:
  1. Added new code in SchemaValidator;
  2. Modified XSAttributeChecker, so that ID is checked within one document, instead of all documents.
  3. Part of widlcard traversal is moved into XSAttributeChecker: so that we don't duplicate the code of tokenize the namespace attribute in both classes.
  4. An allowNamespace method is added to XSWildcardDecl.
  
  Revision  Changes    Path
  1.13      +5 -5      xml-xerces/java/src/org/apache/xerces/impl/v2/SchemaSymbols.java
  
  Index: SchemaSymbols.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/v2/SchemaSymbols.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- SchemaSymbols.java	2001/09/21 19:56:32	1.12
  +++ SchemaSymbols.java	2001/09/24 15:24:54	1.13
  @@ -63,7 +63,7 @@
    * Collection of symbols used to parse a Schema Grammar.
    *
    * @author jeffrey rodriguez
  - * @version $Id: SchemaSymbols.java,v 1.12 2001/09/21 19:56:32 sandygao Exp $
  + * @version $Id: SchemaSymbols.java,v 1.13 2001/09/24 15:24:54 sandygao Exp $
    */
   public final class SchemaSymbols {
   
  @@ -71,12 +71,11 @@
       // are not symbols in the schema document.
       // the validator can choose to add them by itself.
   
  -    // xmlns attributes
  -    public static final String XMLNS                           = "xmlns";
  -
       // the following strings (xsi:, xsd) will be added into the
       // symbol table that comes with the parser
   
  +    // xmlns attributes
  +    public static final String O_XMLNS                         = "xmlns";
       // xsi attributes: in validator
       public static final String OURI_XSI                        = "http://www.w3.org/2001/XMLSchema-instance";
       public static final String OXSI_SCHEMALOCACTION            = "schemaLocation";
  @@ -93,7 +92,8 @@
       // XSDHandler is responsible for passing this symbol table to that parser.
       public static final SymbolTable fSymbolTable = new SymbolTable();
   
  -    // schema namespace is also added to the schema symbol table
  +    // xmlns and schema namespace is also added to the schema symbol table
  +    public static final String XMLNS                    = fSymbolTable.addSymbol(O_XMLNS);
       public static final String URI_SCHEMAFORSCHEMA      = fSymbolTable.addSymbol(OURI_SCHEMAFORSCHEMA);
   
       // all possible schema element names
  
  
  
  1.9       +345 -8    xml-xerces/java/src/org/apache/xerces/impl/v2/SchemaValidator.java
  
  Index: SchemaValidator.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/v2/SchemaValidator.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- SchemaValidator.java	2001/09/21 19:56:32	1.8
  +++ SchemaValidator.java	2001/09/24 15:24:54	1.9
  @@ -107,7 +107,7 @@
    * @author Andy Clark, IBM
    * @author Jeffrey Rodriguez IBM
    *
  - * @version $Id: SchemaValidator.java,v 1.8 2001/09/21 19:56:32 sandygao Exp $
  + * @version $Id: SchemaValidator.java,v 1.9 2001/09/24 15:24:54 sandygao Exp $
    */
   public class SchemaValidator
       implements XMLComponent, XMLDocumentHandler {
  @@ -658,6 +658,7 @@
       static final int INC_STACK_SIZE     = 8;
   
       // some constants that'll be added into the symbol table
  +    String XMLNS;
       String URI_XSI;
       String XSI_SCHEMALOCACTION;
       String XSI_NONAMESPACESCHEMALOCACTION;
  @@ -727,6 +728,15 @@
       Hashtable fTableOfIDs = new Hashtable();
       Hashtable fTableOfIDRefs = new Hashtable();
   
  +    /**
  +     * temprory qname
  +     */
  +    QName fTempQName = new QName();
  +    /**
  +     * temprory empty object, used to fill IDREF table
  +     */
  +    static final Object fTempObject = new Object();
  +
       //
       // Constructors
       //
  @@ -748,6 +758,7 @@
           // get symbol table. if it's a new one, add symbols to it.
           SymbolTable symbolTable = (SymbolTable)componentManager.getProperty(SYMBOL_TABLE);
           if (symbolTable != fSymbolTable) {
  +            XMLNS = symbolTable.addSymbol(SchemaSymbols.O_XMLNS);
               URI_XSI = symbolTable.addSymbol(SchemaSymbols.OURI_XSI);
               XSI_SCHEMALOCACTION = symbolTable.addSymbol(SchemaSymbols.OXSI_SCHEMALOCACTION);
               XSI_NONAMESPACESCHEMALOCACTION = symbolTable.addSymbol(SchemaSymbols.OXSI_NONAMESPACESCHEMALOCACTION);
  @@ -920,14 +931,28 @@
   
           // get the type for the current element
           fCurrentType = null;
  -        if (fCurrentElemDecl != null)
  +        if (fCurrentElemDecl != null) {
  +            // Check whether this element is abstract.  If so, an error
  +            if (fCurrentElemDecl.isAbstract()) {
  +                reportGenericSchemaError("A member of abstract element " + element.rawname + "'s substitution group must be specified");
  +            }
  +            // then get the type
               fCurrentType = fCurrentElemDecl.fType;
  +        }
   
           // get type from xsi:type
           String xsiType = attributes.getValue(URI_XSI, XSI_TYPE);
           if (xsiType != null) {
  -            // REVISIT: bind namespace, get grammar, get type
  -            // report error if type not found.
  +            getAndCheckXsiType(element, xsiType);
  +        } else if (fCurrentType != null) {
  +            // if no xsi:type is specified, check whether the type of
  +            // the element is abstract
  +            if ((fCurrentType.getXSType() & XSTypeDecl.COMPLEX_TYPE) != 0) {
  +                XSComplexTypeDecl ctype = (XSComplexTypeDecl)fCurrentType;
  +                if (ctype.isAbstractType()) {
  +                    reportGenericSchemaError("Element " + element.rawname + " is declared with a type that is abstract.  Use xsi:type to specify a non-abstract type");
  +                }
  +            }
           }
   
           // if the element decl is not found
  @@ -963,10 +988,16 @@
           // and the buffer to hold the value of the element
           fBuffer = new StringBuffer();
   
  -        // REVISIT: get xsi:nil (was bind...)
  +        // get information about xsi:nil
  +        String xsiNil = attributes.getValue(URI_XSI, XSI_NIL);
  +        if (xsiNil != null)
  +            getXsiNil(element, xsiNil);
   
           // now validate everything related with the attributes
  -        validateOnAttributes(element, attributes);
  +        if ((fCurrentType.getXSType() & XSTypeDecl.COMPLEX_TYPE) != 0) {
  +            XSComplexTypeDecl ctype = (XSComplexTypeDecl)fCurrentType;
  +            validateOnAttributes(element, attributes, ctype.fAttrGrp);
  +        }
   
       } // handleStartElement(QName,XMLAttributes,boolean)
   
  @@ -975,6 +1006,8 @@
   
           // if we are skipping, return
           if (fSkipValidationDepth >= 0) {
  +            // but if this is the top element that we are skipping,
  +            // restore the states.
               if (fSkipValidationDepth == fElementDepth &&
                   fSkipValidationDepth > 0) {
                   fSkipValidationDepth = -1;
  @@ -1000,6 +1033,7 @@
                       // REVISIT: report an error
                       reportGenericSchemaError("element content doesn't allowed here");
                   }
  +                // validate against simple type
                   if ((fCurrentType.getXSType() & XSTypeDecl.SIMPLE_TYPE) != 0) {
                       try {
                           DatatypeValidator dv = (DatatypeValidator)fCurrentType;
  @@ -1010,6 +1044,7 @@
                           reportGenericSchemaError("datatype error: " + e.getMessage());
                       }
                   } else {
  +                    // REVISIT: validate against complex type with simple content
                       // if the current state is a valid state, check whether
                       // it's one of the final states.
                       if (fCurrCMState != null && fCurrCMState[0] >= 0 &&
  @@ -1039,6 +1074,7 @@
                   }
               }
           } else {
  +            // get the states for the parent element.
               fChildCount = fChildCountStack[fElementDepth];
               fCurrentElemDecl = fElemDeclStack[fElementDepth];
               fCurrentType = fTypeStack[fElementDepth];
  @@ -1054,12 +1090,313 @@
               return;
           fBuffer.append(text.toString());
       } // handleCharacters(XMLString)
  +
  +    void getAndCheckXsiType(QName element, String xsiType) {
  +        // REVISIT: bind namespace, get grammar, get type
  +        // report error if type not found.
  +        // (similar to code in XSAttributeChecker.resolveQName
  +        String uri = null, name = null;
  +        // uri = resolve; name = substring;
  +        XSTypeDecl type = null;
  +        SchemaGrammar grammar = fGrammarResolver.getGrammar(uri);
  +        if (grammar != null)
  +            type = grammar.getGlobalTypeDecl(name);
  +        if (type == null) {
  +            reportGenericSchemaError("can't find type '"+xsiType+"'");
  +            return;
  +        }
   
  -    void validateOnAttributes(QName element, XMLAttributes attributes) {
  +        // if this is a complex type, check whether it's abstract
  +        if ((type.getXSType() & XSTypeDecl.COMPLEX_TYPE) != 0) {
  +            XSComplexTypeDecl ctype = (XSComplexTypeDecl)type;
  +            if (ctype.isAbstractType())
  +                reportGenericSchemaError("Abstract type " + xsiType + " should not be used in xsi:type");
  +        }
   
  -        return;
  +        // if there is no current type, set this one as current.
  +        // and we don't need to do extra checking
  +        if (fCurrentType == null) {
  +            fCurrentType = type;
  +            return;
  +        }
   
  +        // if there is a matching element decl, then this xsi:type must
  +        // be validly derived from the type of the element decl
  +        if (!checkTypeDerivationOk(type, fCurrentType, fCurrentElemDecl.fBlock))
  +            reportGenericSchemaError("xsitype is not validly derived from element type");
  +    }
  +
  +    void getXsiNil(QName element, String xsiNil) {
  +        // get nil: true or false
  +        boolean nil = false;
  +        if (xsiNil.equals(SchemaSymbols.ATTVAL_TRUE) ||
  +            xsiNil.equals(SchemaSymbols.ATTVAL_TRUE_1)) {
  +            if (fCurrentElemDecl == null || fCurrentElemDecl.isNillable()) {
  +                nil = true;
  +            } else {
  +                reportGenericSchemaError("xsi:nil must not be specified for the element '"+ element.rawname + "' with {nillable} equals 'false'");
  +            }
  +        } else if (!xsiNil.equals(SchemaSymbols.ATTVAL_FALSE) &&
  +                   !xsiNil.equals(SchemaSymbols.ATTVAL_FALSE_0)) {
  +            reportGenericSchemaError("value '" + xsiNil + "' of xsi:nil attribute is not a valid boolean value");
  +        }
  +        // REVISIT: have a stack to hold it, because it's checked at endElement
  +    }
  +
  +    void checkXsiNil(String xsiNil) {
  +        // REVISIT: check whether the content is empty
  +    }
  +
  +    void validateOnAttributes(QName element, XMLAttributes attributes, XSAttributeGroupDecl attrGrp) {
  +
  +        XSAttributeUse attrUses[] = attrGrp.getAttributeUses();
  +        int useCount = attrUses.length;
  +        XSWildcardDecl attrWildcard = attrGrp.fAttributeWC;
  +
  +        // REVISIT: do we add default attribute before or after
  +        //          we validate the attribute values?
  +        //if (fGrammar != null && fGrammarIsSchemaGrammar && elementIndex != -1) {
  +        //    fAttrListHandle = addDefaultAttributes(elementIndex, attrList, fAttrListHandle, fValidating, fStandaloneReader != -1);
  +        //}
  +
  +        // if we don't do validation, we don't need to validate the attributes
  +        if (!fDoValidation)
  +            return;
  +
  +        // for each present attribute
  +        int attCount = attributes.getLength();
  +        for (int index = 0; index < attCount; index++) {
  +            attributes.getName(index, fTempQName);
  +            // if it's from xsi namespace, it must be one of the four
  +            if (fTempQName.uri == URI_XSI) {
  +                if (fTempQName.localpart != XSI_SCHEMALOCACTION &&
  +                    fTempQName.localpart != XSI_NONAMESPACESCHEMALOCACTION &&
  +                    fTempQName.localpart != XSI_NIL &&
  +                    fTempQName.localpart != XSI_TYPE) {
  +                    reportGenericSchemaError("invalid attribute from xsi namespace '"+fTempQName.localpart+"'");
  +                }
  +            } else if (fTempQName.rawname != XMLNS && !fTempQName.rawname.startsWith("xmlns:")) {
  +                // it's not xmlns, and not xsi, then we need to find a decl for it
  +                XSAttributeUse currUse = null;
  +                for (int i = 0; i < useCount; i++) {
  +                    if (attrUses[i].fAttrDecl.fName == fTempQName.localpart &&
  +                        attrUses[i].fAttrDecl.fTargetNamespace == fTempQName.uri) {
  +                        currUse = attrUses[i];
  +                        break;
  +                    }
  +                }
  +                // if failed, get it from wildcard
  +                if (currUse == null) {
  +                    if (!attrWildcard.allowNamespace(fTempQName.uri)) {
  +                        // so this attribute is not allowed
  +                        reportGenericSchemaError("attribute '"+fTempQName.rawname+"' can't appear in element '"+element.rawname+"'");
  +                        continue;
  +                    }
  +                }
  +
  +                // get the corresponding attribute decl
  +                XSAttributeDecl currDecl = null;
  +                if (currUse != null) {
  +                    currDecl = currUse.fAttrDecl;
  +                } else {
  +                    // which means it matches a wildcard
  +                    // skip it if it's skip
  +                    if (attrWildcard.fType == XSWildcardDecl.WILDCARD_SKIP)
  +                        continue;
  +                    // now get the grammar and attribute decl
  +                    SchemaGrammar grammar = fGrammarResolver.getGrammar(fTempQName.uri);
  +                    if (grammar != null)
  +                        currDecl = grammar.getGlobalAttributeDecl(fTempQName.localpart);
  +                    // if can't find
  +                    if (currDecl == null) {
  +                        // if strict, report error
  +                        if (attrWildcard.fType == XSWildcardDecl.WILDCARD_STRICT)
  +                            reportGenericSchemaError("can't find the declaration for attribute '"+fTempQName.rawname+"'");
  +                        // then continue to the next attribute
  +                        continue;
  +                    }
  +                }
  +
  +                // get the value constraint from use or decl
  +                // REVISIT: don't quite understand the spec: which value constraint to use
  +                short constType = XSAttributeDecl.NO_CONSTRAINT;
  +                Object defaultValue = null;
  +                if (currUse != null) {
  +                    constType = currUse.fConstraintType;
  +                    defaultValue = currUse.fDefault;
  +                }
  +                if (constType == XSAttributeDecl.NO_CONSTRAINT) {
  +                    constType = currDecl.fConstraintType;
  +                    defaultValue = currDecl.fDefault;
  +                }
  +                // get simple type
  +                DatatypeValidator attDV = currDecl.fType;
  +                // get attribute value
  +                String attrValue = attributes.getValue(index);
  +                // if the value is fixed
  +                if (constType == XSAttributeDecl.FIXED_VALUET) {
  +                    // REVISIT: get compiled form of value, then compare
  +                    if (attDV.compare(attrValue, (String)defaultValue) != 0) {
  +                        reportGenericSchemaError("attribute value not match fixed value");
  +                    } else {
  +                        // if it's one of IDREF type, we should record this value for further checking against ID vlues
  +                        if (attDV instanceof IDREFDatatypeValidator) {
  +                            fTableOfIDRefs.put(fTempQName.localpart, fTempObject);
  +                        }
  +                    }
  +                } else {
  +                    // otherwise, check the value against the simpleType
  +                    // REVISIT: normalize the attribute value
  +                    //attrValue = normalizeValue(attrValue, attDV.getWSFacet());
  +                    try {
  +                        // REVISIT: use XSSimpleTypeDecl.ValidateContext to replace null
  +                        attDV.validate(attrValue, null);
  +                    } catch (InvalidDatatypeValueException idve) {
  +                        reportGenericSchemaError("datatype validation error: "+idve);
  +                    }
  +                }
  +            } // end of if (not xsi and not xmlns)
  +        } // end of for (all attributes)
       } //validateOnAttributes
  +
  +    // REVISIT: move the following 5 methods to common place
  +    boolean checkTypeDerivationOk(XSTypeDecl derived, XSTypeDecl base, int block) {
  +        // if derived is anyType, then it's valid only if base is anyType too
  +        if (derived.getXSType() == XSTypeDecl.ANY_TYPE)
  +            return derived == base;
  +        // if derived is anySimpleType, then it's valid only if the base
  +        // is ur-type
  +        if (derived.getXSType() == XSTypeDecl.ANYSIMPLE_TYPE)
  +            return (base.getXSType() & XSTypeDecl.UR_TYPE) != 0;
  +
  +        // if derived is simple type
  +        if ((derived.getXSType() & XSTypeDecl.SIMPLE_TYPE) != 0) {
  +            // if base is complex type
  +            if ((base.getXSType() & XSTypeDecl.COMPLEX_TYPE) != 0) {
  +                // if base is anyType, change base to anySimpleType,
  +                // otherwise, not valid
  +                if (base.getXSType() == XSTypeDecl.ANY_TYPE)
  +                    base = SchemaGrammar.SG_SchemaNS.getGlobalTypeDecl(SchemaSymbols.ATTVAL_ANYSIMPLETYPE);
  +                else
  +                    return false;
  +            }
  +            return checkSimpleDerivation((DatatypeValidator)derived,
  +                                         (DatatypeValidator)base, block);
  +        } else {
  +            if ((base.getXSType() & XSTypeDecl.COMPLEX_TYPE) != 0)
  +                block |= ((XSComplexTypeDecl)base).fBlock;
  +            return checkComplexDerivation((XSComplexTypeDecl)derived, base, block);
  +        }
  +    }
  +
  +    boolean checkSimpleDerivationOk(DatatypeValidator derived, XSTypeDecl base, int block) {
  +        // REVISIT: to implement and move to common place
  +        return true;
  +    }
  +
  +    boolean checkComplexDerivationOk(XSComplexTypeDecl derived, XSTypeDecl base, int block) {
  +        // REVISIT: to implement and move to common place
  +        return true;
  +    }
  +
  +    /**
  +     * Note: this will be a private method, and it assumes that derived is not
  +     *       anySimpleType, and base is not anyType. Another method will be
  +     *       introduced for public use, which will call this method.
  +     */
  +    boolean checkSimpleDerivation(DatatypeValidator derived, DatatypeValidator base, int block) {
  +        // 1 They are the same type definition.
  +        if (derived == base)
  +            return true;
  +
  +        // 2 All of the following must be true:
  +        // 2.1 restriction is not in the subset, or in the {final} of its own {base type definition};
  +        if ((block & SchemaSymbols.RESTRICTION) != 0 ||
  +            (derived.getBaseValidator().getFinalSet() & SchemaSymbols.RESTRICTION) != 0) {
  +            return false;
  +        }
  +
  +        // 2.2 One of the following must be true:
  +        // 2.2.1 D's �base type definition� is B.
  +        DatatypeValidator directBase = derived.getBaseValidator();
  +        if (directBase == base)
  +            return true;
  +
  +        // 2.2.2 D's �base type definition� is not the �simple ur-type definition� and is validly derived from B given the subset, as defined by this constraint.
  +        if (directBase.getXSType() != XSTypeDecl.ANYSIMPLE_TYPE &&
  +            checkSimpleDerivation(directBase, base, block)) {
  +            return true;
  +        }
  +
  +        // 2.2.3 D's {variety} is list or union and B is the �simple ur-type definition�.
  +        if ((derived instanceof ListDatatypeValidator ||
  +             derived instanceof UnionDatatypeValidator) &&
  +            base.getXSType() == XSTypeDecl.ANYSIMPLE_TYPE) {
  +            return true;
  +        }
  +
  +        // 2.2.4 B's {variety} is union and D is validly derived from a type definition in B's {member type definitions} given the subset, as defined by this constraint.
  +        if (base instanceof UnionDatatypeValidator) {
  +            Vector subUnionMemberDV = ((UnionDatatypeValidator)base).getBaseValidators();
  +            int subUnionSize = subUnionMemberDV.size();
  +            for (int i=0; i<subUnionSize; i++) {
  +                base = (DatatypeValidator)subUnionMemberDV.elementAt(i);
  +                if (checkSimpleDerivation(derived, base, block))
  +                    return true;
  +            }
  +        }
  +
  +        return false;
  +    }
  +
  +    /**
  +     * Note: this will be a private method, and it assumes that derived is not
  +     *       anyType. Another method will be introduced for public use,
  +     *       which will call this method.
  +     */
  +    boolean checkComplexDerivation(XSComplexTypeDecl derived, XSTypeDecl base, int block) {
  +        // 2.1 B and D must be the same type definition.
  +        if (derived == base)
  +            return true;
  +
  +        // 1 If B and D are not the same type definition, then the {derivation method} of D must not be in the subset.
  +        if ((derived.fDerivedBy & block) != 0)
  +            return false;
  +
  +        // 2 One of the following must be true:
  +        XSTypeDecl directBase = derived.fBaseType;
  +        // 2.2 B must be D's {base type definition}.
  +        if (directBase == base)
  +            return true;
  +
  +        // 2.3 All of the following must be true:
  +        int directType = directBase.getXSType();
  +        // 2.3.1 D's {base type definition} must not be the �ur-type definition�.
  +        if ((directType & XSTypeDecl.UR_TYPE) != 0)
  +            return false;
  +
  +        // 2.3.2 The appropriate case among the following must be true:
  +        // 2.3.2.1 If D's {base type definition} is complex, then it must be validly derived from B given the subset as defined by this constraint.
  +        if ((directType & XSTypeDecl.COMPLEX_TYPE) != 0)
  +            return checkComplexDerivation((XSComplexTypeDecl)directBase, base, block);
  +
  +        // 2.3.2.2 If D's {base type definition} is simple, then it must be validly derived from B given the subset as defined in Type Derivation OK (Simple) (�3.14.6).
  +        if ((directType & XSTypeDecl.SIMPLE_TYPE) != 0) {
  +            // if base is complex type
  +            if ((base.getXSType() & XSTypeDecl.COMPLEX_TYPE) != 0) {
  +                // if base is anyType, change base to anySimpleType,
  +                // otherwise, not valid
  +                if (base.getXSType() == XSTypeDecl.ANY_TYPE)
  +                    base = SchemaGrammar.SG_SchemaNS.getGlobalTypeDecl(SchemaSymbols.ATTVAL_ANYSIMPLETYPE);
  +                else
  +                    return false;
  +            }
  +            return checkSimpleDerivation((DatatypeValidator)derived,
  +                                         (DatatypeValidator)base, block);
  +        }
  +
  +        return false;
  +    }
   
       void reportSchemaError(String key, Object[] arguments) {
           if (fDoValidation)
  
  
  
  1.20      +71 -27    xml-xerces/java/src/org/apache/xerces/impl/v2/XSAttributeChecker.java
  
  Index: XSAttributeChecker.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/v2/XSAttributeChecker.java,v
  retrieving revision 1.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- XSAttributeChecker.java	2001/09/21 17:57:17	1.19
  +++ XSAttributeChecker.java	2001/09/24 15:24:54	1.20
  @@ -89,7 +89,7 @@
    * - use symbol table instead of many hashtables
    *
    * @author Sandy Gao, IBM
  - * @version $Id: XSAttributeChecker.java,v 1.19 2001/09/21 17:57:17 sandygao Exp $
  + * @version $Id: XSAttributeChecker.java,v 1.20 2001/09/24 15:24:54 sandygao Exp $
    */
   
   public class XSAttributeChecker {
  @@ -149,6 +149,9 @@
       private static final XInt INT_WS_COLLAPSE    = fXIntPool.getXInt(SchemaSymbols.WS_COLLAPSE);
       private static final XInt INT_UNBOUNDED      = fXIntPool.getXInt(SchemaSymbols.OCCURRENCE_UNBOUNDED);
   
  +    // default wildcard to return
  +    private static final XSWildcardDecl WC_ANY   = new XSWildcardDecl();
  +
       // used to store the map from element name to attribute list
       protected static Hashtable fEleAttrsMapG = new Hashtable();
       protected static Hashtable fEleAttrsMapN = new Hashtable();
  @@ -364,7 +367,7 @@
           allAttrs[ATT_NAMESPACE_D]       =   new OneAttr(SchemaSymbols.ATT_NAMESPACE,
                                                           DT_NAMESPACE,
                                                           ATTIDX_NAMESPACE,
  -                                                        SchemaSymbols.ATTVAL_TWOPOUNDANY);
  +                                                        WC_ANY);
           allAttrs[ATT_NAMESPACE_N]       =   new OneAttr(SchemaSymbols.ATT_NAMESPACE,
                                                           DT_ANYURI,
                                                           ATTIDX_NAMESPACE,
  @@ -938,9 +941,6 @@
           fEleAttrsMapN.put(SchemaSymbols.ELT_MINEXCLUSIVE, oneEle);
       }
   
  -    // used to store all seen ID values, and to check duplicate ID values
  -    private Hashtable fIdDefs = new Hashtable();
  -
       // used to resolver namespace prefixes
       protected XSDHandler fSchemaHandler = null;
   
  @@ -959,7 +959,6 @@
       }
   
       public void reset(XMLErrorReporter er, SymbolTable symbolTable) {
  -        fIdDefs.clear();
           fErrorReporter = er;
           fSymbolTable = symbolTable;
           fNonSchemaAttrs.clear();
  @@ -975,12 +974,12 @@
        * @return: Hashtable - list of attributes and values
        */
       public Object[] checkAttributes(Element element, boolean isGlobal,
  -                                    SchemaNamespaceSupport nsSupport) {
  +                                    XSDocumentInfo schemaDoc) {
           if (element == null)
               return null;
   
           // update NamespaceSupport
  -        resolveNamespace(element, nsSupport);
  +        resolveNamespace(element, schemaDoc.fNamespaceSupport);
   
           String uri = DOMUtil.getNamespaceURI(element);
           String elName = DOMUtil.getLocalName(element);
  @@ -1087,17 +1086,17 @@
                           oneAttr.dvIndex != DT_XPATH1) {
                           DatatypeValidator dv = fExtraDVs[oneAttr.dvIndex];
                           if (dv instanceof IDDatatypeValidator) {
  -                            retValue = dv.validate( attrVal, fIdDefs );
  +                            retValue = dv.validate(attrVal, schemaDoc.fIdDefs);
                           }
                           else {
  -                            retValue = dv.validate( attrVal, null);
  +                            retValue = dv.validate(attrVal, null);
                           }
                       }
                       // REVISIT: should have the datatype validators return
                       // the object representation of the value.
                       switch (oneAttr.dvIndex) {
                       case DT_QNAME:
  -                        retValue = resolveQName(attrVal, nsSupport);
  +                        retValue = resolveQName(attrVal, schemaDoc.fNamespaceSupport);
                           break;
                       default:
                           retValue = attrVal;
  @@ -1107,7 +1106,7 @@
                       attrValues[oneAttr.valueIndex] = retValue;
                   }
                   else {
  -                    retValue = validate(attrName, attrVal, oneAttr.dvIndex, nsSupport);
  +                    retValue = validate(attrName, attrVal, oneAttr.dvIndex, schemaDoc);
                       //attrValues.put(attrName, retValue);
                       attrValues[oneAttr.valueIndex] = retValue;
                   }
  @@ -1161,7 +1160,7 @@
       }
   
       private Object validate(String attr, String value, int dvIndex,
  -                            SchemaNamespaceSupport nsSupport) throws InvalidDatatypeValueException {
  +                            XSDocumentInfo schemaDoc) throws InvalidDatatypeValueException {
           if (value == null)
               return null;
   
  @@ -1312,7 +1311,7 @@
                       retValue = fExtraDVs[DT_QNAME].validate(token, null);
                       // REVISIT: should have the datatype validators return
                       // the object representation of the value.
  -                    retValue = resolveQName(token, nsSupport);
  +                    retValue = resolveQName(token, schemaDoc.fNamespaceSupport);
                       memberType.addElement(retValue);
                   }
                   retValue = memberType;
  @@ -1332,22 +1331,67 @@
               break;
           case DT_NAMESPACE:
               // namespace = ((##any | ##other) | List of (anyURI | (##targetNamespace | ##local)) )
  -            if (!value.equals(SchemaSymbols.ATTVAL_TWOPOUNDANY) &&
  -                !value.equals(SchemaSymbols.ATTVAL_TWOPOUNDOTHER)) {
  -                StringTokenizer t = new StringTokenizer (value, " ");
  +            XSWildcardDecl wildcard = null;
  +            if (value.equals(SchemaSymbols.ATTVAL_TWOPOUNDANY)) {
  +                // ##any
  +                wildcard = WC_ANY;
  +            } else if (value.equals(SchemaSymbols.ATTVAL_TWOPOUNDOTHER)) {
  +                // ##other
  +                wildcard = new XSWildcardDecl();
  +                wildcard.fType = XSWildcardDecl.WILDCARD_OTHER;
  +                wildcard.fNamespaceList = new String[2];
  +                wildcard.fNamespaceList[0] = schemaDoc.fTargetNamespace;
  +                wildcard.fNamespaceList[1] = fSchemaHandler.EMPTY_STRING;
  +            } else {
  +                // list
  +                wildcard = new XSWildcardDecl();
  +                wildcard.fType = XSWildcardDecl.WILDCARD_LIST;
  +
  +                // tokenize
  +                StringTokenizer tokens = new StringTokenizer(value);
  +                String[] namespaceList = new String[tokens.countTokens()];
  +                int nsNum = 0;
  +                String token;
  +                String tempNamespace;
                   try {
  -                    while (t.hasMoreTokens()) {
  -                        String token = t.nextToken ();
  -                        if (!token.equals(SchemaSymbols.ATTVAL_TWOPOUNDTARGETNS) &&
  -                            !token.equals(SchemaSymbols.ATTVAL_TWOPOUNDLOCAL)) {
  +                    while (tokens.hasMoreTokens()) {
  +                        token = tokens.nextToken();
  +                        if (token.equals(SchemaSymbols.ATTVAL_TWOPOUNDLOCAL)) {
  +                            tempNamespace = fSchemaHandler.EMPTY_STRING;
  +                        } else if (token.equals(SchemaSymbols.ATTVAL_TWOPOUNDTARGETNS)) {
  +                            tempNamespace = schemaDoc.fTargetNamespace;
  +                        } else {
  +                            // we have found namespace URI here
  +                            // need to add it to the symbol table
                               fExtraDVs[DT_ANYURI].validate(token, null);
  +                            tempNamespace = fSymbolTable.addSymbol(token);
  +                        }
  +
  +                        //check for duplicate namespaces in the list
  +                        int j = 0;
  +                        for (; j < nsNum; j++) {
  +                            if (tempNamespace == namespaceList[j])
  +                                break;
                           }
  +                        if (j == nsNum) {
  +                            // this means traversed whole for loop
  +                            // i.e. not a duplicate namespace
  +                            namespaceList[nsNum++] = tempNamespace;
  +                        }
                       }
  -                    //REVISIT: what to return? a vector?
  -                }
  -                catch (InvalidDatatypeValueException ide) {
  +                } catch (InvalidDatatypeValueException ide) {
                       throw new InvalidDatatypeValueException("the value '"+value+"' must match ((##any | ##other) | List of (anyURI | (##targetNamespace | ##local)) )");
                   }
  +
  +                // resize the array, so there is no empty entry
  +                if (nsNum == namespaceList.length) {
  +                    wildcard.fNamespaceList = namespaceList;
  +                } else {
  +                    wildcard.fNamespaceList = new String[nsNum];
  +                    System.arraycopy(namespaceList, 0, wildcard.fNamespaceList, 0, nsNum);
  +                }
  +
  +                retValue = wildcard;
               }
               break;
           case DT_PROCESSCONTENTS:
  @@ -1554,9 +1598,9 @@
       }
   
       // return an array back to the pool
  -    public void returnAttrArray(Object[] attrArray, SchemaNamespaceSupport nsSupport) {
  +    public void returnAttrArray(Object[] attrArray, XSDocumentInfo schemaDoc) {
           // pop the namespace context
  -        nsSupport.popContext();
  +        schemaDoc.fNamespaceSupport.popContext();
   
           // if 1. the pool is full; 2. the array is null;
           // 3. the array is of wrong size; 4. the array is already returned
  @@ -1585,7 +1629,7 @@
           for (int i = 0; i < attrs.length; i++) {
               sattr = attrs[i];
               rawname = DOMUtil.getName(sattr);
  -            if (rawname.startsWith("xmlns")) {
  +            if (rawname == SchemaSymbols.XMLNS || rawname.startsWith("xmlns:")) {
                   prefix = null;
                   if (rawname.length() == 5)
                       prefix = fSchemaHandler.EMPTY_STRING;
  
  
  
  1.3       +7 -7      xml-xerces/java/src/org/apache/xerces/impl/v2/XSDAbstractIDConstraintTraverser.java
  
  Index: XSDAbstractIDConstraintTraverser.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/v2/XSDAbstractIDConstraintTraverser.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- XSDAbstractIDConstraintTraverser.java	2001/09/21 16:22:28	1.2
  +++ XSDAbstractIDConstraintTraverser.java	2001/09/24 15:24:54	1.3
  @@ -68,7 +68,7 @@
    * traversers (the XSDUniqueTraverser, XSDKeyTraverser and
    * XSDKeyrefTraverser) rely upon.
    *
  - * @version $Id: XSDAbstractIDConstraintTraverser.java,v 1.2 2001/09/21 16:22:28 sandygao Exp $
  + * @version $Id: XSDAbstractIDConstraintTraverser.java,v 1.3 2001/09/24 15:24:54 sandygao Exp $
    */
   class XSDAbstractIDConstraintTraverser extends XSDAbstractTraverser {
   
  @@ -91,7 +91,7 @@
           }
           sElem = checkContent( icElem, sElem, false);
           // General Attribute Checking on sElem
  -        Object [] attrValues = fAttrChecker.checkAttributes(sElem, false, schemaDoc.fNamespaceSupport);
  +        Object [] attrValues = fAttrChecker.checkAttributes(sElem, false, schemaDoc);
   
           if(!sElem.getLocalName().equals(SchemaSymbols.ELT_SELECTOR)) {
               // REVISIT: localize
  @@ -112,12 +112,12 @@
               // REVISIT: Add error message.
               reportGenericSchemaError(e.getMessage());
               // put back attr values...
  -            fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
  +            fAttrChecker.returnAttrArray(attrValues, schemaDoc);
               return;
           }
   
           // put back attr values...
  -        fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
  +        fAttrChecker.returnAttrArray(attrValues, schemaDoc);
   
           // get fields
           Element fElem = DOMUtil.getNextSiblingElement(sElem);
  @@ -127,7 +127,7 @@
           }
           while (fElem != null) {
               // General Attribute Checking
  -            attrValues = fAttrChecker.checkAttributes(fElem, false, schemaDoc.fNamespaceSupport);
  +            attrValues = fAttrChecker.checkAttributes(fElem, false, schemaDoc);
   
               if(!fElem.getLocalName().equals(SchemaSymbols.ELT_FIELD))
                   // REVISIT: localize
  @@ -145,12 +145,12 @@
                   // REVISIT: Add error message.
                   reportGenericSchemaError(e.getMessage());
                   // put back attr values...
  -                fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
  +                fAttrChecker.returnAttrArray(attrValues, schemaDoc);
                   return;
               }
               fElem = DOMUtil.getNextSiblingElement(fElem);
               // put back attr values...
  -            fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
  +            fAttrChecker.returnAttrArray(attrValues, schemaDoc);
           }
   
       } // traverseIdentityConstraint(IdentityConstraint,Element, XSDocumentInfo)
  
  
  
  1.12      +5 -5      xml-xerces/java/src/org/apache/xerces/impl/v2/XSDAbstractParticleTraverser.java
  
  Index: XSDAbstractParticleTraverser.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/v2/XSDAbstractParticleTraverser.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- XSDAbstractParticleTraverser.java	2001/09/21 16:22:28	1.11
  +++ XSDAbstractParticleTraverser.java	2001/09/24 15:24:54	1.12
  @@ -65,7 +65,7 @@
   /**
    * @author Elena Litani, IBM
    * @author Sandy Gao, IBM
  - * @version $Id: XSDAbstractParticleTraverser.java,v 1.11 2001/09/21 16:22:28 sandygao Exp $
  + * @version $Id: XSDAbstractParticleTraverser.java,v 1.12 2001/09/24 15:24:54 sandygao Exp $
    */
   abstract class XSDAbstractParticleTraverser extends XSDAbstractTraverser {
   
  @@ -93,7 +93,7 @@
   
           // General Attribute Checking
   
  -        Object[] attrValues = fAttrChecker.checkAttributes(allDecl, false, schemaDoc.fNamespaceSupport);
  +        Object[] attrValues = fAttrChecker.checkAttributes(allDecl, false, schemaDoc);
   
           Element content = DOMUtil.getFirstChildElement(allDecl);
           Element child = checkContent(allDecl, content, true);
  @@ -155,7 +155,7 @@
                                   allContextFlags,
                                   defaultVals.longValue());
   
  -        fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
  +        fAttrChecker.returnAttrArray(attrValues, schemaDoc);
   
           return left;
       }
  @@ -222,7 +222,7 @@
                                                boolean choice) {
   
           // General Attribute Checking
  -        Object[] attrValues = fAttrChecker.checkAttributes(decl, false, schemaDoc.fNamespaceSupport);
  +        Object[] attrValues = fAttrChecker.checkAttributes(decl, false, schemaDoc);
   
           Element content = DOMUtil.getFirstChildElement(decl);
           Element child = checkContent(decl,content, true);
  @@ -325,7 +325,7 @@
                                   allContextFlags,
                                   defaultVals.longValue());
   
  -        fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
  +        fAttrChecker.returnAttrArray(attrValues, schemaDoc);
   
           return left;
       }
  
  
  
  1.18      +5 -5      xml-xerces/java/src/org/apache/xerces/impl/v2/XSDAbstractTraverser.java
  
  Index: XSDAbstractTraverser.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/v2/XSDAbstractTraverser.java,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- XSDAbstractTraverser.java	2001/09/21 16:22:28	1.17
  +++ XSDAbstractTraverser.java	2001/09/24 15:24:54	1.18
  @@ -74,7 +74,7 @@
    *
    * @author Elena Litani, IBM
    *
  - * @version $Id: XSDAbstractTraverser.java,v 1.17 2001/09/21 16:22:28 sandygao Exp $
  + * @version $Id: XSDAbstractTraverser.java,v 1.18 2001/09/24 15:24:54 sandygao Exp $
    */
   abstract class XSDAbstractTraverser {
   
  @@ -130,8 +130,8 @@
       void traverseAnnotationDecl(Element annotationDecl, Object[] parentAttrs,
                                   boolean isGlobal, XSDocumentInfo schemaDoc) {
           // General Attribute Checking
  -        Object[] attrValues = fAttrChecker.checkAttributes(annotationDecl, isGlobal, schemaDoc.fNamespaceSupport);
  -        fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
  +        Object[] attrValues = fAttrChecker.checkAttributes(annotationDecl, isGlobal, schemaDoc);
  +        fAttrChecker.returnAttrArray(attrValues, schemaDoc);
   
           for(Element child = DOMUtil.getFirstChildElement(annotationDecl);
               child != null;
  @@ -148,8 +148,8 @@
               // General Attribute Checking
               // There is no difference between global or local appinfo/documentation,
               // so we assume it's always global.
  -            attrValues = fAttrChecker.checkAttributes(child, true, schemaDoc.fNamespaceSupport);
  -            fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
  +            attrValues = fAttrChecker.checkAttributes(child, true, schemaDoc);
  +            fAttrChecker.returnAttrArray(attrValues, schemaDoc);
           }
   
           // REVISIT: an annotation decl should be returned when we support PSVI
  
  
  
  1.12      +6 -6      xml-xerces/java/src/org/apache/xerces/impl/v2/XSDAttributeGroupTraverser.java
  
  Index: XSDAttributeGroupTraverser.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/v2/XSDAttributeGroupTraverser.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- XSDAttributeGroupTraverser.java	2001/09/21 17:57:17	1.11
  +++ XSDAttributeGroupTraverser.java	2001/09/24 15:24:54	1.12
  @@ -75,7 +75,7 @@
    * @author Rahul Srivastava, Sun Microsystems Inc.
    * @author Sandy Gao, IBM
    *
  - * @version $Id: XSDAttributeGroupTraverser.java,v 1.11 2001/09/21 17:57:17 sandygao Exp $
  + * @version $Id: XSDAttributeGroupTraverser.java,v 1.12 2001/09/24 15:24:54 sandygao Exp $
    */
   class XSDAttributeGroupTraverser extends XSDAbstractTraverser {
   
  @@ -91,7 +91,7 @@
                                          SchemaGrammar grammar) {
   
           // General Attribute Checking for elmNode declared locally
  -        Object[] attrValues = fAttrChecker.checkAttributes(elmNode, false, schemaDoc.fNamespaceSupport);
  +        Object[] attrValues = fAttrChecker.checkAttributes(elmNode, false, schemaDoc);
   
           // get attribute
           QName   refAttr	= (QName)   attrValues[XSAttributeChecker.ATTIDX_REF];
  @@ -101,7 +101,7 @@
           // ref should be here.
           if (refAttr == null) {
               reportGenericSchemaError("Local attributeGroup declaration should have ref.");
  -            fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
  +            fAttrChecker.returnAttrArray(attrValues, schemaDoc);
               return null;
           }
   
  @@ -128,7 +128,7 @@
               }
            } // if
   
  -        fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
  +        fAttrChecker.returnAttrArray(attrValues, schemaDoc);
           return attrGrp;
   
       } // traverseLocal
  @@ -140,7 +140,7 @@
           XSAttributeGroupDecl attrGrp = new XSAttributeGroupDecl();
   
           // General Attribute Checking for elmNode declared globally
  -        Object[] attrValues = fAttrChecker.checkAttributes(elmNode, true, schemaDoc.fNamespaceSupport);
  +        Object[] attrValues = fAttrChecker.checkAttributes(elmNode, true, schemaDoc);
   
           String  nameAttr   = (String) attrValues[XSAttributeChecker.ATTIDX_NAME];
   
  @@ -203,7 +203,7 @@
           // make an entry in global declarations.
           grammar.addGlobalAttributeGroupDecl(attrGrp);
   
  -        fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
  +        fAttrChecker.returnAttrArray(attrValues, schemaDoc);
           return attrGrp;
   
       } // traverseGlobal
  
  
  
  1.12      +5 -5      xml-xerces/java/src/org/apache/xerces/impl/v2/XSDAttributeTraverser.java
  
  Index: XSDAttributeTraverser.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/v2/XSDAttributeTraverser.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- XSDAttributeTraverser.java	2001/09/21 16:22:28	1.11
  +++ XSDAttributeTraverser.java	2001/09/24 15:24:54	1.12
  @@ -82,7 +82,7 @@
    *
    * @author Sandy Gao, IBM
    *
  - * @version $Id: XSDAttributeTraverser.java,v 1.11 2001/09/21 16:22:28 sandygao Exp $
  + * @version $Id: XSDAttributeTraverser.java,v 1.12 2001/09/24 15:24:54 sandygao Exp $
    */
   class XSDAttributeTraverser extends XSDAbstractTraverser {
   
  @@ -96,7 +96,7 @@
                                              SchemaGrammar grammar) {
   
           // General Attribute Checking
  -        Object[] attrValues = fAttrChecker.checkAttributes(attrDecl, false, schemaDoc.fNamespaceSupport);
  +        Object[] attrValues = fAttrChecker.checkAttributes(attrDecl, false, schemaDoc);
   
           String defaultAtt = (String) attrValues[XSAttributeChecker.ATTIDX_DEFAULT];
           String fixedAtt   = (String) attrValues[XSAttributeChecker.ATTIDX_FIXED];
  @@ -142,7 +142,7 @@
               attrUse.fDefault = defaultAtt;
           }
   
  -        fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
  +        fAttrChecker.returnAttrArray(attrValues, schemaDoc);
   
           //src-attribute
   
  @@ -180,9 +180,9 @@
                                                SchemaGrammar grammar) {
   
           // General Attribute Checking
  -        Object[] attrValues = fAttrChecker.checkAttributes(attrDecl, true, schemaDoc.fNamespaceSupport);
  +        Object[] attrValues = fAttrChecker.checkAttributes(attrDecl, true, schemaDoc);
           XSAttributeDecl attribute = traverseNamedAttr(attrDecl, attrValues, schemaDoc, grammar, true);
  -        fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
  +        fAttrChecker.returnAttrArray(attrValues, schemaDoc);
   
           return attribute;
       }
  
  
  
  1.14      +7 -7      xml-xerces/java/src/org/apache/xerces/impl/v2/XSDComplexTypeTraverser.java
  
  Index: XSDComplexTypeTraverser.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/v2/XSDComplexTypeTraverser.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- XSDComplexTypeTraverser.java	2001/09/21 16:22:28	1.13
  +++ XSDComplexTypeTraverser.java	2001/09/24 15:24:54	1.14
  @@ -78,7 +78,7 @@
    *            ((group | all | choice | sequence)?,
    *            ((attribute | attributeGroup)*, anyAttribute?))))
    * </complexType>
  - * @version $Id: XSDComplexTypeTraverser.java,v 1.13 2001/09/21 16:22:28 sandygao Exp $
  + * @version $Id: XSDComplexTypeTraverser.java,v 1.14 2001/09/24 15:24:54 sandygao Exp $
    */
   
   class  XSDComplexTypeTraverser extends XSDAbstractParticleTraverser {
  @@ -109,11 +109,11 @@
   
   
           Object[] attrValues = fAttrChecker.checkAttributes(complexTypeNode, false,
  -                              schemaDoc.fNamespaceSupport);
  +                              schemaDoc);
           String complexTypeName = genAnonTypeName(complexTypeNode);
           XSComplexTypeDecl type = traverseComplexTypeDecl (complexTypeNode,
                                    complexTypeName, attrValues, schemaDoc, grammar);
  -        fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
  +        fAttrChecker.returnAttrArray(attrValues, schemaDoc);
   
           return type;
       }
  @@ -131,12 +131,12 @@
                           SchemaGrammar grammar){
   
           Object[] attrValues = fAttrChecker.checkAttributes(complexTypeNode, true,
  -                              schemaDoc.fNamespaceSupport);
  +                              schemaDoc);
           String complexTypeName = (String)  attrValues[XSAttributeChecker.ATTIDX_NAME];
           XSComplexTypeDecl type = traverseComplexTypeDecl (complexTypeNode,
                                    complexTypeName, attrValues, schemaDoc, grammar);
           grammar.addGlobalTypeDecl(type);
  -        fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
  +        fAttrChecker.returnAttrArray(attrValues, schemaDoc);
   
           return type;
       }
  @@ -157,9 +157,9 @@
           complexType.fName = complexTypeName;
           complexType.fTargetNamespace = schemaDoc.fTargetNamespace;
           complexType.fBlock = blockAtt == null ?
  -                             SchemaSymbols.EMPTY_SET : blockAtt.shortValue();
  +                             schemaDoc.fBlockDefault : blockAtt.shortValue();
           complexType.fFinal = finalAtt == null ?
  -                             SchemaSymbols.EMPTY_SET : finalAtt.shortValue();
  +                             schemaDoc.fFinalDefault : finalAtt.shortValue();
           if (abstractAtt.booleanValue())
               complexType.setIsAbstractType();
   
  
  
  
  1.15      +7 -7      xml-xerces/java/src/org/apache/xerces/impl/v2/XSDElementTraverser.java
  
  Index: XSDElementTraverser.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/v2/XSDElementTraverser.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- XSDElementTraverser.java	2001/09/21 16:22:28	1.14
  +++ XSDElementTraverser.java	2001/09/24 15:24:54	1.15
  @@ -88,7 +88,7 @@
    *
    * @author Sandy Gao, IBM
    *
  - * @version $Id: XSDElementTraverser.java,v 1.14 2001/09/21 16:22:28 sandygao Exp $
  + * @version $Id: XSDElementTraverser.java,v 1.15 2001/09/24 15:24:54 sandygao Exp $
    */
   class XSDElementTraverser extends XSDAbstractTraverser {
   
  @@ -156,7 +156,7 @@
                                  int allContextFlags) {
   
           // General Attribute Checking
  -        Object[] attrValues = fAttrChecker.checkAttributes(elmDecl, false, schemaDoc.fNamespaceSupport);
  +        Object[] attrValues = fAttrChecker.checkAttributes(elmDecl, false, schemaDoc);
   
           QName refAtt = (QName) attrValues[XSAttributeChecker.ATTIDX_REF];
           XInt  minAtt = (XInt)  attrValues[XSAttributeChecker.ATTIDX_MINOCCURS];
  @@ -191,7 +191,7 @@
                                defaultVals.longValue());
           }
   
  -        fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
  +        fAttrChecker.returnAttrArray(attrValues, schemaDoc);
       }
   
       /**
  @@ -207,9 +207,9 @@
                                    SchemaGrammar grammar) {
   
           // General Attribute Checking
  -        Object[] attrValues = fAttrChecker.checkAttributes(elmDecl, true, schemaDoc.fNamespaceSupport);
  +        Object[] attrValues = fAttrChecker.checkAttributes(elmDecl, true, schemaDoc);
           XSElementDecl element = traverseNamedElement(elmDecl, attrValues, schemaDoc, grammar, true);
  -        fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
  +        fAttrChecker.returnAttrArray(attrValues, schemaDoc);
   
           return element;
       }
  @@ -264,8 +264,8 @@
           }
   
           // get 'block', 'final', 'nillable', 'abstract'
  -        element.fBlock = blockAtt == null ? SchemaSymbols.EMPTY_SET : blockAtt.shortValue();
  -        element.fFinal = finalAtt == null ? SchemaSymbols.EMPTY_SET : finalAtt.shortValue();
  +        element.fBlock = blockAtt == null ? schemaDoc.fBlockDefault : blockAtt.shortValue();
  +        element.fFinal = finalAtt == null ? schemaDoc.fFinalDefault : finalAtt.shortValue();
           if (nillableAtt.booleanValue())
               element.setIsNillable();
           if (abstractAtt != null && abstractAtt.booleanValue())
  
  
  
  1.13      +5 -5      xml-xerces/java/src/org/apache/xerces/impl/v2/XSDGroupTraverser.java
  
  Index: XSDGroupTraverser.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/v2/XSDGroupTraverser.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- XSDGroupTraverser.java	2001/09/21 16:22:28	1.12
  +++ XSDGroupTraverser.java	2001/09/24 15:24:54	1.13
  @@ -73,7 +73,7 @@
    * @author Rahul Srivastava, Sun Microsystems Inc.
    * @author Elena Litani, IBM
    * @author Lisa Martin,  IBM
  - * @version $Id: XSDGroupTraverser.java,v 1.12 2001/09/21 16:22:28 sandygao Exp $
  + * @version $Id: XSDGroupTraverser.java,v 1.13 2001/09/24 15:24:54 sandygao Exp $
    */
   class  XSDGroupTraverser extends XSDAbstractParticleTraverser {
   
  @@ -89,7 +89,7 @@
   
           // General Attribute Checking for elmNode declared locally
           Object[] attrValues = fAttrChecker.checkAttributes(elmNode, false,
  -                              schemaDoc.fNamespaceSupport);
  +                              schemaDoc);
           QName refAttr = (QName) attrValues[XSAttributeChecker.ATTIDX_REF];
           XInt  minAttr = (XInt)  attrValues[XSAttributeChecker.ATTIDX_MINOCCURS];
           XInt  maxAttr = (XInt)  attrValues[XSAttributeChecker.ATTIDX_MAXOCCURS];
  @@ -132,7 +132,7 @@
               }
           }
   
  -        fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
  +        fAttrChecker.returnAttrArray(attrValues, schemaDoc);
   
           return particle;
   
  @@ -144,7 +144,7 @@
   
           // General Attribute Checking for elmNode declared globally
           Object[] attrValues = fAttrChecker.checkAttributes(elmNode, true,
  -                              schemaDoc.fNamespaceSupport);
  +                              schemaDoc);
           String  strNameAttr = (String)  attrValues[XSAttributeChecker.ATTIDX_NAME];
   
           // must have a name
  @@ -200,7 +200,7 @@
               }
           }
   
  -        fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
  +        fAttrChecker.returnAttrArray(attrValues, schemaDoc);
   
           return group;
   
  
  
  
  1.28      +5 -5      xml-xerces/java/src/org/apache/xerces/impl/v2/XSDHandler.java
  
  Index: XSDHandler.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/v2/XSDHandler.java,v
  retrieving revision 1.27
  retrieving revision 1.28
  diff -u -r1.27 -r1.28
  --- XSDHandler.java	2001/09/21 19:56:32	1.27
  +++ XSDHandler.java	2001/09/24 15:24:54	1.28
  @@ -95,7 +95,7 @@
    * schema, other grammars may be constructed as a side-effect.
    *
    * @author Neil Graham, IBM
  - * @version $Id: XSDHandler.java,v 1.27 2001/09/21 19:56:32 sandygao Exp $
  + * @version $Id: XSDHandler.java,v 1.28 2001/09/24 15:24:54 sandygao Exp $
    */
   
   class XSDHandler {
  @@ -323,10 +323,10 @@
               else if (localName.equals(SchemaSymbols.ELT_IMPORT)) {
                   // have to handle some validation here too!
                   // call XSAttributeChecker to fill in attrs
  -                Object[] includeAttrs = fAttributeChecker.checkAttributes(child, true, currSchemaInfo.fNamespaceSupport);
  +                Object[] includeAttrs = fAttributeChecker.checkAttributes(child, true, currSchemaInfo);
                   schemaHint = (String)includeAttrs[XSAttributeChecker.ATTIDX_SCHEMALOCATION];
                   schemaNamespace = (String)includeAttrs[XSAttributeChecker.ATTIDX_NAMESPACE];
  -                fAttributeChecker.returnAttrArray(includeAttrs, currSchemaInfo.fNamespaceSupport);
  +                fAttributeChecker.returnAttrArray(includeAttrs, currSchemaInfo);
                   newSchemaRoot = getSchema(schemaNamespace, schemaHint);
               }
               else if ((localName.equals(SchemaSymbols.ELT_INCLUDE)) ||
  @@ -334,9 +334,9 @@
                   // validation for redefine/include will be the same here; just
                   // make sure TNS is right (don't care about redef contents
                   // yet).
  -                Object[] includeAttrs = fAttributeChecker.checkAttributes(child, true, currSchemaInfo.fNamespaceSupport);
  +                Object[] includeAttrs = fAttributeChecker.checkAttributes(child, true, currSchemaInfo);
                   schemaHint = (String)includeAttrs[XSAttributeChecker.ATTIDX_SCHEMALOCATION];
  -                fAttributeChecker.returnAttrArray(includeAttrs, currSchemaInfo.fNamespaceSupport);
  +                fAttributeChecker.returnAttrArray(includeAttrs, currSchemaInfo);
                   newSchemaRoot = getSchema(EMPTY_STRING, schemaHint);
               }
               else {
  
  
  
  1.5       +4 -4      xml-xerces/java/src/org/apache/xerces/impl/v2/XSDKeyrefTraverser.java
  
  Index: XSDKeyrefTraverser.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/v2/XSDKeyrefTraverser.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- XSDKeyrefTraverser.java	2001/09/21 16:22:28	1.4
  +++ XSDKeyrefTraverser.java	2001/09/24 15:24:55	1.5
  @@ -68,7 +68,7 @@
    * This class contains code that is used to traverse <keyref>s.
    *
    * @author Neil Graham, IBM
  - * @version $Id: XSDKeyrefTraverser.java,v 1.4 2001/09/21 16:22:28 sandygao Exp $
  + * @version $Id: XSDKeyrefTraverser.java,v 1.5 2001/09/24 15:24:55 sandygao Exp $
    */
   class XSDKeyrefTraverser extends XSDAbstractIDConstraintTraverser {
   
  @@ -81,7 +81,7 @@
               XSDocumentInfo schemaDoc, SchemaGrammar grammar) {
   
           // General Attribute Checking
  -        Object[] attrValues = fAttrChecker.checkAttributes(krElem, false, schemaDoc.fNamespaceSupport);
  +        Object[] attrValues = fAttrChecker.checkAttributes(krElem, false, schemaDoc);
   
           // create identity constraint
           QName krName = (QName)attrValues[XSAttributeChecker.ATTIDX_NAME];
  @@ -92,7 +92,7 @@
           if(key == null) {
               // reportSchemaError(SchemaMessageProvider.KeyRefReferNotFound,
                                 // new Object[]{krName,kName});
  -            fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
  +            fAttrChecker.returnAttrArray(attrValues, schemaDoc);
               return;
           }
   
  @@ -106,7 +106,7 @@
           // REVISIT: should we add IDC to element here?
           grammar.addIDConstraintDecl(element, keyRef);
           // and put back attributes
  -        fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
  +        fAttrChecker.returnAttrArray(attrValues, schemaDoc);
       } // traverse(Element,int,XSDocumentInfo, SchemaGrammar)
   } // XSDKeyrefTraverser
   
  
  
  
  1.10      +4 -4      xml-xerces/java/src/org/apache/xerces/impl/v2/XSDNotationTraverser.java
  
  Index: XSDNotationTraverser.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/v2/XSDNotationTraverser.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- XSDNotationTraverser.java	2001/09/21 16:22:28	1.9
  +++ XSDNotationTraverser.java	2001/09/24 15:24:55	1.10
  @@ -75,7 +75,7 @@
    *
    * @author Rahul Srivastava, Sun Microsystems Inc.
    * @author Elena Litani, IBM
  - * @version $Id: XSDNotationTraverser.java,v 1.9 2001/09/21 16:22:28 sandygao Exp $
  + * @version $Id: XSDNotationTraverser.java,v 1.10 2001/09/24 15:24:55 sandygao Exp $
    */
   class  XSDNotationTraverser extends XSDAbstractTraverser {
   
  @@ -89,7 +89,7 @@
                               SchemaGrammar grammar) {
   
           // General Attribute Checking for elmNode
  -        Object[] attrValues = fAttrChecker.checkAttributes(elmNode, true, schemaDoc.fNamespaceSupport);
  +        Object[] attrValues = fAttrChecker.checkAttributes(elmNode, true, schemaDoc);
   
           //get attributes
           String  nameAttr   = (String) attrValues[XSAttributeChecker.ATTIDX_NAME];
  @@ -99,7 +99,7 @@
           if (nameAttr.length() == 0) {
               //REVISIT: update error message
               reportGenericSchemaError("<notation> must have a name");
  -            fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
  +            fAttrChecker.returnAttrArray(attrValues, schemaDoc);
               return null;
           }
   
  @@ -130,7 +130,7 @@
               }
           }
   
  -        fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
  +        fAttrChecker.returnAttrArray(attrValues, schemaDoc);
   
           return notation;
       }
  
  
  
  1.16      +11 -11    xml-xerces/java/src/org/apache/xerces/impl/v2/XSDSimpleTypeTraverser.java
  
  Index: XSDSimpleTypeTraverser.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/v2/XSDSimpleTypeTraverser.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- XSDSimpleTypeTraverser.java	2001/09/21 16:22:28	1.15
  +++ XSDSimpleTypeTraverser.java	2001/09/24 15:24:55	1.16
  @@ -109,7 +109,7 @@
    * </union>
    *
    * @author Elena Litani, IBM
  - * @version $Id: XSDSimpleTypeTraverser.java,v 1.15 2001/09/21 16:22:28 sandygao Exp $
  + * @version $Id: XSDSimpleTypeTraverser.java,v 1.16 2001/09/24 15:24:55 sandygao Exp $
    */
   class XSDSimpleTypeTraverser extends XSDAbstractTraverser {
   
  @@ -135,10 +135,10 @@
           // General Attribute Checking
           fSchemaDoc = schemaDoc;
           fGrammar = grammar;
  -        Object[] attrValues = fAttrChecker.checkAttributes(elmNode, true, schemaDoc.fNamespaceSupport);
  +        Object[] attrValues = fAttrChecker.checkAttributes(elmNode, true, schemaDoc);
           String nameAtt = (String)attrValues[XSAttributeChecker.ATTIDX_NAME];
           DatatypeValidator type = traverseSimpleTypeDecl(elmNode, attrValues, schemaDoc, true);
  -        fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
  +        fAttrChecker.returnAttrArray(attrValues, schemaDoc);
   
           return type;
       }
  @@ -149,9 +149,9 @@
           fSchemaDoc = schemaDoc;
           fGrammar = grammar;
   
  -        Object[] attrValues = fAttrChecker.checkAttributes(elmNode, false, schemaDoc.fNamespaceSupport);
  +        Object[] attrValues = fAttrChecker.checkAttributes(elmNode, false, schemaDoc);
           DatatypeValidator type = traverseSimpleTypeDecl (elmNode, attrValues, schemaDoc, false);
  -        fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
  +        fAttrChecker.returnAttrArray(attrValues, schemaDoc);
   
           return type;
       }
  @@ -188,7 +188,7 @@
           // update _final_ registry
           //----------------------------------------------------------
           XInt finalAttr = (XInt)attrValues[XSAttributeChecker.ATTIDX_FINAL];
  -        int finalProperty = finalAttr == null ? 0 : finalAttr.intValue();
  +        int finalProperty = finalAttr == null ? schemaDoc.fFinalDefault : finalAttr.intValue();
   
           //----------------------------------------------------------------------
           //annotation?,(list|restriction|union)
  @@ -201,9 +201,9 @@
           }
   
           // General Attribute Checking
  -        Object[] contentAttrs = fAttrChecker.checkAttributes(content, false, schemaDoc.fNamespaceSupport);
  +        Object[] contentAttrs = fAttrChecker.checkAttributes(content, false, schemaDoc);
           // REVISIT: when to return the array
  -        fAttrChecker.returnAttrArray(contentAttrs, schemaDoc.fNamespaceSupport);
  +        fAttrChecker.returnAttrArray(contentAttrs, schemaDoc);
   
           //----------------------------------------------------------------------
           //use content.getLocalName for the cases there "xsd:" is a prefix, ei. "xsd:list"
  @@ -404,7 +404,7 @@
               String facet;
               while (content != null) {
                   // General Attribute Checking
  -                Object[] attrs = fAttrChecker.checkAttributes(content, false, schemaDoc.fNamespaceSupport);
  +                Object[] attrs = fAttrChecker.checkAttributes(content, false, schemaDoc);
                   numFacets++;
                   facet = DOMUtil.getLocalName(content);
                   if (facet.equals(SchemaSymbols.ELT_ENUMERATION)) {
  @@ -412,7 +412,7 @@
                       String enumVal =  DOMUtil.getAttrValue(content, SchemaSymbols.ATT_VALUE);
                       String localName;
                       if (baseValidator instanceof NOTATIONDatatypeValidator) {
  -                        fAttrChecker.checkAttributes(content, false, schemaDoc.fNamespaceSupport);
  +                        fAttrChecker.checkAttributes(content, false, schemaDoc);
                           String prefix = "";
                           String localpart = enumVal;
                           int colonptr = enumVal.indexOf(":");
  @@ -505,7 +505,7 @@
                       checkContent(simpleTypeDecl, DOMUtil.getFirstChildElement( content ), true);
                   }
                   // REVISIT: when to return the array
  -                fAttrChecker.returnAttrArray (attrs, schemaDoc.fNamespaceSupport);
  +                fAttrChecker.returnAttrArray (attrs, schemaDoc);
                   content = DOMUtil.getNextSiblingElement(content);
               }
               if (numEnumerationLiterals > 0) {
  
  
  
  1.5       +3 -3      xml-xerces/java/src/org/apache/xerces/impl/v2/XSDUniqueOrKeyTraverser.java
  
  Index: XSDUniqueOrKeyTraverser.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/v2/XSDUniqueOrKeyTraverser.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- XSDUniqueOrKeyTraverser.java	2001/09/21 16:22:29	1.4
  +++ XSDUniqueOrKeyTraverser.java	2001/09/24 15:24:55	1.5
  @@ -68,7 +68,7 @@
    * <unique>s.
    *
    * @author Neil Graham, IBM
  - * @version $Id: XSDUniqueOrKeyTraverser.java,v 1.4 2001/09/21 16:22:29 sandygao Exp $
  + * @version $Id: XSDUniqueOrKeyTraverser.java,v 1.5 2001/09/24 15:24:55 sandygao Exp $
    */
   class XSDUniqueOrKeyTraverser extends XSDAbstractIDConstraintTraverser {
   
  @@ -82,7 +82,7 @@
               XSDocumentInfo schemaDoc, SchemaGrammar grammar) {
   
           // General Attribute Checking
  -        Object[] attrValues = fAttrChecker.checkAttributes(uElem, false, schemaDoc.fNamespaceSupport);
  +        Object[] attrValues = fAttrChecker.checkAttributes(uElem, false, schemaDoc);
   
           // create identity constraint
           String uName = (String)attrValues[XSAttributeChecker.ATTIDX_NAME];
  @@ -103,6 +103,6 @@
           grammar.addIDConstraintDecl(element, uniqueOrKey);
   
           // and fix up attributeChecker
  -        fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
  +        fAttrChecker.returnAttrArray(attrValues, schemaDoc);
       } // traverse(Element,XSDElementDecl,XSDocumentInfo, SchemaGrammar)
   } // XSDUniqueOrKeyTraverser
  
  
  
  1.8       +10 -73    xml-xerces/java/src/org/apache/xerces/impl/v2/XSDWildcardTraverser.java
  
  Index: XSDWildcardTraverser.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/v2/XSDWildcardTraverser.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- XSDWildcardTraverser.java	2001/09/21 17:57:17	1.7
  +++ XSDWildcardTraverser.java	2001/09/24 15:24:55	1.8
  @@ -87,7 +87,7 @@
    * @author Rahul Srivastava, Sun Microsystems Inc.
    * @author Sandy Gao, IBM
    *
  - * @version $Id: XSDWildcardTraverser.java,v 1.7 2001/09/21 17:57:17 sandygao Exp $
  + * @version $Id: XSDWildcardTraverser.java,v 1.8 2001/09/24 15:24:55 sandygao Exp $
    */
   class XSDWildcardTraverser extends XSDAbstractTraverser {
   
  @@ -117,8 +117,10 @@
                                  SchemaGrammar grammar) {
   
           // General Attribute Checking for elmNode
  -        Object[] attrValues = fAttrChecker.checkAttributes(elmNode, false, schemaDoc.fNamespaceSupport);
  +        Object[] attrValues = fAttrChecker.checkAttributes(elmNode, false, schemaDoc);
           XSWildcardDecl wildcard = traverseWildcardDecl(elmNode, attrValues, schemaDoc, grammar);
  +
  +        // for <any>, need to create a new particle to reflect the min/max values
           XSParticleDecl particle = null;
           if (wildcard != null) {
               int min = ((XInt)attrValues[XSAttributeChecker.ATTIDX_MINOCCURS]).intValue();
  @@ -132,7 +134,7 @@
               }
           }
   
  -        fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
  +        fAttrChecker.returnAttrArray(attrValues, schemaDoc);
   
           return particle;
       }
  @@ -151,9 +153,9 @@
                                           SchemaGrammar grammar) {
   
           // General Attribute Checking for elmNode
  -        Object[] attrValues = fAttrChecker.checkAttributes(elmNode, false, schemaDoc.fNamespaceSupport);
  +        Object[] attrValues = fAttrChecker.checkAttributes(elmNode, false, schemaDoc);
           XSWildcardDecl wildcard = traverseWildcardDecl(elmNode, attrValues, schemaDoc, grammar);
  -        fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
  +        fAttrChecker.returnAttrArray(attrValues, schemaDoc);
   
           return wildcard;
       }
  @@ -172,77 +174,12 @@
                                            XSDocumentInfo schemaDoc,
                                            SchemaGrammar grammar) {
   
  -        XSWildcardDecl wildcard = new XSWildcardDecl();
  -
           //get all attributes
  -        String namespaceAttr       = (String) attrValues[XSAttributeChecker.ATTIDX_NAMESPACE];
  -        XInt   processContentsAttr = (XInt) attrValues[XSAttributeChecker.ATTIDX_PROCESSCONTENTS];
  +        XSWildcardDecl wildcard = (XSWildcardDecl) attrValues[XSAttributeChecker.ATTIDX_NAMESPACE];
  +        XInt processContentsAttr = (XInt) attrValues[XSAttributeChecker.ATTIDX_PROCESSCONTENTS];
   
  +        // process contents
           wildcard.fProcessContents = processContentsAttr.shortValue();
  -
  -        wildcard.fType = XSWildcardDecl.WILDCARD_ANY;
  -        if (namespaceAttr.equals(SchemaSymbols.ATTVAL_TWOPOUNDANY)) {
  -            wildcard.fType = XSWildcardDecl.WILDCARD_ANY;
  -        }
  -        else if (namespaceAttr.equals(SchemaSymbols.ATTVAL_TWOPOUNDOTHER)) {
  -            wildcard.fType = XSWildcardDecl.WILDCARD_OTHER;
  -            if (schemaDoc.fTargetNamespace.length() == 0) {
  -                wildcard.fNamespaceList = new String[1];
  -                wildcard.fNamespaceList[0] = schemaDoc.fTargetNamespace;
  -            } else {
  -                wildcard.fNamespaceList = new String[2];
  -                wildcard.fNamespaceList[0] = schemaDoc.fTargetNamespace;
  -                wildcard.fNamespaceList[1] = fSchemaHandler.EMPTY_STRING;
  -            }
  -        }
  -        else {
  -            // REVISIT: namespace should be return in String[] or Vector,
  -            //          then we don't need to tokenize them again
  -
  -            //namespace = "##local" OR
  -            //namespace = "##targetNamespace" OR
  -            //namespace = "anyURI" OR
  -            //namespace = "anyURI ##local" OR
  -            //namespace = "anyURI ##targetNamespace"
  -
  -            StringTokenizer tokens = new StringTokenizer(namespaceAttr);
  -            String[] namespaceList = new String[tokens.countTokens()];
  -            int i = 0;
  -            String token;
  -            String tempNamespace;
  -            while (tokens.hasMoreTokens()) {
  -                token = tokens.nextToken();
  -                if (token.equals(SchemaSymbols.ATTVAL_TWOPOUNDLOCAL)) {
  -                    tempNamespace = fSchemaHandler.EMPTY_STRING;
  -                }
  -                else if (token.equals(SchemaSymbols.ATTVAL_TWOPOUNDTARGETNS)) {
  -                    tempNamespace = schemaDoc.fTargetNamespace;
  -                }
  -                else {
  -                    // we have found namespace URI here
  -                    tempNamespace = token;
  -                }
  -
  -                //check for duplicate namespaces in the list
  -                int j=0;
  -                for (; j<i; j++) {
  -                    if (tempNamespace.equals(namespaceList[j]))
  -                        break;
  -                }
  -                if (j == i) {
  -                    // this means traversed whole for loop
  -                    // i.e. not a duplicate namespace
  -                    namespaceList[i] = tempNamespace;
  -                    i++;
  -                }
  -            }
  -            if (i == namespaceList.length) {
  -                wildcard.fNamespaceList = namespaceList;
  -            } else {
  -                wildcard.fNamespaceList = new String[i];
  -                System.arraycopy(namespaceList, 0, wildcard.fNamespaceList, 0, i);
  -            }
  -        }
   
           //check content
           Element child = DOMUtil.getFirstChildElement(elmNode);
  
  
  
  1.10      +10 -7     xml-xerces/java/src/org/apache/xerces/impl/v2/XSDocumentInfo.java
  
  Index: XSDocumentInfo.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/v2/XSDocumentInfo.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- XSDocumentInfo.java	2001/09/21 16:22:29	1.9
  +++ XSDocumentInfo.java	2001/09/24 15:24:55	1.10
  @@ -72,7 +72,7 @@
    * affect the contents of that schema document alone.
    *
    * @author Neil Graham, IBM
  - * @version $Id: XSDocumentInfo.java,v 1.9 2001/09/21 16:22:29 sandygao Exp $
  + * @version $Id: XSDocumentInfo.java,v 1.10 2001/09/24 15:24:55 sandygao Exp $
    */
   
   class XSDocumentInfo {
  @@ -89,8 +89,8 @@
       protected boolean fAreLocalElementsQualified;
   
       // [block | final]Default
  -    protected int fBlockDefault;
  -    protected int fFinalDefault;
  +    protected short fBlockDefault;
  +    protected short fFinalDefault;
   
       // targetNamespace
       protected String fTargetNamespace;
  @@ -98,21 +98,24 @@
       // the root of the schema Document tree itself
       protected Document fSchemaDoc;
   
  +    // to store the ID values appearing in this document
  +    protected Hashtable fIdDefs = new Hashtable();
  +
       XSDocumentInfo (Document schemaDoc, XSAttributeChecker attrChecker) {
           fSchemaDoc = schemaDoc;
           fNamespaceSupport = new SchemaNamespaceSupport();
   
           if(schemaDoc != null) {
               Element root = DOMUtil.getRoot(schemaDoc);
  -            Object[] schemaAttrs = attrChecker.checkAttributes(root, true, fNamespaceSupport);
  +            Object[] schemaAttrs = attrChecker.checkAttributes(root, true, this);
               fAreLocalAttributesQualified =
                   ((XInt)schemaAttrs[XSAttributeChecker.ATTIDX_AFORMDEFAULT]).intValue() == SchemaSymbols.FORM_QUALIFIED;
               fAreLocalElementsQualified =
                   ((XInt)schemaAttrs[XSAttributeChecker.ATTIDX_EFORMDEFAULT]).intValue() == SchemaSymbols.FORM_QUALIFIED;
               fBlockDefault =
  -                ((XInt)schemaAttrs[XSAttributeChecker.ATTIDX_BLOCKDEFAULT]).intValue();
  +                ((XInt)schemaAttrs[XSAttributeChecker.ATTIDX_BLOCKDEFAULT]).shortValue();
               fFinalDefault =
  -                ((XInt)schemaAttrs[XSAttributeChecker.ATTIDX_FINALDEFAULT]).intValue();
  +                ((XInt)schemaAttrs[XSAttributeChecker.ATTIDX_FINALDEFAULT]).shortValue();
               fTargetNamespace =
                   (String)schemaAttrs[XSAttributeChecker.ATTIDX_TARGETNAMESPACE];
               //if (fTargetNamespace == null)
  @@ -121,7 +124,7 @@
               fNamespaceSupportRoot = new SchemaNamespaceSupport(fNamespaceSupport);
   
               // REVISIT: we can't return, becaues we can't pop fNamespaceSupport
  -            //attrChecker.returnAttrArray(schemaAttrs, fNamespaceSupport);
  +            //attrChecker.returnAttrArray(schemaAttrs, this);
           }
       }
   
  
  
  
  1.3       +25 -1     xml-xerces/java/src/org/apache/xerces/impl/v2/XSWildcardDecl.java
  
  Index: XSWildcardDecl.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/v2/XSWildcardDecl.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- XSWildcardDecl.java	2001/09/21 17:57:17	1.2
  +++ XSWildcardDecl.java	2001/09/24 15:24:55	1.3
  @@ -62,7 +62,7 @@
    * schema component is an <any> or <anyAttribute> element information item
    *
    * @author Sandy Gao, IBM
  - * @version $Id: XSWildcardDecl.java,v 1.2 2001/09/21 17:57:17 sandygao Exp $
  + * @version $Id: XSWildcardDecl.java,v 1.3 2001/09/24 15:24:55 sandygao Exp $
    */
   public class XSWildcardDecl {
   
  @@ -90,5 +90,29 @@
       // for WILDCARD_LIST, it means one of the namespaces in the list
       // for WILDCARD_OTHER, it means not any of the namespaces in the list
       public String[] fNamespaceList;
  +
  +    /**
  +     * Whether a namespace is allowed by this wildcard
  +     */
  +    public boolean allowNamespace(String namespace) {
  +        // ##any allows any namespace
  +        if (fType == WILDCARD_ANY)
  +            return true;
  +
  +        // ##other doesn't allow target namespace and empty namespace
  +        if (fType == WILDCARD_OTHER) {
  +            return namespace != fNamespaceList[0] &&
  +                   namespace != fNamespaceList[1];
  +        }
  +
  +        // list allows any one in the list
  +        int listNum = fNamespaceList.length;
  +        for (int i = 0; i < listNum; i++) {
  +            if (namespace == fNamespaceList[i])
  +                return true;
  +        }
  +
  +        return false;
  +    }
   
   } // class XSWildcardDecl
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-cvs-help@xml.apache.org