knoaman 2004/01/05 19:55:26 Modified: c/src/xercesc/internal XSObjectFactory.cpp c/src/xercesc/framework/psvi XSAttributeDeclaration.cpp c/src/xercesc/validators/schema TraverseSchema.cpp Log: Various PSVI fixes. Revision Changes Path 1.17 +4 -1 xml-xerces/c/src/xercesc/internal/XSObjectFactory.cpp Index: XSObjectFactory.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/XSObjectFactory.cpp,v retrieving revision 1.16 retrieving revision 1.17 diff -u -r1.16 -r1.17 --- XSObjectFactory.cpp 30 Dec 2003 19:46:15 -0000 1.16 +++ XSObjectFactory.cpp 6 Jan 2004 03:55:26 -0000 1.17 @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.17 2004/01/06 03:55:26 knoaman + * Various PSVI fixes. + * * Revision 1.16 2003/12/30 19:46:15 neilg * use a null-terminated string when tokenizing pattern facets * @@ -1055,7 +1058,7 @@ bool isRequired = false; XSConstants::VALUE_CONSTRAINT constraintType = XSConstants::VC_NONE; - if (attDef->getDefaultType() & XMLAttDef::Default) + if (attDef->getDefaultType() == XMLAttDef::Default) { constraintType = XSConstants::VC_DEFAULT; } 1.11 +6 -2 xml-xerces/c/src/xercesc/framework/psvi/XSAttributeDeclaration.cpp Index: XSAttributeDeclaration.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/framework/psvi/XSAttributeDeclaration.cpp,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- XSAttributeDeclaration.cpp 30 Dec 2003 20:41:06 -0000 1.10 +++ XSAttributeDeclaration.cpp 6 Jan 2004 03:55:26 -0000 1.11 @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.11 2004/01/06 03:55:26 knoaman + * Various PSVI fixes. + * * Revision 1.10 2003/12/30 20:41:06 neilg * do not report anything about default/fixed values for non-global attribute declarations * @@ -157,7 +160,8 @@ { if (fScope != XSConstants::SCOPE_GLOBAL) return XSConstants::VC_NONE; - if (fAttDef->getDefaultType() & XMLAttDef::Default) + + if (fAttDef->getDefaultType() == XMLAttDef::Default) return XSConstants::VC_DEFAULT; if ((fAttDef->getDefaultType() == XMLAttDef::Fixed) || 1.106 +81 -85 xml-xerces/c/src/xercesc/validators/schema/TraverseSchema.cpp Index: TraverseSchema.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/TraverseSchema.cpp,v retrieving revision 1.105 retrieving revision 1.106 diff -u -r1.105 -r1.106 --- TraverseSchema.cpp 29 Dec 2003 16:15:42 -0000 1.105 +++ TraverseSchema.cpp 6 Jan 2004 03:55:26 -0000 1.106 @@ -570,7 +570,7 @@ reportSchemaError(elem, XMLUni::fgXMLErrDomain, XMLErrs::OnlyAnnotationExpected); if (fAnnotation) - delete fAnnotation;//fSchemaGrammar->addAnnotation(fAnnotation); + fSchemaGrammar->addAnnotation(fAnnotation); // ----------------------------------------------------------------------- // Get 'schemaLocation' attribute @@ -718,7 +718,7 @@ reportSchemaError(elem, XMLUni::fgXMLErrDomain, XMLErrs::OnlyAnnotationExpected); if (fAnnotation) - delete fAnnotation;//fSchemaGrammar->addAnnotation(fAnnotation); + fSchemaGrammar->addAnnotation(fAnnotation); // ----------------------------------------------------------------------- // Handle 'namespace' attribute @@ -1646,107 +1646,112 @@ // ------------------------------------------------------------------ // Handle "ref=" // ------------------------------------------------------------------ + XercesAttGroupInfo* attGroupInfo = 0; if (!topLevel) { if (refEmpty) { return 0; } - return processAttributeGroupRef(elem, ref, typeInfo); - } - - // ------------------------------------------------------------------ - // Handle "name=" - // ------------------------------------------------------------------ - // name must be a valid NCName - if (!XMLString::isValidNCName(name)) { - reportSchemaError(elem, XMLUni::fgXMLErrDomain, XMLErrs::InvalidDeclarationName, - SchemaSymbols::fgELT_ATTRIBUTEGROUP, name); - return 0; + attGroupInfo = processAttributeGroupRef(elem, ref, typeInfo); } + else + { + // name must be a valid NCName + if (!XMLString::isValidNCName(name)) { + reportSchemaError(elem, XMLUni::fgXMLErrDomain, XMLErrs::InvalidDeclarationName, + SchemaSymbols::fgELT_ATTRIBUTEGROUP, name); + return 0; + } - // ------------------------------------------------------------------ - // Check for annotations - // ------------------------------------------------------------------ - DOMElement* content = checkContent(elem, XUtil::getFirstChildElement(elem), true); - Janitor<XSAnnotation> janAnnot(fAnnotation); + // Check for annotations + DOMElement* content = checkContent(elem, XUtil::getFirstChildElement(elem), true); + Janitor<XSAnnotation> janAnnot(fAnnotation); - // ------------------------------------------------------------------ - // Process contents of global attributeGroups - // ------------------------------------------------------------------ - XercesAttGroupInfo* saveAttGroupInfo = fCurrentAttGroupInfo; - XercesAttGroupInfo* attGroupInfo = new (fGrammarPoolMemoryManager) XercesAttGroupInfo( - fStringPool->addOrFind(name), fTargetNSURI, fGrammarPoolMemoryManager); + // Process contents of global attributeGroups + XercesAttGroupInfo* saveAttGroupInfo = fCurrentAttGroupInfo; + attGroupInfo = new (fGrammarPoolMemoryManager) XercesAttGroupInfo( + fStringPool->addOrFind(name), fTargetNSURI, fGrammarPoolMemoryManager); - fDeclStack->addElement(elem); - fCurrentAttGroupInfo = attGroupInfo; + fDeclStack->addElement(elem); + fCurrentAttGroupInfo = attGroupInfo; - for (; content !=0; content = XUtil::getNextSiblingElement(content)) { + for (; content !=0; content = XUtil::getNextSiblingElement(content)) { - if (XMLString::equals(content->getLocalName(), SchemaSymbols::fgELT_ATTRIBUTE)) { - traverseAttributeDecl(content, typeInfo); - } - else if (XMLString::equals(content->getLocalName(), SchemaSymbols::fgELT_ATTRIBUTEGROUP)) { - traverseAttributeGroupDecl(content, typeInfo); - } - else { - break; + if (XMLString::equals(content->getLocalName(), SchemaSymbols::fgELT_ATTRIBUTE)) { + traverseAttributeDecl(content, typeInfo); + } + else if (XMLString::equals(content->getLocalName(), SchemaSymbols::fgELT_ATTRIBUTEGROUP)) { + traverseAttributeGroupDecl(content, typeInfo); + } + else { + break; + } } - } - if (content != 0) { + if (content != 0) { - if (XMLString::equals(content->getLocalName(), SchemaSymbols::fgELT_ANYATTRIBUTE)) { + if (XMLString::equals(content->getLocalName(), SchemaSymbols::fgELT_ANYATTRIBUTE)) { - SchemaAttDef* anyAtt = traverseAnyAttribute(content); + SchemaAttDef* anyAtt = traverseAnyAttribute(content); - if (anyAtt) { - fCurrentAttGroupInfo->addAnyAttDef(anyAtt); - } + if (anyAtt) { + fCurrentAttGroupInfo->addAnyAttDef(anyAtt); + } - if (XUtil::getNextSiblingElement(content) != 0) { + if (XUtil::getNextSiblingElement(content) != 0) { + reportSchemaError(content, XMLUni::fgXMLErrDomain, XMLErrs::AttGroupContentError, name); + } + } + else { reportSchemaError(content, XMLUni::fgXMLErrDomain, XMLErrs::AttGroupContentError, name); } } - else { - reportSchemaError(content, XMLUni::fgXMLErrDomain, XMLErrs::AttGroupContentError, name); - } - } - // ------------------------------------------------------------------ - // Pop declaration - // ------------------------------------------------------------------ - fDeclStack->removeElementAt(fDeclStack->size() - 1); + // Pop declaration + fDeclStack->removeElementAt(fDeclStack->size() - 1); - // ------------------------------------------------------------------ - // Restore old attGroupInfo - // ------------------------------------------------------------------ - fAttGroupRegistry->put((void*) fStringPool->getValueForId(fStringPool->addOrFind(name)), attGroupInfo); - fCurrentAttGroupInfo = saveAttGroupInfo; + // Restore old attGroupInfo + fAttGroupRegistry->put((void*) fStringPool->getValueForId(fStringPool->addOrFind(name)), attGroupInfo); + fCurrentAttGroupInfo = saveAttGroupInfo; - // ------------------------------------------------------------------ - // Check Attribute Derivation Restriction OK - // ------------------------------------------------------------------ - fBuffer.set(fTargetNSURIString); - fBuffer.append(chComma); - fBuffer.append(name); + // Check Attribute Derivation Restriction OK + fBuffer.set(fTargetNSURIString); + fBuffer.append(chComma); + fBuffer.append(name); - unsigned int nameIndex = fStringPool->addOrFind(fBuffer.getRawBuffer()); + unsigned int nameIndex = fStringPool->addOrFind(fBuffer.getRawBuffer()); - if (fRedefineComponents && fRedefineComponents->get(SchemaSymbols::fgELT_ATTRIBUTEGROUP, nameIndex)) { + if (fRedefineComponents && fRedefineComponents->get(SchemaSymbols::fgELT_ATTRIBUTEGROUP, nameIndex)) { - fBuffer.set(name); - fBuffer.append(SchemaSymbols::fgRedefIdentifier); - XercesAttGroupInfo* baseAttGroupInfo = fAttGroupRegistry->get(fBuffer.getRawBuffer()); + fBuffer.set(name); + fBuffer.append(SchemaSymbols::fgRedefIdentifier); + XercesAttGroupInfo* baseAttGroupInfo = fAttGroupRegistry->get(fBuffer.getRawBuffer()); - if (baseAttGroupInfo) { - checkAttDerivationOK(elem, baseAttGroupInfo, attGroupInfo); + if (baseAttGroupInfo) + checkAttDerivationOK(elem, baseAttGroupInfo, attGroupInfo); } + + // Store annotation + if (!janAnnot.isDataNull()) + fSchemaGrammar->putAnnotation(attGroupInfo, janAnnot.release()); } - // Store annotation - if (!janAnnot.isDataNull()) - fSchemaGrammar->putAnnotation(attGroupInfo, janAnnot.release()); + // calculate complete wildcard if necessary + if (attGroupInfo) + { + unsigned int anyAttCount = attGroupInfo->anyAttributeCount(); + if (anyAttCount && !attGroupInfo->getCompleteWildCard()) + { + SchemaAttDef* attGroupWildCard = new (fGrammarPoolMemoryManager) + SchemaAttDef(attGroupInfo->anyAttributeAt(0)); + + for (unsigned int k= 1; k < anyAttCount; k++) + attWildCardIntersection(attGroupWildCard, attGroupInfo->anyAttributeAt(k)); + + attGroupInfo->setCompleteWildCard(attGroupWildCard); + } + } return attGroupInfo; } @@ -6264,18 +6269,6 @@ } SchemaAttDef* attGroupWildCard = attGroupInfo->getCompleteWildCard(); - - if (!attGroupWildCard) { - - attGroupWildCard = new (fGrammarPoolMemoryManager) SchemaAttDef(attGroupInfo->anyAttributeAt(0)); - - for (unsigned int i= 1; i < anyAttCount; i++) { - attWildCardIntersection(attGroupWildCard, attGroupInfo->anyAttributeAt(i)); - } - - attGroupInfo->setCompleteWildCard(attGroupWildCard); - } - if (completeWildCard) { attWildCardIntersection(completeWildCard, attGroupWildCard); } @@ -6540,6 +6533,9 @@ (XMLString::equals(fixedFacet, SchemaSymbols::fgATTVAL_TRUE) || XMLString::equals(fixedFacet, fgValueOne))) { + if (XMLString::equals(SchemaSymbols::fgELT_LENGTH, facetName)) { + flags |= DatatypeValidator::FACET_LENGTH; + } if (XMLString::equals(SchemaSymbols::fgELT_MINLENGTH, facetName)) { flags |= DatatypeValidator::FACET_MINLENGTH; }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]