diff --git a/src/validators/schema/SchemaValidator.cpp b/src/validators/schema/SchemaValidator.cpp index 97acb2b313633ce5787d2b04c8534174a506e131..d1a7f51e93649a791ad9bb1ace9e1fd94f7d786b 100644 --- a/src/validators/schema/SchemaValidator.cpp +++ b/src/validators/schema/SchemaValidator.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.24 2001/11/20 20:32:52 knoaman + * Bypass validating element's simple content if it's empty and element is nillable. + * * Revision 1.23 2001/11/13 13:25:08 tng * Deprecate function XMLValidator::checkRootElement. * @@ -278,9 +281,12 @@ int SchemaValidator::checkContent (XMLElementDecl* const elemDecl } else { // no default value, then check nillable - if (fNil) { - if (XMLString::compareString(value, XMLUni::fgZeroLenString)) - emitError(XMLValid::NilAttrNotEmpty, elemDecl->getFullName()); + if (!XMLString::compareString(value, XMLUni::fgZeroLenString)) { + if ((((SchemaElementDecl*)elemDecl)->getMiscFlags() & SchemaSymbols::NILLABLE) == 0) + fCurrentDV->validate(value); + } + else if (fNil) { + emitError(XMLValid::NilAttrNotEmpty, elemDecl->getFullName()); } else fCurrentDV->validate(value); diff --git a/src/validators/schema/identity/ValueStore.cpp b/src/validators/schema/identity/ValueStore.cpp index acebb328f78d97a6fe6412fc8d2212b104f52dc0..ebaf2818cae4505d3c8ffc49e5bd3e60c0dd0d9d 100644 --- a/src/validators/schema/identity/ValueStore.cpp +++ b/src/validators/schema/identity/ValueStore.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.2 2001/11/20 20:32:52 knoaman + * Bypass validating element's simple content if it's empty and element is nillable. + * * Revision 1.1 2001/11/02 14:08:40 knoaman * Add support for identity constraints. * @@ -246,6 +249,22 @@ bool ValueStore::isDuplicateOf(DatatypeValidator* const dv1, const XMLCh* const return ((XMLString::compareString(val1, val2)) == 0); } + unsigned int val1Len = XMLString::stringLen(val1); + unsigned int val2Len = XMLString::stringLen(val2); + + if (!val1Len && !val2Len) { + + if (dv1 == dv2) { + return true; + } + + return false; + } + + if (!val1Len || !val2Len) { + return false; + } + // are the validators equal? // As always we are obliged to compare by reference... if (dv1 == dv2) {