You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by ca...@apache.org on 2005/06/02 18:56:39 UTC

svn commit: r179608 - in /xerces/c/trunk/src/xercesc/validators/datatype: NOTATIONDatatypeValidator.cpp NOTATIONDatatypeValidator.hpp QNameDatatypeValidator.cpp QNameDatatypeValidator.hpp

Author: cargilld
Date: Thu Jun  2 09:56:38 2005
New Revision: 179608

URL: http://svn.apache.org/viewcvs?rev=179608&view=rev
Log:
Schema errata update.  Ignore length, minLength and maxLength facets for qname and notation.

Modified:
    xerces/c/trunk/src/xercesc/validators/datatype/NOTATIONDatatypeValidator.cpp
    xerces/c/trunk/src/xercesc/validators/datatype/NOTATIONDatatypeValidator.hpp
    xerces/c/trunk/src/xercesc/validators/datatype/QNameDatatypeValidator.cpp
    xerces/c/trunk/src/xercesc/validators/datatype/QNameDatatypeValidator.hpp

Modified: xerces/c/trunk/src/xercesc/validators/datatype/NOTATIONDatatypeValidator.cpp
URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/validators/datatype/NOTATIONDatatypeValidator.cpp?rev=179608&r1=179607&r2=179608&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/validators/datatype/NOTATIONDatatypeValidator.cpp (original)
+++ xerces/c/trunk/src/xercesc/validators/datatype/NOTATIONDatatypeValidator.cpp Thu Jun  2 09:56:38 2005
@@ -138,6 +138,74 @@
 
 }
 
+void NOTATIONDatatypeValidator::checkContent( const XMLCh*             const content
+                                          ,       ValidationContext* const context
+                                          ,       bool                     asBase
+                                          ,       MemoryManager*     const manager
+                                          )
+{
+
+    //validate against base validator if any
+    NOTATIONDatatypeValidator *pBaseValidator = (NOTATIONDatatypeValidator*) this->getBaseValidator();
+    if (pBaseValidator)
+        pBaseValidator->checkContent(content, context, true, manager);
+
+    int thisFacetsDefined = getFacetsDefined();
+
+    // we check pattern first
+    if ( (thisFacetsDefined & DatatypeValidator::FACET_PATTERN ) != 0 )
+    {
+        // lazy construction
+        if (getRegex() ==0) {
+            try {
+                // REVISIT: cargillmem fMemoryManager or manager?
+                setRegex(new (fMemoryManager) RegularExpression(getPattern(), SchemaSymbols::fgRegEx_XOption, fMemoryManager));                
+            }
+            catch (XMLException &e)
+            {
+                ThrowXMLwithMemMgr1(InvalidDatatypeValueException, XMLExcepts::RethrowError, e.getMessage(), fMemoryManager);
+            }
+        }
+
+        if (getRegex()->matches(content, manager) ==false)
+        {
+            ThrowXMLwithMemMgr2(InvalidDatatypeValueException
+                    , XMLExcepts::VALUE_NotMatch_Pattern
+                    , content
+                    , getPattern()
+                    , manager);
+        }
+    }
+
+    // if this is a base validator, we only need to check pattern facet
+    // all other facet were inherited by the derived type
+    if (asBase)
+        return;
+
+    checkValueSpace(content, manager);
+
+    if ((thisFacetsDefined & DatatypeValidator::FACET_ENUMERATION) != 0 &&
+        (getEnumeration() != 0))
+    {
+        XMLCh* normContent = XMLString::replicate(content, manager);
+        ArrayJanitor<XMLCh>  jan(normContent, manager);
+        normalizeContent(normContent, manager);
+
+        int i=0;
+        int enumLength = getEnumeration()->size();
+        for ( ; i < enumLength; i++)
+        {
+            if (XMLString::equals(normContent, getEnumeration()->elementAt(i)))
+                break;
+        }
+
+        if (i == enumLength)
+            ThrowXMLwithMemMgr1(InvalidDatatypeValueException, XMLExcepts::VALUE_NotIn_Enumeration, content, manager);
+    }
+
+    checkAdditionalFacet(content, manager);
+}
+
 /***
  * Support for Serialization/De-serialization
  ***/

Modified: xerces/c/trunk/src/xercesc/validators/datatype/NOTATIONDatatypeValidator.hpp
URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/validators/datatype/NOTATIONDatatypeValidator.hpp?rev=179608&r1=179607&r2=179608&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/validators/datatype/NOTATIONDatatypeValidator.hpp (original)
+++ xerces/c/trunk/src/xercesc/validators/datatype/NOTATIONDatatypeValidator.hpp Thu Jun  2 09:56:38 2005
@@ -116,6 +116,11 @@
     virtual void checkValueSpace(const XMLCh* const content
                         , MemoryManager* const manager);
 
