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]