Author: amassari
Date: Wed Aug 23 14:12:45 2006
New Revision: 434183

URL: http://svn.apache.org/viewvc?rev=434183&view=rev
Log:
Default or fixed attribute values should be whitespace normalized, if the 
datatype requires it, before being validated

Modified:
    
xerces/c/branches/xerces-2.7/src/xercesc/validators/schema/TraverseSchema.cpp

Modified: 
xerces/c/branches/xerces-2.7/src/xercesc/validators/schema/TraverseSchema.cpp
URL: 
http://svn.apache.org/viewvc/xerces/c/branches/xerces-2.7/src/xercesc/validators/schema/TraverseSchema.cpp?rev=434183&r1=434182&r2=434183&view=diff
==============================================================================
--- 
xerces/c/branches/xerces-2.7/src/xercesc/validators/schema/TraverseSchema.cpp 
(original)
+++ 
xerces/c/branches/xerces-2.7/src/xercesc/validators/schema/TraverseSchema.cpp 
Wed Aug 23 14:12:45 2006
@@ -2426,6 +2426,18 @@
 
     if (attType == XMLAttDef::Simple && dv && valueToCheck) {
 
+        short wsFacet = dv->getWSFacet();
+        if((wsFacet == DatatypeValidator::REPLACE && 
!XMLString::isWSReplaced(valueToCheck)) ||
+           (wsFacet == DatatypeValidator::COLLAPSE && 
!XMLString::isWSCollapsed(valueToCheck)))
+        {
+            XMLCh* normalizedValue=XMLString::replicate(valueToCheck, 
fMemoryManager);
+            ArrayJanitor<XMLCh> tempURIName(normalizedValue, fMemoryManager);
+            if(wsFacet == DatatypeValidator::REPLACE)
+                XMLString::replaceWS(normalizedValue, fMemoryManager);
+            else if(wsFacet == DatatypeValidator::COLLAPSE)
+                XMLString::collapseWS(normalizedValue, fMemoryManager);
+            
valueToCheck=fStringPool->getValueForId(fStringPool->addOrFind(normalizedValue));
+        }
         try {
             dv->validate(valueToCheck
                       , fSchemaGrammar->getValidationContext()
@@ -2441,6 +2453,14 @@
         catch(...) {
             reportSchemaError(elem, XMLUni::fgValidityDomain, 
XMLValid::DatatypeValidationFailure, valueToCheck);
         }
+    }
+    else if((attType == XMLAttDef::NmTokens || attType==XMLAttDef::IDRefs || 
attType==XMLAttDef::Entities) &&
+            valueToCheck && !XMLString::isWSCollapsed(valueToCheck))
+    {
+        XMLCh* normalizedValue=XMLString::replicate(valueToCheck, 
fMemoryManager);
+        ArrayJanitor<XMLCh> tempURIName(normalizedValue, fMemoryManager);
+        XMLString::collapseWS(normalizedValue, fMemoryManager);
+        
valueToCheck=fStringPool->getValueForId(fStringPool->addOrFind(normalizedValue));
     }
 
     if (ofTypeID && valueToCheck) {



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to