Author: amassari
Date: Wed Aug 23 14:13:31 2006
New Revision: 434184
URL: http://svn.apache.org/viewvc?rev=434184&view=rev
Log:
Default or fixed attribute values should be whitespace normalized, if the
datatype requires it, before being validated
Modified:
xerces/c/trunk/src/xercesc/validators/schema/TraverseSchema.cpp
Modified: xerces/c/trunk/src/xercesc/validators/schema/TraverseSchema.cpp
URL:
http://svn.apache.org/viewvc/xerces/c/trunk/src/xercesc/validators/schema/TraverseSchema.cpp?rev=434184&r1=434183&r2=434184&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/validators/schema/TraverseSchema.cpp (original)
+++ xerces/c/trunk/src/xercesc/validators/schema/TraverseSchema.cpp Wed Aug 23
14:13:31 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]