+    virtual void checkContent(const XMLCh*             const content
+                            ,       ValidationContext* const context
+                            , bool                           asBase
+                            , MemoryManager* const manager);
+
 private:
     // -----------------------------------------------------------------------
     //  Unimplemented constructors and operators

Modified: xerces/c/trunk/src/xercesc/validators/datatype/QNameDatatypeValidator.cpp
URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/validators/datatype/QNameDatatypeValidator.cpp?rev=179608&r1=179607&r2=179608&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/validators/datatype/QNameDatatypeValidator.cpp (original)
+++ xerces/c/trunk/src/xercesc/validators/datatype/QNameDatatypeValidator.cpp Thu Jun  2 09:56:38 2005
@@ -125,6 +125,74 @@
     }
 }
 
+void QNameDatatypeValidator::checkContent( const XMLCh*             const content
+                                          ,       ValidationContext* const context
+                                          ,       bool                     asBase
+                                          ,       MemoryManager*     const manager
+                                          )
+{
+
+    //validate against base validator if any
+    QNameDatatypeValidator *pBaseValidator = (QNameDatatypeValidator*) this->getBaseValidator();
+    if (pBaseValidator)
+        pBaseValidator->checkContent(content, context, true, manager);
+
+    int thisFacetsDefined = getFacetsDefined();
+
+    // we check pattern first
+    if ( (thisFacetsDefined & DatatypeValidator::FACET_PATTERN ) != 0 )
+    {
+        // lazy construction
+        if (getRegex() ==0) {
+            try {
+                // REVISIT: cargillmem fMemoryManager or manager?
+                setRegex(new (fMemoryManager) RegularExpression(getPattern(), SchemaSymbols::fgRegEx_XOption, fMemoryManager));                
+            }
+            catch (XMLException &e)
+            {
+                ThrowXMLwithMemMgr1(InvalidDatatypeValueException, XMLExcepts::RethrowError, e.getMessage(), fMemoryManager);
+            }
+        }
+
+        if (getRegex()->matches(content, manager) ==false)
+        {
+            ThrowXMLwithMemMgr2(InvalidDatatypeValueException
+                    , XMLExcepts::VALUE_NotMatch_Pattern
+                    , content
+                    , getPattern()
+                    , manager);
+        }
+    }
+
+    // if this is a base validator, we only need to check pattern facet
+    // all other facet were inherited by the derived type
+    if (asBase)
+        return;
+
+    checkValueSpace(content, manager);
+
+    if ((thisFacetsDefined & DatatypeValidator::FACET_ENUMERATION) != 0 &&
+        (getEnumeration() != 0))
+    {
+        XMLCh* normContent = XMLString::replicate(content, manager);
+        ArrayJanitor<XMLCh>  jan(normContent, manager);
+        normalizeContent(normContent, manager);
+
+        int i=0;
+        int enumLength = getEnumeration()->size();
+        for ( ; i < enumLength; i++)
+        {
+            if (XMLString::equals(normContent, getEnumeration()->elementAt(i)))
+                break;
+        }
+
+        if (i == enumLength)
+            ThrowXMLwithMemMgr1(InvalidDatatypeValueException, XMLExcepts::VALUE_NotIn_Enumeration, content, manager);
+    }
+
+    checkAdditionalFacet(content, manager);
+}
+
 /***
  * Support for Serialization/De-serialization
  ***/

Modified: xerces/c/trunk/src/xercesc/validators/datatype/QNameDatatypeValidator.hpp
URL: http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/validators/datatype/QNameDatatypeValidator.hpp?rev=179608&r1=179607&r2=179608&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/validators/datatype/QNameDatatypeValidator.hpp (original)
+++ xerces/c/trunk/src/xercesc/validators/datatype/QNameDatatypeValidator.hpp Thu Jun  2 09:56:38 2005
@@ -115,6 +115,11 @@
     virtual void checkValueSpace(const XMLCh* const content
                                 , MemoryManager* const manager);
 
+    virtual void checkContent(const XMLCh*             const content
+                            ,       ValidationContext* const context
+                            , bool                           asBase
+                            , MemoryManager* const manager);
+
 private:
     // -----------------------------------------------------------------------
     //  Unimplemented constructors and operators



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