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