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/07/11 20:59:58 UTC

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

knoaman     2002/07/11 11:59:58

  Modified:    c/src/xercesc/validators/schema TraverseSchema.hpp
                        TraverseSchema.cpp
  Log:
  Look for datatype validators in the corresponding grammar instead of
  the grammar resolver.
  
  Revision  Changes    Path
  1.12      +1 -4      xml-xerces/c/src/xercesc/validators/schema/TraverseSchema.hpp
  
  Index: TraverseSchema.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/TraverseSchema.hpp,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- TraverseSchema.hpp	21 Jun 2002 18:35:42 -0000	1.11
  +++ TraverseSchema.hpp	11 Jul 2002 18:59:57 -0000	1.12
  @@ -88,7 +88,6 @@
   // ---------------------------------------------------------------------------
   class GrammarResolver;
   class XMLEntityHandler;
  -class XMLValidator;
   class XMLScanner;
   class DatatypeValidator;
   class DatatypeValidatorFactory;
  @@ -119,7 +118,6 @@
           , SchemaGrammar* const    schemaGrammar
           , GrammarResolver* const  grammarResolver
           , XMLScanner* const       xmlScanner
  -        , XMLValidator* const     xmlValidator
           , const XMLCh* const      schemaURL
           , XMLEntityHandler* const entityHandler
           , XMLErrorReporter* const errorReporter
  @@ -736,7 +734,6 @@
       XMLStringPool*                                 fURIStringPool;
       XMLStringPool*                                 fStringPool;
       XMLBuffer                                      fBuffer;
  -    XMLValidator*                                  fValidator;
       XMLScanner*                                    fScanner;
       NamespaceScope*                                fNamespaceScope;
       RefHashTableOf<XMLAttDef>*                     fAttributeDeclRegistry;
  
  
  
  1.21      +30 -22    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.20
  retrieving revision 1.21
  diff -u -r1.20 -r1.21
  --- TraverseSchema.cpp	21 Jun 2002 18:35:42 -0000	1.20
  +++ TraverseSchema.cpp	11 Jul 2002 18:59:57 -0000	1.21
  @@ -182,7 +182,6 @@
                                 , SchemaGrammar* const   schemaGrammar
                                 , GrammarResolver* const grammarResolver
                                 , XMLScanner* const      xmlScanner
  -                              , XMLValidator* const    xmlValidator
                                 , const XMLCh* const     schemaURL
                                 , XMLEntityHandler* const  entityHandler
                                 , XMLErrorReporter* const errorReporter)
  @@ -201,7 +200,6 @@
       , fErrorReporter(errorReporter)
       , fURIStringPool(uriStringPool)
       , fStringPool(0)
  -    , fValidator(xmlValidator)
       , fScanner(xmlScanner)
       , fNamespaceScope(0)
       , fAttributeDeclRegistry(0)
  @@ -1939,7 +1937,7 @@
   
           if (XMLString::compareString(typeURI, SchemaSymbols::fgURI_SCHEMAFORSCHEMA)  == 0) {
   
  -            dv = getDatatypeValidator(SchemaSymbols::fgURI_SCHEMAFORSCHEMA, localPart);
  +            dv = fDatatypeRegistry->getDatatypeValidator(localPart);
   
               if (XMLString::compareString(localPart,XMLUni::fgIDString) == 0) {
                   attType = XMLAttDef::ID;
  @@ -2033,21 +2031,20 @@
   
       if (attType == XMLAttDef::Simple && dv && valueToCheck) {
   
  -        if (ofTypeID) {
  -            reportSchemaError(elem, XMLUni::fgXMLErrDomain, XMLErrs::AttDeclPropCorrect3,
  -                             SchemaSymbols::fgATT_NAME, name);
  +        try {
  +            dv->validate(valueToCheck);
           }
  -        else {
  -            try {
  -                dv->validate(valueToCheck);
  -            }
  -            catch (const XMLException& excep) {
  -                reportSchemaError(elem, XMLUni::fgValidityDomain, XMLValid::DisplayErrorMessage, excep.getMessage());
  -            }
  -            catch(...) {
  -                reportSchemaError(elem, XMLUni::fgValidityDomain, XMLValid::DatatypeValidationFailure, valueToCheck);
  -            }
  +        catch (const XMLException& excep) {
  +            reportSchemaError(elem, XMLUni::fgValidityDomain, XMLValid::DisplayErrorMessage, excep.getMessage());
           }
  +        catch(...) {
  +            reportSchemaError(elem, XMLUni::fgValidityDomain, XMLValid::DatatypeValidationFailure, valueToCheck);
  +        }
  +    }
  +
  +    if (ofTypeID && valueToCheck) {
  +        reportSchemaError(elem, XMLUni::fgXMLErrDomain, XMLErrs::AttDeclPropCorrect3,
  +                         SchemaSymbols::fgATT_NAME, name);
       }
   
       // check for multiple attributes with type derived from ID
  @@ -2359,7 +2356,7 @@
       // Handle the substitutionGroup
       const XMLCh* subsGroupName = getElementAttValue(elem, SchemaSymbols::fgATT_SUBSTITUTIONGROUP);
   
  -    if (XMLString::stringLen(subsGroupName) != 0) {
  +    if (topLevel && XMLString::stringLen(subsGroupName) != 0) {
   
           SchemaElementDecl* subsElemDecl = getSubstituteGroupElemDecl(elem, subsGroupName, noErrorFound);
   
  @@ -2540,7 +2537,7 @@
           elemDecl->setDatatypeValidator(validator);
           elemDecl->setComplexTypeInfo(typeInfo);
           elemDecl->setDefaultValue(deflt);
  -        elemDecl->setDefinedScope(scopeDefined);
  +//        elemDecl->setDefinedScope(scopeDefined);
           elemDecl->setModelType(contentSpecType);
           elemDecl->setContentSpec(contentSpecNode);
   
  @@ -4292,7 +4289,18 @@
           fBuffer.set(uriStr);
           fBuffer.append(chComma);
           fBuffer.append(localPartStr);
  -        dv = fDatatypeRegistry->getDatatypeValidator(fBuffer.getRawBuffer());
  +
  +        if (XMLString::stringLen(uriStr) && XMLString::compareString(uriStr, fTargetNSURIString)) {
  +
  +            Grammar* grammar = fGrammarResolver->getGrammar(uriStr);
  +
  +            if (grammar && grammar->getGrammarType() == Grammar::SchemaGrammarType) {
  +                dv = ((SchemaGrammar*) grammar)->getDatatypeRegistry()->getDatatypeValidator(fBuffer.getRawBuffer());
  +            }
  +        }
  +        else {
  +            dv = fDatatypeRegistry->getDatatypeValidator(fBuffer.getRawBuffer());
  +        }
       }
   
       return dv;
  @@ -6081,6 +6089,7 @@
           fTargetNSURI = targetNSURI;
           fCurrentScope = saveScope;
           fScopeCount = toRestore->getScopeCount();
  +        fDatatypeRegistry = fSchemaGrammar->getDatatypeRegistry();
           fTargetNSURIString = fSchemaGrammar->getTargetNamespace();
           fGroupRegistry = fSchemaGrammar->getGroupInfoRegistry();
           fAttGroupRegistry = fSchemaGrammar->getAttGroupInfoRegistry();
  @@ -7661,8 +7670,7 @@
           fXSDErrorReporter.setExitOnFirstFatal(fScanner->getExitOnFirstFatal());
       }
   
  -    fDatatypeRegistry = fGrammarResolver->getDatatypeRegistry();
  -    fDatatypeRegistry->expandRegistryToFullSchemaSet();
  +    fDatatypeRegistry = fSchemaGrammar->getDatatypeRegistry();
       fStringPool = fGrammarResolver->getStringPool();
       fEmptyNamespaceURI = fScanner->getEmptyNamespaceId();
       fCurrentTypeNameStack = new ValueVectorOf<unsigned int>(8);
  
  
  

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