You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by kn...@apache.org on 2002/05/27 22:23:48 UTC

cvs commit: xml-xerces/c/src/xercesc/validators/schema SchemaInfo.cpp SchemaInfo.hpp TraverseSchema.cpp

knoaman     02/05/27 13:23:48

  Modified:    c/src/xercesc/validators/schema SchemaInfo.cpp
                        SchemaInfo.hpp TraverseSchema.cpp
  Log:
  Performance: lazily store top-level components to eliminate unnecessary traversal
  of DOM tree when looking up for a top level component.
  
  Revision  Changes    Path
  1.6       +65 -16    xml-xerces/c/src/xercesc/validators/schema/SchemaInfo.cpp
  
  Index: SchemaInfo.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/SchemaInfo.cpp,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- SchemaInfo.cpp	21 May 2002 19:30:47 -0000	1.5
  +++ SchemaInfo.cpp	27 May 2002 20:23:48 -0000	1.6
  @@ -56,6 +56,10 @@
   
   /*
    * $Log: SchemaInfo.cpp,v $
  + * Revision 1.6  2002/05/27 20:23:48  knoaman
  + * Performance: lazily store top-level components to eliminate unnecessary traversal
  + * of DOM tree when looking up for a top level component.
  + *
    * Revision 1.5  2002/05/21 19:30:47  tng
    * DOM Reorganization: modify to use the new DOM interface.
    *
  @@ -113,6 +117,7 @@
                          XMLStringPool* const stringPool,
                          const DOMElement* const root)
       : fAdoptInclude(false)
  +    , fProcessed(false)
       , fElemAttrDefaultQualified(elemAttrDefaultQualified)
       , fBlockDefault(blockDefault)
       , fFinalDefault(finalDefault)
  @@ -132,6 +137,8 @@
       , fRecursingTypeNames(0)
   {
       fImportingInfoList = new RefVectorOf<SchemaInfo>(4, false);
  +    for (unsigned int i = 0; i < C_Count; i++)
  +        fTopLevelComponents[i] = 0;
   }
   
   
  @@ -158,18 +165,25 @@
   
       delete fRecursingTypeNames;
       fRecursingTypeNames = 0;
  +
  +    for (unsigned int i = 0; i < C_Count; i++) {
  +
  +        delete fTopLevelComponents[i];
  +        fTopLevelComponents[i] = 0;
  +    }
   }
   
   // ---------------------------------------------------------------------------
   //  SchemaInfo:
   // ---------------------------------------------------------------------------
   DOMElement*
  -SchemaInfo::getTopLevelComponent(const XMLCh* const compCategory,
  +SchemaInfo::getTopLevelComponent(const unsigned short compCategory,
  +                                 const XMLCh* const compName,
                                    const XMLCh* const name,
                                    SchemaInfo** enclosingSchema) {
   
       SchemaInfo* currentInfo = this;
  -    DOMElement* child = getTopLevelComponent(compCategory, name);
  +    DOMElement* child = getTopLevelComponent(compCategory, compName, name);
   
       if (child == 0) {
   
  @@ -182,7 +196,7 @@
               if (currentInfo == this)
                   continue;
   
  -            child = currentInfo->getTopLevelComponent(compCategory, name);
  +            child = currentInfo->getTopLevelComponent(compCategory, compName, name);
   
               if (child != 0) {
   
  @@ -197,17 +211,50 @@
   
   
   DOMElement*
  -SchemaInfo::getTopLevelComponent(const XMLCh* const compCategory,
  -                                  const XMLCh* const name) {
  +SchemaInfo::getTopLevelComponent(const unsigned short compCategory,
  +                                 const XMLCh* const compName,
  +                                 const XMLCh* const name) {
  +
  +    if (compCategory >= C_Count)
  +        return 0;
   
       DOMElement* child = XUtil::getFirstChildElement(fSchemaRootElement);
   
  +    if (!child)
  +        return 0;
  +
  +    ValueVectorOf<DOMElement*>* compList = fTopLevelComponents[compCategory];
  +
  +    if (fTopLevelComponents[compCategory] == 0) {
  +
  +        compList= new ValueVectorOf<DOMElement*>(16);
  +        fTopLevelComponents[compCategory] = compList;
  +    }
  +    else {
  +        unsigned int listLen = compList->size();
  +
  +        for (unsigned int i= 0; i < listLen; i++) {
  +
  +            child = compList->elementAt(i);
  +            if (!XMLString::compareString(child->getAttribute(SchemaSymbols::fgATT_NAME), name))
  +                return child;
  +        }
  +    }
  +
  +    DOMElement* redefParent = (DOMElement*) child->getParentNode();
  +
  +    // Parent is not "redefine"
  +    if (XMLString::compareString(redefParent->getLocalName(),SchemaSymbols::fgELT_REDEFINE))
  +        redefParent = 0;
  +
       while (child != 0) {
   
  -        if (!XMLString::compareString(child->getLocalName(), compCategory)) {
  +        if (!XMLString::compareString(child->getLocalName(), compName)) {
  +
  +            compList->addElement(child);
   
               if (!XMLString::compareString(child->getAttribute(SchemaSymbols::fgATT_NAME), name))
  -                break;
  +                return child;
           }
           else if (!XMLString::compareString(child->getLocalName(),SchemaSymbols::fgELT_REDEFINE)
                    && (!fFailedRedefineList || !fFailedRedefineList->containsElement(child))) { // if redefine
  @@ -217,22 +264,25 @@
               while (redefineChild != 0) {
   
                   if ((!fFailedRedefineList || !fFailedRedefineList->containsElement(redefineChild))
  -                    && !XMLString::compareString(redefineChild->getLocalName(), compCategory)
  -                    && !XMLString::compareString(redefineChild->getAttribute(SchemaSymbols::fgATT_NAME), name)) {
  -                        break;
  -                }
  +                    && !XMLString::compareString(redefineChild->getLocalName(), compName)) {
   
  -                redefineChild = XUtil::getNextSiblingElement(redefineChild);
  -            }
  +                    compList->addElement(redefineChild);
   
  -            if (redefineChild != 0) {
  +                    if (!XMLString::compareString(redefineChild->getAttribute(SchemaSymbols::fgATT_NAME), name))
  +                        return redefineChild;
  +                }
   
  -                child = redefineChild;
  -                break;
  +                redefineChild = XUtil::getNextSiblingElement(redefineChild);
               }
           }
   
           child = XUtil::getNextSiblingElement(child);
  +
  +        if (child == 0 && redefParent) {
  +
  +            child = XUtil::getNextSiblingElement(redefParent);
  +            redefParent = 0;
  +        }
       }
   
       return child;
  
  
  
  1.7       +81 -32    xml-xerces/c/src/xercesc/validators/schema/SchemaInfo.hpp
  
  Index: SchemaInfo.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/SchemaInfo.hpp,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- SchemaInfo.hpp	21 May 2002 19:30:47 -0000	1.6
  +++ SchemaInfo.hpp	27 May 2002 20:23:48 -0000	1.7
  @@ -55,7 +55,7 @@
    */
   
   /*
  - * $Id: SchemaInfo.hpp,v 1.6 2002/05/21 19:30:47 tng Exp $
  + * $Id: SchemaInfo.hpp,v 1.7 2002/05/27 20:23:48 knoaman Exp $
    */
   
   #if !defined(SCHEMAINFO_HPP)
  @@ -92,6 +92,18 @@
           INCLUDE = 2
       };
   
  +    enum {
  +        C_ComplexType,
  +        C_SimpleType,
  +        C_Group,
  +        C_Attribute,
  +        C_AttributeGroup,
  +        C_Element,
  +        C_Notation,
  +
  +        C_Count
  +    };
  +
       // -----------------------------------------------------------------------
       //  Constructor/Destructor
       // -----------------------------------------------------------------------
  @@ -111,22 +123,24 @@
       // -----------------------------------------------------------------------
       //  Getter methods
       // -----------------------------------------------------------------------
  -    XMLCh*                   getCurrentSchemaURL() const;
  -    const XMLCh* const       getTargetNSURIString() const;
  -    const DOMElement*      getRoot() const;
  -    int                      getBlockDefault() const;
  -    int                      getFinalDefault() const;
  -    int                      getTargetNSURI() const;
  -    int                      getScopeCount() const;
  -    unsigned int             getNamespaceScopeLevel() const;
  -    unsigned short           getElemAttrDefaultQualified() const;
  -    RefVectorEnumerator<SchemaInfo> getImportingListEnumerator() const;
  +    XMLCh*                            getCurrentSchemaURL() const;
  +    const XMLCh* const                getTargetNSURIString() const;
  +    const DOMElement*                 getRoot() const;
  +    bool                              getProcessed() const;
  +    int                               getBlockDefault() const;
  +    int                               getFinalDefault() const;
  +    int                               getTargetNSURI() const;
  +    int                               getScopeCount() const;
  +    unsigned int                      getNamespaceScopeLevel() const;
  +    unsigned short                    getElemAttrDefaultQualified() const;
  +    RefVectorEnumerator<SchemaInfo>   getImportingListEnumerator() const;
       ValueVectorOf<const DOMElement*>* getRecursingAnonTypes() const;
  -    ValueVectorOf<const XMLCh*>*        getRecursingTypeNames() const;
  +    ValueVectorOf<const XMLCh*>*      getRecursingTypeNames() const;
   
       // -----------------------------------------------------------------------
       //  Setter methods
       // -----------------------------------------------------------------------
  +    void setProcessed(const bool aValue = true);
       void setScopeCount(const int aValue);
       void setBlockDefault(const int aValue);
       void setFinalDefault(const int aValue);
  @@ -138,11 +152,13 @@
       void addSchemaInfo(SchemaInfo* const toAdd, const ListType aListType);
       bool containsInfo(const SchemaInfo* const toCheck, const ListType aListType) const;
       SchemaInfo* getImportInfo(const unsigned int namespaceURI) const;
  -    DOMElement* getTopLevelComponent(const XMLCh* const compCategory,
  -                                       const XMLCh* const name);
  -    DOMElement* getTopLevelComponent(const XMLCh* const compCategory,
  -                                       const XMLCh* const name,
  -                                       SchemaInfo** enclosingSchema);
  +    DOMElement* getTopLevelComponent(const unsigned short compCategory,
  +                                     const XMLCh* const compName,
  +                                     const XMLCh* const name);
  +    DOMElement* getTopLevelComponent(const unsigned short compCategory,
  +                                     const XMLCh* const compName,
  +                                     const XMLCh* const name,
  +                                     SchemaInfo** enclosingSchema);
       void updateImportingInfo(SchemaInfo* const importingInfo);
       bool circularImportExist(const unsigned int nameSpaceURI);
       bool isFailedRedefine(const DOMElement* const anElem);
  @@ -153,26 +169,33 @@
   
   private:
       // -----------------------------------------------------------------------
  +    //  Private helper methods
  +    // -----------------------------------------------------------------------
  +    void clearTopLevelComponents();
  +
  +    // -----------------------------------------------------------------------
       //  Private data members
       // -----------------------------------------------------------------------
  -    bool                                fAdoptInclude;
  -    unsigned short                      fElemAttrDefaultQualified;
  -    int                                 fBlockDefault;
  -    int                                 fFinalDefault;
  -    int                                 fTargetNSURI;
  -    int                                 fScopeCount;
  -    unsigned int                        fNamespaceScopeLevel;
  -    XMLCh*                              fCurrentSchemaURL;
  -    const XMLCh*                        fTargetNSURIString;
  -    XMLStringPool*                      fStringPool;
  +    bool                              fAdoptInclude;
  +    bool                              fProcessed;
  +    unsigned short                    fElemAttrDefaultQualified;
  +    int                               fBlockDefault;
  +    int                               fFinalDefault;
  +    int                               fTargetNSURI;
  +    int                               fScopeCount;
  +    unsigned int                      fNamespaceScopeLevel;
  +    XMLCh*                            fCurrentSchemaURL;
  +    const XMLCh*                      fTargetNSURIString;
  +    XMLStringPool*                    fStringPool;
       const DOMElement*                 fSchemaRootElement;
  -    RefVectorOf<SchemaInfo>*            fIncludeInfoList;
  -    RefVectorOf<SchemaInfo>*            fImportedInfoList;
  -    RefVectorOf<SchemaInfo>*            fImportingInfoList;
  +    RefVectorOf<SchemaInfo>*          fIncludeInfoList;
  +    RefVectorOf<SchemaInfo>*          fImportedInfoList;
  +    RefVectorOf<SchemaInfo>*          fImportingInfoList;
       ValueVectorOf<const DOMElement*>* fFailedRedefineList;
  -    ValueVectorOf<int>*                 fImportedNSList;
  +    ValueVectorOf<int>*               fImportedNSList;
       ValueVectorOf<const DOMElement*>* fRecursingAnonTypes;
  -    ValueVectorOf<const XMLCh*>*        fRecursingTypeNames;
  +    ValueVectorOf<const XMLCh*>*      fRecursingTypeNames;
  +    ValueVectorOf<DOMElement*>*       fTopLevelComponents[C_Count];
   };
   
   // ---------------------------------------------------------------------------
  @@ -183,6 +206,11 @@
       return fElemAttrDefaultQualified;
   }
   
  +inline bool SchemaInfo::getProcessed() const {
  +
  +    return fProcessed;
  +}
  +
   inline int SchemaInfo::getBlockDefault() const {
   
       return fBlockDefault;
  @@ -264,6 +292,18 @@
       fElemAttrDefaultQualified = aValue;
   }
   
  +inline void SchemaInfo::setProcessed(const bool aValue) {
  +
  +    fProcessed = aValue;
  +
  +/*    if (fProcessed && fIncludeInfoList) {
  +
  +        unsigned int includeListLen = fIncludeInfoList->size());
  +        for (unsigned int i = 0; i < includeListLen; i++) {
  +            fIncludeInfoList->elementAt(i)->clearTopLevelComponents();
  +        }
  +    }*/
  +}
   
   // ---------------------------------------------------------------------------
   //  SchemaInfo: Access methods
  @@ -386,6 +426,15 @@
   
       fRecursingAnonTypes->addElement(elem);
       fRecursingTypeNames->addElement(name);
  +}
  +
  +inline void SchemaInfo::clearTopLevelComponents() {
  +
  +    for (unsigned int i = 0; i < C_Count; i++) {
  +
  +        delete fTopLevelComponents[i];
  +        fTopLevelComponents[i] = 0;
  +    }
   }
   
   #endif
  
  
  
  1.18      +39 -27    xml-xerces/c/src/xercesc/validators/schema/TraverseSchema.cpp
  
  Index: TraverseSchema.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/TraverseSchema.cpp,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- TraverseSchema.cpp	27 May 2002 19:54:57 -0000	1.17
  +++ TraverseSchema.cpp	27 May 2002 20:23:48 -0000	1.18
  @@ -55,7 +55,7 @@
    */
   
   /*
  - * $Id: TraverseSchema.cpp,v 1.17 2002/05/27 19:54:57 knoaman Exp $
  + * $Id: TraverseSchema.cpp,v 1.18 2002/05/27 20:23:48 knoaman Exp $
    */
   
   // ---------------------------------------------------------------------------
  @@ -282,6 +282,8 @@
               }
           }
       }
  +
  +    fSchemaInfo->setProcessed();
   }
   
   void TraverseSchema::preprocessSchema(DOMElement* const schemaRoot,
  @@ -436,7 +438,7 @@
               fAttributeCheck.checkAttributes(child, GeneralAttributeCheck::E_Documentation, this);
           }
           else {
  -//            reportSchemaError(XMLUni::fgXMLErrDomain, 0, 0); //"an <annotation> can only contain <appinfo> and <documentation> elements"
  +            reportSchemaError(child, XMLUni::fgXMLErrDomain, XMLErrs::InvalidAnnotationContent);
           }
       }
   }
  @@ -1970,7 +1972,8 @@
   
                   if (dv == 0 && XMLString::stringLen(typeURI) == 0) {
   
  -                    DOMElement* topLevelType = fSchemaInfo->getTopLevelComponent(SchemaSymbols::fgELT_SIMPLETYPE, localPart, &fSchemaInfo);
  +                    DOMElement* topLevelType = fSchemaInfo->getTopLevelComponent(SchemaInfo::C_SimpleType,
  +                        SchemaSymbols::fgELT_SIMPLETYPE, localPart, &fSchemaInfo);
   
                       if (topLevelType != 0) {
   
  @@ -1991,7 +1994,8 @@
   
               if (dv == 0 && !XMLString::compareString(typeURI, fTargetNSURIString)) {
   
  -                DOMElement* topLevelType = fSchemaInfo->getTopLevelComponent(SchemaSymbols::fgELT_SIMPLETYPE, localPart, &fSchemaInfo);
  +                DOMElement* topLevelType = fSchemaInfo->getTopLevelComponent(SchemaInfo::C_SimpleType,
  +                    SchemaSymbols::fgELT_SIMPLETYPE, localPart, &fSchemaInfo);
   
                   if (topLevelType != 0) {
   
  @@ -2679,7 +2683,7 @@
   
           SchemaInfo* impInfo = fSchemaInfo->getImportInfo(uriId);
   
  -        if (!impInfo) {
  +        if (!impInfo || impInfo->getProcessed()) {
   
               reportSchemaError(elem, XMLUni::fgXMLErrDomain, XMLErrs::TypeNotFound, uriStr, name);
               return 0;
  @@ -2689,7 +2693,8 @@
           fTargetNSURI = fSchemaInfo->getTargetNSURI();
       }
   
  -    DOMElement* notationElem = fSchemaInfo->getTopLevelComponent(SchemaSymbols::fgELT_NOTATION, name, &fSchemaInfo);
  +    DOMElement* notationElem = fSchemaInfo->getTopLevelComponent(SchemaInfo::C_Notation,
  +        SchemaSymbols::fgELT_NOTATION, name, &fSchemaInfo);
   
       if (notationElem == 0) {
   
  @@ -2860,7 +2865,7 @@
               }
               catch (...) {
   
  -                reportSchemaError(content, XMLUni::fgXMLErrDomain, XMLErrs::ListUnionRestrictionError, typeName);
  +                reportSchemaError(content, XMLUni::fgXMLErrDomain, XMLErrs::InvalidFacetName, facetName);
                   content = XUtil::getNextSiblingElement(content);
                   continue;
               }
  @@ -4379,8 +4384,8 @@
       if (baseValidator == 0) {
   
           SchemaInfo* saveInfo = fSchemaInfo;
  -        DOMElement* baseTypeNode =
  -            fSchemaInfo->getTopLevelComponent(SchemaSymbols::fgELT_SIMPLETYPE, localPart, &fSchemaInfo);
  +        DOMElement* baseTypeNode = fSchemaInfo->getTopLevelComponent(SchemaInfo::C_SimpleType,
  +            SchemaSymbols::fgELT_SIMPLETYPE, localPart, &fSchemaInfo);
   
           if (baseTypeNode != 0) {
   
  @@ -4469,7 +4474,8 @@
       if (!refElemDecl) {
   
           SchemaInfo* saveInfo = fSchemaInfo;
  -        DOMElement* targetElem = fSchemaInfo->getTopLevelComponent(SchemaSymbols::fgELT_ELEMENT, localPart, &fSchemaInfo);
  +        DOMElement* targetElem = fSchemaInfo->getTopLevelComponent(SchemaInfo::C_Element,
  +            SchemaSymbols::fgELT_ELEMENT, localPart, &fSchemaInfo);
   
           if (targetElem == 0)  {
   
  @@ -4712,7 +4718,7 @@
   
           SchemaInfo* impInfo = fSchemaInfo->getImportInfo(uriId);
   
  -        if (!impInfo) {
  +        if (!impInfo || impInfo->getProcessed()) {
   
               reportSchemaError(elem, XMLUni::fgXMLErrDomain, XMLErrs::TypeNotFound, typeURI, localPart);
               return 0;
  @@ -4734,7 +4740,8 @@
               || XMLString::compareString(fTargetNSURIString, SchemaSymbols::fgURI_SCHEMAFORSCHEMA) == 0) {
   
               SchemaInfo* saveInfo = fSchemaInfo;
  -            DOMElement* typeElem = fSchemaInfo->getTopLevelComponent(SchemaSymbols::fgELT_SIMPLETYPE, localPart, &fSchemaInfo);
  +            DOMElement* typeElem = fSchemaInfo->getTopLevelComponent(SchemaInfo::C_SimpleType,
  +                SchemaSymbols::fgELT_SIMPLETYPE, localPart, &fSchemaInfo);
   
               if (typeElem != 0 && traverseSimpleTypeDecl(typeElem) != -1) {
                   dv = getDatatypeValidator(typeURI, localPart);
  @@ -4799,7 +4806,7 @@
   
           SchemaInfo* impInfo = fSchemaInfo->getImportInfo(uriId);
   
  -        if (!impInfo) {
  +        if (!impInfo || impInfo->getProcessed()) {
               return 0;
           }
   
  @@ -4815,7 +4822,8 @@
           if (XMLString::compareString(typeURI, SchemaSymbols::fgURI_SCHEMAFORSCHEMA) != 0 ||
               XMLString::compareString(fTargetNSURIString, SchemaSymbols::fgURI_SCHEMAFORSCHEMA) == 0) {
   
  -            DOMElement* typeNode = fSchemaInfo->getTopLevelComponent(SchemaSymbols::fgELT_COMPLEXTYPE, localPart, &fSchemaInfo);
  +            DOMElement* typeNode = fSchemaInfo->getTopLevelComponent(SchemaInfo::C_ComplexType,
  +                SchemaSymbols::fgELT_COMPLEXTYPE, localPart, &fSchemaInfo);
   
               if (typeNode) {
   
  @@ -4873,7 +4881,7 @@
   
               SchemaInfo* impInfo = fSchemaInfo->getImportInfo(uriId);
   
  -            if (!impInfo) {
  +            if (!impInfo || impInfo->getProcessed()) {
   
                   reportSchemaError(elem, XMLUni::fgXMLErrDomain, XMLErrs::TypeNotFound, nameURI, localPart);
                   return 0;
  @@ -4890,7 +4898,8 @@
   
       if (!elemDecl) {
   
  -        DOMElement* subsGroupElem = fSchemaInfo->getTopLevelComponent(SchemaSymbols::fgELT_ELEMENT,localPart, &fSchemaInfo);
  +        DOMElement* subsGroupElem = fSchemaInfo->getTopLevelComponent(SchemaInfo::C_Element,
  +            SchemaSymbols::fgELT_ELEMENT,localPart, &fSchemaInfo);
   
           if (subsGroupElem != 0) {
   
  @@ -5150,7 +5159,7 @@
   
               SchemaInfo* impInfo = fSchemaInfo->getImportInfo(attURI);
   
  -            if (!impInfo) {
  +            if (!impInfo || impInfo->getProcessed()) {
   
                   reportSchemaError(elem, XMLUni::fgXMLErrDomain, XMLErrs::TopLevelAttributeNotFound, refName);
                   return;
  @@ -5167,8 +5176,8 @@
   		
           if (fAttributeDeclRegistry->containsKey(localPart) == false) {
   
  -            DOMElement* referredAttribute =
  -                fSchemaInfo->getTopLevelComponent(SchemaSymbols::fgELT_ATTRIBUTE, localPart, &fSchemaInfo);
  +            DOMElement* referredAttribute = fSchemaInfo->getTopLevelComponent(SchemaInfo::C_Attribute,
  +                SchemaSymbols::fgELT_ATTRIBUTE, localPart, &fSchemaInfo);
   
               if (referredAttribute != 0) {
                   traverseAttributeDecl(referredAttribute, 0, true);
  @@ -5702,7 +5711,7 @@
   
               SchemaInfo* impInfo = fSchemaInfo->getImportInfo(fURIStringPool->addOrFind(uriStr));
   
  -            if (!impInfo) {
  +            if (!impInfo || impInfo->getProcessed()) {
                   reportSchemaError(elem, XMLUni::fgXMLErrDomain, XMLErrs::BaseTypeNotFound, baseName);
                   throw TraverseSchema::InvalidComplexTypeInfo;
               }
  @@ -5749,8 +5758,8 @@
   
           if (baseDTValidator == 0) {
   
  -            DOMElement* baseTypeNode =
  -                fSchemaInfo->getTopLevelComponent(SchemaSymbols::fgELT_COMPLEXTYPE, localPart, &fSchemaInfo);
  +            DOMElement* baseTypeNode = fSchemaInfo->getTopLevelComponent(SchemaInfo::C_ComplexType,
  +                SchemaSymbols::fgELT_COMPLEXTYPE, localPart, &fSchemaInfo);
   
               if (baseTypeNode != 0) {
   
  @@ -5759,7 +5768,8 @@
               }
               else {
   
  -                baseTypeNode = fSchemaInfo->getTopLevelComponent(SchemaSymbols::fgELT_SIMPLETYPE, localPart, &fSchemaInfo);
  +                baseTypeNode = fSchemaInfo->getTopLevelComponent(SchemaInfo::C_SimpleType,
  +                    SchemaSymbols::fgELT_SIMPLETYPE, localPart, &fSchemaInfo);
   
                   if (baseTypeNode != 0) {
   
  @@ -6368,7 +6378,7 @@
   
               SchemaInfo* impInfo = fSchemaInfo->getImportInfo(fURIStringPool->addOrFind(uriStr));
   
  -            if (!impInfo) {
  +            if (!impInfo || impInfo->getProcessed()) {
   
                   reportSchemaError(elem, XMLUni::fgXMLErrDomain, XMLErrs::DeclarationNotFound,
                                     SchemaSymbols::fgELT_GROUP, uriStr, localPart);
  @@ -6385,7 +6395,8 @@
   
       if (!groupInfo) {
   
  -        DOMElement* groupElem = fSchemaInfo->getTopLevelComponent(SchemaSymbols::fgELT_GROUP, localPart, &fSchemaInfo);
  +        DOMElement* groupElem = fSchemaInfo->getTopLevelComponent(SchemaInfo::C_Group,
  +            SchemaSymbols::fgELT_GROUP, localPart, &fSchemaInfo);
   
           if (groupElem != 0) {
   
  @@ -6454,7 +6465,7 @@
           if (!attGroupInfo) {
               SchemaInfo* impInfo = fSchemaInfo->getImportInfo(fURIStringPool->addOrFind(uriStr));
   
  -            if (!impInfo) {
  +            if (!impInfo || impInfo->getProcessed()) {
   
                   reportSchemaError(elem, XMLUni::fgXMLErrDomain, XMLErrs::DeclarationNotFound,
                                     SchemaSymbols::fgELT_ATTRIBUTEGROUP, uriStr, localPart);
  @@ -6484,7 +6495,8 @@
       if (!attGroupInfo) {
   
           // traverse top level attributeGroup - if found
  -        DOMElement* attGroupElem = fSchemaInfo->getTopLevelComponent(SchemaSymbols::fgELT_ATTRIBUTEGROUP, localPart, &fSchemaInfo);
  +        DOMElement* attGroupElem = fSchemaInfo->getTopLevelComponent(SchemaInfo::C_AttributeGroup,
  +            SchemaSymbols::fgELT_ATTRIBUTEGROUP, localPart, &fSchemaInfo);
   
           if (attGroupElem != 0) {
   
  
  
  

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